簡體   English   中英

Dart:無法訪問嵌套的地圖對象

[英]Dart: Can't access to nested map object

我正在創建 Flutter 應用程序,但無法訪問dart嵌套地圖對象。 我的代碼如下。

 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]這部分。 它說

不能將參數類型“String”分配給參數類型“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”鍵的地圖。 在此之后,您可以使用此功能來獲取翻譯:

    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'));

查看您的數據格式:

{
     "Parent": {
         "key": "key"
     }
 }

例如,它應該是這樣的:

{"a": {"a": "4"}, "b": {"b": "5"}}

這行你在做什么: MapEntry(key, value.toString()); 是,您正在將內部映射 ( {"a": "4"} ) 轉換為String 這就是您看到該錯誤的原因。

嘗試從MapEntry(key, value.toString())刪除.toString() MapEntry(key, value.toString())

如果這不起作用,請告訴我。

_localizedValues = jsonMap.forEach((key, value) {
  return MapEntry(key, value.toString());
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM