【问题标题】:Flutter Unhandled Exception: NoSuchMethodError: The getter 'length' was called on nullFlutter Unhandled Exception: NoSuchMethodError: The getter 'length' was called on null
【发布时间】:2021-06-23 03:53:49
【问题描述】:

所以我试图显示 1 个 API 响应,但是当我尝试我的方法时它显示此错误

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;
  });

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

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

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

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

    【讨论】:

    • 所以我删除了for var u ... 并将其替换为该代码?
    • 然后我返回 konFirm?
    • 这发生在A value of type 'konFirm' can't be returned from the method '_reqKonfirm' because it has a return type of 'Future&lt;List&lt;KonFirm&gt;&gt;
    【解决方案2】:

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

    【讨论】:

    • A value of type 'konFirm' can't be returned from the method '_reqKonfirm' because it has a return type of 'Future&lt;List&lt;KonFirm&gt;&gt; 出现
    • 我修改了sn-ps的代码。您可以再试一次并恢复吗?
    • @Caramel,只需将方法 _reqKonfirm() Future> 的返回类型更改为 Future。
    • 我做到了,但它似乎没有显示任何内容
    • 确保_reqKonfirm 方法的返回类型为Future&lt;KonFirm&gt; 和FutureBuilder 小部件的类型为FutureBuilder&lt;KonFirm&gt; 并确认?
    猜你喜欢
    • 1970-01-01
    • 2021-12-31
    • 2020-06-26
    • 2019-12-06
    • 2020-12-15
    • 1970-01-01
    • 2019-12-05
    • 2021-08-03
    • 2023-03-23
    相关资源
    最近更新 更多