如何在 flutter post 方法中修复 'Unhandled Exception: Null check operator used on a null value'
How to fix 'Unhandled Exception: Null check operator used on a null value' in flutter post method
我是 Flutter 新手。我正在尝试了解 flutter rest api。
当我尝试使用 fullter api(使用 http dart 包)post 数据时,它显示了这个错误。
我尝试通过对我的代码进行一些更改来修复它,但我仍然无法修复它。这是我尝试执行的代码。
型号
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"),
)
],
),
),
);
}
}
如果有人能帮我解决这个问题,我将不胜感激。
删除!从这一行 _dataModel = data!;
在你的数据模型中你有这个
String responseString = response.body;
dataModelFromJSON(responseString);
} else
return null;
}
如果请求的状态代码不是 201,它将 return 为空,它正在使用 !进行空检查是导致错误的原因。
您没有在函数中 returning 数据
在此处添加 return
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;
}
我是 Flutter 新手。我正在尝试了解 flutter rest api。 当我尝试使用 fullter api(使用 http dart 包)post 数据时,它显示了这个错误。
我尝试通过对我的代码进行一些更改来修复它,但我仍然无法修复它。这是我尝试执行的代码。
型号
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"), ) ], ), ), ); } }
如果有人能帮我解决这个问题,我将不胜感激。
删除!从这一行 _dataModel = data!;
在你的数据模型中你有这个
String responseString = response.body;
dataModelFromJSON(responseString);
} else
return null;
}
如果请求的状态代码不是 201,它将 return 为空,它正在使用 !进行空检查是导致错误的原因。
您没有在函数中 returning 数据 在此处添加 return
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;
}