Flutter 未处理的异常:NoSuchMethodError:在 null 上调用了 getter 'length'

时间:2021-06-23 03:53:49

标签: flutter dart

所以我试图显示 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;
  });

2 个答案:

答案 0 :(得分:0)

您的 jsonName 包含 Map 而不是列表 所以合乎逻辑的方法就是

KonFirm konFirm = KonFirm(
      jsonName["dt_name"]);
konfirm.add(konFirm);
return konfirm;

不再循环 但是如果您将方法的泛型更改为 Future 会更好,因为您的 json 源只包含一个数据

答案 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;
    },
  );