如何处理到达 null 的信息? - NoSuchMethodError

How to deal with information that arrives null? - NoSuchMethodError

我从 Web api 获得了空信息。如果单个信息为null,则会出现错误:

Error: Exception: NoSuchMethodError: '[]' Dynamic call of null. Receiver: null Arguments: ["address"]

我在模型中声明了这样的信息:

final String? address;

..
address: json['data1']['data2'][0]['data3']['address'][0]

我尝试做类似的事情:

address: json['data1']['data2'][0]['data3']['address'][0].isEmpty ? '' : json['data1']['data2'][0]['data3']['address'][0],

但是不行。

谁能帮我分析一下,不胜感激!

您唯一能做的就是预测 null 值并根据需要处理每种情况。

例如,如果根本不接受空值,您可以将代码包装在 throw ... catch 语句中,然后抛出错误——例如 Missing Data 并处理该错误。

如果 null 值没问题,您可以使用 null 感知运算符 ?(如果您愿意,也可以使用嵌套的 if-statements)。例如,假设值是一个字符串,您可以这样做:

final String? myValue = json['data1']?['data2']?[0]?['data3']?['address']?[0];

不过请记住,如果您按索引访问列表,如果索引超出范围或列表为空,您仍然可以获得 RangeError。在这种情况下,您可能需要将流程拆分为单独的方法并分别检查每个部分,例如:

String? extractValue(Map<String, dynamic> json) {
  final firstList = json['data1']?['data2'];
  if (firstList is List && firstList.isNotEmpty) {
    final innerList = firstList[0]['data3']?['address'];
    if (innerList is List && innerList.isNotEmpty) {
      return innerList[0];
    }
  }
  return null; // or return a default value or throw an error
}

您可以像这样处理此类参数(给您空值的参数)。 假设有一个变量a,它有可能给出一个空值,你可以给它一个默认值。 例如: 有一个变量'a',就是你的数据源

String name = a ?? "This is not a null value";

那个??将检查该值是否为空。如果它为 null,它将分配您提供的值,否则它将保留现有值。