Flutter NestedScrollView TabView ListView 滚动到指定的位置
时间: 2023-09-17 10:13:33 浏览: 270
要让 `ListView` 滚动到指定的位置,可以使用 `ScrollController`,将其传递给 `ListView` 的 `controller` 参数。然后,调用 `animateTo` 方法,传递要滚动到的位置。以下是一个简单的示例代码:
```dart
class MyPage extends StatefulWidget {
@override
_MyPageState createState() => _MyPageState();
}
class _MyPageState extends State<MyPage> {
final List<String> items = List.generate(100, (index) => "Item $index");
final ScrollController _scrollController = ScrollController();
void _scrollToIndex(int index) {
_scrollController.animateTo(
index * 50.0, // 50.0 为每个 item 的高度
duration: Duration(milliseconds: 500),
curve: Curves.easeInOut,
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: NestedScrollView(
headerSliverBuilder: (context, _) {
return [
SliverAppBar(
title: Text("My Page"),
pinned: true,
expandedHeight: 200.0,
flexibleSpace: FlexibleSpaceBar(
background: Image.network(
"https://picsum.photos/200/300",
fit: BoxFit.cover,
),
),
bottom: TabBar(
tabs: [
Tab(text: "Tab 1"),
Tab(text: "Tab 2"),
Tab(text: "Tab 3"),
],
),
),
];
},
body: TabBarView(
children: [
ListView.builder(
controller: _scrollController,
itemCount: items.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(items[index]),
);
},
),
Container(color: Colors.green),
Container(color: Colors.blue),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: () => _scrollToIndex(20), // 滚动到第 20 个 item
child: Icon(Icons.arrow_downward),
),
);
}
}
```
在这个示例中,我们创建了一个 `MyPage` widget,使用了 `NestedScrollView` 和 `TabBarView`,其中包含了一个 `ListView`。我们创建了一个 `_scrollController`,并将其传递给了 `ListView` 的 `controller` 参数。然后,我们定义了一个 `_scrollToIndex` 方法,用于将 `ListView` 滚动到指定位置,这里以第 20 个 item 为例。最后,我们在页面中添加了一个悬浮按钮,点击它会调用 `_scrollToIndex` 方法,将 `ListView` 滚动到指定位置。
阅读全文