在用户拖动时实现垂直翻译窗口小部件的有效方法

时间:2019-06-06 18:07:57

标签: flutter

我想在用户拖动时垂直转换小部件。我尝试使用两个选项来实现它:

  1. AnimationController
  2. 价值通知者。

因此,当我使用动画控制器时,滚动不是很平滑,并且即使动画的持续时间为1毫秒,在延迟后仍会滚动小部件。

当我使用值通知程序实现它时,效果要好得多,但仍不如ListView滚动平滑。有没有更好的方法来在用户拖动时滚动\翻译小部件?

1 个答案:

答案 0 :(得分:0)

我为此找到了更好的解决方案。尽管可以使用手势检测器来实现,但这并不是那么平滑。 Flutter为此提供了另一个很棒的小部件,它是 DraggableScrollableSheet

如果您想要一个可滚动列表的容器,该列表可通过调整可滚动对象的大小直到达到限制来响应拖动手势,然后滚动该控件即可。

 DraggableScrollableSheet(
              initialChildSize: .70,
              minChildSize: .70,
              builder: (BuildContext context, ScrollController scrollcontroller){

                scrollcontroller.addListener((){

                });
            return  Container(

                child: ListView.builder(
                    controller: scrollcontroller,
                    itemCount: widget.songs.length,
                    itemBuilder: (BuildContext context, int index) {
                      return buildSongRow(widget.songs[index]);
                    })
            );
          })

上面的列表最初将放置在屏幕高度的70%处。向上滚动时,它将列表向上拖动到顶部,然后列表作为普通列表视图滚动。滚动时到达顶部时,列表将向下拖动到初始位置(高度的70%)。