RxDart 更新 0.22.x 到 0.23.x 原代码报错问题解决

1,354 阅读1分钟

转自连接1: pub.dev/packages/rx…
转自连接2: pub.dev/packages/rx…

1. 问题: 新工程使用 RxDart 0.23.x, 复用原来 RxDart 0.22.x 代码报错

示例代码
    ...
    Observable.fromFuture(_request<T>(m, url, data: params, queryParameters: queryParameters, options: options, cancelToken: cancelToken))
        .asBroadcastStream()
        .listen((result) {
    ...

Observable.fromFuture 提示报错

2. 解决办法: 安装 rxdart_codemod 自动更新代码

  • RxDart 0.23.x 脱离了 Observable 类, 使用 Dart 2.6 新扩展方法代替.
  • 原代码报错, 安装 rxdart_codemod 自动更新代码.
rxdart_codemod 安装
> pub global activate rxdart_codemod
rxdart_codemod 使用
> cd path/to/your/code
> pub global run rxdart_codemod:22_to_23
运行示例
lib/net/dio_utils.dart:132
      dynamic params, Map<String, dynamic> queryParameters,
      CancelToken cancelToken, Options options, bool isList : false
    }) {
      String m = _getRequestMethod(method);
-     Observable.fromFuture(_request<T>(m, url, data: params, queryParameters: queryParameters, options: options, cancelToken: cancelToken))    
+     Stream.fromFuture(_request<T>(m, url, data: params, queryParameters: queryParameters, options: options, cancelToken: cancelToken))        
          .asBroadcastStream()
          .listen((result) {
        if (result.code == 0) {
          if (isList) {

Accept change (y = yes, n = no [default], A = yes to all, q = quit)?
  • 选择 "y", 自动更新代码
运行命令报错解决

pub : 无法将“pub”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。 所在位置 行:1 字符: 1

  • 如果运行以上命令报错, 以下面命令代替
> flutter pub global activate rxdart_codemod
> cd path/to/your/code
> flutter pub global run rxdart_codemod:22_to_23