For循环中的If语句-(如果不添加null)

问题描述 投票:0回答:3

我正在使用Firestore开发一个项目,正在收集Button数据以使用For循环创建每个按钮。我可以设法获取此数据并将其存储到列表中并创建按钮。现在,我试图让用户在应用程序内添加或删除自己的按钮。这是一个示例如果我的应用程序中有5个按钮,则我正在从Firestore收集信息,以了解这些按钮是OFF还是ON。我将这些布尔状态存储在一个列表中,因此,如果我有5个按钮,我将拥有一个列表:

List<bool> cardsValue = [false, false, true, false, true];        

但是当我删除这些按钮之一时,假设我删除了中间的按钮,我将得到一个数组,如下所示:

List<bool> cardsValue = [false, false, null, false, true];

我需要添加一个If语句,因此当我收到null作为响应时,它不会将该null添加到我的列表中。所以我的清单是:

List<bool> cardsValue = [false, false, false, true];

示例结尾实际代码:这是我的列表的实际外观:

List<bool> cardsValue = [for (int i = 0; i < cardamount; i++) snapshot.data[devices[i]]];  

我虽然做但不幸的是没有工作是:

List<bool> cardsValue = [for (int i = 0; i < cardamount; i++) if (snapshot.data[devices[i]] == null){}else{snapshot.data[devices[i]]}];  
flutter flutter-layout
3个回答
2
投票

您可以使用where类的List方法过滤出null

List<bool> cardsValue = [for (int i = 0; i < cardamount; i++) snapshot.data[devices[i]]]
    .where((v) => v != null)
    .toList()
    .cast<bool>()

输出

[false, false, false, true]

1
投票

您最初的方法很接近,但是Dart的collection-for和collection-if构造不能使用花括号;它们必须与expressions而不是语句一起使用。

List<bool> cardsValue = [
  for (int i = 0; i < cardamount; i++)
    if (snapshot.data[devices[i]] != null)
      snapshot.data[devices[i]]
];  

0
投票

您可以根据自己的喜好使用where过滤列表。这是示例:

List<bool> cardsValue = [false, null, true, false, true];

  cardsValue = cardsValue.where((item)=> item!=null).toList();
  print(cardsValue);

输出

[false, true, false, true]
© www.soinside.com 2019 - 2024. All rights reserved.