firebase isempty函数正在打印文本,即使firestore有一些数据

jslywgbw  于 2023-01-27  发布在  其他
关注(0)|答案(2)|浏览(84)

flutter新手,正在处理此错误。this is the code
问题-我想在firestore为空时显示文本(您的购物车为空!)。当firestore文档为空时显示文本,但问题是当firestore有一些数据要显示时,将显示文本(您的购物车为空!),并在片刻(0.5秒)后显示数据。
我不想显示文本(你的购物车是空的),即使是一毫秒的时候,Firestore有数据。我很感激,如果你们能为我点亮灯泡。

pb3s4cty

pb3s4cty1#

发生这种情况是因为您尚未收到数据库的响应,因此为了确保收到响应,您将使用snapshot.hasData

StreamBuilder(
        stream: FirebaseFirestore.instance
            .collection('User-Cart-Item')
            .doc(FirebaseAuth.instance.currentUser!.email)
            .collection("items")
            .snapshots(),
        builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
          if (snapshot.hasData) {
            if (snapshot.data == null || snapshot.data!.docs.isEmpty) {
              return const Center(
                child: Text(
                  'YOUR CART IS EMPTY!',
                  style: TextStyle(
                    color: Colors.purple,
                    fontWeight: FontWeight.bold,
                    fontSize: 20,
                  ),
                ),
              );
            } else {
              return ListView.builder(
                itemCount:
                    snapshot.data == null ? 0 : snapshot.data!.docs.length,
                itemBuilder: (_, index) {
                  DocumentSnapshot documentSnapshot =
                      snapshot.data!.docs[index];
                  return Card(
                    color: const Color.fromARGB(255, 255, 248, 250),
                    margin: const EdgeInsets.all(20),
                    child: Container(
                      height: 120,
                      padding: const EdgeInsets.all(0),
                      child: Row(
                        children: [
                          Expanded(
                            flex: 6,
                            child: Container(decoration: const BoxDecoration()),
                          ),
                        ],
                      ),
                    ),
                  );
                },
              );
            }
          } else {
            return const Center(child: CircularProgressIndicator());
          }
        },
      ),

我希望这对你有用

agxfikkp

agxfikkp2#

使用FutureBuilder,应用程序会监听对数据库的更改。您注意到的是更改之间的延迟,而你的应用程序接收它。这永远不会是绝对的0,因为阅读设备只有在更改后才能看到更改。你可以通过光学互联网来减少这个数字(快速互联网连接)和通过移动数据库更接近你所在的地方。有多个地区,你可以选择,以便让你尽可能接近。

相关问题