Observable 在 rxdart 0.23.1 中被弃用
Observable is deprecated in rxdart 0.23.1
我刚刚升级到 rxdart 0.23.1
,突然间我在使用 Observable
class 的地方遇到错误。我已阅读文档中的重大更改,它已指定使用我已集成到我的 pubspec.yaml
文件中的 rxdart_codemod
包,并且 运行 以下命令 pub global activate rxdart_codemod
抛出-bash: pub: command not found
错误。我已经正确安装 flutter
,flutter doctor
似乎也 运行 没问题。是否有其他 class 替换了 Observable
,在文档中找不到任何相关信息。当然,我可以用 Dart 语言中的 Stream
替换 Observable
但我真的很想知道 rxdart
包采用什么路径,因为它指定它正在利用 dart extension
.Dart's Stream
无法使用 combineLatest2
这样的方法,所以它不是替换的好选择?
Rxdart 不再需要自定义 class 才能工作。
它现在依赖扩展方法,这是 Dart 的最新功能 (Dart 2.6),可以直接在 Stream
上实现所有 Observable
功能。
您可以安全地将所有 Observable
替换为 Stream
。
您可以使用
flutter pub global activate rxdart_codemod
而不是 pub global activate rxdart_codemod
。
另一种选择是将您的 Observable
替换为 Stream
。
Observable
可以替换为 Stream
,正如我在问题中提到的,但是如果您使用 Observable
中的 combineLatest2
等方法,则只需替换 Observable
通过抽象 class Rx
所以你可以使用 Rx.combineLatest2
使用Rx.combineLatest2
而不是Observable.combineLatest2
Observable 不再有效!
Rxdart 现在在 RX.combineLatest2
中实现了它
rxdart 文档更新日志 0.23.0 :
ValueObservable -> ValueStream
ReplayObservable -> ReplayStream
ConnectableObservable -> ConnectableStream
ValueConnectableObservable -> ValueConnectableStream
ReplayConnectableObservable -> ReplayConnectableStream
在rxdart 0.26.0 I'm using CombineLatestStream<T, R> class with 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();
}
}
我刚刚升级到 rxdart 0.23.1
,突然间我在使用 Observable
class 的地方遇到错误。我已阅读文档中的重大更改,它已指定使用我已集成到我的 pubspec.yaml
文件中的 rxdart_codemod
包,并且 运行 以下命令 pub global activate rxdart_codemod
抛出-bash: pub: command not found
错误。我已经正确安装 flutter
,flutter doctor
似乎也 运行 没问题。是否有其他 class 替换了 Observable
,在文档中找不到任何相关信息。当然,我可以用 Dart 语言中的 Stream
替换 Observable
但我真的很想知道 rxdart
包采用什么路径,因为它指定它正在利用 dart extension
.Dart's Stream
无法使用 combineLatest2
这样的方法,所以它不是替换的好选择?
Rxdart 不再需要自定义 class 才能工作。
它现在依赖扩展方法,这是 Dart 的最新功能 (Dart 2.6),可以直接在 Stream
上实现所有 Observable
功能。
您可以安全地将所有 Observable
替换为 Stream
。
您可以使用
flutter pub global activate rxdart_codemod
而不是 pub global activate rxdart_codemod
。
另一种选择是将您的 Observable
替换为 Stream
。
Observable
可以替换为 Stream
,正如我在问题中提到的,但是如果您使用 Observable
中的 combineLatest2
等方法,则只需替换 Observable
通过抽象 class Rx
所以你可以使用 Rx.combineLatest2
使用Rx.combineLatest2
而不是Observable.combineLatest2
Observable 不再有效!
Rxdart 现在在 RX.combineLatest2
中实现了它rxdart 文档更新日志 0.23.0 :
ValueObservable -> ValueStream
ReplayObservable -> ReplayStream
ConnectableObservable -> ConnectableStream
ValueConnectableObservable -> ValueConnectableStream
ReplayConnectableObservable -> ReplayConnectableStream
在rxdart 0.26.0 I'm using CombineLatestStream<T, R> class with 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();
}
}