你知道有些widget的作用是分发通知(notification)吗? 举例子,像是ListView这类,包含Scrollable的滚动Widget会分发ScrollNotification
通知会向上沿树状结构传递并调用visitor()方法检查每个祖先(ancestor)节点,除非中途被拦截回调
如果你使用的widget内含Scrollable这种widget,但widget不使用expose回调,你可能就得处理通知
child: SomeWidget(
//Uses a Scrollable
),
这样的话,要如何监听那些通知? 用NotificationListener来监听通知,挑个有分发通知功能的widget再议Wrap(NotificationListener)
child: NotificationListener(
child: SomeWidget(),
),
通知发送不一定得往父节点,只要有个祖先(ancestor)节点就行
child: NotificationListener(
child: Container(
child: SomeWidget(),
),
),
接着使用泛型(Generic)参数指定你要哦处理的通知类型
child: NotificationListener<ScrollNotification>(
child: SomeWidget(),
)
最后,再加入回调方法onNotification, 返回值若是true,表示通知讯息被拦截,向上传递就会终止
child: NotificationListener<ScrollNotification>(
onNotification: (notification) {
print('$notification');
return true;
},
child: SomeWidget(),
),
你也可扩展Notification的类来发送自定义通知
class MyNotification extends Notification {}
RaisedButton(
child: Text('Option A'),
onPressed: (){
MyNotification('A was selected!').dispatch(context);
}
),
如果想了解有关NotificationListenerr的内容,或者关于Flutter的其他功能,请访问flutter.dev
原文翻译自视频:视频地址