Flutter 技巧之移除滚动视图(ScrollView)中的拖拽溢出效果
前言
滚动视图中的拖拽溢出效果,出自 ScrollBehavior
添加的 GlowingOverscrollIndicator
组件。要禁止此效果,只需要通过 ScrollConfiguration
指定一个自定义 ScrollBehavior
即可。
如有需要,可以在自定义 ScrollBehavior 中覆盖 buildViewportChrome 方法,以实现自定义拖拽溢出效果。另外,如上文所述,默认 ScrollBehavior 在 Android 中的拖拽溢出效果,是由 GlowingOverscrollIndicator 绘制的(IOS 中默认的拖拽溢出效果与 Android 不一样)。
自定义 ScrollBehavior
1class MyBehavior extends ScrollBehavior {
2 @override
3 Widget buildViewportChrome(BuildContext context, Widget child, AxisDirection axisDirection) {
4 return child;
5 }
6}
全局移除(整个应用)
1MaterialApp(
2 builder: (context, child) {
3 return ScrollConfiguration(
4 behavior: MyBehavior(), // 花重点关注这里
5 child: child,
6 );
7 },
8 home: new MyHomePage(),
9);
局部移除
要在特定的 ListView 上进行移除,只需使用 ScrollConfiguration 将目标 ListView 包装起来即可:
1// 注意下面代码并不完整,只是为了演示
2ScrollConfiguration(
3 behavior: MyBehavior(),
4 child: ListView(
5 ...
6 ),
7);
旁门左道
通过在 ListView 或 SingleChildScrollView 上添加 NotificationListener
,并在其中调用 disallowGlow
来移除发光效果:
1NotificationListener<OverscrollIndicatorNotification>(
2 onNotification: (OverscrollIndicatorNotification overscroll) {
3 overscroll.disallowGlow();
4 return false;
5 },
6 // 注意下面代码并不完整,只是为了演示
7 child: SingleChildScrollView()
8)