58fair在flutter3.7.0以上版本fair_compiler不生成逻辑js文件问题

如果遇到dart 转js逻辑文件无法生成,抛出异常,这可能是因为flutter升级到3.7.0以上版本, fair的dart2js库转化异常了。

  • flutter 3.0.x dart 2.17
  • flutter 3.3.x dart 2.18
  • flutter 3.7.x dart 2.19
  • flutter 3.10.x dart 3.0

错误日志

问题分析

分析一下 生成过程中库依赖关系:

yaml 复制代码
name: carrier_project_name
description: A new Flutter project.

publish_to: 'none' # Remove this line if you wish to publish to pub.dev

version: 1.0.0+1

environment:
  sdk: ">=2.12.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter

  fair:
    git:
      url: https://github.com/wuba/fair.git
      ref: main
      path: fair

  fair_pushy:
    git:
      url: https://github.com/wuba/FairPushy.git
      ref: main
      path: sdk

  flutter_staggered_grid_view: ^0.6.2
  fluttertoast:

  cupertino_icons: ^1.0.2

dev_dependencies:
  flutter_test:
    sdk: flutter

  build_runner: ^2.1.2
  fair_compiler: any




flutter:
  uses-material-design: true
  assets:
    - assets/
    - assets/fair/
    - assets/plugin/
    - assets/image/

flutter build 命令

arduino 复制代码
flutter packages pub run build_runner build --delete-conflicting-outputs

主要是通过工程目录dev_dependencies:下面配置的库,进行build构建的。

那么我们看到fair需要添加 两个工具,一个就是系统的build_runner 另一个就是 fair实现的自动化构建库 fair_compiler 库

yaml 复制代码
  build_runner: ^2.1.2
  fair_compiler:

通过使用 fair_compiler 库的接入,对工程中dart代码扫描,对于添加了@FairPatch @FairProp等注解的代码自动生成 fair 逻辑文件js文件、界面文件json文件。

分析一下 fair_compiler 的整个库依赖关系:

fair除了热更新fair_pushy 这里不讨论。其他几个配套的工具全都在一个项目中 官方地址:fair

  • 1、fair_compiler

在fair 项目中 fair_compiler 子目录下配置如下:

yaml 复制代码
dependencies:
  analyzer: ^5.5.0
  dart_style: ^2.0.0
  fair_annotation: ^2.3.0
  fair_dart2dsl: ^1.3.2
  fair_dart2js: ^1.4.0
  • 2、fair_dart2dsl

在 dart2dsl 目录下:

yaml 复制代码
dependencies:
  analyzer: ^5.5.0
  • 3、fair_dart2js 在 dart2js 目录下:
yaml 复制代码
dependencies:
  analyzer: ^5.5.0
  • 4、dart_style

dart_style

dart_style 2.3.2

yaml 复制代码
 dependencies:
  analyzer: '>=5.12.0 <7.0.0'
  • 5、analyzer

analyzer

analyzer-5.13.0

yaml 复制代码
dependencies:
  collection: ^1.17.0

dart2js库调试

dart2js 单个文件测试:

修改 analyzer 版本

尝试修改 analyzer版本,修改为历史版本,发现: analyzer 5.6.0 没问题,analyzer 5.13.0 报错

回到接入fair的fair化项目工程

我们看下fair_compiler 依赖情况如下:

yaml 复制代码
dependencies:
  analyzer: ^5.5.0
  dart_style: ^2.0.0
  fair_annotation: ^2.3.0
  fair_dart2dsl: ^1.3.2
  fair_dart2js: ^1.4.0

dart_style 2.3.2

vbnet 复制代码
dependencies:
  analyzer: '>=5.12.0 <7.0.0'

当 dart_style 2.3.2 analyzer 将自动被升级到对应版本5.12版本以上。

fair_compiler 依赖 dart_style

dart_style 和 dart2js都依赖 analyzer

如果仅设置 analyzer 5.6.0,dart_style 2.3.2 会报错,从dart_style历史版本看 dart_style2.3.0开始就适配flutter3.7&dart2.19并且要求analyzer5.7版本以上。 往前找最新的版本是2.2.5 ,这个版本支持到dart2.17&flutter3.0+

  • flutter 3.0.x dart 2.17
  • flutter 3.3.x dart 2.18
  • flutter 3.7.x dart 2.19
  • flutter 3.10.x dart 3.0

升级到3.7.0以上 flutter

dart2dsl 库依赖的 dart_style 变成了最新版本 2.3.2 版本 (flutter3.7和flutter3.10都是这个版本) dart_style 依赖的 analyzer 也变成了新版本 (flutter3.7 为5.13.0,flutter3.10为6.1.0)

对于3.7.0以上版本flutter 需要手动设置dependency_overrides,避免被升级: analyzer: 5.6.0 dart_style: 2.2.5

结论:

  • 修改dependency_overrides为 analyzer和dart_style指定版本,可以解决flutter3.7和3.10版本问题
yaml 复制代码
dependency_overrides:


  # 如果你是 3.3.0 以下的版本,需要 override collection
  collection: 1.17.0

  # 如果是3.7.0 以上的版本,需要固定dart_style 和analyzer版本避免自动升级,因为dart2.19以上版本有问题,dart2js库转换异常
  analyzer: 5.6.0
  dart_style: 2.2.5

再次运行。成功:

所有dart需要的目标js文件的都转化成功了:

  • 但是对于fair项目例子中下拉刷新功能的例子JRList.dart 在所运行的3.7和3.10,3.0.5的这几个版本的测试中,仍然是页面报错不支持下拉刷新。
相关推荐
茶底世界之下6 小时前
类型擦除之后,Metal 滤镜组合为什么不能只执行一个 Filter?
ios·swift
传奇开心果编程8 小时前
【SwiftUI提高练中学】第8课 网络层架构:拦截器、重试、缓存与离线优先
学习·macos·ui·ios·swiftui
传奇开心果编程9 小时前
【现代声明式UI学与练】第7课 组件通信——父传子、子传父、跨层级通信、状态提升与 Context
学习·flutter·react native·ui·swiftui·android jetpack
律宏阔11 小时前
Flutter 列表图片内存优化:CachedNetworkImage 与 ClipRRect 的取舍
前端·flutter
律宏阔11 小时前
Dart 3 Record:解决 Future.wait 异构返回值的类型问题
前端·flutter
伯伯熊勞13 小时前
GetX 巢狀路由教學:用三層 Navigator 做桌面多欄佈局
flutter
传奇开心果编程15 小时前
【Compose Multiplatform 跨端开发学与练】第3课 布局与组件
android·windows·学习·ui·ios·kotlin·composer
tink17 小时前
告别 Xcode IDE:用 VS Code + SweetPad + XcodeGen 开发 iOS 应用的完整指南
ios·swiftui·xcode
传奇开心果编程18 小时前
【现代声明式UI学与练】第9课 性能优化——渲染优化、列表优化、内存优化、启动优化
学习·flutter·react native·ui·性能优化·swiftui·android jetpack
传奇开心果编程18 小时前
【Compose Multiplatform 跨端开发学与练】第8课 资源管理与主题
android·windows·学习·ios·kotlin·web·composer