如何在 Flutter 中启用 Null-Safety?

Abd*_*edy 42 dart flutter dart-null-safety

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

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

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

在此处输入图片说明

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

dart-sdk v2.10.2 是基于您的来源的最新版本。

颤动(通道稳定,1.22.3,...

cre*_*not 57

空安全性不再是一项试验 飞镖2.12。现在很容易启用。

启用空安全

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

environment:
  sdk: ">=2.12.0 <3.0.0"
Run Code Online (Sandbox Code Playgroud)

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


jit*_*555 34

要启用空安全,

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

    dart --version
    
    Run Code Online (Sandbox Code Playgroud)
  2. 更新dart版本,使用命令不满足以上几点。

    dart pub upgrade --null-safety
    
    dart pub get
    
    Run Code Online (Sandbox Code Playgroud)
  3. 运行以下命令以了解您的项目中有哪些库需要升级到最新的空安全。

    dart pub outdated --mode=null-safety
    
    Run Code Online (Sandbox Code Playgroud)

最新的栏显示当前版本,如果它在绿色是表示相关实施空安全功能,如果它再红的依赖业主的需求来实现这一点。

在此处输入图片说明

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

    dart migrate
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如果您的包已准备好迁移,则该工具会生成如下一行:

    通过访问查看迁移建议:

    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


小智 9

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

dart migrate --apply-changes
Run Code Online (Sandbox Code Playgroud)


Mir*_*imo 6

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

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

analyzer:
    - enable-experiment:
        - non-nullable
Run Code Online (Sandbox Code Playgroud)

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

flutter clean
flutter packages pub upgrade
flutter pub run build_runner build
Run Code Online (Sandbox Code Playgroud)

最后,重新启动 IDE。

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


dum*_*azy 6

根据Dart 文档,我能够通过以下步骤在 Flutter 中启用空安全:

首先添加analysis_options.yaml

analyzer:
  enable-experiment:
    - non-nullable
Run Code Online (Sandbox Code Playgroud)

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

flutter channel dev
flutter upgrade
Run Code Online (Sandbox Code Playgroud)

更改sdk中pubspec.yaml

environment:
  sdk: ">=2.11.0-213.0.dev <2.12.0"
Run Code Online (Sandbox Code Playgroud)

清理项目:

flutter clean
flutter pub get
Run Code Online (Sandbox Code Playgroud)

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

然后就一切正常了。