我的页面上有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(),
],
),
),
),
),
],
),
);
}
}
答案 0 :(得分:0)
我没有发现任何检测滚动源的方法。因此,我只是将每个可滚动的子项包围在其自己的NotificationListener中。我不希望任何子级滚动一直冒泡,因为我只希望父级scrollView通知冒起气泡。所以,我给每个孩子包了:
NotificationListener<ScrollNotification>(
onNotification: (boolval) { return true; },
child: ScrollableChildOfChoice()
)