1,直接计算item显示的高度offsetY,该方案需要计算前面每个item的高度,非常麻烦,适合固定高度item的布局
_scrollController.animateTo( offsetY, duration: Duration(milliseconds: 500), curve: Curves.decelerate, );
2,通过GlobalKey获取指定item的位置信息,超过屏幕未渲染时无法获取
void scrollToWelfare(GlobalKey globalKey, double offsetY) { RenderBox? evaluationRenderObject = globalKey.currentContext?.findRenderObject() as RenderBox; if (evaluationRenderObject != null) { Offset offset = evaluationRenderObject!.localToGlobal(Offset(0, _scrollController.offset)); _scrollController.animateTo( offset.dy - offsetY, duration: Duration(milliseconds: 500), curve: Curves.decelerate, ); } }
注意:如果内容不多,可以在每个item外包一层Column,这样超过屏幕也会渲染出来。
WidgetsBinding.instance.addPostFrameCallback((timeStamp) { if (_shouldScrollToGoods) { scrollToGoods(_goodsKey, CommonUtils.topHeight(navigatorKey) + 88); } });