Flutter代码中Navigator.pop()运行异常 点击返回按钮出现白屏崩溃
问题根因及解决方案
核心原因
你在HotDrinks子页面内嵌套了独立的MaterialApp,导致该页面内部的Navigator导航栈和项目全局导航栈完全隔离:
- 你从其他页面跳转进入
HotDrinks时,是将整个HotDrinks组件添加到全局导航栈中 - 但
HotDrinks内部重新创建了一个新的Navigator实例,它的初始路由就是MyHomePage,内部导航栈里只有这一个页面 - 你点击返回调用
Navigator.pop(context)时,弹出的是内部新Navigator的栈,弹完后内部栈为空,就会触发白屏崩溃,根本不会回到上层页面
修复方案
直接删除HotDrinks类中嵌套的MaterialApp即可,子页面不需要独立套MaterialApp,全局仅保留项目入口处的一个MaterialApp实例就足够。
修改后的HotDrinks代码参考:
class HotDrinks extends StatelessWidget { @override Widget build(BuildContext context) { // 直接返回页面内容,不要套MaterialApp return MyHomePage(); } }
如果不需要单独的MyHomePage封装,也可以直接把原MyHomePage的build方法内容移到HotDrinks的build中,删除多余的MyHomePage类即可。
辅助兼容方案
可以在pop前增加可弹出判断,避免出现空白崩溃:
onPressed: () { if (Navigator.of(context).canPop()) { Navigator.pop(context); } }
内容的提问来源于stack exchange,提问作者sara97
相关产品推荐
相关产品推荐

