首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ReactiveX和Dart

ReactiveX和Dart
EN

Stack Overflow用户
提问于 2021-07-31 19:19:13
回答 1查看 37关注 0票数 0

我有一个Too

代码语言:javascript
复制
class Too{
 bool isLogged = false;
 BehaviorSubject suject = BehaviorSubject<bool>();

 Too({required this.isLogged}){
   suject = new BehaviorSubject<bool>.seeded(isLogged);
 }

void login(){
  isLogged = true;
  suject.sink.add(isLogged);
}

void logOut(){
  isLogged = false;
  suject.sink.add(isLogged);
}
void dispose(){
  suject.close();
}

我还有一个Foo类:

代码语言:javascript
复制
class Foo{
  Too _too = new Too(isLogged: false);
  
 _too.stream.listen((event) { print('${event}');});
}

我的问题是,当用户调用Too类的login()方法时,在Foo类的级别上没有发生任何事情。

我想要做的是,如果用户调用Too类的login()方法,并且他的isLogged属性设置为true,那么此更改将在具有Too类型属性的所有类的级别上完成。

注意:使用RxJS使用Angular或Ionic要容易得多,但是使用dart,我不知道如何实现这种机制。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-01 09:07:41

Foo没有反应,因为它正在侦听Too的另一个实例。

您拥有它的方式是,每个新的Foo实例创建一个新的Tooinstance。如果我理解正确的话,您希望Foo的所有实例都能对单个Too实例的任何更改做出反应。

为此,您可以使用单例。

代码语言:javascript
复制
class Too {
  // one of a few ways to make a singleton in Dart
  Too._();
  static final _instance = Too._();
  factory Too() {
    return _instance;
  }

  final subject = BehaviorSubject<bool>.seeded(isLogged);

  static bool isLogged = false;

  void login() {
    isLogged = true;
    subject.sink.add(isLogged);
  }

  void logOut() {
    isLogged = false;
    subject.sink.add(isLogged);
  }

  void dispose() {
    subject.close();
  }
}

现在,您可以让任何Foo对象侦听同一个Too实例。

代码语言:javascript
复制
class Foo {
  Foo() {
    Too().subject.stream.listen((event) {
      print('foo $event'); // this will now print whenever a subject from your Too class is updated. 
    });
  }
}

现在,例如,您可以通过创建一个按钮来测试这一点,并将其作为onPressed。

代码语言:javascript
复制
onPressed: () {
 final foo = Foo(); // just created an example of a Foo object that will 
 // print the updated value of the Too singleton
 Too().login();
},

RxDart很棒。然而,当涉及到Flutter中的反应式编程时,我建议查看Get X,因为它简化了许多基于流的东西。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68605191

复制
相关文章

相似问题

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