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

Flutter(Dart)中setState计算多列表交集结果为空如何解决

问题原因

交集计算逻辑的bug出在fold遍历范围上:

  • 初始comb存了3个空列表,每次点击按钮只更新对应索引位置的列表,未点击位置始终是空列表
  • fold会遍历comb的全部3个元素,只要参与计算的集合里存在空集合,任何集合和空集合求交集的结果都是空集合,所以哪怕你已经选了前两个列表,第三个空列表参与计算后最终结果必然为空。
修改方法

计算交集前先过滤掉comb里未被选中的空列表,只对用户实际选中的非空列表做交集计算,替换_itemWidget中onTap回调里的setState逻辑即可:

onTap: () {
  setState(() {
    comb[idx] = ml;
    // 过滤掉未选中的空列表
    final validLists = comb.where((item) => item.isNotEmpty).toList();

    if (validLists.isEmpty) {
      result = [];
      return;
    }

    // 若业务要求选中单个列表时就展示该列表内容,直接使用下方fold逻辑即可
    // 若要求至少选中2个列表才计算交集,新增validLists.length < 2时result = []的判断即可
    result = validLists
        .fold<Set>(
            validLists.first.toSet(), (pre, next) => pre.intersection(next.toSet()))
        .toList();
  });
},

修改后验证效果:

  • 选中按钮0、1时,validLists只有a、b两个列表,交集计算结果为[4,5],符合预期
  • 三个按钮全选中时,a、b、c的交集为[4,5],计算结果正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 00:36:20