You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter实现Map<String, List>搜索栏遇类型不匹配错误,求解决方案

问题解决方法

你的错误核心在于datasource_map.entries.map()返回的是**Iterable<MapEntry<String, List>>**类型,而result是Map<String, List>类型,直接赋值会导致类型不匹配。只需将Iterable转换为Map即可解决,具体修改如下:

Map<String, List> datasource_map = {};
Map<String, List> result = {};

void updateList(String enteredKeyword) {
  setState(() {
    // 使用Map.fromEntries将Iterable<MapEntry>转换为Map
    result = Map.fromEntries(
      datasource_map.entries.map((e) {
        final filteredList = e.value
            .where((element) => element.foodName!.toLowerCase().contains(
                  enteredKeyword.toLowerCase(),
                ))
            .toList();
        // 可选:过滤掉结果为空的条目,避免空列表占据key
        if (filteredList.isNotEmpty) {
          return MapEntry(e.key, filteredList);
        }
        return null;
      }).whereType<MapEntry<String, List>>(), // 过滤掉null的entry
    );
    print("### $result");
  });
}

关键说明

  • 类型转换:Map.fromEntries()方法可以接收一个Iterable<MapEntry<K, V>>,并将其转换为对应的Map<K, V>,完美解决类型不匹配问题。
  • 空列表过滤:添加了空列表判断,避免搜索后出现key对应空列表的无效条目,让结果更干净。
  • 空安全处理:注意到你用了element.foodName!,确保foodName不会为null,如果有可能为null,建议先做非空判断(比如element.foodName?.toLowerCase() ?? ""),避免运行时错误。

内容的提问来源于stack exchange,提问作者Preemoz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 00:05:47