Flutter:过滤List〈Map〈String,dynamic>>,使其只包含某些项

ix0qys7i  于 2023-02-05  发布在  Flutter
关注(0)|答案(1)|浏览(182)

我有一个Map列表,其中一个字段是一个名为“completed”的布尔值。我希望能够过滤Map,以便只获得“completed”为true或false的项。我当前的代码如下:

try {
      String? email = FirebaseAuth.instance.currentUser!.email;
      for (int i = startingIndex; i < endingIndex; ++i) {
        var doc = await FirebaseFirestore.instance
            .collection(email!)
            .doc("goals")
            .collection(Utils.goalsCategoriesDropdownItems[i])
            .get();
        if (doc.size > 0) {
          allData.addAll(doc.docs.map((doc) => doc.data()).toList());
        }
      }
      allData.sort(((a, b) {
        Timestamp one = a["dueDate"];
        Timestamp two = b["dueDate"];
        return one.compareTo(two);
      }));
      return allData;
    }

但是我不想返回allData,我想过滤一下看看所有的项是真还是假,所以我需要这样的代码:

if (completed == true) {
        allData.map((e) => e["completed"] == true);
      } else {
        allData.map((e) => e["completed"] == false);
      }
      return allData;
yhived7q

yhived7q1#

你的预期结果并不完全清楚,但有两种可能性:
a)如果你想检查你的List中的每个Map是否都有一个值为true的键completed,你可以使用every

return allData.every((e) => e["completed"] === true)

b)如果你想拥有一个只包含Maps的列表,其中包含的键为completed,值为true,你可以使用where

return allData.where((e) => e["completed"] === true)

相关问题