flutter - Flutter:pageview.builder 跳转到目标页面位置
问题描述
综合浏览量有 1000 个项目,需要时间才能全部刷完。如何跳转到当前页面的+10页面?我试过“final PageController _controller = PageController(initialPage: 0);” 但不知道怎么用
class Home extends StatefulWidget {
Home({ Key? key, required this.title,}) : super(key: key);
final String title;
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('stackoverflow'),
),
body: PageView.builder(
itemBuilder: (context, position) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Text(
'Page' + position.toString(),
),
ElevatedButton(
onPressed: () {
print('jump to +10 pages');
},
child: Text('Jump >> + 10'))
],
);
},
itemCount: 1000,
),
);
}
}
解决方案
让我们利用类的animateToPage()
方法PageController
:
_pageController.animateToPage(
_pageController.page + 10,
duration: const Duration(milliseconds: 400),
curve: Curves.easeInOut,
);
完整的片段如下:
class Home extends StatefulWidget {
Home({ Key? key, required this.title,}) : super(key: key);
final String title;
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
final PageController _pageController = PageController();
@override
void dispose() {
_pageController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('stackoverflow'),
),
body: PageView.builder(
controller: _pageController,
itemBuilder: (context, position) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Text(
'Page' + position.toString(),
),
ElevatedButton(
onPressed: () {
print('jump to +10 pages');
if (_pageController.hasClients)
_pageController.animateToPage(
_pageController.page + 10,
duration: const Duration(milliseconds: 400),
curve: Curves.easeInOut,
);
},
child: Text('Jump >> + 10'))
],
);
},
itemCount: 1000,
),
);
}
}
推荐阅读
- javascript - 如何使用 jQuery 设置文件输入源
- javascript - 我该如何解决-“订阅”类型上不存在属性“then”
- docker - 如何在 Docker 容器(Python、Flask 和 Redis)中启动自定义 RQ 工作者
- python - 有没有没有 CORS 的示例 API?
- wso2 - 如何对 JSON 消息的多个参数使用过滤器
- javascript - 如何在 Web 组件(原生 UI)之间进行通信?
- vim - 将两个 $ 符号之间的所有内容替换为 \( 和 \) 之间的文本
- android - 当软键盘覆盖部分内容时,如何允许在 Xamarin.Android (Xamarin.Forms) 中滚动?
- javascript - $error do no mutate in Vuelidate checkbox
- python - How to import a very large .sql file into a sqlite3 database in Python?