Flutter   发布时间:2022-05-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了【Flutter实战】自定义滚动条大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_489_0@

【Flutter实战】自定义滚动条

@H_489_0@认情况下,Flutter 的滚动组件(比如 listView)没有显示滚动条,使用 Scrollbar 显示滚动条:

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@

【Flutter实战】自定义滚动条

@H_489_0@在滑动的过程中,右侧显示滚动条,然而 Scrollbar 无法实现自定义滚动条的样式,比如实现如下滚动条样式,

@H_489_0@

【Flutter实战】自定义滚动条

@H_489_0@这时需要自定义一个滚动条组件。

@H_489_0@实现自定义滚动条组件首先需要监听滚动组件 滚动的位置,使用 NotificationListener 监听滚动的位置:

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@

【Flutter实战】自定义滚动条

@H_489_0@将此滚动条和 NotificationListener 监听到的滚动事件联动,通过 Container 的 alignment 属性控制滚动条的位置:

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@

【Flutter实战】自定义滚动条

@H_489_0@最终效果

@H_489_0@

【Flutter实战】自定义滚动条

@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实战】自定义滚动条

@H_489_0@最后将代码封装,就可以给所有的滚动组件添加自定义的滚动条,而不仅仅是 ListView。

交流

@H_489_0@老孟Flutter博客地址(330个控件用法):http://laomengit.com

@H_489_0@欢迎加入Flutter交流群(微信:laomENGIt)、关注公众号【老孟Flutter】:

【Flutter实战】自定义滚动条

【Flutter实战】自定义滚动条

大佬总结

以上是大佬教程为你收集整理的【Flutter实战】自定义滚动条全部内容,希望文章能够帮你解决【Flutter实战】自定义滚动条所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: