如何在 Flutter 中启用 Null-Safety?
Posted
技术标签:
【中文标题】如何在 Flutter 中启用 Null-Safety?【英文标题】:How to enable Null-Safety in Flutter? 【发布时间】:2021-02-13 15:56:08 【问题描述】:我尝试使用空安全,但它给了我这个错误:
这需要启用“不可为空”语言功能。尝试 更新您的 pubspec.yaml 以将最小 SDK 约束设置为 2.10.0 或更高版本,并运行“pub get”。
我将 Dart SDK 约束从 2.7.0
更改为 2.10.0
,但仍然显示此错误。
另外,我升级了我的 Dart 和 Flutter SDK:
dart-sdk v2.10.2 是基于您的最新可用版本 来源。
Flutter(通道稳定,1.22.3,...
【问题讨论】:
【参考方案1】:在 pubspec.yaml
文件中将 Dart SDK 下限设置为 2.12
。
environment:
sdk: ">=2.12.0 <3.0.0"
检查您应用的所有包是否都迁移到空安全。
dart pub outdated --mode=null-safety
如果它们被迁移,请将所有包更新为它们的空安全变体。
dart pub upgrade --null-safety
dart pub get
开始迁移过程。
dart migrate
如果您对更改感到满意,请使用:
dart migrate --apply-changes
【讨论】:
【参考方案2】:启用空值安全,
查看最新的 Dart 版本(应该是 Dart 2.12 或更高版本:)
dart --version
更新dart版本,使用命令不满足以上几点。
dart pub upgrade --null-safety
dart pub get
运行以下命令以了解您项目中的哪些库需要升级到最新的 null 安全性。
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
命令后,您仍会看到最新的列部分为红色,这意味着特定依赖项尚不支持空安全性,因此您无法迁移项目.
详情请阅读:https://dart.dev/null-safety/migration-guide
关于实现空安全的好博客:https://medium.com/flutterworld/flutter-null-safety-5d20012c2441
【讨论】:
【参考方案3】:Flutter 2.0.0稳定版后可以在应用root文件夹中运行:
dart migrate --apply-changes
【讨论】:
【参考方案4】:Null 安全性不再是实验 截至 Dart 2.12
。现在很容易启用。
启用零安全
从第一个 Dart 2.12
版本开始,类型将默认情况下不可为空。所以你只需要改变你的 SDK 约束:
environment:
sdk: ">=2.12.0 <3.0.0"
详细了解"Enabling null safety" on dart.dev。
【讨论】:
现在稳定了(Flutter 2.0.0) 出现错误:[chatflutter] flutter pub get Running "flutter pub get" in chatflutter... 当前 Dart SDK 版本为 2.12.0-133.7.beta。因为 chatflutter 需要 SDK 版本 >=2.12.0 =2.12.0 @Kamlesh 请确保运行flutter upgrade
:) Dart 2.12.0 从 Flutter 2.0.0 开始可用。
我已经开发了应用程序,如果我使用具有 null 安全功能的 Dart 2.12 版本,那么在应用具有 null 安全功能的 Dart 2.12 版本后,我将需要 10 天的时间来解决出现的所有问题。顺便说一句,我已将颤振版本更新为 2.0.0,并在我的应用程序中进行了颤振 ui 更改。我复制了我的应用程序并应用了 Dart 2.12 版本,然后在我的应用程序中修复了与 Dart 2.12 更新相关的问题,浪费了 11-12 个小时,这是浪费时间,因为许多软件包与 Dart 2.12 空安全功能不兼容,然后我回滚了我今天的申请。非常感谢。
Dart 还说等待您依赖迁移的包,因此迁移到具有空安全功能的 Dart 2.12 并不好。 dart.dev/null-safety/migration-guide【参考方案5】:
我已经完成了上述所有操作,但由于某种原因,分析器仍然给出了关于启用 null 安全性的错误。为我解决的问题是运行 pub upgrade 而不是 pub get。我什至不会试图找出原因,我只是要回去工作!
【讨论】:
"我什至不打算找出原因,我只是要回去工作!"在尝试解决此问题后,我将此作为人生的教训:)【参考方案6】:按照Dart documentation,我能够通过以下步骤在 Flutter 中启用 null 安全性:
先添加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)。
然后它工作正常。
【讨论】:
现在,NNBD 不再是一个实验。见my answer。【参考方案7】:当您升级正在使用的 Flutter 版本时,可能会发生这种情况。
尝试将以下内容添加到 analysis_options.yml
analyzer:
- enable-experiment:
- non-nullable
然后,再次尝试清理和升级项目依赖项。 为此,您可以使用以下命令:
flutter clean
flutter packages pub upgrade
flutter pub run build_runner build
最后,重新启动你的 IDE。
附:对了,请确保您使用的 sdk 与您的 Flutter 版本兼容
【讨论】:
我必须导入一些东西吗? 你可以尝试重启你的ide吗? ***.com/a/62153557/10907417 @AbdallahEl-Rashedy 现在不再需要enable-experiment
;见my answer。以上是关于如何在 Flutter 中启用 Null-Safety?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 flutter_webview 插件在 Flutter 中启用位置?