我正在使用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]]}];
您可以使用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]
您最初的方法很接近,但是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]]
];
您可以根据自己的喜好使用where
过滤列表。这是示例:
List<bool> cardsValue = [false, null, true, false, true];
cardsValue = cardsValue.where((item)=> item!=null).toList();
print(cardsValue);
输出
[false, true, false, true]