我刚刚升级到rxdart 0.23.1
,并且在使用Observable
类的任何地方突然出现错误。我已经阅读了文档中的重大更改,并且已指定使用rxdart_codemod
软件包,该软件包已集成到我的pubspec.yaml
文件中,并运行以下命令pub global activate rxdart_codemod
会抛出{{1 }}错误。我已经正确安装了-bash: pub: command not found
,并且flutter
似乎也运行良好。是否有其他替换flutter doctor
的类,在文档中找不到关于它的任何内容。当然,我可以用Dart语言中的Observable
替换Observable
,但真的很想知道Stream
包采用了什么路径,因为它指定了它正在利用{{1} }。rxdart
无法使用dart extension
之类的方法,因此它不是替换的好选择吗?
答案 0 :(得分:11)
使用Rx.combineLatest2
而不是Observable.combineLatest2
可观察不再起作用!
答案 1 :(得分:4)
Rxdart不再需要自定义类。
现在它依靠扩展方法,这是Dart的一项最新功能(Dart 2.6),可以直接在Observable
上实现所有Steam
功能。
您可以用Observable
安全地替换所有Stream
。
答案 2 :(得分:2)
正如我在问题中提到的,Observable
可以替换为Stream
,但是如果您使用的是combineLatest2
中的Observable
之类的方法,则只需替换{{1} }由抽象类Observable
所使用,因此您可以使用Rx
答案 3 :(得分:2)
rxdart文档变更日志0.23.0:
ValueObservable -> ValueStream
ReplayObservable -> ReplayStream
ConnectableObservable -> ConnectableStream
ValueConnectableObservable -> ValueConnectableStream
ReplayConnectableObservable -> ReplayConnectableStream
答案 4 :(得分:2)
在 rxdart 0.26.0 中,我将 CombineLatestStream<T, R> class 与 combine2<A, B, R> method 一起使用:
import 'dart:async';
import 'validators.dart';
import 'package:rxdart/rxdart.dart';
class Bloc extends Validators {
final _email = StreamController<String>.broadcast();
final _password = StreamController<String>.broadcast();
Stream<String> get email => _email.stream.transform(validateEmail);
Stream<String> get password => _password.stream.transform(validatePassword);
Stream<bool> get submitValid => CombineLatestStream.combine2(email, password, (email, password) => true);
Function(String) get changeEmail => _email.sink.add;
Function(String) get changePassword => _password.sink.add;
dispose() {
_email.close();
_password.close();
}
}
答案 5 :(得分:1)
您可以使用
flutter pub global activate rxdart_codemod
代替pub global activate rxdart_codemod
。
另一种选择是将Observable
替换为Stream
。
答案 6 :(得分:1)
Rxdart现在在 RX .combineLatest2
中实现了它