У меня есть поток, который работает, когда я впервые запускаю приложение в моем android эмуляторе, но затем заменяю его пустым, прежде чем ничего не вернуть, пока эмулятор не будет остановлен и перезапущен. Единственный способ заставить его снова выводить что-либо - это закрыть эмулятор и перезапустить его. Я был бы совершенно счастлив, если бы вместо потока асинхронная функция просто запускалась один раз и возвращала правильное содержимое всякий раз, когда виджет, частью которого она является, перестраивается. Любая помощь по устранению этой проблемы приветствуется.
Stream<List<Memo>> getFeed() async* {
List<Stream<List<Memo>>> streams = [];
List<String> friends = await Firestore.instance.collection("users")
.document(userid)
.collection("friends")
.snapshots().map(_snapshotToStringList).first;
for (var i = 0; i < friends.length; i++) {
streams.add(Firestore.instance.collection("memos")
.where("owner", isEqualTo: friends[i])
.snapshots()
.map(_snapshotToMemoList));
}
yield* StreamGroup.merge(streams);
}
Поток получен с
return StreamProvider<List<Memo>>.value(
value: dbService( user: widget.user ).getFeed(),
child: SafeArea(
child: TestList(),
)
);
Тогда в TestList
@override
Widget build(BuildContext context) {
final memos = Provider.of<List<Memo>>(context);
print(memos);
return (memos == null || memos.length == 0) ? Text('no content') :
ListView.builder(
itemCount: memos.length,
itemBuilder: (BuildContext context, int index) {
return Text(memos[index].body);
}
);
}
Я новичок в трепете / dart, поэтому, пожалуйста, предполагайте, что в ваших рекомендациях / объяснениях мало предварительных знаний, или, в идеале, исправьте код, который у меня выше