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

Flutter中如何在方法构造器内访问List属性参数以复用同类函数

实现方案

Dart 作为强类型静态语言,不支持你示例中直接传属性名动态访问的写法(Flutter也禁用了支持动态反射的dart:mirrors库,无法通过属性名字符串访问类属性),正确的实现方式是传入属性提取函数作为参数,实现通用筛选逻辑,没有额外性能损耗,且完全满足类型安全要求。

步骤1:定义列表元素类(示例)

假设你的列表元素类结构如下:

class Item {
  final String A;
  final String B;
  Item(this.A, this.B);
}

// 你的原列表定义
List<Item> someList = [Item("123", "456"), Item("789", "456")];

步骤2:实现通用筛选函数

// 针对Item类型的通用筛选函数
Iterable<Item> something(String Function(Item) getProperty, String matchValue) {
  return someList.where((item) => getProperty(item) == matchValue);
}

步骤3:调用方式

完全等价你原来两个独立函数的效果:

// 等价原somethingA:筛选A字段等于"123"的元素
final resultA = something((item) => item.A, "123");
// 等价原somethingB:筛选B字段等于"456"的元素
final resultB = something((item) => item.B, "456");

进阶:支持任意类型列表的泛型通用函数

如果需要适配不同元素类型、不同属性类型的筛选场景,可以用泛型扩展通用性:

/// 通用列表筛选函数
/// [list] 要筛选的源列表
/// [getProperty] 从列表元素中提取要比对的属性的函数
/// [matchValue] 要匹配的属性值
Iterable<T> filterList<T, V>(List<T> list, V Function(T) getProperty, V matchValue) {
  return list.where((item) => getProperty(item) == matchValue);
}

泛型版本调用示例:

// 筛选Item列表A等于"123"
final resultA = filterList(someList, (Item item) => item.A, "123");
// 也可以支持其他类的筛选,比如筛选用户列表年龄等于18的元素
final adultUsers = filterList(userList, (User user) => user.age, 18);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 18:39:00