我在Flutter中有一个ListView
,允许用户向其中动态添加项目。添加项目后,我希望列表滚动到添加的项目。我在ScrollController
上附加了ListView
,因此可以使用animateTo
进行滚动,但是不确定如何确定向下滚动的偏移量。我有这样的东西:
_scrollController.animateTo(
addedIndex.toDouble() * 100,
curve: Curves.easeOut,
duration: const Duration(milliseconds: 300),
);
其中addedIndex
是项目添加到列表的顺序。但这并不是很有效,并且似乎只有在我能弄清楚列表中每个项目的高度时才能起作用,但我不确定该怎么做。有没有一种更好的方法可以准确地找到要滚动到的位置?
答案 0 :(得分:0)
首先,创建一个新的globalKey。
final GlobalKey globalKey = GlobalKey();
第二,将globalKey添加到要移动到的小部件。
然后,基于globalKey获取窗口小部件的位置。
RenderBox box = globalKey.currentContext.findRenderObject();
Offset offset = box.localToGlobal(Offset.zero);
获得的窗口小部件位置是相对于当前页面显示状态的,窗口小部件的高度包括状态栏和AppBar的高度。
状态栏高度
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);
希望它会对您有所帮助。