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

Flutter POST接口报错:Welcome类型需非空返回的解决方法

问题翻译与修复方案

中文问题描述

我正在开发一个实现POST接口请求的简易Flutter应用,运行时出现如下报错:

  • 错误:必须返回非空值,因为返回类型 'Welcome' 不允许为 null。lib/screen/my_homepage.dart:13
  • 'Welcome' 来自 'package:post_data_to_api/screen/model/model.dart'
  • 定义的方法:Future<Welcome> postData(String name,String job) async{

报错原因分析

submitData方法声明返回Future<Welcome>,但当前代码的成功/失败分支仅调用了welcomeFromJson解析方法,未返回对应的Welcome实例;同时错误分支中直接给welcomeFromJson传入Map,不符合该方法需要JSON字符串的参数要求。此外Model类缺失toJson方法,按钮点击时还存在变量名传参错误。

修复方案与修正代码

1. 补充Model类的toJson方法(model.dart)

import 'dart:convert';

Welcome welcomeFromJson(String str) => Welcome.fromJson(json.decode(str));

String welcomeToJson(Welcome data) => json.encode(data.toJson());

class Welcome {
    Welcome({
        required this.name,
        required this.job,
        required this.id,
        required this.createdAt,
    });

    String name;
    String job;
    String id;
    DateTime createdAt;

    factory Welcome.fromJson(Map<String, dynamic> json) => Welcome(
        name: json["name"],
        job: json["job"],
        id: json["id"],
        createdAt: DateTime.parse(json["createdAt"]),
    );

    // 补充缺失的序列化方法
    Map<String, dynamic> toJson() => {
        "name": name,
        "job": job,
        "id": id,
        "createdAt": createdAt.toIso8601String(),
    };
}

2. 修正submitData方法的返回逻辑(my_homepage.dart)

Future<Welcome> submitData(String name,String job) async{
  final response= await http.post(Uri.https('reqres.in', 'api/users'), body:{'name':name,'job':job });
  print(response.body);
  if(response.statusCode==201){
        // 解析后返回Welcome实例
        return welcomeFromJson(response.body);
  }
  else{
        // 错误分支直接构造默认Welcome实例返回,或按需自定义
        return Welcome(
          name: name,
          job: job,
          id: Random().nextInt(1000).toString(),
          createdAt: DateTime.now(),
        );
  }
}

3. 修正按钮点击的变量名错误(my_homepage.dart)

TextButton(onPressed: ()async{
  String name=nameController.text;
  String job=jobController.text; // 原代码误写为email,修正为job
  Welcome data= await submitData(name, job);
  setState(() {
    _datamodel=data;
  });
},

核心修复要点

  • 确保返回Future<Welcome>的方法,所有代码路径都必须返回Welcome实例
  • 错误分支避免给welcomeFromJson传Map,要么转成JSON字符串,要么直接构造实例
  • 补充Model类的序列化方法,避免后续功能报错
  • 修正参数传递的变量名错误,保证接口传参正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 01:39:32