我有一个函数,它返回一个票证,其中Stream<List<Ticket>>是一个模型。_user是一个FriebaseAuthUser。
Stream<List<Ticket>> userTickets() {
if (_user == null || _user.isAnonymous) return Stream<List<Ticket>>.empty();
return FirebaseFirestore.instance
.collection("support-tickets/${_user.uid}/tickets")
.orderBy('timestamp', descending: true)
.snapshots()
.map(
(QuerySnapshot snapshot) => snapshot.docs.map(
// populate model
).toList(),
);
}我正在使用这个提供程序:
StreamProvider<List<Ticket>>.value(
value: _dataApi.userTickets(),
builder: // build MaterialApp
)我正在使用应用程序内部的列表:Provider.of<List<Ticket>>(context);
当我登录时,该列表将从Firestore填充。当我以匿名用户的身份注销或登录时,即使我返回一个空流,列表也不会改变。
通过跟踪代码,我可以看到_user确实是null或isAnonymous,并且函数返回的值是一个空流,但这不会导致先前登录时填充的列表的状态发生变化。
当我使用不同的用户登录时,该列表将填充该用户的新值。
发布于 2020-11-19 03:58:52
我修复了这个问题,如果用户是匿名用户或null,则返回一个空列表的单个数据事件流:if (_user == null || _user.isAnonymous) return Stream.value([]);
发布于 2021-07-13 01:59:34
感谢您引导我找到解决方案。这感觉就像是应该处理Stream.empty()的StreamProvider的错误。
单值流侦听器的解决方案,返回
Stream.value(null)对于列表:
Stream.value([])而不是
Stream.empty()https://stackoverflow.com/questions/64894643
复制相似问题