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

Flutter中如何多条件过滤JSON数据?实现产品名+机构UID双条件筛选

解决方案

你的现有代码存在语法错误(toList()后多余的标点),且判断机构UID匹配的方式效率偏低(where会遍历所有机构再转列表,不如直接判断是否存在匹配项更高效)。以下是完善后的代码,兼顾产品名称与机构UID的筛选需求,同时处理了空值安全与多场景适配:

List<mmamodel> results = [];

// 标记是否需要应用对应筛选条件
bool needProductFilter = productName.isNotEmpty;
bool needAgencyFilter = Uid.isNotEmpty;

if (!needProductFilter && !needAgencyFilter) {
  // 无任何筛选条件,返回全部数据
  results = mmaData;
} else {
  results = mmaData.where((element) {
    // 产品名称匹配逻辑(无筛选时直接为true)
    bool matchesProduct = !needProductFilter || 
        element.product.toString().toLowerCase().contains(productName.toLowerCase());
    
    // 机构UID匹配逻辑:处理agencies为空的情况,无筛选时直接为true
    bool matchesAgency = !needAgencyFilter || 
        (element.agencies?.any((agency) => 
            agency.agencyUid.toString().toLowerCase() == Uid.toLowerCase()) ?? false);
    
    // 同时满足两个筛选条件(若均有设置)
    return matchesProduct && matchesAgency;
  }).toList();
}

foundProduct.value = results;

关键优化点:

  • 空值安全:用element.agencies?.any(...) ?? false处理agencies为null的情况,避免空指针异常
  • 效率提升:使用any()方法判断机构UID,找到第一个匹配项就停止遍历,比where().toList()更高效
  • 场景覆盖:支持仅筛选产品、仅筛选机构、同时筛选两者、无筛选四种场景
  • 匹配灵活:代码中用==做UID精确匹配,若需要模糊匹配可替换回contains

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 21:25:24