首页 > 解决方案 > 自动展开/折叠 SliverAppBar

问题描述

如果有一种方法可以实现在用户停止滚动的中间位置(SliverAppBar 的collapsedHeight 和expandedHeight 之间)时自动将SliverAppBar 滚动到折叠或展开状态。

在此处输入图像描述

标签: flutter

解决方案


不确定这是否是最好的方法,但它有效:

     final _controller = ScrollController();

     ...

     Scaffold(
        body: NotificationListener<ScrollNotification>(
      onNotification: (scrollNotification) {
        if (scrollNotification is ScrollEndNotification &&
            scrollNotification.depth == 0) {
          final minExtent = scrollNotification.metrics.minScrollExtent;
          final maxExtent = scrollNotification.metrics.maxScrollExtent;
          final middle = (maxExtent - minExtent) / 2;
          final pos = scrollNotification.metrics.pixels;

          double scrollTo;
          if (minExtent < pos && pos <= middle)
            scrollTo = minExtent;
          else if (middle < pos && pos < maxExtent) scrollTo = maxExtent;
          if (scrollTo != null)
            // Doesn't work without Timer
            Timer(
                Duration(milliseconds: 1),
                () => _controller.animateTo(scrollTo,
                    duration: Duration(milliseconds: 300),
                    curve: Curves.ease));
        }
        return false;
      },
      child: NestedScrollView(
          controller: _controller,
          ...

工作示例


推荐阅读