gpt4 book ai didi

flutter - 如何使用 Flutter 流式传输数据并添加到构建函数之外的列表

转载 作者:IT王子 更新时间:2023-10-29 07:16:25 29 4
gpt4 key购买 nike

我有一个名为 myData 的 Map(),它包含多个列表。我想使用 Stream 来填充 Map 中的列表之一。对于此 StreamBuilder 将不起作用,因为它需要返回,我想使用 List.add() 功能。

Map<String, List<Widget>> myData = {
'list1': [],
'list2': [],
'list3': [],
'list4': []
};

如何从 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']));
});
},
),

如有任何帮助,我们将不胜感激!

最佳答案

StreamBuilder 不适合这个任务。即使您设法做到了(实际上有一种方法 :))- 它可能会在没有新数据的情况下由更高级别的小部件重建,并且您最终会在列表中出现重复项。

widgets中所有的WidgetBuilders和build方法都只为显示UI服务

您需要订阅一个流。如果你想使用小部件来实现它,那么你需要创建一个扩展 StatefulWidget 的自定义小部件。 StatefulWidget state 具有生命周期方法(initStatedispose),因此可以正确管理 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
}
}

关于flutter - 如何使用 Flutter 流式传输数据并添加到构建函数之外的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57243406/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com