如何快速将我的flutter项目迁移到空安全?

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

我的问题不是如何升级我的 Flutter 或 Dart 版本...

我长期以来一直试图避免空安全,因为我没有看到“空”概念的问题,我的应用程序运行得很好。但现在有了最新的 flutter 版本,你必须使用空安全,你别无选择。

所以我对如何迁移进行了一些研究,结果发现“迁移”命令在最新的 dart 版本中不可用,所以我必须执行“flutter downgrade”(完成后将再次升级),然后我将进行“dart 迁移”。

我的问题是,当我尝试运行“dart migrate”时,我收到 205 个分析问题(请让我知道提供更多详细信息是否有帮助,也许可以将输出粘贴到此处)。

我现在是否必须手动向代码中的这 205 个区域添加问号和感叹号?这只是我的项目之一......我还有另一个更大的项目,我也必须迁移它。有什么办法可以自动化吗?

flutter dart null nullable
1个回答
0
投票

首先,确保

pubspec.yaml
中所有第三方包版本均已更新并支持空安全。 您可以使用以下命令检查依赖关系状态:

dart pub outdated --mode=null-safety

根据 Docs,您的代码需要空安全的大多数更改都很容易预测。例如,如果变量可以为 null,则其类型需要 ?后缀。如果命名参数不可为空,请将其标记为必需或为其指定默认值。

您可以使用

dart migrate
命令来完成大部分工作,但在此之前请确保您的 Dart SDK 已更新,并且您检查了对空安全的依赖支持。

要查看每个更改(或未更改)的原因,请在“建议的编辑”窗格中单击其行号。原因显示在“编辑详细信息”窗格中。

例如,考虑以下代码,来自空安全之前:

var ints = const <int>[0, null];
var zero = ints[0];
var one = zero + 1;
var zeroOne = <int>[zero, one];

当此代码位于函数外部时(函数内不同),默认迁移是向后兼容的,但并不理想:

var ints = const <int?>[0, null];
var zero = ints[0];
var one = zero! + 1;
var zeroOne = <int?>[zero, one];

点击第3行链接,可以看到迁移工具添加!的原因。因为你知道零不能为空,所以你可以改善迁移结果。

当分析推断出错误的可为空性时,您可以通过插入临时提示标记来覆盖其建议的编辑:

在迁移工具的编辑详细信息窗格中,您可以使用添加 /?/ 提示和添加 /!/ 提示按钮插入提示标记。

这些按钮会立即向您的文件添加注释,并且无法撤消。如果您不想要该工具插入的提示,您可以使用常用的代码编辑器将其删除。

即使该工具仍在运行,您也可以使用编辑器添加提示标记。由于您的代码尚未选择空安全,因此您无法使用新的空安全功能。但是,您可以进行不依赖空安全功能的更改,例如重构。

编辑完代码后,单击“从源重新运行”以获取更改。

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