Dart 2.0中强模式的问题

时间:2018-06-20 12:32:02

标签: json parsing dart flutter dart-2

我目前正在学习Flutter和Dart,以尝试扩展我的知识。 我遇到的问题是由于从Dart 1.0更改为Dart 2.0,导致我认为问题在于更改类型模式。我的代码:

我正在使用具有以下功能的Spotify库:

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

来自ArtistsSimpleMapper类的parse方法如下:

/// 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)
                         ^

帖子阅读:link

1 个答案:

答案 0 :(得分:0)

该错误基本上是说您在dynamic中的List<dynamic>不是 Map<String, dynamic> 类型。

我无法访问您的“ Spotify库” ,即我无法在您的map['artists'] {中查找元素的类型{1}} 确实是。

如果没有特定类型,则元素由不同类型组成。您必须通过重组List函数并将其参数更改为parse来解决这个问题。