[英]Flutter how to scroll to a specific item position in SliverList?
[英]Flutter scroll to specific item in list
我在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);
獲得的窗口小部件位置是相對於當前頁面顯示狀態的,窗口小部件的高度包括狀態欄和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);
希望對您有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.