我将flutter_multi_select_items
用于从JSON格式的项目数组中选择的多个项。它以前是工作的,但我想限制用户只从右到左顺序选择项目,而不是跳转到任何项目来选择下一个。例如,如果我有一个数组[1,2,3,4]
,我希望用户只按顺序选择1->2->3->4
,而不是选择1->3->2->4
等。
我的代码:
MultiSelectContainer(
itemsPadding: const EdgeInsets.all(10),
textStyles: const MultiSelectTextStyles(
textStyle: TextStyle(fontFamily: 'Montserrat',
fontWeight:FontWeight.bold,)),
showInListView: true,
listViewSettings: ListViewSettings( scrollDirection: Axis.horizontal,
separatorBuilder: (_, __) => const SizedBox(
width: 10,)),
items: List.generate(dataSchedule == null ? 0 : dataSchedule.length,
(index) => MultiSelectCard(value: dataSchedule[index]['time_slot'], label: dataSchedule[index]['time_slot'],)),
onChange: (allSelectedItems, selectedItem) { })
下面是我的数组返回的样子:
["16:00","17:00","18:00","19:00","20:00","21:00"]
我希望选择来自16:00 to 17:00 to 18:00 to 19:00 to 20:00 to 21:00
从上面的代码来看,allSelectedItems
用于所选项的数组,而selectedItem
仅用于所选的单个项。如有任何部分需要澄清,请提前通知我,谢谢。
发布于 2022-11-14 07:56:43
所以我可以用一些逻辑来解决这个问题。由于无法将index
包含在onchanged
中,所以我将索引添加到value:
中,以便获得每个select的索引值,然后从值中删除额外的值,只留下index
值,然后得到前面的select值和当前选定的值。最后,我使用if
语句检查当前select减去1是否等于前一个select,然后它是否正确。我的最后代码如下:
MultiSelectContainer(
controller: controllerMultipleSelect,
itemsPadding: const EdgeInsets.all(10),
showInListView: true,
listViewSettings: ListViewSettings(
scrollDirection: Axis.horizontal,
separatorBuilder: (_, __) => const SizedBox(
width: 10,
)),
items: List.generate(dataSchedule == null ? 0 : dataSchedule.length,
(index) => MultiSelectCard(
value: index.toString() +"-"+ dataSchedule[index]['time_slot'], label: dataSchedule[index]['time_slot'],)),
onChange: (allSelectedItems, selectedItem) {
if(allSelectedItems.length>1) {
var lst = allSelectedItems[allSelectedItems.length - 2];
var pos = lst.toString().lastIndexOf('-');
String previousResult = (pos != -1)? lst.substring(0, pos): lst;
var pos1 = selectedItem.toString().lastIndexOf('-');
String currResult = (pos1 != -1)? selectedItem.substring(0, pos1): selectedItem;
if(int.parse(currResult)-1 == int.parse(previousResult)){
debugPrint("Correct order");
}else{
debugPrint("Incorrect order");
}
}
})
https://stackoverflow.com/questions/74401534
复制相似问题