我在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/