【发布时间】:2020-11-12 17:15:23
【问题描述】:
我试图让我的应用删除用户点击的位置,但它会删除最后一个列表项。 这部分是我要删除的地方。关于 onTap 功能。我将它设置为在我认为应该是项目生成器创建的 int 的索引处删除。
void _showPopupMenu(Offset offset, index) async {
double left = offset.dx;
double top = offset.dy;
await showMenu(
context: context,
position: RelativeRect.fromLTRB(left, top, 10000, 0),
items: [
PopupMenuItem(
value: 'Delete',
child: ListTile(
title: Text('Delete'),
onTap: (){
setState(() {
checkBoxesCheckedStates.remove(index);
});
}
),
),
],
elevation: 4.0,
);
}
下一位是创建列表内容的位置。我有一种感觉,我可能不得不将它改为 int,而不是 List bool,但我不是 100% 确定。
List<bool> checkBoxesCheckedStates = [false];
Widget build(BuildContext context) {
return Column(
children: <Widget>[
Expanded(
child: ListView.builder(
itemCount: checkBoxesCheckedStates.length,
itemBuilder: (BuildContext context, int index){
return CheckboxListTile(
title: TextField(
autocorrect: true,
),
value: checkBoxesCheckedStates[index],
secondary: GestureDetector(onTapDown: (TapDownDetails details){
_showPopupMenu(details.globalPosition, checkBoxesCheckedStates[index]);
},child: Icon(Icons.delete)),
onChanged: (bool newValue) {
setState(() {
checkBoxesCheckedStates[index] = newValue;
});
},);
},
),
),
Align(
alignment: Alignment.bottomRight,
child: FloatingActionButton(
child: Icon(Icons.add),
onPressed: (){
setState(() {
checkBoxesCheckedStates.add(false);
});
},
),
)
],
);
}
【问题讨论】:
标签: flutter listview dart setstate