flutter - 是否可以在 NotificationListener 中检测 ScrollNotification 的来源
问题描述
我的页面中有 4 个可滚动小部件,1 个垂直(主)和 3 个水平。
和 2 个可滚动小部件(1 个垂直和 1 个水平)触发背景视差动画。
我如何检测哪个 Scrollable 小部件正在调度 ScrollNotification。
这是示例:
class MYPage extends StatefulWidget {
MYPage({Key key}) : super(key: key);
@override
_MYPageState createState() => _MYPageState();
}
class _MYPageState extends State<MYPage> {
double scrollX = 0.0;
double scrollY = 0.0;
@override
Widget build(BuildContext context) {
return Scaffold(
body: Stack(
fit: StackFit.expand,
children: <Widget>[
ParallaxBackground(scrollX, scrollY),
Positioned.fill(
child: NotificationListener<ScrollNotification>(
onNotification: (notification) {
double scrollOffset = notification.metrics.pixels;
setState(() {
if (notification.metrics.axis == Axis.horizontal) {
this.scrollX = scrollOffset;
} else {
this.scrollY = scrollOffset;
}
});
return true;
},
child: SingleChildScrollView(
child: Column(
children: <Widget>[
Content(),
HorizontalScrollableContent(),
Content(),
HorizontalScrollableContentWithParallaxControl(),
Content(),
HorizontalScrollableContent(),
Content(),
],
),
),
),
),
],
),
);
}
}
解决方案
我没有注意到任何检测卷轴来源的方法。所以,我只是将每个可滚动的子对象包围在它自己的 NotificationListener 中。我不希望任何子滚动条一直冒泡,因为我只想让父滚动视图通知冒泡。所以,我用:
NotificationListener<ScrollNotification>(
onNotification: (boolval) { return true; },
child: ScrollableChildOfChoice()
)