关闭之前Flutter项目的Null Safety?

问题描述 投票:0回答:9

我想升级我的 flutter 以获取空安全等新功能,但我不希望我之前的项目影响它们。我只想对我的新 flutter 项目进行新的更改,我想以类似于旧方式的方式运行我的旧项目。有什么办法吗?请指导我完成它。

谢谢你

flutter dart upgrade
9个回答
65
投票

在旧项目的

pubspec.yaml
文件中设置 SDK 约束就足够了。

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

environment:
  sdk: ">=2.11.0 <3.0.0"

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

// @dart=2.9

38
投票

在我升级到

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

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

// @dart=2.9

或者类似于上面的答案,我必须包含 2.12 之前的版本才能禁用 null 安全性。您可以在

pubspec.yaml
文件中编辑此行。

environment:
  sdk: ">=2.11.0 <3.0.0"

15
投票

您可以使用

--no-sound-null-safety
选项和
flutter run
在没有空安全的情况下运行 flutter 项目。

您也可以将其添加为 VSCode 中

launch.json
中的参数

"configurations": [
        {
            "name": "Flutter",
            "request": "launch",
            "type": "dart",
            "flutterMode": "debug",
            "args": [
                "--no-sound-null-safety"
            ],
        },
]

8
投票

您的项目可能是使用 flutter old(版本低于 2.+)开发的。 2.x.x dart 版本的主要变化是启用空安全。目前 pub.dev 上的很多库已经升级为 null 安全功能了。

但是您的旧项目可能有一些库仍未更新为空安全。因此,您的项目可能混合了两者。在这种情况下,@miguel 答案部分有效(定义

sdk: ">=2.7.0 <3.0.0"
约束)。要运行您的项目,您还需要取消零安全性。就像运行以下命令

flutter run --no-sound-null-safety

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

相同

**推荐:**将您的项目更新为空安全。 了解更多关于空安全的信息


4
投票

我遇到了同样的问题,在进行了大量的降级和升级之后(特别是当旧项目需要使用旧版本的 Flutter 和 build_runner 构建时)我发现了关于 Flutter Version Manager 检查这里的 git repo: https://github.com/leoafarias/fvm。最好的事情是您可以指定每个项目要使用哪个版本。

以下内容来自存储库中的说明:

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

瞧瞧!希望有帮助👍.

检查存储库以获取更多命令,例如

fvm use <version> --global
,以轻松切换全局版本和更多有趣的内容。


0
投票

您可以使用 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()
  );
}

0
投票

从 gradle 文件中删除以下代码行或将其注释掉以运行代码而不会出现 Gradle 异常 - 如果(flutterRoot == null){ throw new GradleException(“未找到 Flutter SDK。在 local.properties 文件中使用 flutter.sdk 定义位置。”) }


0
投票

我不得不根据dart版本降级我的flutter SDK。我正在使用最新的

Flutter SDK 3.10.5
Dart version 3.0.5
并且遇到了同样的问题。所以我就跟着这个

  1. 检查了
    pubspec.yaml
    的环境,是

环境: SDK:">=2.7.0 <3.0.0"

  1. SDK archive
    下载flutter SDK,
    Dart version
    不属于上述范围。就我而言,它是
    Flutter SDK 3.7.12
    因为它的
    Dart version 2.19.6
    不在
    >=2.7.0 <3.0.0
    范围内。

重建应用程序,它的效果非常好。


0
投票

既然已经选择了正确的答案,我将把这篇文章发布给那些计划分阶段升级的人。这是一个 bash 脚本,可帮助您将

// @dart=2.9
注释放在 lib 目录中所有 .dart 文件的最顶部:

#!/bin/bash

process_files() {
  for file in "$1"/*; do
    if [ -d "$file" ]; then
      process_files "$file"
    elif [ "${file##*.}" = "dart" ]; then
      sed -i '1s/^/\/\/ @dart=2.9\n/' "$file"
      echo "Comment added to $file"
    fi
  done
}

main_directory="./lib"

process_files "$main_directory"

我希望它能帮助您节省一些时间。

© www.soinside.com 2019 - 2024. All rights reserved.