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 错误。我已经正确安装 flutterflutter 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();
  }
}