无法选择复选框列表图块扑动

问题描述 投票:0回答:2

我已经创建了一个值映射表以创建复选框。该映射由String和bool组成,当bool的值更改时,复选框值也应更改。

如果我手动设置地图,则使用类似这样的数据

 Map<String, bool> examples = {
    'One': false,
    'Two': false,
    'Three': false,

  };

但是,当通过我的列表自动分配数据时,我在选择产品时遇到问题。

创建地图:

        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();
  }

我的ListView复选框

ListView(
              shrinkWrap: true,
              addRepaintBoundaries: true,
              children: undeliveryOrders.keys.map((String key) {
                return Padding(
                  padding: const EdgeInsets.all(4.0),
                  child: new CheckboxListTile(
                    title: new Text(
                      key,
                      style: textHeaderStyle,
                    ),
                    value: undeliveryOrders[key],
                    activeColor: Colors.pink,
                    checkColor: Colors.white,
                    onChanged: (bool value) {
                      setState(() {
                        undeliveryOrders[key] = value;
                      });
                    },
                  ),
                );
              }).toList(),
            ),
flutter dart checkboxlist
2个回答
0
投票

您可以尝试使用下面的代码吗?

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

0
投票

我认为您可能会使每个值都不必映射到布尔值而使事情复杂化,我将其添加到要检查的值的数组中,然后检查该项目是否在该数组中,如果它是它的如果不是,则为true。您只需要记住如果未选中此复选框,则删除该项目,这里是一些示例代码。

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()
          ],
        ),
© www.soinside.com 2019 - 2024. All rights reserved.