Observable 在 rxdart 0.23.1 中已弃用
Posted
技术标签:
【中文标题】Observable 在 rxdart 0.23.1 中已弃用【英文标题】:Observable is deprecated in rxdart 0.23.1 【发布时间】:2020-04-07 17:23:11 【问题描述】:我刚刚升级到rxdart 0.23.1
,突然在我使用Observable
类的地方出现错误。我已经阅读了文档中的重大更改,它指定使用我已集成到我的pubspec.yaml
文件中的rxdart_codemod
包并运行以下命令pub global activate rxdart_codemod
会引发-bash: pub: command not found
错误。我已经正确安装了flutter
,flutter doctor
似乎也运行良好。是否有其他类替换了Observable
,在文档中找不到任何关于它的信息。当然,我可以用 Dart 语言中的Stream
替换Observable
,但我真的很想知道rxdart
包采用什么路径,因为它指定它利用dart extension
。使用combineLatest2
之类的方法Dart's Stream
是不可能的,所以它不是替换的好选择?
【问题讨论】:
【参考方案1】:Observable
可以替换为 Stream
,正如我在问题中提到的,但如果您使用 Observable
中的 combineLatest2
之类的方法,则只需将 Observable
替换为抽象类 Rx
,这样您就可以使用Rx.combineLatest2
【讨论】:
【参考方案2】:Rxdart 不再需要自定义类来工作。
它现在依赖于扩展方法,这是最近的 Dart 功能 (Dart 2.6),可直接在 Stream
上实现所有 Observable
功能。
您可以安全地将所有Observable
替换为Stream
。
【讨论】:
那我怎么用像 combineLatest2 和 Stream 这样的方法,那是不可能的【参考方案3】:使用Rx.combineLatest2
而不是Observable.combineLatest2
Observable 不再起作用!
【讨论】:
【参考方案4】:你可以使用
flutter pub global activate rxdart_codemod
而不是pub global activate rxdart_codemod
。
另一种选择是将您的Observable
替换为Stream
。
【讨论】:
【参考方案5】:rxdart 文档更改日志 0.23.0:
ValueObservable -> ValueStream
ReplayObservable -> ReplayStream
ConnectableObservable -> ConnectableStream
ValueConnectableObservable -> ValueConnectableStream
ReplayConnectableObservable -> ReplayConnectableStream
【讨论】:
【参考方案6】:Rxdart 现在在 RX.combineLatest2
中实现它【讨论】:
【参考方案7】:在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();
【讨论】:
以上是关于Observable 在 rxdart 0.23.1 中已弃用的主要内容,如果未能解决你的问题,请参考以下文章