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

2024-06-18

我有一个之前编写的 Flutter 应用程序Dart 中引入了 null 安全性 https://stackoverflow.com/questions/60068435/what-is-nullability-in-dart-non-nullable-by-default.

我听说有一个Null 安全迁移工具。我如何使用它来转换我的代码NNBD https://stackoverflow.com/questions/60068435/what-is-null-safety-in-dart默认情况下不可为空?


你至少需要 Dart2.9。在撰写本文时,您可以使用2.9.0-10.0.dev,即将以下 SDK 约束放入您的pubspec.yaml:

environment:
  sdk: ">=2.9.0-10.0.dev <3.0.0"

Hints (/*?*/ & /*!*/)

The /*?*/暗示意味着某事应该明确地 be nullable.
/*!*/意味着某事应该是不可为空.

在使用 NNBD 之前,您已经可以手动添加这些提示。否则,您可以在迁移期间使用该工具添加它们(见下文)。

Edits

?, !, and _ edits.
?制作一个类型nullable迁移后。_做到了不可为空(意味着没有字符被更改,因为不可为空的是default).
!做出一个表达不可为空.

这些编辑可在迁移工具中预览。

使用工具

Dart 2.9附带an nnbd_migration package https://github.com/dart-lang/sdk/tree/master/pkg/nnbd_migration.

该工具可用于交互地转换代码至 NNBD。

我将涵盖自述文件中描述的迁移步骤 https://github.com/dart-lang/sdk/tree/master/pkg/nnbd_migration并尝试简化它们:

  1. 在命令行中转到您的项目并运行pub get or flutter pub get使用颤振时。 (请注意,在撰写本文时,尚未支持 Flutter SDK)

  2. Run dart migrate。 (请注意,在撰写本文时,我需要使用--skip-pub-outdated)

  3. 等待分析和迁移完成然后查看迁移建议通过在浏览器中打开您在命令行中看到的 URL(格式为http://localhost:<port>/<project path>?authToken=<token>)。你应该看到这样的东西:

  4. 首先选择一个文件。它应该看起来像这样:

  5. 查看右侧建议的编辑(匹配突出显示的字符):

  6. 如果您发现您认为不正确的编辑,找到根本原因 in 编辑详细信息:

    您可以向下滚动以跟踪导致编辑提案的根表达式。当你一路上发现一些错误的决定时,你要么Add /*?*/ hint or Add /*!*/ hint如上所述(您也可以在 IDE 中手动添加它们)。

    If an 编辑看起来正确, 你做不需要做任何事.

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

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

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

    注意:此时,您的代码添加了一堆/*?*/ and /*!*/提示和尚未迁移.

  9. Apply Migration:这将应用建议的编辑并删除所有提示。

    可能暂时让迁移工具保持打开状态。

    现在,您的代码中不再有任何提示。

  10. 测试您的项目(pub get or flutter pub get然后运行)。

    如果有什么出错,保持迁移工具打开会很有帮助。 您可能希望将版本恢复到迁移之前的版本并重复这些步骤。

  11. Success!您的项目现在是空安全的????????

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 Dart 代码迁移到不可空 (NNBD)? 的相关文章

随机推荐