我有一个Too类
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类:
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,我不知道如何实现这种机制。
发布于 2021-08-01 09:07:41
Foo没有反应,因为它正在侦听Too的另一个实例。
您拥有它的方式是,每个新的Foo实例创建一个新的Too的instance。如果我理解正确的话,您希望Foo的所有实例都能对单个Too实例的任何更改做出反应。
为此,您可以使用单例。
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实例。
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。
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,因为它简化了许多基于流的东西。
https://stackoverflow.com/questions/68605191
复制相似问题