在一个子视图上有事件需要操作数据的情况下,应该想到:
- 由数据的持有者本身(model)进行数据操作
- 将事件回调到数据持有者进行处理
在 Flutter 中子视图的事件可以通过闭包函数的形式进行回调
参考前面的文章[列表的使用和 widget 的封装](https://www.jianshu.com/p/35a98564908d的示例,为 MessageCard 新增一个回调函数。
class MessageCard extends StatelessWidget {
Message data;
Function delete; // 点击删除按钮时的回调
// 提供一个语义清晰的构造器
MessageCard({this.data, this.delete});
Widget build(BuildContext context) {
return Column(
children: <Widget>[
Text(data.text),
FloatButton(
onPressed: delete,
label: Text("删除"),
icon: Icon(Icons.delete)),
],
),
}
}
而对应地在构造 MessageCard
时需要传入闭包函数,并且嵌套在 setSate()
中。
// main.dart
MessageCard(data: item, delete: () {
setState(() {
list.remove(item);
});
});
```““‘
网友评论