Как правильно делать преобразования типов в дротике - PullRequest
0 голосов
/ 24 июня 2019

Я создаю приложение-флаттер, которое использует Dog API, но мне не удается преобразовать тип Map в Map<String, List<String>>

Я пытался использовать map.cast<String,List<String>>(), но пока не выдаетошибка при попытке вернуть результат (после указания, что функция возвращает Map<<String,List<String>>>), когда я запускаю print(map.runtimeType);, вывод равен CastMap<String, dynamic, String, List<String>>, а не Map<<String,List<String>>>

Future<Map<String,List<String>>> getbreeds() async{
    var json=await http.get('https://dog.ceo/api/breeds/list/all');
    var linkedHashMap =Map.from(jsonDecode(json.body)) ;
    var map=linkedHashMap['message'].cast<String,List<String>>();
    print(map.runtimeType);
    return map;
  }

Я ожидаювывод print(map.runtimeType); будет Map<<String,List<String>>>, но вместо этого я получаю CastMap<String, dynamic, String, List<String>>

1 Ответ

2 голосов
/ 24 июня 2019

A CastMap<String, dynamic, String, List<String>> является подтипом Map<String, List<String>>, поэтому здесь нет проблем.Это сопоставимо с ситуацией, когда вы указываете тип возвращаемого значения num, а конкретное возвращаемое вами значение - int.

. Проблема, с которой вы столкнетесь, состоит в том, что при чтении значения изкарта у вас будет List<dynamic> вместо List<String>.Вам также необходимо изменить типы времени выполнения для внутренних значений.

var map = (linkedHashMap['message'] as Map).map((key, value) => MapEntry<String, List<String>>(key, List.from(value));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...