【发布时间】:2021-03-01 19:31:27
【问题描述】:
我有一个返回Stream<List<Ticket>> 的函数,其中 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 并且从函数返回的值是一个空流,但这不会导致登录时之前填充的列表的状态发生变化。
当我使用其他用户登录时,列表中会填充该用户的新值。
【问题讨论】:
-
我认为您需要将 StreamProvider 包装在
FirebaseAuth.instance.authStateChages流中,因此每当身份验证状态更改时,StreamBuilder 都会重新绘制。 -
它已经包含在 authStateChanges 提供者中
标签: firebase flutter dart firebase-authentication flutter-provider