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

Flutter API网络请求代码运行报错,求错误排查与开发思路指导

代码存在的错误及说明

1. 字段类型不匹配

你调用的接口返回的userId字段为int类型,但User模型中将userId定义为String类型,JSON解析时会触发类型不匹配异常。

2. 空安全规则不兼容

在开启空安全的Dart版本中,User类的所有属性均声明为非空类型,但构造函数参数都是可选参数,没有加required修饰也没有设置默认值,User user = User() 这段初始化代码不符合空安全校验规则,会直接编译报错。同时你在视图层写的user == null判断永远不会生效,因为初始化时你给user赋值了空的User实例而非null,加载进度条永远不会展示。

3. 方法返回值类型缺失

getUser方法没有声明返回值类型,默认返回dynamic类型,后续解析异常时容易触发隐式类型转换错误。

4. 缺少异常处理逻辑

没有对网络请求、JSON解析过程做异常捕获,一旦网络请求失败或者返回非200状态码,代码会直接崩溃。


修复后的代码示例

修复后的User模型

class User{
  int? userId;
  int? id;
  String? title;
  String? body;

  User({this.userId,this.id,this.title,this.body});

  factory User.fromJson(Map<String, dynamic> parsedJson){
    return User(
      userId: parsedJson["userId"],
      id: parsedJson["id"],
      title: parsedJson["title"],
      body: parsedJson["body"]
    );
  }
} 

修复后的服务层代码

Future<User?> getUser() async{
  try {
    var response = await http.get(Uri.parse("https://jsonplaceholder.typicode.com/posts/1"));
    if (response.statusCode == 200) {
      final jsonDecode = json.decode(response.body);
      return User.fromJson(jsonDecode);
    }
    return null;
  } catch(e) {
    print("请求或解析错误:$e");
    return null;
  }
}

修复后的主界面代码

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  User? user;
  @override
  void initState() {
    super.initState();
    getUser().then((value) {
      setState(() {
        user = value;
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: user == null
            ? const CircularProgressIndicator()
            : Center(
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                  children: [
                    Text("${user?.id}"),
                    Text("${user?.title}"),
                    Text("${user?.userId}"),
                    Text("${user?.body}"),
                  ],
                ),
            ),
      ),
    );
  }
}

同类问题排查思路

  • 优先查看控制台报错信息,报错会明确标注错误类型和触发位置,可直接定位问题代码段。
  • 核对接口返回的JSON结构和字段类型,和本地模型定义逐一比对,确保字段名、字段类型完全匹配。
  • 检查空安全相关声明是否正确,可空类型和非空类型的使用符合Dart语法规范。
  • 网络请求类逻辑必须增加异常捕获逻辑,方便排查网络层面的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 11:27:01