Flutter+GetX本地化:如何通过索引访问映射字符串条目
GetX本地化动态索引拼接Key报错的解决方法
问题场景
使用GetX实现本地化时,Text组件嵌套ListView,尝试通过索引动态获取name_1、short_desc_1这类多语言Key对应的值,触发了_CastError (Null check operator used on a null value)错误。
多语言映射定义
Map<String, Map<String, String>> get keys => { 'tr_TR': { 'name_1': 'Dünya', 'short_desc_1': 'Dünyadan', }, 'en_US': { 'name_1': 'world', 'short_desc_1': 'from world' }, 'de_DE': { 'name_1': 'world', 'short_desc_1': 'from world' }, 'fr_FR': { 'name_1': 'world', 'short_desc_1': 'from world' } };
代码对比
- 固定字符串拼接可正常取值:
TranslateStrings().keys[locale]!['name_' + '2']!.tr
- 使用索引拼接触发错误:
TranslateStrings().keys[locale]!['name_' + index.toString()]!.tr
错误原因
ListView的索引index默认从0开始,但多语言Key是从name_1开始编号的。直接用index.toString()会生成name_0这类不存在的Key,导致取值返回null,代码中的空值检查运算符!触发了空指针错误。
解决方法
通过字符串插值将索引转为从1开始的编号,匹配多语言Key的命名规则:
TranslateStrings().keys[locale]!['name_' + '${index + 1}']!.tr
内容的提问来源于stack exchange,提问作者jancooth
相关产品推荐
相关产品推荐

