Flutter 引发了异常:NoSuchMethodError:getter';0';被调用为空
我正在尝试使用Rest服务从API获取数据。。 但是我得到了一个错误,说getter是在null上调用的,在做了一些研究之后,我发现了一些东西,比如我想显示的数据首先被执行的UI,而不是getData函数,它使系统将变量读取为null,并且发生了错误。有人能帮我处理这个案子吗 这是我的一些代码Flutter 引发了异常:NoSuchMethodError:getter';0';被调用为空,flutter,dart,Flutter,Dart,我正在尝试使用Rest服务从API获取数据。。 但是我得到了一个错误,说getter是在null上调用的,在做了一些研究之后,我发现了一些东西,比如我想显示的数据首先被执行的UI,而不是getData函数,它使系统将变量读取为null,并且发生了错误。有人能帮我处理这个案子吗 这是我的一些代码 class PickUp extends StatefulWidget { var created_name, wmsorders_id, id; PickUp( {Key key,
class PickUp extends StatefulWidget {
var created_name, wmsorders_id, id;
PickUp(
{Key key,
@required this.created_name,
@required this.wmsorders_id,
@required this.id})
: super(key: key);
@override
_PickUpState createState() => _PickUpState();
}
class _PickUpState extends State<PickUp> {
DetailModel detailModel;
String sender = "";
Future<String> getDetail() async {
print("id : " + widget.id);
var data = "id=" + widget.id + "";
var response_detail = await RestService()
.restRequestServiceGet(SystemParam.URL_DETAIL_UPCOMING, data);
print("response_detail : " + response_detail.body.toString());
setState(() {
detailModel = DetailModel.fromJson(jsonDecode(response_detail.body));
});
return "Success!";
}
@override
void initState() {
getDetail();
}
Widget build(BuildContext context) {
// NULL CHECKING
if (detailModel != null) {
print("sender =" +detailModel.the0.picName);
} else {
print("sender = null");
}
// I want to get picName from detail Model and using it in UI, but I got Error here
sender = detailModel.the0.picName';
print("sender = " +'$sender');
}
类拾取扩展了StatefulWidget{
var创建名称、wmsorders id、id;
皮卡(
{键,
@需要此名称。已创建\u名称,
@需要此.wmsorders\u id,
@需要此。id})
:super(key:key);
@凌驾
_PickUpState createState()=>\u PickUpState();
}
类_PickUpState扩展状态{
DetailModel-DetailModel;
字符串发送者=”;
Future getDetail()异步{
打印(“id:+widget.id”);
var data=“id=“+widget.id+”;
var response_detail=wait RestService()
.restRequestServiceGet(SystemParam.URL_DETAIL_,数据);
打印(“response_detail:+response_detail.body.toString());
设置状态(){
detailModel=detailModel.fromJson(jsonDecode(response_detail.body));
});
返回“成功!”;
}
@凌驾
void initState(){
getDetail();
}
小部件构建(构建上下文){
//空检查
if(detailModel!=空){
打印(“发件人=“+detailModel.the0.picName”);
}否则{
打印(“发件人=空”);
}
//我想从细节模型中获取picName并在UI中使用它,但我在这里遇到了错误
sender=detailModel.the0.picName';
打印(“发件人=”+“$sender”);
}
这是详细的模型
// To parse this JSON data, do
//
// final detailModel = detailModelFromJson(jsonString);
import 'dart:convert';
DetailModel detailModelFromJson(String str) => DetailModel.fromJson(json.decode(str));
String detailModelToJson(DetailModel data) => json.encode(data.toJson());
class DetailModel {
The0 the0;
The0 the1;
Records records;
DetailModel({
this.the0,
this.the1,
this.records,
});
factory DetailModel.fromJson(Map<String, dynamic> json) => DetailModel(
the0: The0.fromJson(json["0"]),
the1: The0.fromJson(json["1"]),
records: Records.fromJson(json["records"]),
);
Map<String, dynamic> toJson() => {
"0": the0.toJson(),
"1": the1.toJson(),
"records": records.toJson(),
};
}
class Records {
int status;
String message;
Records({
this.status,
this.message,
});
factory Records.fromJson(Map<String, dynamic> json) => Records(
status: json["status"],
message: json["message"],
);
Map<String, dynamic> toJson() => {
"status": status,
"message": message,
};
}
class The0 {
String id;
String sku;
int sak;
String qty;
String shipstatId;
String picName;
String picTelp;
String orderMultipleId;
String orderdetId;
String coordinatorId;
The0({
this.id,
this.sku,
this.sak,
this.qty,
this.shipstatId,
this.picName,
this.picTelp,
this.orderMultipleId,
this.orderdetId,
this.coordinatorId,
});
factory The0.fromJson(Map<String, dynamic> json) => The0(
id: json["id"],
sku: json["sku"],
sak: json["sak"],
qty: json["qty"],
shipstatId: json["shipstat_id"],
picName: json["pic_name"],
picTelp: json["pic_telp"],
orderMultipleId: json["order_multiple_id"],
orderdetId: json["orderdet_id"],
coordinatorId: json["coordinator_id"],
);
Map<String, dynamic> toJson() => {
"id": id,
"sku": sku,
"sak": sak,
"qty": qty,
"shipstat_id": shipstatId,
"pic_name": picName,
"pic_telp": picTelp,
"order_multiple_id": orderMultipleId,
"orderdet_id": orderdetId,
"coordinator_id": coordinatorId,
};
}
//要解析此JSON数据,请执行以下操作
//
//final detailModel=detailModelFromJson(jsonString);
导入“dart:convert”;
DetailModel detailModelFromJson(String str)=>DetailModel.fromJson(json.decode(str));
字符串detailModelToJson(detailModelData)=>json.encode(data.toJson());
类细节模型{
0对0;
0-1;
记录;
详细模型({
这是0.0,
这个,1,
这是我的记录,
});
factory DetailModel.fromJson(映射json)=>DetailModel(
the0:the0.fromJson(json[“0”]),
1:0.fromJson(json[“1”]),
records:records.fromJson(json[“records”]),
);
映射到JSON()=>{
“0”:0.toJson(),
“1”:1.toJson(),
“records”:records.toJson(),
};
}
课堂记录{
智力状态;
字符串消息;
记录({
这个,身份,,
这条信息,
});
factory Records.fromJson(映射json)=>记录(
状态:json[“状态”],
message:json[“message”],
);
映射到JSON()=>{
“地位”:地位,
“信息”:信息,
};
}
第0类{
字符串id;
字符串sku;
内萨克;
字符串数量;
字符串shipstatId;
字符串名称;
字符串象形图;
字符串orderMultipleId;
字符串orderdetId;
弦坐标;
The0({
这个身份证,
这个.sku,
这个,萨克,
这个数量,
这是shipstatId,
这是我的名字,
这是picTelp,
这个.orderMultipleId,
这个.orderdetId,
这个协调人,
});
工厂0.fromJson(映射json)=>0(
id:json[“id”],
sku:json[“sku”],
sak:json[“sak”],
数量:json[“数量”],
shipstatId:json[“shipstat_id”],
picName:json[“pic_name”],
picTelp:json[“pic_telp”],
orderMultipleId:json[“order\u multiple\u id”],
orderdetId:json[“orderdet_id”],
coordinatorId:json[“coordinator_id”],
);
映射到JSON()=>{
“id”:id,
“sku”:sku,
“萨克”:萨克,
“数量”:数量,
“shipstat_id”:shipstatId,
“图片名称”:图片名称,
“pic_telp”:picTelp,
“order_multiple_id”:orderMultipleId,
“orderdet_id”:orderdetId,
“协调员id”:协调员id,
};
}
这里是错误
您需要在构建方法中使用FutureBuilder,并等待响应 删除
setstate
,并按如下所示修改代码
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(
'Test',
style: TextStyle(
color: Colors.white,
),
),
),
body: FutureBuilder<DetailModel>(
future: getDetail(),
builder: (context, snapshot) {
if (snapshot.hasData) {
print("Here you can get data "+snapshot.data.toString());
} else {
print("Waiting mode");
return Container(
color: Colors.blue,
);
}
},
),
);
}
}
@覆盖
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:正文(
"测试",,
样式:TextStyle(
颜色:颜色,白色,
),
),
),
正文:未来建设者(
future:getDetail(),
生成器:(上下文,快照){
if(snapshot.hasData){
打印(“在这里您可以获取数据”+snapshot.data.toString());
}否则{
打印(“等待模式”);
返回容器(
颜色:颜色,蓝色,
);
}
},
),
);
}
}
您需要在构建方法中使用FutureBuilder。请检查0=执行前为空toJson@AbhayKoradiya我实际上是颤振的新手,你能告诉我如何使用它吗?@StellarCreed与我使用的空检查有什么不同?@edodije尝试将“0”:0.toJson()替换为“0”:(0!=NULL)?0.toJson():null,我已经这样做了,但是我没有得到数据,我的意思是它甚至没有打印,这是否意味着快照没有数据。。?