当前位置: 首页 > 知识库问答 >
问题:

类型“List”不是类型“List”的子类型,其中

滑乐逸
2023-03-14

我是一个新手,我尝试运行一个GitHub项目,但遇到了一个错误,比如类型ListDynamic不是类型ListInt的子类型。Github链接

误差线

List<int> genreIds;

MediaItem._internalFromJson(Map jsonMap, {MediaType type: MediaType.movie})
      :
        type = type,
        id = jsonMap["id"].toInt(),
        voteAverage = jsonMap["vote_average"].toDouble(),
        title = jsonMap[(type == MediaType.movie ? "title" : "name")],
        posterPath = jsonMap["poster_path"] ?? "",
        backdropPath = jsonMap["backdrop_path"] ?? "",
        overview = jsonMap["overview"],
        releaseDate = jsonMap[(type == MediaType.movie
            ? "release_date"
            : "first_air_date")],

        genreIds = jsonMap["genre_ids"];//in this line


}

以上代码文件

如有任何帮助,我们将不胜感激,并提前向您表示感谢。

共有3个答案

燕凯旋
2023-03-14

较短的处理方法是

genreIds = (jsonMap["genre_ids"] as List)?.map((e) => e as int)?.toList();
杜联
2023-03-14

一个更优雅的方法也可以是初始化新列表,而不是强制转换。

var genreIdsFromJson = jsonMap['genre_ids'];
List<int> genreIdsList = new List<int>.from(genreIdsFromJson);

// then you can use gendreIdsList to the mapping function
// ...

gendreIds = genreIdsList
...

更新:根据文件

"所有元素都应该是E的实例。可迭代的元素本身可能具有任何元素类型,因此可以使用此构造函数向下转换List,例如:

List<SuperType> superList = ...;
List<SubType> subList =
    new List<SubType>.from(superList.whereType<SubType>());

当可增长为true时,此构造函数创建可增长列表;否则,它将返回一个固定长度的列表``

更新:为什么初始化比强制转换更好?(赞成/反对)

显式转换:这个过程通常与信息丢失或类型之间转换失败有关

创建新的不可变元素比铸造要好。在编译时揭示与类型相关的错误,更可读的代码,更可维护的代码,更好的提前(AOT)编译。

i、 最好尝试解析或使用预定义的方法解析一个值,因为如果类型不匹配,该值将为null。另一方面,显式强制转换对象或值可能在运行时抛出错误。

华安民
2023-03-14

改变

genreIds = jsonMap["genre_ids"];

genreIds = jsonMap["genre_ids"].cast<int>();

JSON映射或列表中的类型没有具体的泛型类型genreIds需要一个列表

如果您之前没有看到同一代码出现此错误,那么可能是因为您升级到了Dart版本,其中--preview-Dart-2成为默认版本(以前是opt-in)

 类似资料:
  • 我从Firestore示例中复制了一段代码: 但是我得到了这个错误 这里出了什么问题?

  • 我正在开发一个依靠API REST调用的flutter应用程序。来自API的响应有点复杂。当调用我的API(例如:api/产品)时,我可以从日志中看到响应:但是我有这个错误: 类型列表 StackTrace: [更新]:退货产品响应。fromJson(response)而不是response ProductsRespository: ProductsBloc: 回应: ApiProvider: 模

  • 我是个新手。当我运行代码时,我得到一个错误:“Future”类型不是“List”类型的子类型。如果我改变屏幕,我将得到错误:NoSuchMethodError:方法“map”被调用为null。我怎样才能解决它?谢谢你帮助我。

  • 我正在学习飞镖和颤振。现在,我尝试将JSON作为一种持久性方法。我犯了很多错误,都是关于类型和内容的。这是我遇到的最新错误:

  • 我正在解码一个响应体,我得到了错误: 我正在解析JSON对象的JSON数组,其中一个字段也是对象列表,我怀疑我的问题源于此。我也在使用json_serializable库。下面是我的代码,我省略了一些字段,更改了一些变量名称,但它代表相同的代码: 从。json_serializable生成的g dart文件(将编码部分复制): 这是我未来的职能:

  • 当我运行我的代码时,它返回了错误:类型“Future”不是类型转换中“List”类型的子类型。我该如何修复它?它是在我从Firebase获取数据之前匹配引擎运行的?我试图将wait添加到List demoProfiles=getdata()作为wait List;但它返回错误。我真的是新手,这个问题已经困扰了我一整天。请帮帮我