所以我试图显示 API 响应中的 1 个,但是当我尝试我的方法时,它显示了这个错误
Unhandled Exception: NoSuchMethodError: The getter 'length' was called on null.
我的 API 响应如下
"VR": "00",
"VALUE": {
"dt_name": "Caramel",
"dt_num": "20455",
"dt_pic": "---",
},
"STATS": "OK",
"LOAD": "0s"
}
这是我只获取名字的方法
Future<List<KonFirm>> _reqKonfirm() async {
var TP = await RTUPS(name);
var jsonData = json.decode(TP);
var jsonName = jsonData["VALUE"];
List<KonFirm> konfirm = [];
for (var u in jsonName) {
KonFirm konFirm = KonFirm(
u["dt_name"]);
konrirm.add(konFirm);
}
return konfirm;
}
这里是我调用我得到的数据的地方
FutureBuilder(
future: _reqKonfirm(),
builder: (BuildContext context,
AsyncSnapshot snapshot) {
nameController.text =
snapshot.data[index]
.dt_name;
});
答案 0 :(得分:0)
您的 jsonName 包含 Map 而不是列表 所以合乎逻辑的方法就是
KonFirm konFirm = KonFirm(
jsonName["dt_name"]);
konfirm.add(konFirm);
return konfirm;
不再循环
但是如果您将方法的泛型更改为 Future
答案 1 :(得分:0)
字段 jsonData["VALUE"]
只有一个 dt_name
属性,对吗?那么您可以直接使用 dt_name
属性返回单个对象,而不是删除地图条目。喜欢,
Future<KonFirm> _reqKonfirm() async {
var TP = await RTUPS(name);
var jsonData = json.decode(TP);
Map jsonName = jsonData["VALUE"];
return KonFirm(jsonName["dt_name"]);
}
而且,您还需要对 FutureBuilder
进行一些更改,例如
return FutureBuilder<KonFirm>(
future: _reqKonfirm(),
builder: (BuildContext context, AsyncSnapshot<KonFirm> snapshot) {
nameController.text = snapshot.data.dt_name;
return;
},
);