Flutter中FutureBuilder报Model无length getter/打印显示Instance of model如何解决?
问题原因
你遇到的报错是两个问题共同导致的:
- 网络请求方法没有将返回的json数据转为
TopicsModel实例,直接返回了Map类型数据 TopicsModel本身没有length属性,你需要访问它内部的topics列表属性才能拿到长度和对应下标数据
修复步骤
1. 修改getFavTopics方法的返回逻辑
原来的代码里,你直接返回了解析后的data字段Map,需要用TopicsModel.fromJson把Map转为实例:
if (jsonData['status'] == 'success') { print("topicssssssssssssssss"); print(jsonData); // 把原来的return json.decode(response.body)['data']改成下面这行 return TopicsModel.fromJson(jsonData['data']); }
2. 修改FutureBuilder里的列表取值逻辑
你之前直接对TopicsModel实例调用length和下标索引,需要改成访问内部的topics列表:
return ListView.builder( scrollDirection: Axis.horizontal, shrinkWrap: true, // 原来的projectSnap.data.length改成下面的写法 itemCount: projectSnap.data.topics.length, itemBuilder: (context, index) { return new ChoiceChip( pressElevation: 0.0, selectedColor: settingRepo .setting .value .buttonColor, selected: false, backgroundColor: Colors.white, // 原来的projectSnap.data[index].name改成下面的写法 label: Text(projectSnap.data.topics[index].name)); }, );
可选检查
你贴的接口返回JSON存在语法错误:比如artist、image字段的值没有加引号,时间字段里的冒号多出来了,如果是真实接口返回的内容,需要先让后端修正返回格式,否则json解析会直接报错。
内容的提问来源于stack exchange,提问作者عثمان غني
相关产品推荐
相关产品推荐

