Проблемы с сильным режимом в 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
,