簡體   English   中英

顫動滾動到列表中的特定項目

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM