Flutter取消ListView过度滑动效果

不止ListView,GridView、PageView等组件同样适用。

Flutter 3.10.1 方法

在ListView外包裹一个ScrollConfiguration,设置behavior参数,child就是ListView:

1
2
3
4
ScrollConfiguration(
behavior: ScrollConfiguration.of(context).copyWith(overscroll: false),
child: ListView(),
)

Flutter 3.3.3 方法

在早些时候的3.3.3版本我是用下面这个方法的,发现换到3.10.1后失效了。依然会有过度滑动的波纹效果,但变成了白色。

自定义一个类,继承ScrollBehavior,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import 'package:flutter/material.dart';

// 取消ListView过度滑动的水波纹效果
class OverScrollBehavior extends ScrollBehavior {
@override
Widget buildViewportChrome(
BuildContext context, Widget child, AxisDirection axisDirection) {
switch (getPlatform(context)) {
case TargetPlatform.iOS:
return child;
case TargetPlatform.android:
case TargetPlatform.fuchsia:
default:
return GlowingOverscrollIndicator(
// 不显示头部水波纹
showLeading: false,
// 不显示尾部水波纹
showTrailing: false,

axisDirection: axisDirection,
color: Theme.of(context).colorScheme.secondary,
child: child,
);
}
}
}

使用时在ListView外包裹一个ScrollConfigurationbehavior参数里实例化一个OverScrollBehavior即可:

1
2
3
4
ScrollConfiguration(
behavior: OverScrollBehavior(),
child: ListView(),
)