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

Flutter中MaterialPageRoute无法正常打开新页面问题求助

问题分析与解决

1. PopupMenuItem的onTap无法跳转页面的原因

showMenu 弹出的菜单在点击PopupMenuItem时,会优先触发菜单关闭逻辑,此时直接调用Navigator.push会因弹窗上下文的状态变化,导致导航操作被中断——这就是为什么print能正常执行,但页面跳转没反应的原因。

解决办法

把导航操作延迟到弹窗关闭后执行,用WidgetsBinding.instance.addPostFrameCallback等待当前帧结束(弹窗关闭)后再触发导航:

PopupMenuItem(
  onTap: () {
    print(movie.title);
    WidgetsBinding.instance.addPostFrameCallback((_) {
      Navigator.push(
        context,
        MaterialPageRoute(builder: (context) => MoreInfo(movie: movie)),
      );
    });
  },
  child: Text("More info"),
),

2. InkWell包裹后页面仅显示背景的原因

嵌套在PopupMenuItem里的InkWell,点击时使用的是弹窗内部的上下文,这个上下文不属于当前页面的导航栈,导致新页面的Scaffold无法正确渲染AppBar。

解决办法

使用rootNavigator: true获取根导航器的上下文,确保导航操作在正确的栈中执行:

InkWell(
  onTap: () {
    Navigator.push(
      Navigator.of(context, rootNavigator: true),
      MaterialPageRoute(builder: (context) => MoreInfo(movie: movie)),
    );
  },
  child: Text("More info"),
),

另外检查MoreInfo页面的Scaffold结构,确保补充body部分(如果需要),不过核心问题还是导航上下文的错误。

额外建议

优先修复PopupMenuItem的onTap来实现跳转,嵌套InkWell会破坏原生菜单的点击反馈逻辑,用户体验不如原生实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 19:45:29