Flutter升级至2.0.1稳定版后出现库与关联part文件语言版本不匹配的构建报错
Flutter 2.0 升级后编译问题排查与解决
报错本质说明
两类报错为连锁触发关系,不需要单独拆分处理:
- 编译阶段抛出的
Error: The language version override has to be the same in the library and its part(s),直接触发原因有两个:- 项目内
Countdown.dart跨包引用了slide_countdown_clock插件内部的part分片文件,违反Dart语法中part指令的使用规则 - 旧版
slide_countdown_clock未适配Flutter 2.0对应的Dart 2.12空安全规则,插件内部主库与分片文件的语言版本标记不统一,触发版本校验失败
- 项目内
- 构建阶段抛出的
flutter.gradle脚本报错、:app:compileFlutterBuildDebug任务失败、assembleDebug退出码1,是Dart编译失败后导致flutter.bat进程非零退出的连锁反应,不需要手动修改Gradle脚本。
分步解决操作
- 移除非法的跨包part引用
删除lib/Screens/sets4_widget/Countdown.dart文件第7、8、9行的三行错误引入代码。这三行代码本身是插件作者写在插件主库文件内部的分片声明,不属于用户业务代码范畴,一般是复制插件示例代码时误粘贴到业务文件中导致的引用错误。Dart语法明确要求,part指令仅支持引用同library作用域的本地文件,不允许跨包直接引用其他插件的内部分片。如果需要在代码中使用插件的能力,只需要在文件顶部添加对应的插件主库import语句即可。
待移除的错误代码示例:part 'package:slide_countdown_clock/clip_digit.dart'; part 'package:slide_countdown_clock/digit.dart'; part 'package:slide_countdown_clock/slide_direction.dart'; - 替换适配Flutter 2.0的依赖版本
旧版停更的slide_countdown_clock没有做空安全适配,和Flutter 2.0的Dart 2.12版本规则不兼容。需要打开项目根目录的pubspec.yaml文件,删除原有旧版依赖的配置,替换为适配空安全的同功能版本,执行依赖拉取命令:flutter pub get - 统一全项目语言版本约束
如果替换依赖后仍报语言版本不一致的错误,手动核对两个位置的版本配置:- 打开项目
pubspec.yaml的environment节点,统一指定SDK版本范围,避免依赖和项目的版本标记冲突,示例配置:environment: sdk: ">=2.12.0 <3.0.0" - 检查
.dart_tool/package_config.json中对应插件的语言版本标记,确保和项目声明的版本范围匹配
配置完成后执行清理命令重置缓存:
flutter clean flutter pub get - 打开项目
- 重新执行构建验证
所有配置完成后,重新运行构建命令即可完成编译。如果仍有构建异常,可以在构建命令后追加调试参数获取详细日志:flutter build apk --stacktrace --info
内容的提问来源于stack exchange,提问作者Ergün Yunus Cengiz
相关产品推荐
相关产品推荐

