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
相关产品推荐
相关产品推荐

