将值推送到 StreamProvider?



我有一个Stream对象,它是来自数据库引用(Firestore)的登录用户的侦听器。我正在StreamProvider中使用它,以便我的应用可以侦听用户登录或注销的信号。

有一个特定事件(电子邮件验证),根据设计,它不会导致Stream发出新值。我已经能够通过每隔几秒钟检查一次电子邮件是否已验证来解决这个问题,如果没有,则重新加载用户对象。这本身效果很好,但我想将其连接到我已经用于管理用户状态的StreamProvider

如果有一种方法可以将本地范围内的用户对象(电子邮件验证:true)"推送"到我的创建帐户小部件,到全局StreamProvider,就好像它是来自数据库引用的实际更新事件一样,那么我的应用程序的其余部分可以侦听电子邮件验证信号。怎么能做到这一点呢?

我已经知道我可以公开一个新的ChangeNotifier其状态封装电子邮件是否经过验证,但我真的希望它成为用户提供商的一部分,以避免出现user.isEmailVerified错误的情况,因为user是陈旧的。

不能将项目推送到Stream实例。您需要有权访问StreamSink实例。

StreamSink的常见实现方式是

  • 使用普通飞镖时的StreamController
  • 使用rxDart时BehaviorSubjectPublishSubject

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"
}

最新更新