【问题标题】: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();
  }

【问题讨论】:

    标签: flutter dart checkboxlist


    【解决方案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;
                      });
                    },
    

    【讨论】:

      猜你喜欢
      • 2020-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多