为之前的 Flutter 项目关闭 Null Safety?

Turn off Null Safety for previous Flutter Project?

我想升级我的 flutter 以获得 null safety 等新功能,但我不想让我以前的项目影响它们。我只想对我的新 flutter 项目进行新更改,我想 运行 我的旧项目类似于旧方法。有什么办法吗?请指导我完成它。

谢谢

在旧项目的 pubspec.yaml 文件中设置 SDK 约束应该就足够了。

例如,以下未启用空安全:

environment:
  sdk: ">=2.11.0 <3.0.0"

您还可以在 Dart 文件的顶部指定禁用该文件的空值检查。

// @dart=2.9

beta 频道上升级到 Dart v2.12 后,上述答案对我不起作用。所以我找到了这些选项:

您可以将其添加到任何 dart 文件的顶部以禁用空安全检查。

// @dart=2.9

或类似于上面的答案,我必须包含 2.12 之前的版本以禁用空安全。您将在 pubspec.yaml 文件中编辑此行。

environment:
  sdk: ">=2.11.0 <3.0.0"

我遇到了同样的问题。

升级到Flutter 2.0后需要重新获取包

通过 运行 执行此操作:

flutter pub get

或者通过在 VS 代码中保存 pubspec.yaml 文件,这将为您获取包。

我遇到了同样的问题,在做了很多降级和升级之后(尤其是当旧项目需要用旧版本的 Flutter 和 build_runner 构建时)我发现了 Flutter Version Manager 在此处检查 git 存储库:https://github.com/leoafarias/fvm。最好的一点是您可以指定每个项目要使用的版本。

以下内容来自 repo 中的说明:

  1. 全局激活运行pub global activate fvm
  2. 安装特定版本的 Flutter 运行 fvm install <version>
  3. 然后进入项目的根目录,运行fvm use <version>

瞧瞧!希望对你有帮助。

检查存储库以获取更多命令,如 fvm use <version> --global 以轻松切换全球版本和更多有趣的东西。

您的项目可能是使用 flutter older(低于 2.+ 的版本)开发的。 2.x.x dart 版本的主要变化是启用空安全。此时,pub.dev上的很多库已经升级到空安全特性。

但是您的旧项目可能有一些库仍未更新为空安全。因此,您的项目可能会混合使用两者。在这种情况下,@miguel 的回答是部分有效的(定义 sdk: ">=2.7.0 <3.0.0" 约束)。要 运行 您的项目,您还需要关闭 null-safety。就像 运行ning 按照命令

flutter run --no-sound-null-safety

或通过转至 运行->Edit Configurations 在配置中添加此命令。它将打开以下弹出窗口和突出显示的字符串与

相同

**建议:**将您的项目更新为空安全。 Read more about null-safety

您可以 运行 使用带有 flutter run 选项的 --no-sound-null-safety 没有空安全的 flutter 项目。

您也可以在 VSCode

中将其添加为 launch.json 中的参数
"configurations": [
        {
            "name": "Flutter",
            "request": "launch",
            "type": "dart",
            "flutterMode": "debug",
            "args": [
                "--no-sound-null-safety"
            ],
        },
]

您可以使用 var 或 dynamic 声明变量,现在编译器不会检查 variable type

var answerText;
dynamic answerColor;

Answer({this.answerText, this.answerColor});

如果您尝试在没有空安全检查的情况下进行构建,请使用此注释行 // @dart=2.9 在 main.dart 第一行。

// @dart=2.9

import 'package:flutter/material.dart';

void main() async {
  
  runApp(
    const MyApp()
  );
}

从 gradle 文件中删除以下代码行或将其注释掉 运行 没有 Gradle 异常的代码- 如果(flutterRoot == null){ throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") }