大佬教程收集整理的这篇文章主要介绍了【Flutter实战】自定义滚动条,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
Scrollbar(
child: ListView.builder(
reverse: false,itemBuilder: (BuildContext context,int indeX) {
return Card(
child: Container(
height: 45,alignment: Alignment.center,child: Text('$index'),),);
},itemCount: 30,itemExtent: 50,)
@H_489_0@bool _handleScrollNotification(ScrollNotification notification) {
final ScrollMetrics metrics = notification.metrics;
print('滚动组件最大滚动距离:${metrics.maxScrollExtent}');
print('当前滚动位置:${metrics.pixels}');
return true;
}
@override
Widget build(BuildContext context) {
return NotificationListener<ScrollNotification>(
onNotification: _handleScrollNotification,child: ListView.builder(
reverse: false,int indeX) {
return Card(
child: Container(
height: 45,);
},);
}
@H_489_0@通过 ScrollNotification 获取当前滚动组件最大滚动距离和当前滚动位置,其中 @H_15_8@metrics.maxScrollExtent 表示当前滚动组件最大滚动距离,@H_15_8@metrics.pixels 表示当前滚动位置。
@H_489_0@通过这两个值计算滚动条在当前屏幕的位置,通过 Stack 组件 将 ListView 和 自定义的滚动条进行叠加显示:
NotificationListener<ScrollNotification>(
onNotification: _handleScrollNotification,child: Stack(
alignment: Alignment.topRight,children: <Widget>[
ListView.builder(
reverse: false,//滚动条
Container(
height: 100,width: 20,color: Colors.red,)
],)
@H_489_0@Container(
alignment: Alignment(1,_alignmentY),padding: EdgeInsets.only(right: 5),child: Container(
height: 100,)
@H_489_0@_alignmentY 就是计算出的偏移位置,计算方法如下:
_alignmentY = -1 + (metrics.pixels / metrics.maxScrollExtent) * 2;
@H_489_0@这里要注意 alignment 的坐标系:
@H_489_0@class _ScrollBar extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
width: 18,height: 60,decoration: BoxDecoration(
shape: BoxShape.rectangle,borderRadius: BorderRadius.all(Radius.circular(20)),color: Colors.bluE),child: column(
mainAxisAlignment: MainAxisAlignment.center,children: <Widget>[
Icon(
Icons.arrow_drop_up,size: 18,Icon(
Icons.arrow_drop_down,],);
}
}
@H_489_0@以上是大佬教程为你收集整理的【Flutter实战】自定义滚动条全部内容,希望文章能够帮你解决【Flutter实战】自定义滚动条所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。