gpt4 book ai didi

flutter - Dart:无法访问嵌套的 map 对象

转载 作者:行者123 更新时间:2023-12-03 03:23:10 28 4
gpt4 key购买 nike

我正在创建Flutter应用程序,无法访问dart中的嵌套 map 对象。
我的代码如下。

 Map<String, String> _localizedValues;

Future<bool> load() async {
// Load a language JSON file from the 'i18n' folder
String value = await rootBundle.loadString('i18n/${locale.languageCode}.json');
Map<String, dynamic> jsonMap = jsonDecode(value);
_localizedValues = jsonMap.map((key, value) {
return MapEntry(key, value.toString());
});
return true;
}

String translate(String parent, String key) {
// Returns a localized text
return _localizedValues[parent][key];
}

并且错误发生在 [key]这部分。它说

The argument type 'String' can't be assigned to the parameter type 'int'.



JSON文件就是这样。
{
"Parent": {
"key": "key"
}
}

我有什么错吗?

最佳答案

我将针对此问题提出一个不同的解决方案,使您可以更轻松地使用它。
您可以在使用多维json对象之前先对其进行展平。

Map<String, String> _localizedValues;

Map flattenTranslations(Map<String, dynamic> json, [String prefix = '']) {
final Map<String, String> translations = {};
json.forEach((String key, dynamic value) {
if (value is Map) {
translations.addAll(flattenTranslations(value, '$prefix$key.'));
} else {
translations['$prefix$key'] = value.toString();
}
});
return translations;
}

Future<bool> load() async {
// Load a language JSON file from the 'i18n' folder
String value = await rootBundle.loadString('i18n/${locale.languageCode}.json');
Map<String, dynamic> jsonMap = jsonDecode(value);
_localizedValues = flattenTranslations(jsonMap);
return true;
}

您将获得一个简单的Map对象,该对象将包含json的所有键,每个子树键均以其父级键作为前缀。

例如:
    {
"Parent": {
"key": "key",
"key1": "key",
"key2": "key",
"key3": "key",
"someOtherKey": {
"key213": "keyeye",
"oneMoreLevel": {
"key123412": "asdasdasd"
}
}
}
}

将转换为包含“Parent.someOtherKey.oneMoreLevel.key123412”键的 map 。
之后,您可以使用以下功能获取翻译:
    String translate(String key) {
// Returns a localized text or KEY if there's no localization
return _localizedValues[key] ?? key;
}

print(translate('Parent.someOtherKey.oneMoreLevel.key123412'));

关于flutter - Dart:无法访问嵌套的 map 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60924143/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com