Flutter中如何将选中的Salon对象置于ModalBottomSheet列表首位?
问题解决:将选中的Salon移到列表首位
问题根源
你当前的排序逻辑错误,List.sort的回调函数需要对比**两个列表元素(a和b)**的相对顺序,而你现在只拿单个元素a和目标idSalon比较,这样无法定义a和b之间的排序规则,导致排序完全不生效。
修正后的排序代码
替换原有排序逻辑,实现「选中的沙龙排首位,其余元素按需排序」的效果:
listsSalon.sort((a, b) { // 若a是选中的沙龙,优先排在前面 if (a.id == idSalon) { return -1; } // 若b是选中的沙龙,优先排在前面 if (b.id == idSalon) { return 1; } // 其余情况可选择保持原顺序(返回0)或按id字典序排序(返回a.id.compareTo(b.id)) return 0; // 保持列表原有顺序 // return a.id.compareTo(b.id); // 按id字典序排序 });
额外注意事项
- 确保
idSalon已从flutterSecureStorage中正确读取且不为空(你用了idSalon!,需提前处理空值场景避免崩溃) - 排序操作要在
ListView.builder构建前执行,比如在获取到listsSalon和idSalon的异步回调完成后立即执行排序 - 确认
SalonWidget传入的是排序后的listsSalon列表
内容的提问来源于stack exchange,提问作者joisberg
相关产品推荐
相关产品推荐

