首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Firestore StreamProvider不会使用身份验证更改更新状态

Firestore StreamProvider不会使用身份验证更改更新状态
EN

Stack Overflow用户
提问于 2020-11-18 22:04:32
回答 2查看 116关注 0票数 1

我有一个函数,它返回一个票证,其中Stream<List<Ticket>>是一个模型。_user是一个FriebaseAuthUser

代码语言:javascript
复制
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(),
      );
}

我正在使用这个提供程序:

代码语言:javascript
复制
StreamProvider<List<Ticket>>.value(
  value: _dataApi.userTickets(),
  builder: // build MaterialApp
)

我正在使用应用程序内部的列表:Provider.of<List<Ticket>>(context);

当我登录时,该列表将从Firestore填充。当我以匿名用户的身份注销或登录时,即使我返回一个空流,列表也不会改变。

通过跟踪代码,我可以看到_user确实是null或isAnonymous,并且函数返回的值是一个空流,但这不会导致先前登录时填充的列表的状态发生变化。

当我使用不同的用户登录时,该列表将填充该用户的新值。

EN

回答 2

Stack Overflow用户

发布于 2020-11-19 03:58:52

我修复了这个问题,如果用户是匿名用户或null,则返回一个空列表的单个数据事件流:if (_user == null || _user.isAnonymous) return Stream.value([]);

票数 1
EN

Stack Overflow用户

发布于 2021-07-13 01:59:34

感谢您引导我找到解决方案。这感觉就像是应该处理Stream.empty()的StreamProvider的错误。

单值流侦听器的解决方案,返回

代码语言:javascript
复制
Stream.value(null)

对于列表:

代码语言:javascript
复制
Stream.value([])

而不是

代码语言:javascript
复制
Stream.empty()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64894643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档