dart 检查快照,看看它是否有数据或文件在Flutter应用程序

gojuced7  于 12个月前  发布在  Flutter
关注(0)|答案(1)|浏览(134)

我试图显示一个TableCalendar小部件和显示事件,如果它们存在于一个firebase数据库。
我正在使用StreamBuilder从数据库中获取事件。
当前,“events”集合不存在,因此快照不应包含任何数据。
我的问题是,我检查是否有数据的那一行总是传递为true。这就是我正在谈论的那一行:

if (snapshot.hasData && snapshot.data != null) {

字符串
我如何测试这一点,在这种情况下,还没有一个“事件”集合,我可以绕过这段代码,只显示日历小部件?
下面是我使用的代码:

StreamBuilder<QuerySnapshot>(
            stream: _db
                .collection('users')
                .doc(ref.read(globalsNotifierProvider).currentUserId)
                .collection('events')
                .where('eventDate', isGreaterThanOrEqualTo: kFirstDay)
                .where('eventDate', isLessThanOrEqualTo: kLastDay)
                .snapshots(),
            builder: (BuildContext context, AsyncSnapshot snapshot) {
              // Handle any errors
              if (snapshot.hasError) {
                return Center(
                  child: Text('Error fetching data: ${snapshot.error}'),
                );
              }
              debugPrint('Data: ${snapshot.data}');
              if (snapshot.connectionState == ConnectionState.waiting) {
                return const Center(child: CircularProgressIndicator());
              } else {
                if (snapshot.hasData && snapshot.data != null) {
                  List<Events> eventsList = snapshot.data.docs
                      .map((e) => Events.fromJson(e))
                      .toList();
                  return _buildTableCalendar(eventsList);
                } else {
                  return const Center(
                    child: CircularProgressIndicator(),
                  );
                }
              }
            },
          ),


谢谢你的帮助

mm5n2pyu

mm5n2pyu1#

问题可能是,即使events集合中没有文档,QuerySnapshot仍然存在,但它是空的。在您的代码中,snapshot.hasDatasnapshot.data != null将始终为true,因为QuerySnapshot即使为空也存在。相反,您应该检查snapshot.data.docs是否不为空。

StreamBuilder<QuerySnapshot>(
  stream: _db
    .collection('users')
    .doc(ref.read(globalsNotifierProvider).currentUserId)
    .collection('events')
    .where('eventDate', isGreaterThanOrEqualTo: kFirstDay)
    .where('eventDate', isLessThanOrEqualTo: kLastDay)
    .snapshots(),
  builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
    // Handle any errors
    if (snapshot.hasError) {
      return Center(
        child: Text('Error fetching data: ${snapshot.error}'),
      );
    }
    debugPrint('Data: ${snapshot.data}');
    if (snapshot.connectionState == ConnectionState.waiting) {
      return const Center(child: CircularProgressIndicator());
    } else {
      // Check if snapshot.data.docs is not empty
      if (snapshot.hasData && snapshot.data!.docs.isNotEmpty) {
        List<Events> eventsList = snapshot.data!.docs
            .map((e) => Events.fromJson(e.data() as Map<String, dynamic>))
            .toList();
        return _buildTableCalendar(eventsList);
      } else {
        // If snapshot.data.docs is empty, do something like maybe build empty calendar
        return _buildTableCalendar([]);
      }
    }
  },
),

字符串

相关问题