循环在将列表分配给映射中的键时失败:错误:nosuchmethoderror:方法 '[]=' was called on null

时间:2021-05-15 23:16:15

标签: flutter dart

我很难弄清楚为什么下面的代码无法执行。在 VisualStudio 中,我没有收到错误消息,但在 Android 模拟器中,我收到了标题中列出的错误。代码循环遍历 Map 对象列表,如下所示:

[{"HappinessLevel": "0.4", "Date": "5/10/2021", "SadnessLevel": "0.2", "AngrinessLevel": "0.2", "SurpriseLevel": "0.3", "Diary": "123124215", "FearLevel": "0.1", "User": "a4b68"}, ... ]

该列表是从以下代码中发出的 HTTP 请求中返回的

RestOptions options = RestOptions(path: '/emotions/$userId');
RestOperation restOperation = Amplify.API.get(restOptions: options);
RestResponse response = await restOperation.response;

res = String.fromCharCodes(response.data);
resList = jsonDecode(res)

失败的代码是:

List resList;
Map<String, List> ret;

for (var i = 0; i < resList.length; i++) {
  String dVal = resList[i]["Date"];
  
  List lit = [
    double.parse(resList[i]["HappinessLevel"]),
    double.parse(resList[i]["SadnessLevel"]),
    double.parse(resList[i]["AngrinessLevel"]),
    double.parse(resList[i]["FearLevel"]),
    double.parse(resList[i]["SurpriseLevel"])
  ];
  
  ret[dVal] = lit; //Code fails here and loop terminates early on the first pass.
  
}

我知道这个片段可以简化,但我一直很想确定失败发生的地方,所以我解构了这个过程。

任何线索将不胜感激。

1 个答案:

答案 0 :(得分:0)

当你这样做

Map<String, List> ret;

ret 当前为 null,任何将密钥放入其中的尝试都会引发 NullPointerException

当你这样做

Map<String, List> ret = {};

ret 目前是一个空的map,可以正常往里面放一个key。