Flutter中能否为build_runner命令单独指定Dart SDK版本环境
解决方案
无法直接为build_runner命令单独指定Dart SDK版本跳过pubspec.yaml的环境校验,但可以通过以下两种更简便的方案替代手动修改pubspec.yaml的操作:
方案一:使用一键脚本自动完成升降级流程
将手动升降级的步骤封装为可执行脚本,每次需要生成代码时直接运行即可,无需手动修改配置文件:
- Windows环境下创建
run_build.bat文件,内容如下:
:: 备份原pubspec.yaml copy pubspec.yaml pubspec.yaml.bak :: 替换SDK约束为2.12+ powershell -Command "(gc pubspec.yaml) -replace 'sdk: \">=2.7.0 <3.0.0\"', 'sdk: \">=2.12.0 <3.0.0\"' | Out-File pubspec.yaml -Encoding utf8" :: 拉取对应版本依赖 flutter pub get :: 执行build_runner生成代码 flutter packages pub run build_runner build --delete-conflicting-outputs :: 恢复原始pubspec.yaml配置 copy pubspec.yaml.bak pubspec.yaml :: 删除备份文件 del pubspec.yaml.bak :: 重新拉取原环境对应依赖 flutter pub get
- macOS/Linux环境下创建
run_build.sh文件,内容如下:
# 备份原pubspec.yaml cp pubspec.yaml pubspec.yaml.bak # 替换SDK约束为2.12+ sed -i '' 's/sdk: ">=2.7.0 <3.0.0"/sdk: ">=2.12.0 <3.0.0"/g' pubspec.yaml # 拉取对应版本依赖 flutter pub get # 执行build_runner生成代码 flutter packages pub run build_runner build --delete-conflicting-outputs # 恢复原始pubspec.yaml配置 cp pubspec.yaml.bak pubspec.yaml # 删除备份文件 rm pubspec.yaml.bak # 重新拉取原环境对应依赖 flutter pub get
后续需要生成代码时,直接运行对应脚本即可完成全流程操作。
方案二:通过依赖覆盖兼容非空安全环境(优先推荐)
在pubspec.yaml中添加dependency_overrides节点,强制指定兼容非空安全的json_serializable版本,满足opencv_4: ^1.0.0的依赖要求,不需要修改SDK环境配置:
dependency_overrides: json_serializable: ^3.5.1
修改后直接执行flutter pub get,再运行build_runner命令即可正常生成代码。如果配置后出现版本不兼容报错,使用方案一即可。
内容的提问来源于stack exchange,提问作者SpicyTunaaa
相关产品推荐
相关产品推荐

