假如遇到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
过错日志
问题剖析
剖析一下 生成过程中库依靠联系:
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 命令
flutter packages pub run build_runner build --delete-conflicting-outputs
主要是经过工程目录dev_dependencies:下面装备的库,进行build构建的。
那么咱们看到fair需求添加 两个东西,一个便是系统的build_runner 另一个便是 fair实现的主动化构建库 fair_compiler 库
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 子目录下装备如下:
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 目录下:
dependencies:
analyzer: ^5.5.0
- 3、fair_dart2js 在 dart2js 目录下:
dependencies:
analyzer: ^5.5.0
- 4、dart_style
dart_style
dart_style 2.3.2
dependencies:
analyzer: '>=5.12.0 <7.0.0'
- 5、analyzer
analyzer
analyzer-5.13.0
dependencies:
collection: ^1.17.0
dart2js库调试
dart2js 单个文件测验:
修正 analyzer 版别
测验修正 analyzer版别,修正为前史版别,发现: analyzer 5.6.0 没问题,analyzer 5.13.0 报错
回到接入fair的fair化项目工程
咱们看下fair_compiler 依靠状况如下:
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
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版别问题
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的这几个版别的测验中,仍然是页面报错不支撑下拉改写。