如何在 Flutter 中启用空安全?

How to enable Null-Safety in Flutter?

我尝试使用 null safety,但它给了我这个错误:

This requires the 'non-nullable' language feature to be enabled. Try updating your pubspec.yaml to set the minimum SDK constraint to 2.10.0 or higher, and running 'pub get'.

我将我的 Dart SDK 约束从 2.7.0 更改为 2.10.0,但它仍然显示此错误。

此外,我升级了我的 Dart 和 Flutter SDK:

dart-sdk v2.10.2 is the latest version available based on your source(s).

Flutter (Channel stable, 1.22.3, ...

升级您正在使用的 Flutter 版本时可能会发生这种情况。

尝试将以下内容添加到 analysis_options.yml

analyzer:
    - enable-experiment:
        - non-nullable

然后,再次尝试清理和升级项目依赖项。
为此,您可以使用以下命令:

flutter clean
flutter packages pub upgrade
flutter pub run build_runner build

最后,重新启动您的 IDE。

P.s。顺便说一句,请确保您使用的 sdk 与您的 Flutter 版本兼容

按照 Dart documentation 我能够通过以下步骤在 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)。

然后一切正常。

从 Dart 2.12 开始,零安全性不再是实验 。现在很容易启用。

启用空安全

从第一个 Dart 2.12 版本开始,类型默认为 不可空 。所以你只需要改变你的SDK约束:

environment:
  sdk: ">=2.12.0 <3.0.0"

详细了解 "Enabling null safety" on dart.dev

我已经完成了上述所有操作,但出于某种原因,分析器仍然给出有关启用空安全的错误。为我修复的是 运行 pub upgrade 而不是 pub get。我什至不打算找出原因,我只是回去工作!

Flutter 2.0.0 稳定之后你可以 运行 在应用 root 文件夹中:

dart migrate --apply-changes

要启用空安全,

  1. 查看最新的Dart版本(应该是Dart 2.12或更高版本:)

    dart --version
    
  2. 更新dart版本,以上几点不满足使用命令

    dart pub upgrade --null-safety
    
    dart pub get
    
  3. 运行 下面的命令可以知道你的项目中有哪些库需要升级到最新的 null safety。

    dart pub outdated --mode=null-safety
    

latest 列显示当前版本,如果它是绿色的,这意味着依赖项实现了空安全功能,如果它是红色的,那么依赖项所有者需要实现它。

  1. 最后,运行 dart migration 命令对现有项目(Existing project)执行空安全迁移

    dart migrate
    
  2. 如果您的包已准备好迁移,则该工具会生成如下一行:

    通过访问查看迁移建议:

    http://127.0.0.1:60278/Users/you/project/mypkg.console-simple?authToken=Xfz0jvpyeMI%3D

注意: 即使在 运行ning upgrade --null-safety 命令之后,您会看到最新的列部分为红色,这意味着特定的依赖项不支持null safety 还没有,所以这意味着你不能迁移项目。

详情阅读:https://dart.dev/null-safety/migration-guide

关于空安全实施的好博客:https://medium.com/flutterworld/flutter-null-safety-5d20012c2441

  1. 在您的 pubspec.yaml 文件中将 Dart SDK 的下限约束设置为 2.12

    environment:
      sdk: ">=2.12.0 <3.0.0"
    
  2. 检查您的应用程序的所有包是否都已迁移到空安全。

    dart pub outdated --mode=null-safety
    
  3. 如果已迁移,请将所有包更新为其空安全变体。

    dart pub upgrade --null-safety 
    dart pub get
    
  4. 开始迁移过程。

    dart migrate
    

    如果您对更改感到满意,请使用以下方式应用它们:

    dart migrate --apply-changes