flutter - 空安全迁移:如何使用 intl 包迁移应用程序?
问题描述
我intl: ^0.17.0
在要迁移到空安全的应用程序中使用。我所有的包,包括 intl,都支持 null 安全,因此dart migrate
分析工作没有问题,我可以转到迁移助手链接。
但是,当我到达那里时,我在l10n.dart
每个翻译消息飞镖文件中都出现错误,如下所示。
如前所述,如果我想迁移到空安全,我必须对类型Changed S to be nullable
和Changed type MessageLookupByLibrary
但是,这些文件是自动生成的,并且有一条明确的消息说明它们不得被修改。
// 不要编辑。这是通过 package:intl/generate_localized.dart 生成的代码 // 这是一个库,它通过委托给适当的库来查找特定语言环境的消息。
// 生成的代码 - 不要手动修改
是否真的可以将使用 intl(或翻译成不同语言)的 App 迁移到 null 安全性?
如果我使用 intl 包,如何迁移到 null 安全?
解决方案
我想与您分享我使用一个相对较大的应用程序迁移到 Null Safety 的经验,该应用程序使用该intl
包来处理不同的语言。我希望它为别人服务。
在我不得不承认我害怕进行此迁移之前,因为在将所有依赖项更新为空安全性并且一旦我运行 dart migrate 之后,我遇到了很多错误并建议进行更改(173 个文件中超过 1000 个)预示着乏味的未来。
在这些变化中,我最关心的就是这个问题中出现的关于修改包自动生成的文件不方便的问题。
按照这个想法顺序,我将告诉你我为进行迁移而执行的过程。
在 master 之外生成一个新的 git 分支(我称之为 migratingToNullSafety)。当然,您不希望在迁移过程中无法在以前的版本中进行紧急更改(大师)
dart migrate
按照@AmanVerma 在评论中的建议运行并取消选择生成的文件就我而言,我接受了几乎所有的 dart 迁移建议,除了变量,我很清楚它们不会以空状态到达,因此我必须使用 ! 旗帜。根据文档中的建议,审查是从那些依赖较少的文件开始对那些依赖较多的文件进行的。
应用迁移后,您可能会在编辑器中看到更多错误。就我而言,它们相对容易手动更正。
由于我还没有迁移
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
一旦它被执行,就会出现很多错误,但很容易纠正,因为在我的情况下唯一需要的就是改变
S.of(context)!.
,S.of(context).
也就是说,删除 ! 在国际化的呼唤中旗帜。Cmd + Shift + H
在我在 VS Code中使用的所有文件中更改它当我不再有错误时,我在模拟器中运行应用程序并正确打开。我进行了测试,主要是在我知道我可能会遇到 null 问题并进行修复的地方。
就是这样。一些我认为需要几天乏味的工作的事情,却花了我几个小时。
我希望它为别人服务!
推荐阅读
- c# - 并行读取 Azure blob 文件的最快方法
- excel - 如何从另一个excel表中的给定引用中减去值
- python-3.x - 有什么方法可以改善笛卡尔虹膜图像中瞳孔区域的轮廓检测?
- python-3.x - 在 Python 中将多个文本文件读取到 2D numpy 数组
- reactjs - 如何使用 Context API 访问状态
- laravel - 为什么 Route::resource() 在删除/更新控制器中某些方法的名称后不更新路由
- java - 如何使用线程池在非 GUI 线程中运行任务
- node.js - 使用套接字连接到节点服务器时出错
- python - 如何修复'用户输入(“用户:”)语法错误'
- java - ARCore 是否有像 ARKit 那样的会话委托方法?