我试图显示一个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(),
);
}
}
},
),
型
谢谢你的帮助
1条答案
按热度按时间mm5n2pyu1#
问题可能是,即使
events
集合中没有文档,QuerySnapshot仍然存在,但它是空的。在您的代码中,snapshot.hasData
和snapshot.data != null
将始终为true,因为QuerySnapshot即使为空也存在。相反,您应该检查snapshot.data.docs是否不为空。字符串