检查 myFinal == null 在 flutter 中不起作用

check of myFinal == null don't work in flutter

提问人:dtenTV 提问时间:1/23/2023 更新时间:1/23/2023 访问量:52

问:

我的最终声明检查它是否为 null 在 flutter 中不起作用if (extractedData == null) { return; }

Future<void> fetchAndSetOrders() async {
    const url = 'https://flutter-update.firebaseio.com/orders.json';
    final response = await http.get(url);
    final List<OrderItem> loadedOrders = [];
    final extractedData = json.decode(response.body) as Map<String, dynamic>;
    if (extractedData == null) {
      return;
    }
  }

我试着看看如果

extractedData == null

但是 flutter 说 *操作数不能为空,所以条件总是真的。*

数据库 flutter dart http null

评论

0赞 Chuck Batson 1/23/2023
你为什么要检查?换句话说,你认为结果可能是什么?extractedData == nulljson.decode()null

答:

0赞 Code on the Rocks 1/23/2023 #1

您需要使 extractedData 可为 null:

// Add the ? at the end
final extractedData = json.decode(response.body) as Map<String, dynamic>?;

评论

0赞 Chuck Batson 1/23/2023
只有一种情况会返回,那就是 。我不认为让它为空是没有意义的,除非有人明确期望可能是文本。json.decode()nulljson.decode('null')response.body'null'
0赞 Munsif Ali 1/23/2023 #2

实际上,您正在提供 Map<String, dynamic 类型的 extractedData 变量数据>如果 json.decode() 返回一个 null 值,它将不会为 null 并且会抛出错误,因此如果您想要使其能够为 null,请将

final extractedData = json.decode(response.body) as Map<String, dynamic>;

对此

final extractedData = json.decode(response.body) as Map<String, dynamic>?;

所以extractedData的类型将是Map<String,dynamic>?它也可以存储 null 值,然后您可以在其上使用条件。

评论

0赞 Chuck Batson 1/23/2023
只有一种情况会返回,那就是 。我不认为让它为空是没有意义的,除非有人明确期望可能是文本。json.decode()nulljson.decode('null')response.body'null'
0赞 Munsif Ali 1/23/2023
有时 response.body 作为 null 返回,有很多因素导致这种情况,如果您确定不会返回 null,则无需使用此条件 if (extractedData == null)
0赞 dtenTV 1/27/2023
La solution a bien marché pour moi.merci @Munsif 阿里
0赞 Munsif Ali 1/28/2023
你能用英文解释一下吗