空安全迁移:如何迁移带有 intl 包的应用程序?

Null Safety Migration: How to migrate an App with intl package?

我在要迁移到空安全的应用程序中使用 intl: ^0.17.0。我所有的包,包括 intl,都支持空安全,所以 dart migrate 分析没有问题,我可以去迁移助手 link.

然而,当我到达那里时,l10n.dart 和每个翻译消息 dart 文件都出现错误,如下所示。

如前所述,如果我想迁移到空安全,我将不得不对 Changed S to be nullableChanged type MessageLookupByLibrary

类型进行一些更正

但是,这些文件是自动生成的,并且有一条明确的消息表明不得修改它们。

// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart // This is a library that looks up messages for specific locales by // delegating to the appropriate library.

// GENERATED CODE - DO NOT MODIFY BY HAND

是否真的可以将使用国际(或翻译成不同语言)的应用程序迁移到空安全?

如果我使用的是 intl 包,如何迁移到 null safety?

我想与您分享我使用 intl 包处理不同语言的相对较大的应用程序迁移到 Null Safety 的经验。我希望它能为别人服务。

之前我不得不承认我害怕进行此迁移,因为在将所有依赖项更新为 null safety 并且一旦我 运行 飞镖迁移后,我得到了很多错误和建议的更改(更多超过 173 个文件中的 1000 个),它预示着一个乏味的未来。

在这些变化中,我最关心的是这个问题中出现的关于修改包自动生成的文件的不便

按照这个想法顺序,我将告诉您我进行迁移的过程。

  1. 生成一个new git b运行ch 除了master(我称之为migratingToNullSafety)。当然,您不希望在没有对以前的版本 (master) 进行紧急更改的情况下被留在迁移的中间

  2. 运行 dart migrate 并按照@AmanVerma 在评论中的建议取消选择生成的文件

  3. 在我的例子中,我接受了几乎所有的 dart 迁移建议,除了变量,我很清楚它们不会以空状态到达,因此我不得不使用 !旗帜。按照文档中的建议,审查是从依赖性较低的文件开始,到依赖性较高的文件。

  4. 应用迁移后,您可能会在编辑器中看到更多错误。在我的例子中,它们相对容易手动更正。

  5. 因为我还没有迁移由 intl 包生成的文件,所以我使用与 intl package Null Safety problems 中出现的类似的方式继续执行以下命令:

flutter pub global list // to check the version

flutter pub global activate intl_utils 2.4.1 // to update to the latest version
  1. 一旦执行,就会出现很多错误,但很容易改正,因为在我的情况下唯一需要做的就是将 S.of(context)!. 更改为 S.of(context). 即删除 !国际化呼唤内旗。要在所有文件中更改它,我在 VS Code

    中使用了 Cmd + Shift + H
  2. 当我不再有错误时,我 运行 模拟器中的应用程序并正确打开。我 运行 进行了测试,主要是在我知道我可能有 null 问题的地方进行了修复。

就是这样。原本以为要花好几天时间的繁琐工作,结果我花了几个小时。

我希望它对其他人有用!!