Проблемы с сильным режимом в Dart 2.0

В настоящее время я изучаю Флаттер и Дарт, чтобы попытаться расширить свои знания. Проблема, с которой я столкнулся, связана с переходом с Dart 1.0 на Dart 2.0, что заставляет меня думать, что проблема заключается в смене режима типа. Мой код:

Я играю с библиотекой Spotify, которая делает это:

object.artists = (map['artists'] as List<dynamic>)
    ?.map(ArtistSimpleMapper.parse)
    ?.toList();

Метод parse из класса ArtistsSimpleMapper имеет следующий вид:

/// Converts a Map to an instance of Image.
static Image parse(Map<String, dynamic> map) {
  if (map == null) return null;
  final Image object = new Image();
  object.height = map['height'];
  object.width = map['width'];
  object.url = map['url'];
  return object;
}

Мой самый успешный подход заключается в использовании .cast<dynamic>()код потерпел неудачу во время выполнения, а не во время компиляции, разумеется, я совершенно заблудился о том, как следовать или как решить эту проблему.

Ошибка:

Error: A value of type '(dart.core::Map<dart.core::String, dynamic>) →     spotify::ArtistSimple' can't be assigned to a variable of type '(dynamic) → dart.core::Object'.

?.map(ArtistSimpleMapper.parse)
                         ^

Сообщение прочитано: ссылка

1 ответ

Ошибка в основном говорит о том, что ваш dynamic в List<dynamic> не тип Map<String, dynamic>,

У меня нет доступа к вашей "библиотеке Spotify", т.е. я не могу посмотреть, какой тип элементов в вашем map['artists']List на самом деле.

Если нет определенного типа, то элементы состоят из разных типов. Вам придется учитывать это путем реструктуризации parse функция и изменение его параметра на dynamic,

Другие вопросы по тегам