You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中如何从其他页面跳转至PageView.builder构建页面的指定索引页

实现方法

你只需要给Video0_01页面增加初始页入参,再把参数传给PageController的初始化属性即可,具体步骤如下:

步骤1:修改Video0_01页面代码,增加入参和控制器初始化逻辑

class Video0_01 extends StatefulWidget {
  // 新增可选参数,默认初始页为0,兼容原有调用逻辑
  final int initialPage;
  const Video0_01({super.key, this.initialPage = 0});

  @override
  State<Video0_01> createState() => _Video0_01State();
}

class _Video0_01State extends State<Video0_01> {
  late PageController _pageController;

  @override
  void initState() {
    super.initState();
    // 校验入参范围,避免索引越界报错
    final validPage = widget.initialPage.clamp(0, 30);
    // 初始化页面控制器时传入指定初始索引
    _pageController = PageController(initialPage: validPage);
  }

  @override
  void dispose() {
    _pageController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return PageView(
      // 绑定控制器
      controller: _pageController,
      // 你原有PageView的31个页面子项
      children: [
        // 页面0、页面1...页面30
      ],
    );
  }
}

步骤2:修改按钮跳转逻辑,传入指定索引

比如要直接打开索引为2的页面,跳转时给Video0_01传入initialPage参数即可:

LearnLevelButton(
    color: FavoriteButtons[0] ? Colors.orange : const Color(0xff7ba6f9),
    text: '1-1',
    onTap: () async {
      await Navigator.pushReplacement(
        context, 
        MaterialPageRoute(
          builder: (context) => const Video0_01(
            initialPage: 2, // 此处填写你需要跳转的指定索引
          ),
        )
      );
    }
)

注意事项

  • 代码中已经加了索引范围校验,即使传入小于0或者大于30的数值,也会自动修正到合法范围内,不会触发崩溃
  • 因为给initialPage设置了默认值0,原有没有传参的调用逻辑完全不受影响,不需要额外修改

内容的提问来源于stack exchange,提问作者eno2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 05:45:08