是否可以为
color
的顶部和底部 Overscroll
指示器设置不同的 ListView
?
我有
ListView
颜色渐变的背景,并希望它的顶部 Overscroll
指示器与渐变的顶部相匹配,底部指示器与渐变的底部相匹配。
您可以用
ListView
包裹 GlowingOverscrollIndicator
并设置其 color
参数。要更改顶部和底部的颜色,您可以向 ListView
的滚动控制器添加监听器。
var _color = Colors.blue;
_listener() {
if (_scrollController.offset >=
_scrollController.position.maxScrollExtent &&
!_scrollController.position.outOfRange) {
// bottom
setState(() {
_color = Colors.red;
});
}
if (_scrollController.offset <=
_scrollController.position.minScrollExtent &&
!_scrollController.position.outOfRange) {
// top
setState(() {
_color = Colors.blue;
});
}
}
@override
void initState() {
super.initState();
_scrollController.addListener(_listener);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: GlowingOverscrollIndicator(
axisDirection: AxisDirection.down,
color: _color,
child: ListView.builder(
controller: _scrollController,
physics: ClampingScrollPhysics(),
itemCount: 30,
itemBuilder: (context, index) {
return ListTile(
title: Text('$index'),
);
},
),
));
}
结果:
1. 将 ListView 包裹在
GlowingOverscrollIndicator
中
2. 使用新的滚动行为将
GlowingOverscrollIndicator
包装在 ScrollConfiguration 中
尝试使用下面的代码片段。
ScrollConfiguration(
behavior: ScrollBehavior(),
child: GlowingOverscrollIndicator(
axisDirection: AxisDirection.down,
color: Colors.yellow,
child: ListView.builder(
physics: ClampingScrollPhysics(),
itemCount: 15,
itemBuilder: (context, index) {
return ListTile(
title: Text("testing :$index"),
);
},
),
),
),