【问题标题】:Dart how to disable select in MultiSelectContainer onChangeDart如何在MultiSelectContainer onChange中禁用选择
【发布时间】:2022-11-14 18:12:15
【问题描述】:

我正在寻找一种方法来禁用在onchange 中单击MultiSelectContainer。我试图搜索这个并找不到出路。

bool scheduleDeselect = true;

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(    enabled: scheduleDeselect,
                                                          
                                                              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];
                                                        debugPrint("lasted:$lst");

                                                        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)){
// I will like to apply the disable click here.
                                                         debugPrint("Correct order");
                                                       }else{


        scheduleDeselect = false;
                                                                                                          debugPrint("Incorrect order");


                                                       }

                                                      }


                                                    })

从上面我想在if(int.parse(currResult)-1 == int.parse(previousResult)){ } 中实现禁用。提前致谢。

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    当生成items 时,您可以在MultiSelectCarddisable 您的项目,如下所示:

    items: List.generate(dataSchedule == null ? 0 : dataSchedule.length,
         (index) => MultiSelectCard(
               enabled: false,//<--- add this
               value: index.toString() +"-"+ dataSchedule[index]['time_slot'], label: dataSchedule[index]['time_slot'],)),
    

    您可以将逻辑放在那里以禁用特定项目。

    【讨论】:

    • 谢谢,但这不会禁用点击的项目
    • 你确定吗?这将使项目不可点击。你能用我的解决方案更新你的问题吗?
    • 我刚刚做了,当 if 语句为真时,点击的项目仍然被点击。
    • 这行不通,您需要将逻辑移到那里,而不是传递值。
    • 如果您向我解释您的逻辑,我可能会提供帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    • 2018-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多