从 Dart 2.12
开始,空值安全已经不再是实验性的了。现在启用它也很容易。
从第一个 Dart 2.12
版本开始,类型默认情况下将为不可为空。所以你只需要改变你的 SDK 约束:
environment:
sdk: ">=2.12.0 <3.0.0"
了解有关在 dart.dev 上“启用空值安全”的更多信息,请访问"启用空值安全"。
启用空安全性:
检查最新的Dart版本(应该是Dart 2.12或更高版本):
dart --version
如果上述步骤不满足要求,请使用以下命令更新Dart版本:
dart pub upgrade --null-safety
dart pub get
运行以下命令,了解项目中哪些库需要升级到最新的空安全版本:
dart pub outdated --mode=null-safety
最新列显示当前版本,如果是绿色的,表示依赖已经实现了空安全特性;如果是红色的,则表示依赖的所有者需要进行实现。
最后,运行Dart迁移命令,在现有项目上执行空安全迁移(现有项目)
dart migrate
如果您的软件包已准备好进行迁移,则该工具会生成以下类似的行:
通过访问以下链接查看迁移建议:
http://127.0.0.1:60278/Users/you/project/mypkg.console-simple?authToken=Xfz0jvpyeMI%3D
upgrade --null-safety
命令,你仍然会看到最新的列部分显示为红色,这意味着某个依赖项尚未支持null安全性,因此无法迁移该项目。在 Flutter 2.0.0 稳定版之后,您可以在应用程序的 根目录 中运行:
dart migrate --apply-changes
analyzer:
- enable-experiment:
- non-nullable
接下来,尝试再次清理并升级项目依赖项。
为此,您可以使用以下命令:
flutter clean
flutter packages pub upgrade
flutter pub run build_runner build
最后,重新启动你的IDE。
另外,请确保你正在使用的SDK与你的Flutter版本兼容。
按照Dart文档中的指示,我采取了以下步骤在Flutter中启用空值安全:
首先添加analysis_options.yaml
文件:
analyzer:
enable-experiment:
- non-nullable
然后切换到开发通道并升级:
flutter channel dev
flutter upgrade
在pubspec.yaml
中更改SDK版本。
environment:
sdk: ">=2.11.0-213.0.dev <2.12.0"
清理项目:
flutter clean
flutter pub get
重新启动IDE(在我的情况下是VS Code)。
然后它就正常运行了。
Set the lower Dart SDK constraint to 2.12
in your pubspec.yaml
file.
environment:
sdk: ">=2.12.0 <3.0.0"
Check if all the packages of your app are migrated to null safety.
dart pub outdated --mode=null-safety
If they are migrated, update all the packages to their null safe variant.
dart pub upgrade --null-safety
dart pub get
Start the migration process.
dart migrate
If you're happy with the changes, apply them using:
dart migrate --apply-changes
我已经尝试了上述所有方法,但分析器仍然提示需要启用空安全。对我而言解决方案是运行pub upgrade而不是pub get。即使我不知道为什么它能解决问题,我还是会继续工作!
我确认即使在2022年,仍然可以通过以下方式进行操作...
环境: SDK: ">=2.12.0 <3.0.0"
flutter upgrade
:) Flutter 2.0.0 已经发布,其中包含了 Dart 2.12.0。 - creativecreatorormaybenot