如何修复 flutter 中的 "Unhandled Exception: Null check operator used on a null value" 错误?
How to fix "Unhandled Exception: Null check operator used on a null value" error in flutter?
我是 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;
}
您的代码中唯一的空检查运算符是 _dataModel = data!;
这意味着您的 submitData
方法返回了传递给数据的空值。或者,当您放置空检查运算符时,您必须确保变量不为空。
为避免此错误,您可以检查数据是否为空,如果为真则传递另一个值:
_dataModel = data ?? otherValue
该错误意味着您在代码中的某处使用不可为 null 的类型执行某些操作,但该值实际上为 null。
例如,当您使用 data!
时,您是在告诉编译器 data
不会为空,但实际上是。
如果 data
为空,您可以使用 data ?? someValue
进行回退。
我也可以解决“数据未通过问题”。
我做了什么?
我更改了 post 请求,
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}),
);
我是 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;
}
您的代码中唯一的空检查运算符是 _dataModel = data!;
这意味着您的 submitData
方法返回了传递给数据的空值。或者,当您放置空检查运算符时,您必须确保变量不为空。
为避免此错误,您可以检查数据是否为空,如果为真则传递另一个值:
_dataModel = data ?? otherValue
该错误意味着您在代码中的某处使用不可为 null 的类型执行某些操作,但该值实际上为 null。
例如,当您使用 data!
时,您是在告诉编译器 data
不会为空,但实际上是。
如果 data
为空,您可以使用 data ?? someValue
进行回退。
我也可以解决“数据未通过问题”。
我做了什么?
我更改了 post 请求,
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}),
);