【问题标题】:StreamBuilder returns nullStreamBuilder 返回 null
【发布时间】:2020-12-19 12:13:00
【问题描述】:

我在我的应用中使用 firebaseUser ID 以从 firebase 获取信息时遇到了一些问题。我创建了 tabBar,它在 StreamBuilders 之间切换,StreamBuilders 根据从 authStateChanges 获取的用户 ID,根据 Firestore 中的数据存储块列表。

我获取数据的函数:

 getFavSalons(AsyncSnapshot<QuerySnapshot> snapshot) {
return snapshot.data.docs
    .map((doc) => SalonBlock(
          salonName: doc.data()["salonName"],
          location: doc.data()["location"],
          workTime: doc.data()["workTime"],
          rating: doc.data()["rating"],
        ))
    .toList();  }   

  getFavMasters(AsyncSnapshot<QuerySnapshot> snapshot) {
return snapshot.data.docs
    .map((doc) => MasterBlock(
          fullname: doc.data()["fullName"],
          bio: doc.data()["bio"],
          rating: doc.data()["rating"],
        ))
    .toList();   }

我在 TabBarView 中的 StreamBuilder:

Container(
            height: screenHeight * 0.9,
            width: screenWidth,
            child:
                TabBarView(controller: _controllerTabs, children: <Widget>[
              StreamBuilder(
                  stream: FirebaseAuth.instance.authStateChanges(),
                  builder: (context, AsyncSnapshot<User> snapshot) {
                    if (snapshot.hasData) {
                      return StreamBuilder(
                          stream: FirebaseFirestore.instance
                              .collection("customers")
                              .doc(snapshot.data.uid)
                              .collection("favSalons")
                              .snapshots(),
                          builder: (context,
                              AsyncSnapshot<QuerySnapshot> snapshot) {
                            if (snapshot.hasData) {
                              return Container(
                                margin: EdgeInsets.only(
                                    bottom: screenHeight * 0.33),
                                child: new ListView(
                                  children: getFavSalons(snapshot),
                                ),
                              );
                            }
                            return LoadingSalon();
                          });
                    }
                   return Text("Loading user...");
                  }),
              StreamBuilder(
                  stream: FirebaseAuth.instance.authStateChanges(),
                  builder: (context, AsyncSnapshot<User> snapshot) {
                    if (snapshot.hasData) {
                      return StreamBuilder(
                          stream: FirebaseFirestore.instance
                              .collection("customers")
                              .doc(snapshot.data.uid)
                              .collection("favMasters")
                              .snapshots(),
                          builder: (context,
                              AsyncSnapshot<QuerySnapshot> snapshot) {
                            if (snapshot.hasData) {
                              return Container(
                                margin: EdgeInsets.only(
                                    bottom: screenHeight * 0.33),
                                child: new ListView(
                                  children: getFavMasters(snapshot),
                                ),
                              );
                            }
                            return LoadingSalon();
                          });
                    }
                    return Text("Loading user...");
            ]),

当我在开始时运行我的应用程序时,数据以块的形式存在,但是当我尝试在选项卡之间切换时出现错误“StreamBuilder 返回 null”。我认为 authStateChanges() 存在一些问题。我该如何解决这个问题?

【问题讨论】:

    标签: firebase flutter dart google-cloud-firestore


    【解决方案1】:

    这可能是因为 TabBarView 会在您切换标签时重新创建标签。 这个问题有不同的解决方案,不要重复答案,请在此处查看: Preserving state between tab view pages

    【讨论】:

      猜你喜欢
      • 2020-07-12
      • 2021-04-19
      • 2019-10-01
      • 2021-01-28
      • 2020-01-18
      • 2020-03-25
      • 2021-07-26
      • 2021-03-03
      • 2023-03-03
      相关资源
      最近更新 更多