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 错误。我已经正确安装了flutterflutter 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 中已弃用的主要内容,如果未能解决你的问题,请参考以下文章

Rxdart combinelaststream 功能不起作用

Flutter 中的 rxdart 使用未被识别

RxDart框架学习

如何在颤振中降级 rxdart 插件?

dart 中的节流函数执行

使用 rxDart 合并 Firestore 流