首页 > 解决方案 > 空安全迁移:如何使用 intl 包迁移应用程序?

问题描述

intl: ^0.17.0在要迁移到空安全的应用程序中使用。我所有的包,包括 intl,都支持 null 安全,因此dart migrate分析工作没有问题,我可以转到迁移助手链接。

但是,当我到达那里时,我在l10n.dart每个翻译消息飞镖文件中都出现错误,如下所示。

l10n.dart 迁移错误

消息翻译文件错误

如前所述,如果我想迁移到空安全,我必须对类型Changed S to be nullableChanged type MessageLookupByLibrary

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

// 不要编辑。这是通过 package:intl/generate_localized.dart 生成的代码 // 这是一个库,它通过委托给适当的库来查找特定语言环境的消息。

// 生成的代码 - 不要手动修改

是否真的可以将使用 intl(或翻译成不同语言)的 App 迁移到 null 安全性?

如果我使用 intl 包,如何迁移到 null 安全?

标签: flutterdart-null-safetyintl

解决方案


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

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

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

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

  1. 在 master 之外生成一个新的 git 分支(我称之为 migratingToNullSafety)。当然,您不希望在迁移过程中无法在以前的版本中进行紧急更改(大师)

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

  3. 就我而言,我接受了几乎所有的 dart 迁移建议,除了变量,我很清楚它们不会以空状态到达,因此我必须使用 ! 旗帜。根据文档中的建议,审查是从那些依赖较少的文件开始对那些依赖较多的文件进行的。

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

  5. 由于我还没有迁移intl包生成的文件,我以与出现在intl 包 Null Safety 问题中的类似方式进行操作,并使用以下命令:

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).也就是说,删除 ! 在国际化的呼唤中旗帜。Cmd + Shift + H在我在 VS Code中使用的所有文件中更改它

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

就是这样。一些我认为需要几天乏味的工作的事情,却花了我几个小时。

我希望它为别人服务!


推荐阅读