有没有办法检测是否有打开的抽屉?

Is there a way to detect if there is any open drawer?

我有一个显示动画的 Flutter 应用程序。如果应用程序中的任何位置显示打开的抽屉或模态对话框(如 showModalBottomSheet),我希望动画暂停。

我可以直接处理特定抽屉的事件并自行管理状态。但是,我的应用程序中有多个必须跟踪的抽屉,感觉工作量很大。是否有一个全局位置可以让我检查抽屉(或模态对话框)是否在应用程序的任何位置打开?

是的,有办法知道导航抽屉是否打开

1.声明 GlobalKey

  GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();

2。为脚手架小部件分配一个键

 return Scaffold(
      key: _scaffoldKey,

3。用于任何您想知道抽屉状态的地方

_scaffoldKey.currentState.isDrawerOpen   // This return bool value True-Open, False-Close

showModalBottomSheet 和模态对话框都在使用通往 Navigator 的路径。这样就可以通过 ModalRoute.of(context)?.isCurrent != true 检查当前路线前面是否有另一条路线(或对话框)。

遗憾的是,Scaffold 的开放 Drawer 不是路线。然而,脚手架上不需要钥匙,但可以通过 Scaffold.of(context).isDrawerOpen 检查下一个父 Drawer 是否打开。

通过组合这两种状态,我可以检查动画是否应该暂停。