所以我有一个我必须做的要求
使用带有可检查项目的下拉菜单创建表单域
所以我用 PopupMenuItem 创建了一个弹出菜单,但后来我遇到了 3 个问题
- 当一个项目被选择弹出被解雇
- 单击复选框未更新复选框状态
- 单击文本未更新复选框
所以我解决了所有这些问题,这可能对你们有帮助
- 在 PopupMenuItem 中设置 enabled = false 并用手势侦听器为点击侦听器包裹孩子
- 使用StatefulBuilder更新状态
- 解决方案1也解决了这个问题
这是代码->
onTapDown: (details) async {
state.didChange(
await showMenu(
context: context,
position: RelativeRect.fromLTRB(
details.globalPosition.dx,
details.globalPosition.dy,
0,
0,
),
items: itemList.keys
.map(
(e) => PopupMenuItem(
enabled: false,
child: StatefulBuilder(
builder: (BuildContext context,
StateSetter setState) {
return GestureDetector(
onTap: () {
setState(() {
itemList[e] = !itemList[e]!;
});
},
child: Row(
children: [
Expanded(child: Text(e)),
Checkbox(
value: itemList[e],
onChanged: (i) {
setState(() {
itemList[e] = i!;
});
},
),
],
),
);
},
),
),
)
.toList(),
elevation: 8.0,
).then((value) => null) ??
[],
);
}