Dart编译报错:空安全模式NonNullableByDefaultCompiledMode.Invalid不支持
Dart空安全编译报错排查方案
问题核心表现
编译Dart应用时直接失败,编译器异常退出,核心报错特征如下:
- 明确提示以下依赖包未适配空安全:
package:provider_mvcpackage:provider
- 抛出未处理异常:
Bad state: Unsupported Null Safety mode NonNullableByDefaultCompiledMode.Invalid, in null. - 异常栈指向dev_compiler、frontend_server相关的编译模块,最终提示编译流程中断。
解决步骤
优先升级依赖适配空安全
打开项目根目录的pubspec.yaml,确认当前SDK约束:如果sdk版本下限大于等于2.12.0,说明项目默认开启健全空安全机制,此时老版本未适配空安全的依赖就会触发报错。
执行以下命令升级所有依赖到最新稳定版:# Flutter项目执行 flutter pub upgrade # 纯Dart项目执行 dart pub upgrade升级完成后执行
pub outdated检查,确认provider、provider_mvc的版本已经支持空安全后,重新执行编译即可。依赖无空安全适配版本时,使用非健全空安全模式编译
如果provider_mvc等依赖已经停止维护、没有推出适配空安全的正式版本,可以在编译/运行命令中追加参数,关闭健全空安全校验:# 运行调试 flutter run --no-sound-null-safety # 打包编译(以web端为例,其他端打包同理追加参数) flutter build web --no-sound-null-safety如果是通过VSCode、Android Studio等IDE直接点击运行/调试按钮,需要在对应运行配置的「额外编译参数」项中添加
--no-sound-null-safety,避免IDE默认使用健全空安全模式编译。参数配置后仍报错的清理操作
如果追加参数后依然触发相同报错,按以下步骤清理缓存重置编译环境:- 关闭所有正在运行的Dart、Flutter进程
- 执行
flutter clean(纯Dart项目执行dart pub cache repair) - 删除项目根目录下的
.dart_tool文件夹、pubspec.lock文件 - 重新执行
pub get拉取依赖,再用带非健全空安全参数的命令重新编译即可。
注意:非健全空安全是兼容老依赖的临时方案,后续如果相关依赖推出空安全适配版本,建议尽快升级依赖、移除编译参数,切回健全空安全模式获得更可靠的类型校验能力。
内容的提问来源于stack exchange,提问作者Zoheth George
相关产品推荐
相关产品推荐

