【问题标题】:_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;
}


}

如有任何帮助,我们将不胜感激。

【问题讨论】:

    标签: json laravel api flutter flutter-web


    【解决方案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;
    }
    

    【讨论】:

      猜你喜欢
      • 2021-11-06
      • 2021-06-19
      • 2021-01-02
      • 2022-07-22
      • 2019-01-03
      • 2020-11-30
      • 2022-11-11
      • 2022-10-18
      • 1970-01-01
      相关资源
      最近更新 更多