我在flutter中有一个ListView允许用户动态添加项目。添加项目后,我希望列表滚动到添加的项目。我已经将一个ScrollController附加到了ListView上,所以我可以使用animateTo来滚动,但是我不确定如何确定要向下滚动到的偏移量。我有这样的经历:

_scrollController.animateTo(
    addedIndex.toDouble() * 100,
    curve: Curves.easeOut,
    duration: const Duration(milliseconds: 300),
);

其中,addedIndex是将项目添加到列表的顺序。不过,这并不完全有效,而且似乎只有当我能算出列表中每一项的高度时才有效,我不知道该怎么做。有没有更好的方法来确定滚动到哪里?

最佳答案

首先,创建一个新的globalkey。

final GlobalKey globalKey = GlobalKey();

其次,将globalkey添加到要移动到的小部件中。
然后,根据globalkey获取小部件的位置。
RenderBox box = globalKey.currentContext.findRenderObject();
Offset offset = box.localToGlobal(Offset.zero);

获得的控件位置与当前页面显示状态相关,控件高度包括状态栏和应用栏高度。
状态栏高度
import 'dart:ui’;
MediaQueryData.fromWindow(window).padding.top

Appbar高度56.0
需要添加ScrollView的偏移量
double animationHeight = _controller.offset + offset.dy - MediaQueryData.fromWindow(window).padding.top - 56.0;
_controller.animateTo(animationHeight, duration: Duration(milliseconds: 500), curve: Curves.decelerate);

希望它能帮助你。

关于flutter - flutter 滚动到列表中的特定项目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57138020/

10-13 07:54