我得到以下例外:
VERBOSE-2:ui_dart_state.cc(198)] Unhandled Exception: type 'List<dynamic>' is not a subtype of type 'Map<String, dynamic>'
#0 Api.requestPosting (package:listar_flutter_pro/api/api.dart:176:31) <asynchronous suspension>
#1 HomeCubit.onLoad (package:listar_flutter_pro/blocs/home/home_cubit.dart:18:9)
<asynchronous suspension>我的理解是返回发送列表,但是要遍历每个元素,我的.map()函数需要一个Map。如何将返回类型转换为与现有函数匹配,因为我不想更改现有的.map函数。
我感谢你的每一个回答。谢谢。
更新:为了更好地理解我的问题,我必须更新我的初始描述。下面的代码只适用于我的Wordpress rest结果的1篇文章。我需要把它扩展到所有人,这是我需要帮助的地方。
Api.dart
static Future<PostModel> requestPosting() async {
final result = await httpManager.get(url: posting);
return PostModel.fromJson(result[0]);
}正如您可以看到的,结果拿起第一个项目,确定我可以更改它,然后我得到另一个帖子,但我需要所有,我不确定一个循环来迭代所有是否是处理json文件的优雅方式。
cubit.dart
final response2 =
await Api.requestPosting();
final posting = List.from(response.data ?? []).map((item) {
return PostModel.fromJson(item);
}).toList();在这里,我需要一个PostModel实例列表来将它推入我的Widget ListTitle中。
model.dart
factory PostModel.fromJson(Map<String, dynamic> json) {
return PostModel(
date: json["date"] != null ? DateTime.parse(json["date"]) : null,
id: json['id'] ?? false,
title: json['title']['rendered'] ?? false,
content: json['content']['rendered'],
data: [json]
);
}在这里,我正在设置PostingModel。我不确定这个问题是否也是为了得到我所有的职位。
我的json请求的格式与此链接中的格式类似,因此普通的json响应:https://jsonplaceholder.typicode.com/posts。
发布于 2022-07-13 17:19:45
你需要使用泛型,这样飞镖才能知道你使用的是哪种类型。对于您的函数,您可以将其更改为:
final posting = List<Map<String, dynamic>>.from(response2).map((item) {
print(response2);
return PostModel.fromJson(item);
}).toList();泛型的Api文档:https://dart.dev/guides/language/language-tour#generics
另外
您也可以这样cast:
someList.cast<Map<String, dynamic>>().map<ReturnType>(fn);下面是此方法的api:https://api.flutter.dev/flutter/dart-core/List/cast.html
https://stackoverflow.com/questions/72970013
复制相似问题