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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:57:02