【问题标题】:Observable is deprecated in rxdart 0.23.1Observable 在 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 是不可能的,所以它不是替换的好选择?

【问题讨论】:

    标签: flutter dart rxdart


    【解决方案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> 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();
                }
              }
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2019-08-27
                • 1970-01-01
                • 2020-01-09
                • 2019-06-27
                • 2020-12-03
                • 1970-01-01
                • 1970-01-01
                • 2022-07-10
                相关资源
                最近更新 更多