You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter使用http包获取后端用户数据返回null,请求排查

解决Flutter获取用户API返回null的问题

问题排查与修复步骤

1. 补全服务方法的错误分支日志

你的RemoteService.getUsers()仅在状态码200时返回数据,其他场景无返回值会默认返回null。先添加日志确认请求真实状态:

Future<List<UserModel>?> getUsers() async {
  final response = await http.get(Uri.parse("http://192.168.1.5:3000/user"),
      headers: headers);
  print('Response status: ${response.statusCode}');
  print('Response body: ${response.body}'); // 关键:打印后端实际返回内容
  if (response.statusCode == 200) {
    var json = response.body;
    return userModelFromJson(json);
  } else {
    print('请求失败,状态码:${response.statusCode}');
    return null;
  }
}

通过这一步能确认:请求是否真的成功,后端返回的JSON结构是否符合预期。

2. 匹配JSON结构与模型解析逻辑

  • 确认后端返回格式:你的userModelFromJson直接解析JSON数组,如果后端返回的是包裹在对象中的数组(如{"data": [用户列表]}),需修改解析逻辑:
    List<UserModel> userModelFromJson(String str) =>
        List<UserModel>.from(json.decode(str)["data"].map((x) => UserModel.fromJson(x)));
    
  • 处理字段类型不兼容:比如后端phone返回字符串、status返回数字0/1,而模型定义为int/bool,会导致解析失败。修改fromJson做兼容:
    factory UserModel.fromJson(Map<dynamic, dynamic> json) => UserModel(
          id: json["id"] as int,
          name: json["name"] as String,
          password: json["password"] as String,
          phone: int.parse(json["phone"].toString()), // 字符串转int
          idRelation: json["idRelation"] as int,
          relation: json["relation"] as String,
          status: json["status"] == 1 || json["status"] == true, // 兼容数字/布尔
          photo: json["photo"] as String,
          age: json["age"] as int,
        );
    

3. 检查网络权限与HTTP访问限制

  • Android:在android/app/src/main/AndroidManifest.xml添加网络权限:
    <uses-permission android:name="android.permission.INTERNET" />
    
  • iOS:因使用HTTP协议,需在ios/Runner/Info.plist添加允许非HTTPS请求的配置:
    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>
    

4. 确认设备与后端同网络

你的API地址是局域网IP192.168.1.5,需确保运行Flutter的设备(模拟器/真机)和后端服务器在同一局域网内,否则会请求失败。

验证流程

修改代码后重新运行APP,查看控制台打印的状态码和返回体:

  • 若状态码非200:排查网络连接、API地址正确性
  • 若状态码200但解析失败:根据返回的JSON结构调整模型解析逻辑
  • 若解析成功:users会正常赋值,不再返回null

内容的提问来源于stack exchange,提问作者sameh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 21:11:39