Flutter:过滤 List<Map<String, dynamic>> 按列表中的项目

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

我有以下代码块,我要返回一个列表>

static Future<List<Map<String, dynamic>>>? getData(String category,
      List<String> levels, int levelIndex, bool completed) async {
    List<Map<String, dynamic>> allData = [];
    try {
      //String? email = FirebaseAuth.instance.currentUser!.email;
      var doc = await FirebaseFirestore.instance
          .collection("skills")
          .doc(category)
          .collection(levels[levelIndex])
          .get();
      allData.addAll(doc.docs.map((doc) => doc.data()).toList());
      return allData;
    } catch (e) {
      return [];
    }
  }

列表的一个字段是一个名为“completedBy”的字符串列表,我正在尝试过滤数据,以便它仅返回包含或不包含“completedBy”列表中特定字符串的项目。所以,基本上在概念上看起来像这样:

static Future<List<Map<String, dynamic>>>? getData(String category,
      List<String> levels, int levelIndex, bool completed) async {
    List<Map<String, dynamic>> allData = [];
    try {
      String? email = FirebaseAuth.instance.currentUser!.email;
      var doc = await FirebaseFirestore.instance
          .collection("skills")
          .doc(category)
          .collection(levels[levelIndex])
          .get();
      allData.addAll(doc.docs.map((doc) => doc.data()).toList());
      if (completed) {
        return allData.where((e) => e["completedBy"].contains(email)).toList();
      } else {
        return allData.where((e) => e["completedBy"].doesNotContain(email)).toList();
      }
    } catch (e) {
      return [];
    }
  }

除了方法“contains”和“doesNotContain”对于动态类型不存在。我该怎么做?

flutter list dictionary filter
© www.soinside.com 2019 - 2024. All rights reserved.