flutter gen-l10n与l10n.yaml生成代码空安全差异如何修复?
差异产生原因
这个差异是Flutter的flutter gen-l10n工具的nullable-getter配置项默认值不同导致的:
- 手动执行
flutter gen-l10n命令时,使用的是该参数的旧默认值false,此时生成的of方法会直接返回非可选的AppLocalizations类型,方法内部已经内置了非空断言,调用时不需要额外加!。 - 使用
l10n.yaml配置文件时,高版本Flutter SDK中nullable-getter的默认值已经调整为true,你没有在配置文件中显式覆盖该参数,所以生成的of方法返回可选类型AppLocalizations?,要求调用方自行处理空值情况,IDE因此会提示需要添加!或者空安全调用符。
修复方法
不需要修改现有业务代码,只要在你的l10n.yaml配置文件中新增一行配置,显式关闭nullable getter即可:
arb-dir: lib/l10n template-arb-file: app_en.arb nullable-getter: false # 新增该配置项
修改配置保存后重新执行flutter run,工具会自动重新生成本地化代码,此时of方法就会恢复为返回非可选类型,原有AppLocalizations.of(context).homeScreen的写法即可正常运行无需修改。如果修改后仍有报错,可以执行flutter clean清理缓存后重新运行项目。
内容的提问来源于stack exchange,提问作者Thomas W.
相关产品推荐
相关产品推荐

