Ant*_*tte 2 dart flutter google-cloud-firestore
我有一个名为 Map() 的函数myData,它包含多个列表。我想使用 Stream 来填充Map. 对于这个 StreamBuilder 将无法工作,因为它需要返回并且我想使用List.add()功能。
Map<String, List<Widget>> myData = {
'list1': [],
'list2': [],
'list3': [],
'list4': []
};
Run Code Online (Sandbox Code Playgroud)
如何从 FireStore 获取信息但将其添加到列表而不是返回数据?
像这样,但这行不通。
StreamBuilder<QuerySnapshot>(
stream: // my snapshot from firestore,
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
snapshot.data.documents.map((DocumentSnapshot doc) {
myData['list1'].add(Text(doc['color']));
});
},
),
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激!
StreamBuilder 不适合此任务。即使您设法做到这一点(实际上有一种方法:)) - 它可能会在没有新数据的情况下由更高级别的小部件重建,并且最终会在列表中出现重复项。
小部件中的所有 WidgetBuilder 和build方法仅用于显示 UI
您需要订阅流。如果您想使用小部件来完成此操作,那么您需要创建一个扩展的自定义小部件StatefulWidget。StatefulWidget状态具有生命周期方法(initState和dispose),因此它将允许正确管理StreamSubscription。
这是示例代码:
class StreamReader extends StatefulWidget {
@override
_StreamReaderState createState() => _StreamReaderState();
}
class _StreamReaderState extends State<StreamReader> {
StreamSubscription _subscription;
@override
void initState() {
super.initState();
_subscription = myStream.listen((data) {
// do whatever you want with stream data event here
});
}
@override
void dispose() {
_subscription?.cancel(); // don't forget to close subscription
super.dispose();
}
@override
Widget build(BuildContext context) {
// return your widgets here
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4310 次 |
| 最近记录: |