Flutter 升级后遇到 Cannot run with sound null safety 错误怎么办
当把 Flutter SDK 升级到 2.0 或更高版本时,运行旧项目可能会直接报错,提示如下:
Error: Cannot run with sound null safety, because the following dependencies don't support null safety: - package:flutter_swiper - package:flutter_page_indicator - package:transformer_page_view
FAILURE: Build failed with an exception.
这通常是因为项目里的某些第三方包还没适配 Dart 的空安全(Null Safety)机制。遇到这种情况,我有两个常用的解决办法,可以根据实际情况选择。
方案一:添加启动参数(临时绕过)
如果你只是想快速跑通项目,或者暂时不想动依赖,可以在 Android Studio 里忽略这个检查。
打开 Android Studio,依次点击菜单栏的【Run】 --> 【Edit Configurations】。在弹出的窗口中找到【Add Additional Run args】输入框,填入 --no-sound-null-safety。
保存后重新运行,错误就会消失。虽然这个方法能解决问题,但它只是绕过了检查,并没有真正修复兼容性,长期来看可能还会埋下隐患。
方案二:降低 SDK 版本要求(针对老项目)
如果是维护一些比较老的遗留项目,且短期内无法更新所有依赖包,最直接的办法是放宽 SDK 的版本限制。
找到项目根目录下的 pubspec.yaml 文件,定位到 environment 部分,把 SDK 约束改低一点。比如:
sdk: ">=2.12.0 <3.0.0"
改成:
sdk: ">=2.8.0 <3.0.0"
因为从 SDK 2.12 开始,Dart 强制引入了空安全特性。降级后,构建工具就不会再强制要求依赖包支持空安全了。
总结
这两种方法各有适用场景。如果是新项目或者依赖可控,建议优先升级依赖包以适配空安全;如果是老项目紧急上线,先用启动参数救急,再逐步规划迁移。


