[Flutter] 事件的传递(回调)

在一个子视图上有事件需要操作数据的情况下,应该想到:

  • 由数据的持有者本身(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);
        });
});
```““‘