如何处理到达 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,它将分配您提供的值,否则它将保留现有值。
我从 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,它将分配您提供的值,否则它将保留现有值。