点击AppBar返回按钮无法返回上一页,抛出MaterialPageRoute已释放异常
Flutter返回按钮失效及路由报错解决
- 报错
Cannot install a MaterialPageRoute<dynamic> after disposing it的核心原因是重复使用了已被销毁的路由实例。Flutter路由在被弹出(pop)后会自动触发dispose,如果后续代码尝试再次push这个已销毁的路由对象,就会抛出该异常。 - 针对性解决方法:
- 不要复用路由实例:每次跳转时都创建新的
MaterialPageRoute对象,示例代码:
避免提前创建路由实例并缓存(比如存在全局变量、页面状态中),反复调用同一个实例会触发销毁后复用的问题。Navigator.push( context, MaterialPageRoute(builder: (context) => YourTargetPage()), ); - 检查自定义返回按钮逻辑:如果自定义了AppBar的返回按钮,确保点击逻辑是调用
Navigator.pop(context),而不是尝试重新push旧路由。正确的自定义返回按钮示例:AppBar( leading: IconButton( icon: const Icon(Icons.arrow_back), onPressed: () => Navigator.pop(context), ), ) - 排查路由替换逻辑:如果使用了
Navigator.pushReplacement等替换路由的方法,旧路由会被销毁,此时要确保没有代码还持有该旧路由的引用并尝试复用。
- 不要复用路由实例:每次跳转时都创建新的
内容的提问来源于stack exchange,提问作者Usman Abubakar
相关产品推荐
相关产品推荐

