如何修复颤振中的“未处理的异常:用于空值的空检查运算符”错误?
Posted
技术标签:
【中文标题】如何修复颤振中的“未处理的异常:用于空值的空检查运算符”错误?【英文标题】:How to fix "Unhandled Exception: Null check operator used on a null value" error in flutter? 【发布时间】:2021-11-21 15:16:44 【问题描述】:我是 Flutter 新手。
我想通过 REST API(使用 post 方法)将数据从前端传递到 node.js 后端。但是在执行应用程序时会显示以下错误。
这是我目前写的代码。我试图找出错误是什么,但不幸的是我找不到它。有人可以帮我解决这个问题吗?
模型文件
DataModel dataModelFromJSON(String str) => DataModel.fromJson(jsonDecode(str));
String dataModelToJson(DataModel data) => json.encode(data.toJson());
class DataModel
DataModel(required this.title, required this.id);
String title;
String id;
factory DataModel.fromJson(Map<String, dynamic> json) =>
DataModel(title: json['title'], id: json['id']);
Map<String, dynamic> toJson() => "name": title, "id": id;
页面出现错误
class PurchaseOrder extends StatefulWidget
@override
_PurchaseOrderState createState() => _PurchaseOrderState();
Future<DataModel?> submitData(String title) async
var response = await http.post(
Uri.http('176.12.10.0:8020', 'order/create'),
body: "title": title,
);
print(title);
var data = response.body;
print(data);
if (response.statusCode == 201)
String responseString = response.body;
return dataModelFromJSON(responseString);
else
return null;
class _PurchaseOrderState extends State<PurchaseOrder>
String today = DateFormat('yMd').format(DateTime.now());
late DataModel _dataModel;
TextEditingController titleController = TextEditingController();
@override
Widget build(BuildContext context)
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
return Container(
child: Column(
children: [
TextFormField(
decoration: const InputDecoration(
hintText: 'Enter your email',
),
controller: titleController,
),
Expanded(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: OutlinedButton(
onPressed: () async
String title = titleController.text;
DataModel? data = await submitData(title);
setState(()
_dataModel = data!;
);
,
child: Text("Submit"),
),
),
),
],
),
);
希望您能帮助解决此问题。 谢谢
已编辑: 我对代码进行了以下更改。错误消失了。但是数据还没有传递到后端。我该怎么办。
我变了,
_dataModel = data!;
到
if (data != null)
_dataModel = data;
【问题讨论】:
请避免将代码作为图片上传。 meta.***.com/questions/285551/… 。祝你好运??? @novonimo 感谢您提供的信息。 ???? 【参考方案1】:我也可以解决“数据不通过问题”。
我做了什么?
我更改了发布请求,
var response = await http.post(
Uri.http('176.12.10.0:8020', 'order/create'),
body: "title": title,
);
到
var response = await http.post(
Uri.parse('http://176.12.10.0:8020/order/create'),
headers: 'Content-Type': 'application/json',
body: jsonEncode("title": title),
);
【讨论】:
【参考方案2】:该错误意味着您在代码中的某处使用不可为空的类型执行操作,但该值实际上为空。
例如,当您使用data!
时,您是在告诉编译器data
不会为空,但实际上是。
您可以使用data ?? someValue
进行回退,以防data
为空。
【讨论】:
感谢@alexn62 的帮助。我更改了代码并用我最近所做的更新了问题。错误消失了,但数据没有传递到后端。我该如何解决这个问题?【参考方案3】:您的代码中唯一的空检查运算符是_dataModel = data!;
这意味着您的 submitData
方法返回了一个传递给数据的空值。或者当您放置一个空检查运算符时,您必须确保变量不为空。
为避免此错误,您可以检查数据是否为空,如果为真,则传递另一个值:
_dataModel = data ?? otherValue
【讨论】:
感谢@Tanguy 的帮助。我更改了代码并用我最近所做的更新了问题。错误消失了,但数据没有传递到后端。我该如何解决这个问题? @New Guy 你的意思是你的 submitData 方法没有按预期工作。这是另一个问题。你应该用这个函数的代码问另一个问题。 好的@Tanguy,我会将此标记为已解决,并使用代码提出另一个问题。以上是关于如何修复颤振中的“未处理的异常:用于空值的空检查运算符”错误?的主要内容,如果未能解决你的问题,请参考以下文章
如何修复颤振中的“终止原因:命名空间代码设计,代码 0x2”错误?
如何修复颤振中的“SocketException:os错误:连接超时错误号110,地址= 000.000.0.00,端口= 44935”
如何修复颤振中的“未处理的异常:用于空值的空检查运算符”错误?
如何修复颤振中的“SocketException:OS错误:连接超时,errno = 110,地址= 192.168.5.10,端口= 49590”错误