_TypeError(类型 '_InternalLinkedHashMap<String, dynamic>' 不是类型 'Iterable<dynamic>' 的子类型) F
Posted
技术标签:
【中文标题】_TypeError(类型 \'_InternalLinkedHashMap<String, dynamic>\' 不是类型 \'Iterable<dynamic>\' 的子类型) Flutter【英文标题】:_TypeError (type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'Iterable<dynamic>') Flutter_TypeError(类型 '_InternalLinkedHashMap<String, dynamic>' 不是类型 'Iterable<dynamic>' 的子类型) Flutter 【发布时间】:2020-11-25 11:14:22 【问题描述】:在从 api 获取单个用户时,我得到了标题中提到的上述错误,我的回复是
"success":true,"data":"id":4,"user_id":"4","email":"xyz@example.com","secondaryPhone":"+2515465465465","message":"User retrieved successfully."
我的模型课
class UsersModel(this.id, this.user_id, this.email, this.secondaryPhone);
我的api调用如下
class UsersApi
Future<List<UsersModel>> fetchUsersById(String uId) async
String singleUser = CallApi.url+CallApi.sinleUser+uId;
Map<String,String> headers =
'Accept' : 'application/json';
var response = await http.get(singleUser ,headers:headers);
List<UsersModel> users= List<UsersModel>();
if(response.statusCode == 200)
var jsonData = jsonDecode(response.body);
var data = jsonData["data"];
for( var userr in data ) // error comes on this line
UsersModel user = UsersModel(
id:item["id"].toString(),
user_id:item["user_id"].toString(),
email:item["email"].toString(),
secondaryPhone:item["secondaryPhone"].toString(),
);
users.add(user);
return users;
如有任何帮助,我们将不胜感激。
【问题讨论】:
【参考方案1】:您显示的 JSON 不包含任何列表。您暗示当您获取多个用户时,此代码可以正常工作,可能是因为当您获取多个用户时,jsonData["data"]
实际上返回了 List
。
要解决这个问题,您应该检查jsonData["data"]
的类型。如果是List
,则执行您当前拥有的操作,如果不是,则以不同的方式处理它。
例如
Future<List<UsersModel>> fetchUsersById(String uId) async
String singleUser = CallApi.url+CallApi.sinleUser+uId;
Map<String,String> headers =
'Accept' : 'application/json';
var response = await http.get(singleUser ,headers:headers);
List<UsersModel> users= List<UsersModel>();
if(response.statusCode == 200)
var jsonData = jsonDecode(response.body);
var data = jsonData["data"];
//Handle data differently if it's a Map
if(data is Map)
UsersModel user = UsersModel(
id:item["id"].toString(),
user_id:item["user_id"].toString(),
email:item["email"].toString(),
secondaryPhone:item["secondaryPhone"].toString(),
);
users.add(user);
return users;
//Otherwise, do what you currently have
for( var userr in data )
UsersModel user = UsersModel(
id:item["id"].toString(),
user_id:item["user_id"].toString(),
email:item["email"].toString(),
secondaryPhone:item["secondaryPhone"].toString(),
);
users.add(user);
return users;
【讨论】:
以上是关于_TypeError(类型 '_InternalLinkedHashMap<String, dynamic>' 不是类型 'Iterable<dynamic>' 的子类型) F的主要内容,如果未能解决你的问题,请参考以下文章
/writeReview/1 __str__ 处的 Django 模型 TypeError 返回非字符串(int 类型)
_TypeError(类型 'List<dynamic>' 不是类型 'Map<String, dynamic> 的子类型
Flutter 错误:_TypeError(类型“Null”不是“FutureOr<Database>”类型的子类型)
_TypeError(类型'List<dynamic>'不是'Map<String,dynamic>'类型的子类型)