class _MyWidgetState extends State<MyWidget> {
final StreamController<DocumentSnapshot> _streamController =
StreamController.broadcast();
StreamSubscription _subscription;
@override
void initState() {
super.initState();
// Listen to the stream and update the UI when a new document is added.
_streamController.stream.listen((document) {
setState(() {
// Update the UI here.
});
},
onDispose: () {
// Dispose of the stream controller when the subscription is disposed.
_streamController.dispose();
});
}
@override
void dispose() {
// Dispose of the stream controller when the widget is disposed.
_streamController.dispose(); // when used just StreamController
_subscription.cancel(); // when used StreamSubscription
super.dispose();
}
}
1条答案
按热度按时间06odsfpq1#
根据定义:
StreamBuilder是一个基于数据流构建其输出的小部件。流可以是随时间发出数据的任何东西,例如Firestore集合。当流发出新数据时,StreamBuilder将重建其输出以反映新数据。
StreamBuilder接受两个参数:流和构建器函数。每当流发出新数据时,将调用构建器函数。
下面的代码显示了如何使用StreamBuilder显示Firestore文档列表:
StreamBuilder
。如果您只需要显示静态数据,则可以使用ListView
或FutureBuilder
或其他不需要流的小部件。TLDR:对你的应用程序做一些研究。你真的需要实时更新文档吗?如果你需要,那么小心地处理那些StreamBuilders,并确保在用户导航到新屏幕时处理掉那些流。
更新:当使用streamController时,我们还需要使用
StreamSubscription.cancel()
或调用streamController.cancel()
来处理它,如下所示:参考文献:
1.一次性读取
1.实时变化