0

如何在modalbottomsheet中应用组复选框?我有创建组复选框,它的工作正常。但是当我将它放入 modalbottomsheet 时,状态不会立即改变(需要重新打开才能看到值的变化)。我确实用 StatefulBuilder 包装了 checkboxListTile 并提供了 StateSetter。任何解决方案?谢谢

这是我的代码

Column(
                          children: [
                            StatefulBuilder(builder:
                                (BuildContext context,
                                    StateSetter setState) {
                              return CheckboxListTile(
                                controlAffinity:
                                    ListTileControlAffinity.leading,
                                value: checkAllPermit,
                                title: Text('Permit', style: TextStyle(fontWeight: FontWeight.bold)),
                                onChanged: (value) {
                                  setState(() {
                                    checkAllPermit = value;
                                    _permitType.forEach((tipePermit){
                                      tipePermit.value = value;
                                    });
                                  });
                                },
                              );
                            }),
                            ListView.builder(
                              shrinkWrap: true,
                              itemCount: _permitType.length,
                              itemBuilder: (context, index) {
                                return StatefulBuilder(builder:
                                    (BuildContext context,
                                        StateSetter state) {
                                  return CheckboxListTile(
                                    controlAffinity:
                                        ListTileControlAffinity.leading,
                                    value: _permitType[index].value,
                                    title: Text(_permitType[index].title),
                                    onChanged: (value) {
                                      state(() {
                                        _permitType[index].value = value;
                                      });
                                    },
                                  );
                                });
                              },
                            ),
                          ],
                        ),
4

1 回答 1

0

List.forEach在您想要使用 List 的每个元素执行操作的情况下很有用。

但是当您想要更新您所在州的列表时,这不是一个好方法。

当你这样做

_permitType.forEach((tipePermit){
  tipePermit.value = value;
});

您只是在更新您的内部单个元素的引用,_permitType而不是实际更新您的引用_permitType,这会导致您的 UI 无法更新。

而是这样做,

_permitType = _permitType.map((_) => value);

有了这个,您map不仅可以更新每个元素,value还可以更改对_permitType通过调用获得的这个新 List 的引用.map

第二,

当您调用StateSetter从 获取的 时StatefulBuilder,只有构建器内的小部件会被重建,builder而不会重建 builder 之外的小部件。

在您的用例中,似乎没有任何需要,StatefulBuilder因为您没有使用context它给您的。

因此,只需删除StatefulBuilder并正常使用它。

于 2021-06-09T05:07:53.617 回答