52

我尝试使用空安全,但它给了我这个错误:

这需要启用“不可为空”语言功能。尝试更新您的 pubspec.yaml 以将最小 SDK 约束设置为 2.10.0 或更高版本,然后运行“pub get”。

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

在此处输入图像描述

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

dart-sdk v2.10.2 是基于您的源代码可用的最新版本。

Flutter(通道稳定,1.22.3,...

4

7 回答 7

63

Dart开始,空安全不再是一项实验 。现在很容易启用。2.12

启用零安全

从第一个 Dart2.12版本开始,默认情况下类型将不可为空。所以你只需要改变你的 SDK 约束:

environment:
  sdk: ">=2.12.0 <3.0.0"

在 dart.dev 上了解有关“启用 null 安全性”的更多信息。

于 2020-12-02T23:02:33.700 回答
40

To Enable null safety,

  1. Check Latest Dart Version(It should be Dart 2.12 or later:)

    dart --version
    
  2. Update the dart version, the above point not satisfied using the command.

    dart pub upgrade --null-safety
    
    dart pub get
    
  3. Run the below command to know what are libs in your project needs to be upgraded to the latest null safety.

    dart pub outdated --mode=null-safety
    

The latest column shows the current version if it's in green that means dependency implemented null safety features if it red then the dependency owner needs to implement that.

enter image description here

  1. Finally, run dart migration command which performs null safety migration on existing project(Existing project)

    dart migrate
    
  2. If your package is ready to migrate, then the tool produces a line like the following:

    View the migration suggestions by visiting:

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

Note: Even after running upgrade --null-safety command, you see the latest column section in red, which means a particular dependency hasn't supported null safety yet, so that means you cannot migrate the project.

for detail read: https://dart.dev/null-safety/migration-guide

Good blog on Implementation of Null Safety: https://medium.com/flutterworld/flutter-null-safety-5d20012c2441

于 2021-03-15T11:00:31.883 回答
10

Flutter 2.0.0 Stable 之后,您可以在应用程序文件夹中运行:

dart migrate --apply-changes
于 2021-03-12T11:39:03.043 回答
5

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

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

analyzer:
    - enable-experiment:
        - non-nullable

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

flutter clean
flutter packages pub upgrade
flutter pub run build_runner build

最后,重新启动您的 IDE。

Ps 顺便确保你使用的 sdk 与你的 Flutter 版本兼容

于 2020-10-31T11:35:02.813 回答
3

按照Dart 文档,我可以通过以下步骤在 Flutter 中启用 null 安全性:

首先添加analysis_options.yaml

analyzer:
  enable-experiment:
    - non-nullable

然后转到开发频道并升级:

flutter channel dev
flutter upgrade

更改sdkpubspec.yaml

environment:
  sdk: ">=2.11.0-213.0.dev <2.12.0"

清理项目:

flutter clean
flutter pub get

重新启动 IDE(在我的例子中是 VS Code)。

然后它工作正常。

于 2020-10-31T15:56:45.973 回答
2

我已经完成了上述所有操作,但由于某种原因,分析器仍然给出了关于启用空安全性的错误。为我解决的问题是运行 pub upgrade 而不是 pub get。我什至不会试图找出原因,我只是要回去工作!

于 2020-12-10T15:54:28.607 回答
2
  1. 2.12在您的pubspec.yaml文件中设置较低的 Dart SDK 约束。

    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  
    
于 2021-08-29T12:48:33.443 回答