为什么我的 streamBuilder 卡在活动连接状态,即使我的应用程序中有所有数据?
why my streamBuilder get stuck in the active Connection State even though i got all the data in my App?
我正在从我的 Firebase Collection 获取我的 Flutter Web 应用程序中的数据,但我的流构建器连接状态卡在活动状态并且没有进入完成状态
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!);
}
我的构建方法
@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}');
}
您可以在此 blog.
中找到有关 StreamBuilder 的更多信息
我正在从我的 Firebase Collection 获取我的 Flutter Web 应用程序中的数据,但我的流构建器连接状态卡在活动状态并且没有进入完成状态
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!);
}
我的构建方法
@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}');
}
您可以在此 blog.
中找到有关 StreamBuilder 的更多信息