Flutter中如何对Map类型使用firstWhereOrNull方法?
Map类型使用firstWhereOrNull的实现方案
Dart标准库中Map本身没有内置firstWhereOrNull方法,但可以通过Map提供的entries/keys/values可迭代视图,配合collection包的扩展方法快速实现,也可以自定义扩展方法适配场景。
前置说明
- 你给出的示例Map赋值语法存在错误,正确写法如下:
Map<String,int> myMap = {}; myMap['stuff1'] = 1; myMap['stuff2'] = 2; myMap['stuff3'] = 3;
- Flutter项目默认依赖
collection包,该包已经为所有Iterable类型扩展了firstWhereOrNull方法,可直接调用,无需额外引入依赖。
不同场景的实现方式
1. 查找符合条件的键值对(返回MapEntry)
直接调用Map的entries属性获取所有键值对的可迭代集合,再调用firstWhereOrNull即可:
// 示例:查找第一个值等于2的键值对 final targetEntry = myMap.entries.firstWhereOrNull((entry) => entry.value == 2); // 匹配成功可通过targetEntry?.key、targetEntry?.value获取对应值,匹配失败返回null
2. 查找符合条件的键
调用keys属性获取所有键的可迭代集合:
// 示例:查找第一个对应值大于1的键 final targetKey = myMap.keys.firstWhereOrNull((key) => myMap[key]! > 1);
3. 查找符合条件的值
调用values属性获取所有值的可迭代集合:
// 示例:查找第一个大于2的值 final targetValue = myMap.values.firstWhereOrNull((value) => value > 2);
自定义Map扩展方法
如果你不想每次都调用entries,可以直接为Map类型自定义扩展方法:
extension MapFirstWhereExtension<K, V> on Map<K, V> { MapEntry<K, V>? firstWhereOrNull(bool Function(MapEntry<K, V> entry) test) { for (final entry in entries) { if (test(entry)) return entry; } return null; } } // 调用示例 final result = myMap.firstWhereOrNull((entry) => entry.key == 'stuff3');
内容的提问来源于stack exchange,提问作者jennie788
相关产品推荐
相关产品推荐

