我有一个Stream
对象,它是来自数据库引用(Firestore)的登录用户的侦听器。我正在StreamProvider
中使用它,以便我的应用可以侦听用户登录或注销的信号。
有一个特定事件(电子邮件验证),根据设计,它不会导致Stream
发出新值。我已经能够通过每隔几秒钟检查一次电子邮件是否已验证来解决这个问题,如果没有,则重新加载用户对象。这本身效果很好,但我想将其连接到我已经用于管理用户状态的StreamProvider
。
如果有一种方法可以将本地范围内的用户对象(电子邮件验证:true)"推送"到我的创建帐户小部件,到全局StreamProvider
,就好像它是来自数据库引用的实际更新事件一样,那么我的应用程序的其余部分可以侦听电子邮件验证信号。怎么能做到这一点呢?
我已经知道我可以公开一个新的ChangeNotifier
其状态封装电子邮件是否经过验证,但我真的希望它成为用户提供商的一部分,以避免出现user.isEmailVerified
错误的情况,因为user
是陈旧的。
不能将项目推送到Stream
实例。您需要有权访问StreamSink
实例。
StreamSink
的常见实现方式是
- 使用普通飞镖时的
StreamController
- 使用rxDart时
BehaviorSubject
或PublishSubject
。
StreamController
示例:
import 'dart:async';
void main() {
final streamController = StreamController();
streamController.stream.listen(
(event) => print('Event: $event'),
);
streamController.add(123); // prints "Event: 123"
}
BehaviorSubject
示例:
import 'package:rxdart/rxdart.dart';
void main() {
final subject = BehaviorSubject<int>();
subject.listen((value) {
print('value: $value');
});
subject.add(123); //prints "value: 123"
}