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
相关产品推荐
相关产品推荐

