为之前的 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 中的说明:
- 全局激活运行
pub global activate fvm
- 安装特定版本的 Flutter 运行
fvm install <version>
- 然后进入项目的根目录,运行
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.")
}
我想升级我的 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 中的说明:
- 全局激活运行
pub global activate fvm
- 安装特定版本的 Flutter 运行
fvm install <version>
- 然后进入项目的根目录,运行
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.") }