无法在 Android Studio 中的现有 Flutter 项目中打开不可为空的功能

Ale*_*din 5 dart android-studio flutter

我在 Android Studio 4.0 的 Flutter 中有一个现有项目。我正在尝试将其迁移到默认情况下启用不可为空功能的开发频道。我做了什么:

  1. 更新了 pubspec.yaml 中的 SDK 要求:
environment:
  sdk: ">=2.9.0-14.0.dev <3.0.0"
Run Code Online (Sandbox Code Playgroud)
  1. 运行 pub get 和 pub upgrade:
> flutter --version
Flutter 1.20.0-3.0.pre • channel dev • https://github.com/flutter/flutter.git
Framework • revision 0af027f805 (30 hours ago) • 2020-07-04 12:19:20 -0700
Engine • revision a751393804
Tools • Dart 2.9.0 (build 2.9.0-20.0.dev 22da8934ac)
Run Code Online (Sandbox Code Playgroud)
  1. 创建了analysis_options.yaml包含以下内容的文件:
analyzer:
  enable-experiment:
    - non-nullable
Run Code Online (Sandbox Code Playgroud)
  1. 我运行这个命令:
> dart --enable-experiment=non-nullable
Usage: dart [<vm-flags>] <dart-script-file> [<script-arguments>]

Executes the Dart script <dart-script-file> with the given list of <script-arguments>.

Common VM flags:
--enable-asserts
  Enable assert statements.
--help or -h
  Display this message (add -v or --verbose for information about
  all VM options).
--packages=<path>
  Where to find a package spec file.
--observe[=<port>[/<bind-address>]]
  The observe flag is a convenience flag used to run a program with a
  set of options which are often useful for debugging under Observatory.
  These options are currently:
      --enable-vm-service[=<port>[/<bind-address>]]
      --pause-isolates-on-exit
      --pause-isolates-on-unhandled-exceptions
      --warn-on-pause-with-no-debugger
  This set is subject to change.
  Please see these options (--help --verbose) for further documentation.
--write-service-info=<file_uri>
  Outputs information necessary to connect to the VM service to the
  specified file in JSON format. Useful for clients which are unable to
  listen to stdout for the Observatory listening message.
--snapshot-kind=<snapshot_kind>
--snapshot=<file_name>
  These snapshot options are used to generate a snapshot of the loaded
  Dart script:
    <snapshot-kind> controls the kind of snapshot, it could be
                    kernel(default) or app-jit
    <file_name> specifies the file into which the snapshot is written
--version
  Print the SDK version.
Run Code Online (Sandbox Code Playgroud)

但结果什么都不是。当我从 IDE 运行项目时,出现以下错误:

Launching lib\main.dart on AOSP on IA Emulator in debug mode...
Running Gradle task 'assembleDebug'...
lib/ui/test.dart:21:6: Error: This requires the 'non-nullable' language feature to be enabled.
Try updating your pubspec.yaml to set the minimum SDK constraint to 2.9 or higher, and running 'pub get'.
  int? v = 0;
     ^
Run Code Online (Sandbox Code Playgroud)

我没有找到关于这个案例的任何明确的官方说明。

我做错了什么?

Oma*_*att 1

自 Flutter 2 稳定发布以来,空安全一直是 Flutter 的一个功能。将环境配置更新为sdk: ">=2.12.0 <3.0.0",运行flutter cleanflutter pub get刷新项目即可获得空安全支持。