Итерация по _InternalLinkedHashMap не работает - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь перебрать следующую структуру данных: {String: [{String, List<SomethingResponse>}]} где SomethingResponse = {String: dynamic}). Я создал эту модель:

class SomethingsResponse {
  final Map<String, List<SomethingResponse>> SomethingsResponse;
  SomethingsResponse({this.SomethingsResponse});

  factory SomethingsResponse.fromJson(data) {
    return SomethingsResponse(SomethingsResponse: data.map<String, List<SomethingResponse>>((String key, dynamic value) {
      final dataFromCategory = List<SomethingResponse>.from(value.map((x) => SomethingResponse.fromJson(x)));
      return MapEntry(key, dataFromCategory);
    }));
  }
}

Когда я пытаюсь получить такие ключи: data.somethingsResponse.toList(), я получаю сообщение об ошибке:

Class '_InternalLinkedHashMap 'не имеет метода экземпляра' toList '.

Я не могу выполнить итерацию по нему или действительно получить из него какие-либо данные. Что я делаю не так и как это исправить? У меня есть ощущение, что проблема в этой строке return MapEntry(key, dataFromCategory);, но я попытался создать Map несколькими разными способами, и ни один из них не сработал.

1 Ответ

1 голос
/ 03 августа 2020

Если вы обратитесь к документации для Map, вы увидите, что не происходит от Iterable и, следовательно, не может быть повторен напрямую. Я предполагаю, что это потому, что какой вы хотите перебирать: ключи, значения или пары ключ-значение?

Если вы хотите перебирать ключи, используйте Map.keys. (В вашем случае: data.somethingsResponse.keys.toList())

Если вы хотите перебирать значения, используйте Map.values.

Если вы хотите перебирать пары ключ-значение (например, MapEntry объектов), используйте Map.entries.

...