Flutter 引发了异常:NoSuchMethodError:getter';0';被调用为空

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,

我正在尝试使用Rest服务从API获取数据。。 但是我得到了一个错误,说getter是在null上调用的,在做了一些研究之后,我发现了一些东西,比如我想显示的数据首先被执行的UI,而不是getData函数,它使系统将变量读取为null,并且发生了错误。有人能帮我处理这个案子吗

这是我的一些代码

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,我已经这样做了,但是我没有得到数据,我的意思是它甚至没有打印,这是否意味着快照没有数据。。?