为什么我的streamBuilder在活动连接状态卡住,即使我得到了我的应用程序中的所有数据?



我从我的Firebase Collection中获取数据,但我的流构建器连接状态停留在活动状态没有进入完成状态

static Stream<QuerySnapshot> getData({required String collectionName}) {
return firebaseFirestore.collection(collectionName).snapshots();
}
这是我调用流 的方式
late final Stream<QuerySnapshot> myStream;
@override
void initState() {
super.initState();
myStream = FireStoreServices.getData(collectionName: selectedRadio!);
}

my build method

@override
Widget build(BuildContext context) {
return StreamBuilder<QuerySnapshot>(
stream: myStream,
builder: (context, AsyncSnapshot<QuerySnapshot> snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.none:
return const Center(
child: Text('No Data'),
);
case ConnectionState.waiting:
return const Center(
child: CircularProgressIndicator(),
);
// **stream stuck here** as long as the application is running even though i **got all the data**
case ConnectionState.active:
return const Center(
child: Text('Connection is active'),
);
case ConnectionState.done:
return const Center(
child: Text('Connection is DOne'),
);
default:
return const Center(
child: Text(' default state '),
);
}

任何帮助都会很感激

这是正常的,当你使用StreamBuilder不像FutureBuilder。实际上,您应该在状态处于活动状态或状态已完成时显示数据。

下面是一个关于如何使用StreamBuilder的小例子:
if (snapshot.connectionState == ConnectionState.waiting) {
return CircularProgressIndicator();
} else if (snapshot.connectionState == ConnectionState.active
|| snapshot.connectionState == ConnectionState.done) {
if (snapshot.hasError) {
return const Text('Error');
} else if (snapshot.hasData) {
return Text(
snapshot.data.toString(),
style: const TextStyle(color: Colors.teal, fontSize: 36)
);
} else {
return const Text('Empty data');
}
} else {
return Text('State: ${snapshot.connectionState}');
}

你可以在这个博客中找到更多关于StreamBuilder的信息。

最新更新