当用户返回主屏幕时关闭侧边抽屉 (Flutter)

Close side drawer when user comes back to home screen (Flutter)

在我创建的侧抽屉中,当用户点击任何 link 时,用户会转到该屏幕并且抽屉也会关闭,这没有问题,当用户打开侧抽屉并按返回键时,抽屉关闭,这也有效。

但是,假设用户单击 'My Profile' link(或任何 link),然后用户从个人资料屏幕按返回键返回主屏幕(或使用应用栏中的后退键),用户发现侧边抽屉在主屏幕上打开。然后用户必须按返回键或点击屏幕上的任意位置才能关闭抽屉。

最初,我的抽屉甚至没有关闭后压,我发现了这个 post [ 并实现了 WillPopScope() [实际上这帮助我关闭了背压抽屉],但是我已经解释过的问题仍然没有用 WillPopScope 解决。

请告诉我我必须做哪些更改才能实现此行为。

这就是我创建文件的方式:主页有 BottomNavigationDrawer,用户通过它进入购物页面(实际上标记为 'Home'),这是用户看到侧边抽屉的页面。因此,在上面解释我所说的主页时,我指的是用户导航到个人资料页面的购物页面。

class ShoppingPage extends StatefulWidget {
  @override
  _ShoppingPageState createState() => _ShoppingPageState();
}

class _ShoppingPageState extends State<ShoppingPage> {
  GlobalKey<ScaffoldState> _key = new GlobalKey<ScaffoldState>();
  @override
  Widget build(BuildContext context) {
    ThemeData getTheme = Theme.of(context);
    return WillPopScope(
      onWillPop: () async {
        if (_key.currentState.isDrawerOpen) {
          Navigator.of(context).pop();
          return false;
        }
        return true;
      },
      child: Scaffold(
        key: _key,
        appBar: AppBar(
          title: ,
          elevation: 0,
        ),
        drawer: CustomDrawer(),
        body: SafeArea(
          child: Container(

您只需调用 :-

Navigator.pop(context);

在从抽屉导航到另一个屏幕之前。就像当用户点击您的个人资料然后在 onTap 方法中首先弹出它然后导航。

onTap:(){
Navigator.pop(context);
//then write navigation statement over here
}

发生这种情况是因为导航抽屉仍在页面堆栈中。 当用户使用 link 导航到另一个屏幕时,它会将新屏幕添加到堆栈中。

你的尝试:

WillPopScope(
      onWillPop: () async {
        if (_key.currentState.isDrawerOpen) {
          Navigator.of(context).pop();
          return false;
        }

当用户在购物屏幕上按下后退按钮时关闭导航抽屉(如果它打开)。

在导航到下一个屏幕之前,您需要从堆栈中移除导航抽屉。您可以通过添加

Navigator.pop(context);

在导航逻辑之前。

你也可以试试

Navigator.pushReplacement(context, <newRoute>)

用新屏幕替换 Navigation Drawer,这也会产生相同的结果。