使用 Scrollable.ensureVisible(context); 完成滾動
SingleChildScrollView(
child: Column(
children: [
_item1(),
_item2(),
_item2(),
],
),
)
先給列表中的每個item設(shè)置key
Widget _item1() {
return Container(
key: const GlobalObjectKey(1),
//...
);
}
Widget _item2() {
return Container(
key: const GlobalObjectKey(2),
//...
);
}
Widget _item3() {
return Container(
key: const GlobalObjectKey(3),
//...
);
}
點擊觸發(fā)滾動
onTap: (int key) {
if (GlobalObjectKey(key).currentContext != null) {
Scrollable.ensureVisible(GlobalObjectKey(key).currentContext!);
}
}
Scrollable.ensureVisible傳入指定GlobalObjectKey的currentContext,即可滾動到指定Widget的位置熏迹。
ensureVisible也可以設(shè)置Curve動畫
image.png
這里列表使用的組件是SingleChildScrollView而非ListView弦牡,因為ListView只會渲染當(dāng)前屏幕中的item凡傅,當(dāng)item劃出屏幕就會被回收灸促,item的currentContext也就獲取不到了猴誊,因而無法完成滾動