Dialog中使用CheckBoxModal实现复选框列表点击后状态无实时更新问题咨询
问题根因
- 代码中已经引入了StatefulBuilder获取Dialog内的局部刷新能力,但点击事件触发后没有调用StatefulBuilder提供的
setState方法,导致UI无法感知数据变更及时刷新 - 若
onItemClicked方法内修改的不是getinstruction列表中原有对象的属性,也会出现数据变更无法映射到UI的问题
修复代码
Container( height: 180, child: ListView( shrinkWrap: false, physics: NeverScrollableScrollPhysics(), children: [ Wrap( crossAxisAlignment: WrapCrossAlignment.center, alignment: WrapAlignment.center, children: [ ...getinstruction .map( (item) => Container( width: 150, child: StatefulBuilder(builder: (context, setState) { return ListTile( onTap: () { onItemClicked(item); // 调用StatefulBuilder的setState触发Dialog内局部刷新 setState(() {}); }, leading: Checkbox( value: item.value, onChanged: (bool? value) { onItemClicked(item); // 调用StatefulBuilder的setState触发Dialog内局部刷新 setState(() {}); }, ), title: Text(item.title), ); }), ), ) .toList(), ], ), ]), );
额外注意事项
- 确保
onItemClicked方法内直接修改传入item对象的value属性,不要创建新的item对象替换列表中原有元素 - 若需要在Dialog关闭后依然保留复选框选择状态,修改
item.value后同步调用外层Widget的setState更新全局状态即可
内容的提问来源于stack exchange,提问作者KYflutterrookie
相关产品推荐
相关产品推荐

