Flutter中打开新Modal bottom sheet时如何关闭旧弹窗?
解决Flutter Modal Bottom Sheet切换时关闭前一个弹窗的问题
直接在打开B弹窗的操作里,先关闭A弹窗再打开B弹窗即可,核心逻辑是打开新弹窗前主动关闭当前弹窗,具体代码示例如下:
// 在A弹窗的按钮点击事件中执行 onPressed: () { // 先关闭当前的A弹窗 Navigator.pop(context); // 打开B弹窗 showModalBottomSheet( context: context, builder: (context) { return YourBModalBottomSheet(); // 替换成你的B弹窗组件 }, ); },
如果遇到pop和showModalBottomSheet的时序问题(比如context未及时更新),可以借助SchedulerBinding延迟执行弹窗打开操作:
import 'package:flutter/scheduler.dart'; // ... onPressed: () { Navigator.pop(context); SchedulerBinding.instance.addPostFrameCallback((_) { showModalBottomSheet( context: context, builder: (context) => YourBModalBottomSheet(), ); }); },
要是弹窗嵌套在复杂导航结构里,可通过指定rootNavigator: true确保关闭的是最上层弹窗,避免context混淆:
Navigator.of(context, rootNavigator: true).pop();
这样操作后,从A切换到B时A会被直接关闭,返回时也不会回到A弹窗,而是回到弹窗打开前的页面。
内容的提问来源于stack exchange,提问作者Bhargav Dobariya
相关产品推荐
相关产品推荐

