我是Flutter的新手,我尝试运行一个github项目,但得到类似List动态的错误不是List int where类型的子类型.Github Link
错误行
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
}
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激,谢谢你提前.
Edi*_*Edi 32
一种更优雅的方式也可以是初始化新的 List 而不是强制转换。
var genreIdsFromJson = jsonMap['genre_ids'];
List<int> genreIdsList = new List<int>.from(genreIdsFromJson);
// then you can use gendreIdsList to the mapping function
// ...
gendreIds = genreIdsList
...
Run Code Online (Sandbox Code Playgroud)
更新: 根据文档
`` 所有元素都应该是 E 的实例。可迭代元素本身可以具有任何元素类型,因此此构造函数可用于向下转换 List,例如:
List<SuperType> superList = ...;
List<SubType> subList =
new List<SubType>.from(superList.whereType<SubType>());
Run Code Online (Sandbox Code Playgroud)
当growable 为true 时,此构造函数创建一个可增长列表;否则,它返回一个固定长度的列表。``
更新:为什么初始化比投射更好?(优点缺点)
显式转换(Casting):该过程通常与信息丢失或类型之间转换失败有关
创建新的不可变元素比强制转换要好。在编译时揭示与类型相关的错误,更易读的代码,更可维护的代码,更好的提前 (AOT) 编译。
即最好尝试使用预定义的方法解析或解析值,因为如果类型不匹配,则该值将为空。另一方面,显式转换对象或值可能会在运行时引发错误。
Gün*_*uer 31
更改
genreIds = jsonMap["genre_ids"];
Run Code Online (Sandbox Code Playgroud)
至
genreIds = jsonMap["genre_ids"].cast<int>();
Run Code Online (Sandbox Code Playgroud)
JSON映射或列表中的类型没有具体的泛型类型.
genreIds要求List<int>不是List(或List<dynamic>),因此您需要在分配之前将值带到所需类型.
如果您之前没有看到相同代码的此错误,那么可能是因为您升级到Dart版本而--preview-dart-2成为默认版本(之前是选择加入)
更短的处理方法是
genreIds = (jsonMap["genre_ids"] as List)?.map((e) => e as int)?.toList();
Run Code Online (Sandbox Code Playgroud)
给出所有的解决方案。我想添加许多其他不同的方法来实现相同的目标
List<int> genreIds = List<int>.from(source);List<int> ints = List.castFrom<dynamic, int>(source);List<int> ints = source.cast<int>();List<int> ints = source.map((e) => e as int).toList();对于这个用例,您可以编写:
List<int> genreIds = List<int>.from(jsonMap["genre_ids"]);
希望能帮助到你!:)
| 归档时间: |
|
| 查看次数: |
10182 次 |
| 最近记录: |