关闭之前 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 不应该这样写:&gt;=2.11.0 &lt;2.12.0 在我的情况下 sdk: ">=2.7.0 【参考方案3】:

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

但是您的旧项目可能有一些库仍未更新为空安全。因此,您的项目可能两者兼而有之。在这种情况下,@miguel 答案部分有效(定义sdk: "&gt;=2.7.0 &lt;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 &lt;version&gt; 然后进入项目根目录运行fvm use &lt;version&gt;

瞧!希望对你有帮助?。

查看 repo 以获取更多命令,例如 fvm use &lt;version&gt; --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跳转并关闭之前的所有页面(重定向)

我应该将 Flutter Web 用于不应该在夏季之前投入生产的网站项目吗? [关闭]

Flutter Android App 在使用谷歌地图时崩溃

在 2.7.0 之前的 sdk 版本中,是不是需要 Flutter 来保证 null 安全性?

Flutter:如何在加载页面之前从 Api 获取数据 [关闭]

Flutter:如何让页面等到数据加载?