关闭之前 Flutter 项目的 Null Safety?
Posted
技术标签:
【中文标题】关闭之前 Flutter 项目的 Null Safety?【英文标题】:Turn off Null Safety for previous Flutter Project? 【发布时间】:2021-03-25 20:42:19 【问题描述】:我想升级我的 Flutter 以获得新功能,例如 null 安全性,但我不希望我之前的项目影响它们。我只想对我的新颤振项目进行新的更改,我想以类似于旧方式的方式运行我的旧项目。有什么办法吗?请指导我完成它。
谢谢
【问题讨论】:
我建议您使用 Flutter upgrade 使用命令行升级 Flutter,然后使用此版本处理新项目。当你想处理以前的项目时,只需使用 Flutter downgrade v1.x.x 降级到当前版本 感谢您的评论@AyadRocketfy,但还有其他方法,至少零安全不会影响我以前的项目。 【参考方案1】:您可以使用--no-sound-null-safety
选项和flutter run
运行没有空安全性的颤振项目。
您也可以在 VSCode 中将其作为参数添加到 launch.json
中
"configurations": [
"name": "Flutter",
"request": "launch",
"type": "dart",
"flutterMode": "debug",
"args": [
"--no-sound-null-safety"
],
,
]
【讨论】:
【参考方案2】:在旧项目的 pubspec.yaml
文件中设置 SDK 约束就足够了。
例如,以下内容没有启用 null 安全性:
environment:
sdk: ">=2.11.0 <3.0.0"
您还可以在 Dart 文件的顶部指定禁用对该文件的空检查。
// @dart=2.9
【讨论】:
我还能用这个 Flutter 2 小部件吗?这应该不是问题吧? @MiguelRuivo 尽管这样做了,但我无法禁用 null-safety 我收到此错误:当前的 Dart SDK 版本是 2.12.2。因为onapp需要SDK版本2.7.0,版本解析失败 确保在更新约束后运行flutter pub get
。
如果我们需要它小于2.12.0
不应该这样写:>=2.11.0 <2.12.0
?
在我的情况下 sdk: ">=2.7.0
【参考方案3】:
您的项目可能是使用 flutter old(低于 2.+ 的版本)开发的。 2.x.x dart 版本的主要变化是启用 null 安全性。目前,pub.dev 上的很多库都已升级为 null 安全功能。
但是您的旧项目可能有一些库仍未更新为空安全。因此,您的项目可能两者兼而有之。在这种情况下,@miguel 答案部分有效(定义sdk: ">=2.7.0 <3.0.0"
约束)。要运行您的项目,您还需要取消零安全性。喜欢通过运行以下命令
flutter run --no-sound-null-safety
或通过转到运行->编辑配置在配置中添加此命令。它将打开以下弹出窗口并且突出显示的字符串与 相同
**推荐:**将您的项目更新为空安全。 Read more about null-safety
【讨论】:
【参考方案4】:我遇到了同样的问题,在做了很多降级和升级之后(特别是当旧项目需要用旧版本的 Flutter 和 build_runner 构建时)我发现了 Flutter 版本管理器在此处查看 git 存储库:https://github.com/leoafarias/fvm。最好的一点是您可以指定每个项目要使用的版本。
以下来自回购中的说明:
-
要激活全局运行
pub global activate fvm
要安装特定版本的 Flutter 运行 fvm install <version>
然后进入项目根目录运行fvm use <version>
瞧!希望对你有帮助?。
查看 repo 以获取更多命令,例如 fvm use <version> --global
,以便轻松切换全局版本和更多有趣的东西。
【讨论】:
【参考方案5】:我遇到了同样的问题。
升级到 Flutter 2.0 后需要重新获取包
通过运行来做到这一点:
flutter pub get
或者通过将pubspec.yaml
文件保存在 VS 代码中,它将为您获取包。
【讨论】:
是的,我在包中有一个示例项目,它修复了 vscode linting【参考方案6】:我在beta
频道上升级到Dart v2.12
后,上述答案对我不起作用。所以我找到了这些选项:
您可以将其添加到任何 dart 文件的顶部以禁用空安全检查。
// @dart=2.9
或类似于上面的答案,我必须包含 2.12 之前的版本来禁用 null 安全性。您可以在 pubspec.yaml
文件中编辑这一行。
environment:
sdk: ">=2.11.0 <3.0.0"
【讨论】:
如果您已经开始使用可选项等怎么办?以上是关于关闭之前 Flutter 项目的 Null Safety?的主要内容,如果未能解决你的问题,请参考以下文章
我应该将 Flutter Web 用于不应该在夏季之前投入生产的网站项目吗? [关闭]
Flutter Android App 在使用谷歌地图时崩溃
在 2.7.0 之前的 sdk 版本中,是不是需要 Flutter 来保证 null 安全性?