要保持锚点的情况下平滑显示小部件,你可以使用ScrollController
和ListView
小部件。下面是一个示例代码:
import 'package:flutter/material.dart';
class SmoothScrollPage extends StatefulWidget {
@override
_SmoothScrollPageState createState() => _SmoothScrollPageState();
}
class _SmoothScrollPageState extends State {
ScrollController _scrollController;
@override
void initState() {
super.initState();
_scrollController = ScrollController();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Smooth Scroll'),
),
body: ListView.builder(
controller: _scrollController,
itemCount: 100,
itemBuilder: (BuildContext context, int index) {
return ListTile(
title: Text('Item $index'),
);
},
),
floatingActionButton: FloatingActionButton(
onPressed: () {
_scrollToIndex(50); // 将滚动位置平滑滚动到索引50处
},
child: Icon(Icons.arrow_downward),
),
);
}
void _scrollToIndex(int index) {
// 获取要滚动到的位置的像素偏移量
double offset = index * 56.0; // 假设每个列表项高度为56.0
// 平滑滚动到指定位置
_scrollController.animateTo(
offset,
duration: Duration(milliseconds: 500), // 滚动动画持续时间
curve: Curves.easeInOut, // 滚动动画曲线
);
}
}
void main() {
runApp(MaterialApp(
home: SmoothScrollPage(),
));
}
在上面的示例中,我们创建了一个带有ListView.builder
的SmoothScrollPage
小部件。ListView.builder
接收一个ScrollController
来控制滚动行为,并通过itemBuilder
生成列表项。在floatingActionButton
的onPressed
回调中,我们调用_scrollToIndex
方法来平滑滚动到索引50的位置。
_scrollToIndex
方法使用ScrollController
的animateTo
方法来平滑滚动到指定位置。我们首先计算要滚动到的位置的像素偏移量,然后使用animateTo
方法将滚动位置平滑地滚动到指定的偏移量。您可以根据自己的需求调整滚动的持续时间和曲线。
最后,我们在main
函数中运行SmoothScrollPage
小部件。运行示例应用程序,当点击浮动操作按钮时,列表将平滑滚动到索引50的位置。