升级Flutter后是否需要修改pubspec.yaml中的SDK版本约束?
结论
你现有配置和当前使用的Flutter 3.1.0预览版是兼容的,要不要修改SDK版本上限,完全取决于你后续的使用计划:
- 如果你只是临时用这个预览版做测试、调试,之后不会继续升级Flutter/Dart版本,完全不需要改。当前配置
sdk: ">=2.12.0 <3.0.0"可以正常运行,你环境里内置的Dart 2.18.0开发版属于2.x大版本,完全符合<3.0.0的版本约束,直接执行flutter pub get不会触发版本不匹配错误。 - 如果你长期使用master渠道、后续会持续跟进升级Flutter版本,建议修改上限,但没必要只改到
<3.1.0,直接放宽到<4.0.0更省心,很长一段时间内都不用再调整这个配置。
具体原因
早期Dart生态的惯例是把SDK上限卡到下一个大版本之前,所以很多项目的配置都会写<3.0.0。但从Dart 2.12推出空安全之后,官方调整了版本兼容策略,2.x到3.0的迁移是渐进式设计的,不会出现当初2.0升2.12那种大面积代码、依赖不兼容的情况。
你用的master渠道迭代速度极快,很快就会推送Dart 3.0的预览版本,Dart 3.0的版本号为3.0.x,确实小于3.1.0,如果一直保留<3.0.0的上限,等后续升级到内置Dart 3.0的Flutter版本时,会直接报SDK版本不匹配错误,无法拉取依赖。如果直接把上限放到<4.0.0,就不用每次Dart迭代大版本的小更新都手动改约束。
后续操作提示
修改完SDK约束后,执行flutter pub upgrade --major-versions,把所有依赖更新到适配当前Dart版本的最新版即可。
如果运行时出现空安全相关的报错,按提示修正代码就行——Dart 2.18对空安全的校验比早期2.12版本更严格,部分不规范的旧写法会触发警告或错误,不属于版本兼容导致的严重问题。
内容的提问来源于stack exchange,提问作者Alex Aung
相关产品推荐
相关产品推荐

