rxdart 0.23.1中弃用了Observable

时间:2019-12-14 15:23:00

标签: flutter dart rxdart

我刚刚升级到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之类的方法,因此它不是替换的好选择吗?

7 个答案:

答案 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> classcombine2<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

中实现了它