如何在颤振发布方法中修复“未处理的异常:用于空值的空检查运算符”
Posted
技术标签:
【中文标题】如何在颤振发布方法中修复“未处理的异常:用于空值的空检查运算符”【英文标题】:How to fix 'Unhandled Exception: Null check operator used on a null value' in flutter post method 【发布时间】:2021-11-21 12:10:40 【问题描述】:我是新来的颤振。我正在尝试了解flutter rest api。 当我尝试使用 fullter api(使用 http dart 包)发布数据时,它显示了这个错误。
我试图通过对我的代码进行一些更改来修复它,但我仍然无法修复它。这是我尝试执行的代码。
型号
import 'dart:convert';
DataModel dataModelFromJSON(String str) => DataModel.fromJson(jsonDecode(str));
String dataModelToJson(DataModel data) => json.encode(data.toJson());
class DataModel
DataModel(
required this.name,
required this.job,
required this.id,
required this.createdAt);
String name;
String job;
String id;
String createdAt;
factory DataModel.fromJson(Map<String, dynamic> json) => DataModel(
name: json['name'],
job: json['job'],
id: json['id'],
createdAt: json['createdAt']);
Map<String, dynamic> toJson() =>
"name": name, "job": job, "id": id, "createdAt": createdAt;
main.dart
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'DataModel.dart';
void main()
runApp(
MaterialApp(
home: MyHomePage(),
),
);
class MyHomePage extends StatefulWidget
@override
_MyHomePageState createState() => _MyHomePageState();
Future<DataModel?> submitData(String name, String job) async
var response = await http.post(
Uri.https('reqres.in', 'api/users'),
body: "name": name, "job": job,
);
var data = response.body;
print(data);
if (response.statusCode == 201)
String responseString = response.body;
dataModelFromJSON(responseString);
else
return null;
class _MyHomePageState extends State<MyHomePage>
late DataModel _dataModel;
TextEditingController nameController = TextEditingController();
TextEditingController jobController = TextEditingController();
@override
Widget build(BuildContext context)
return Scaffold(
appBar: AppBar(
title: Center(
child: Text('HTTP Post'),
),
),
body: Container(
padding: EdgeInsets.all(20.0),
child: Column(
children: [
TextField(
decoration: InputDecoration(
border: OutlineInputBorder(), hintText: 'Name'),
controller: nameController,
),
SizedBox(height: 20.0),
TextField(
decoration: InputDecoration(
border: OutlineInputBorder(), hintText: 'Job'),
controller: jobController,
),
ElevatedButton(
onPressed: () async
String name = nameController.text;
String job = jobController.text;
DataModel? data = await submitData(name, job);
setState(()
_dataModel = data!;
);
,
child: Text("Submit"),
)
],
),
),
);
如果有人可以帮助我解决此问题,我将不胜感激。
【问题讨论】:
【参考方案1】:您没有在函数中返回数据 在此处添加返回
return dataModelFromJSON(responseString);
现在你的函数会是这样的
Future<DataModel?> submitData(String name, String job) async
var response = await http.post(
Uri.https('reqres.in', 'api/users'),
body: "name": name, "job": job,
);
var data = response.body;
print(data);
if (response.statusCode == 201)
String responseString = response.body;
return dataModelFromJSON(responseString);
else
return null;
【讨论】:
谢谢@Musab。这是错误。我将此标记为已解决。 :) 欢迎并感谢您将其标记为已解决【参考方案2】:删除!从这条线_dataModel = data!;
在您的数据模型中,您有这个
String responseString = response.body;
dataModelFromJSON(responseString);
else
return null;
如果请求的状态码不是 201,它将返回 null,它正在使用 !做空检查是导致错误的原因。
【讨论】:
嗨@Aikins,感谢您的回复。我照你说的做了。但“数据”下划线为红色。 我可以打一针吗?以上是关于如何在颤振发布方法中修复“未处理的异常:用于空值的空检查运算符”的主要内容,如果未能解决你的问题,请参考以下文章