flutter - 如何在没有 PageView 的情况下使用 jumpToPage 内页
问题描述
我有 PageView 的第一页。
PageController _pageController = PageController();
List<Widget> _screens = [HomeScreen(), PanicScreen(), ChartScreen()];
PageView(
controller: _pageController,
children: _screens
)
我在HomeScreen()中有一个按钮,我想跳入ChartScreen()
HomeScreen.dart
class _HomeScreenState extends State<HomeScreen> {
final PageController _pageController = PageController(initialPage: 0);
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: SafeArea(
child: Stack(
children: [
GestureDetector(
onTap: () {
_pageController.jumpToPage(1);
},
ScrollController not attached to any scroll views.
'package:flutter/src/widgets/scroll_controller.dart':
Failed assertion: line 176 pos 12: '_positions.isNotEmpty'
解决方案
在 HomeScreen 中,您刚刚创建了一个新的滚动控制器。但是您没有将其设置为 PageView 的控制器属性。所以,它会抛出这样的错误。您必须使用已分配给 PageView 控制器属性的相同控制器变量来执行jumpToPage
方法。你可以试试下面的代码吗?
PageController _pageController = PageController();
List<Widget> _screens = [HomeScreen(controller: _pageController), PanicScreen(controller: _pageController), ChartScreen(controller: _pageController)];
PageView(
controller: _pageController,
children: _screens
)
使用滚动控制器实现的jumpToPage
方法。
class _HomeScreenState extends State<HomeScreen> {
const _HomeScreenState({this.controller});
final PageController controller;
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: SafeArea(
child: Stack(
children: [
GestureDetector(
onTap: () {
controller.jumpToPage(1);
},
}
或者将控制器用作全局变量并将其用于 HomeScreen 页面。在使用它之前,请确保控制器是否附加到 PageView 的控制器属性。
推荐阅读
- javascript - 我如何在淘汰赛中使用aa vue组件
- python - list.sort(key=list.count) 如何在 Python 3.x 中工作?
- c++ - C++ Windows Executable 使用 _WIN32_WINNT 以 Win7 为目标,但生成的 exe 导入不正确的 API Set Dlls
- powershell - 使用 powershell 将本地 AD 容器中每个安全组的 AD 成员列表导出到 csv 文件中
- android - Android Studio - 附加两个视频但显示黑屏
- javascript - 在 JS 中为帖子添加评论
- android - java.lang.RuntimeException:无法在单元测试中创建类 ViewModel 的实例
- python - 使用 numpy 使用 2D 数组的值更改 3D 数组中的子数组
- java - APDU 命令 VERIFY 返回 6a88
- javascript - API 调用导致未决承诺