如何在没有 PageView 的情况下使用 jumpToPage 内页

时间:2021-02-23 23:22:30

标签: flutter dart

我有一个带有 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'

1 个答案:

答案 0 :(得分:0)

在 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);
                  },
}

或将控制器用作全局变量并将其用于主屏幕页面。在使用之前,请确保控制器是否附加到 PageView 的控制器属性。