首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >List<dynamic>不是'Map<String,dynamic>‘类型的子类型

List<dynamic>不是'Map<String,dynamic>‘类型的子类型
EN

Stack Overflow用户
提问于 2022-07-13 16:59:58
回答 3查看 159关注 0票数 0

我得到以下例外:

代码语言:javascript
复制
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

代码语言:javascript
复制
  static Future<PostModel> requestPosting() async {
    final result = await httpManager.get(url: posting);
    return PostModel.fromJson(result[0]);
  }

正如您可以看到的,结果拿起第一个项目,确定我可以更改它,然后我得到另一个帖子,但我需要所有,我不确定一个循环来迭代所有是否是处理json文件的优雅方式。

cubit.dart

代码语言:javascript
复制
 final response2 =
        await Api.requestPosting(); 
final posting = List.from(response.data ?? []).map((item) {
        return PostModel.fromJson(item);
      }).toList();

在这里,我需要一个PostModel实例列表来将它推入我的Widget ListTitle中。

model.dart

代码语言:javascript
复制
 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

EN

Stack Overflow用户

发布于 2022-07-13 17:19:45

你需要使用泛型,这样飞镖才能知道你使用的是哪种类型。对于您的函数,您可以将其更改为:

代码语言:javascript
复制
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

代码语言:javascript
复制
someList.cast<Map<String, dynamic>>().map<ReturnType>(fn);

下面是此方法的api:https://api.flutter.dev/flutter/dart-core/List/cast.html

票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72970013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档