ReactiveX 和飞镖
ReactiveX and Dart
我有一个classToo
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:
class Foo{
Too _too = new Too(isLogged: false);
_too.stream.listen((event) { print('${event}');});
}
我的问题是当用户调用 Too
class 的 login()
方法时,在 Foo class.[=19= 级别没有任何反应]
我想做的是,如果用户调用了Tooclass的login()
方法并且他的isLogged
属性设置为true,那么这个改变是在具有 Too
类型属性的所有 class 的级别。
注意:使用 Angular 或使用 RxJS 的 Ionic 更容易,但使用 dart,我不知道如何实现此机制。
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,因为它简化了很多基于流的东西。
我有一个classToo
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:
class Foo{
Too _too = new Too(isLogged: false);
_too.stream.listen((event) { print('${event}');});
}
我的问题是当用户调用 Too
class 的 login()
方法时,在 Foo class.[=19= 级别没有任何反应]
我想做的是,如果用户调用了Tooclass的login()
方法并且他的isLogged
属性设置为true,那么这个改变是在具有 Too
类型属性的所有 class 的级别。
注意:使用 Angular 或使用 RxJS 的 Ionic 更容易,但使用 dart,我不知道如何实现此机制。
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,因为它简化了很多基于流的东西。