繁体   English   中英

如何在 Flutter 中启用 Null-Safety?

[英]How to enable Null-Safety in Flutter?

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

这需要启用“不可为空”的语言功能。 尝试更新您的 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,...

Dart 2.12空安全不再是一个实验 现在很容易启用。

启用空安全

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

environment:
  sdk: ">=2.12.0 <3.0.0"

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

要启用空安全,

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

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

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

     dart pub outdated --mode=null-safety

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

在此处输入图片说明

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

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

    通过访问查看迁移建议:

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

注意:即使在运行upgrade --null-safety命令后,您upgrade --null-safety看到最新的列部分为红色,这意味着特定依赖项尚未支持空安全,因此您无法迁移项目。

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

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

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

dart migrate --apply-changes

当您升级正在使用的 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 版本兼容

按照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)。

然后它工作正常。

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

  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

我确认即使在 2022 年它仍然可以这样做......

环境:SDK:“>=2.12.0 <3.0.0”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM