1.在 ListView 的 itemBuilder 中使用 GestureDetector 或 InkWell 等手势控件,为每一项添加编辑按钮或长按事件,触发编辑功能。
ListView.builder(
itemCount: _items.length,
itemBuilder: (BuildContext context, int index) {
return GestureDetector(
onTap: () => Navigator.push(
context,
MaterialPageRoute(
builder: (context) => EditPage(item: _items[index]),
),
),
child: ListTile(
title: Text(_items[index].text),
// 其他 Widget
),
);
},
);
2.在 EditPage 中使用 TextEditingController,将要编辑的项的值传入文本输入框中,用户修改完成后再将修改后的值赋给原先的项。
class EditPage extends StatefulWidget {
final Item item;
EditPage({Key key, this.item}) : super(key: key);
@override
_EditPageState createState() => _EditPageState();
}
class _EditPageState extends State {
final _controller = TextEditingController();
@override
void initState() {
super.initState();
_controller.text = widget.item.text;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('编辑'),
),
body: Padding(
padding: const EdgeInsets.all(8.0),
child: TextField(
controller: _controller,
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
final text = _controller.text;
if (text.isNotEmpty) {
setState(() {
widget.item.text = text;
});
Navigator.pop(context);
}
},
child: Icon(Icons.save),
),
);
}
}
上一篇:编辑列表中的项目
下一篇:编辑路径点或线的选择