我有一个在null safety was introduced to Dart之前编写的Flutter应用。
我听说过空安全迁移工具,并且想知道如何使用它将我的代码从NNBD之前的默认转换为不可空。
答案 0 :(得分:10)
您至少需要Dart 2.9
。在撰写本文时,您可以使用2.9.0-10.0.dev
,即在您的pubspec.yaml
中放置以下SDK约束:
environment:
sdk: ">=2.9.0-10.0.dev <3.0.0"
/*?*/
和/*!*/
) /*?*/
提示意味着某些内容应明确为可空。
/*!*/
表示某些内容应该不可为空。
在使用NNBD之前,您已经可以手动添加这些提示。否则,您可以在迁移过程中使用该工具添加它们(请参见下文)。
有?
,!
和_
的编辑。
迁移后,?
的类型为 nullable 。 _
使其不可为空(表示不更改任何字符,因为默认为不可为空)。
!
使表达式不可为空。
这些修改在迁移工具中预览。
飞镖2.9
与an nnbd_migration
package一起提供。
此工具可用于 交互式 将代码转换为NNBD。
我将介绍migration steps described in the README并尝试简化它们:
pub get
或flutter pub get
。 (请注意,在撰写本文时,尚不支持Flutter SDK)dart migrate
。 (请注意,在撰写本文时,我需要使用--skip-pub-outdated
)http://localhost:<port>/<project path>?authToken=<token>
,查看迁移建议 )。您应该会看到类似这样的内容:您可以向下滚动以跟踪导致编辑建议的根表达式。当您在执行过程中某处发现错误的决定时,您可以如上所述Add /*?*/ hint
或Add /*!*/ hint
(也可以在IDE中手动添加它们)。
如果编辑看起来正确,则您无需执行任何操作。
您可能需要很多 Rerun From Sources
。这将应用您添加的新提示以及对代码所做的任何其他编辑,并生成新的编辑。这样做直到所有编辑看起来正确为止。
现在,您可能会看到提示以红色突出显示,这意味着该工具将删除提示并将其转换为?
,!
或空白。
您可能应该在此时保存您的项目(例如git commit
)。
注意:至此,您的代码中已经添加了一堆/*?*/
和/*!*/
提示,并且尚未迁移。
Apply Migration
:这将应用建议的修改并删除所有提示。
可能暂时让迁移工具保持打开状态。
现在,您的代码中没有任何提示了。
测试项目(pub get
或flutter pub get
,然后运行)。
如果出错了,将迁移工具保持打开状态会很有帮助。
潜在地,您想在迁移之前将您的版本恢复为原来,然后重复这些步骤。
成功!您的项目现在为空安全??