_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>'类型的子类型)

Python - TypeError: '...' 类型的对象没有 len()

TypeError:预期的 float32,得到的列表包含类型为“_Message”的张量