Отслеживание типов возвращаемых данных в вашей IDE, вероятно, поможет избежать многих запутанных проблем, подобных этой.К сожалению, этот блог не указывает какие-либо типы для вызова API, StreamController или 'res' в операторе then.Объявление этих типов поможет показать, с чем вы работаете (по крайней мере, в Android Studio).Например, в моем StreamBuilder с потоком из Firestore я использую AsyncSnapshot<QuerySnapshot> snapshot
вместо просто AsyncSnapshot
.Это позволяет инструментам в Android Studio сообщать мне, что snapshot.data.documents
- это карта из класса QuerySnapshot
.Если я не добавлю дополнительный тип, я не смогу это увидеть.
Вот пример прослушивания потока из пакета Firestore Dart .
//Performing a query:
Firestore.instance
.collection('talks')
.where("topic", isEqualTo: "flutter")
.snapshots()
.listen((data: QuerySnapshot) =>
// do stuff here
);
Поскольку вы используете стиль async / await (также прекрасно), вы получите тот же результат, что и внутри .listen((data) =>
.Мы можем следить за документацией / классами, чтобы увидеть, какие типы возвращаются.
Firestore.instance.collection(<whatever>).snapshots()
вернет Stream<QuerySnapshot>
, поэтому мы знаем, что await Firestore.instance.collection(<whatever>).snapshots()
вернет QuerySnapshot
.
Копаем дальшев классе мы видим, что у него есть свойство с именем documents
.
/// Gets a list of all the documents included in this snapshot
final List<DocumentSnapshot> documents;
Это, наконец, дает нам те DocumentSnapshot
s, из которых вам придется извлечь свойство data
.
Так что в вашем случае, я считаю, что тип res
, являющийся QuerySnapshot
, поможет показать вам, какие данные поместить в ваш поток, что можно сделать несколькими способами на данном этапе.List<DocumentSnapshot>
похоже, что вы собираетесь, но вы можете пойти дальше к List<YourClass>
, построенному из свойства DocumentSnapshot
data
.При этом вы можете сказать, какой тип данных будет возвращать ваш StreamController, что делает AsyncSnapshot<your stream type>
компоновщика намного более понятным для работы.
Я не уверен, какие инструменты разработки вы используете, но на случай, если вы небольшинство знакомых позволят вам сделать что-то вроде: нажмите / удерживайте (команда или Ctrl), наведите курсор на тип / class / function / var, который вы хотите увидеть, щелкните левой кнопкой мыши, и вы должны перейти к исходным файлам / объявлениям.(Я нахожу это супер удобным).