如何将Dart代码迁移到不可空(NNBD)?

时间:2020-06-02 09:33:05

标签: flutter dart

我有一个在null safety was introduced to Dart之前编写的Flutter应用。

我听说过空安全迁移工具,并且想知道如何使用它将我的代码从NNBD之前的默认转换为不可空。

1 个答案:

答案 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并尝试简化它们:

  1. 使用Flutter时,在命令行中转到项目并运行pub getflutter pub get。 (请注意,在撰写本文时,尚不支持Flutter SDK)
  2. 运行 dart migrate 。 (请注意,在撰写本文时,我需要使用--skip-pub-outdated
  3. 等待分析和迁移完成,然后通过在浏览器的命令行中打开URL(格式为http://localhost:<port>/<project path>?authToken=<token>查看迁移建议 )。您应该会看到类似这样的内容:

null safety preview

  1. 选择一个文件开始。它应该看起来像这样:

opened file

  1. 在右侧查看建议的修改(匹配突出显示的字符):

proposed edits

  1. 如果发现您认为不正确的修改,请在编辑详细信息中找到根本原因:

details

您可以向下滚动以跟踪导致编辑建议的根表达式。当您在执行过程中某处发现错误的决定时,您可以如上所述Add /*?*/ hintAdd /*!*/ hint(也可以在IDE中手动添加它们)。

如果编辑看起来正确,则您无需执行任何操作

  1. 您可能需要很多 Rerun From Sources 。这将应用您添加的新提示以及对代码所做的任何其他编辑,并生成新的编辑。这样做直到所有编辑看起来正确为止。

    现在,您可能会看到提示以红色突出显示,这意味着该工具将删除提示并将其转换为?!或空白。

  2. 您可能应该在此时保存您的项目(例如git commit)。

    注意:至此,您的代码中已经添加了一堆/*?*//*!*/提示,并且尚未迁移

  3. Apply Migration :这将应用建议的修改并删除所有提示。 可能暂时让迁移工具保持打开状态。

    现在,您的代码中没有任何提示了。

  4. 测试项目(pub getflutter pub get,然后运行)。

    如果出错了,将迁移工具保持打开状态会很有帮助。
    潜在地,您想在迁移之前将您的版本恢复为原来,然后重复这些步骤。

  5. 成功!您的项目现在为空安全??