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
相关产品推荐
相关产品推荐

