为什么我的 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 的更多信息