Flutter对话框跳转时自动关闭上一个对话框
解决方法
Flutter 里的对话框本质是压入 Navigator 路由栈的独立弹窗路由,你现在的写法是直接在当前弹窗的路由上面叠一层新路由,旧弹窗当然会留在栈里关不掉。
要实现点Continue就关当前弹窗、开新弹窗的效果,有两种常用写法:
方案1:先关当前弹窗,再弹新弹窗
直接改WelcomeDialog里Continue按钮的点击回调就行,先调Navigator.pop(context)把当前欢迎弹窗关掉,再执行新弹窗的展示逻辑:
// 仅修改原OutlinedButton的onPressed部分即可 onPressed: () { // 关闭当前WelcomeDialog Navigator.pop(context); // 弹出CommonDialog showDialog( context: context, builder: (BuildContext context) { return const CommonDialog(); }, ); },
这种写法最简单,所有Flutter版本都能兼容,不需要改其他代码。
方案2:直接替换当前弹窗路由(无动画断层)
要是觉得先关再开的两段动画衔接不流畅,可以直接把栈顶的当前弹窗路由替换成新弹窗的路由,不用单独写pop,动画过渡更自然:
onPressed: () { Navigator.of(context).pushReplacement( DialogRoute( context: context, builder: (context) => const CommonDialog(), ), ); },
注意:
DialogRoute是Flutter 2.0+ 自带的标准弹窗路由类,和showDialog默认用的路由类型完全一致,不会出现样式差异。
改完之后点Continue,旧的欢迎弹窗会被直接移除,屏幕上只会留新打开的通用弹窗,原来CommonDialog里Cancel按钮的关闭逻辑不用动,点了就能正常回到主页面。
内容的提问来源于stack exchange,提问作者I. Antonov
相关产品推荐
相关产品推荐

