无法选择复选框列表平铺颤动

Posted

技术标签:

【中文标题】无法选择复选框列表平铺颤动【英文标题】:Cannot Select Checkbox List Tile Flutter 【发布时间】:2020-07-26 17:25:31 【问题描述】:

我创建了一个值映射来制作复选框。该映射由字符串和布尔值组成,当布尔值更改时,复选框值应更改。

编辑 1:

我的列表视图复选框

CheckboxListTile(
                    title: new Text(
                      key,
                      style: textHeaderStyle,
                    ),
                    value: _selectedOrders.contains(undeliveryOrders[key]),
                    activeColor: Colors.pink,
                    checkColor: Colors.white,
                    onChanged: (bool value) 
                      setState(() 

                        if(value)
                        _selectedOrders.add(undeliveryOrders[key]);
                        undeliveryOrders[key] = value;

                        else
                          setState(() 
                            _selectedOrders.remove(undeliveryOrders[key]);
                          );
                        
                      );
                    ,
                  )

创建地图:

        void _formatOrders(availableOrders) 
    for (int i = 0; i < availableOrders.length; i++) 
      var tempOrder = '$availableOrders[i].customer.uniqueInfo.name , $availableOrders[i].address';
      undeliveryOrders['$tempOrder'] = false;

    
          print('$undeliveryOrders');
          print('$numbers');

  

选定的订购方式

var _selectedOrders = [];

  getItems() 
    undeliveryOrders.forEach((key, value) 
      if (value == false) 
        _selectedOrders.add(key);
      
    );

    print(_selectedOrders);

    _selectedOrders.clear();
  

【问题讨论】:

【参考方案1】:

我认为您可能过于复杂了每个值不必映射到布尔值,我这样做的方式是将要检查的值添加到数组中,然后检查该项目是否在该数组中如果不是假的话,它是真的。如果未选中复选框,您只需要记住删除该项目。这里有一些示例代码。

List<String> items = ['Item 1', 'Item 2', 'Item 3'];
List<String> isChecked = [];
//Initialized outside build

ListView(
          children: <Widget>[
            ...items
                .map(
                  (item) => CheckboxListTile(
                    subtitle: Text('This is a subtitle'),
                    secondary: Text('This is Secondary text'),
                    title: Text(item),
                    value: isChecked.contains(item),
                    onChanged: (bool value) 
                      if (value) 
                        setState(() 
                          isChecked.add(item);
                        );
                       else 
                        setState(() 
                          isChecked.remove(item);
                        );
                      
                    ,
                  ),
                )
                .toList()
          ],
        ),

【讨论】:

谢谢你!我只有一个问题。当我选择任何复选框时,所有项目都被选中。我可能歪曲了一些事情,因为我必须在动态生成数据时映射这些值。我将展示我现在编辑的内容。 没关系。我得到了它。谢谢!【参考方案2】:

你可以试试下面这段代码吗?

               onChanged: (bool value) 
                  setState(() 
                    undeliveryOrders[key] = value ?? false;
                  );
                ,

【讨论】:

以上是关于无法选择复选框列表平铺颤动的主要内容,如果未能解决你的问题,请参考以下文章

无法在颤动中正确显示列表

如何在颤动中使用复选框从列表中搜索数据

在颤动中单击按钮时添加小部件时处理动态复选框列表

复选框在颤动中丢失了检查值

无法选中好选择多个下拉列表的复选框?

检查列表是不是为空或 null 颤动