颤振Android后退按钮按下后,请保持我回到第一个屏幕,打开时未关闭抽屉

时间:2019-03-20 16:31:11

标签: android ios flutter navigation-drawer back

我正在使用拍子,我的问题是我创建了多个屏幕作为独立的dart文件...并且在主屏幕中我创建了一个抽屉...问题是:当我选择任何屏幕时,它会导航到它。 ..但问题是:

  1. 如果我按下硬件后退按钮..它将带我回到应用程序的第一个屏幕,即Splash屏幕。

  2. 如果我按下应用程序栏中的后退按钮...它将带我回到上一屏幕,但抽屉显示为打开状态!

  3. 如果抽屉打开,并且我按了“硬件后退”按钮,则它没有关闭……也使我回到了第一个屏幕(启动屏幕)……就像我的第一点一样。 例如:我的主页导航器代码:

    onPressed:(){Navigator.push(context,             MaterialPageRoute(builder:(context)=> Profile(),             )

Nore:我已经读过WillPopScope ..并使用了它..但实际情况仍然如此。

任何帮助将不胜感激...最好的问候

2 个答案:

答案 0 :(得分:1)

我解决了这一问题,方法是在将其推送到新屏幕之前,在初始屏幕中添加以下代码。

Navigator.popUntil(context, ModalRoute.withName('/scrren'));

Have a look at this document

答案 1 :(得分:0)

我可以使用 Navigator.popAndPushNamed() 方法解决这个问题。

void main() {
  runApp(MaterialApp(routes: {
    '/': (context) => SplashScreen(),
    '/home': (context) => HomePage(),
    '/signin': (context) => Confirm(),
  }));
}

在检查用户是否已经登录的函数中,我们可以根据布尔响应将新页面推送到屏幕上。通过这种方式,如果用户按下硬件后退按钮,则不会显示 SplashScreen() 并且应用程序将直接关闭。

Navigator.popAndPushNamed(context, '/home');

Navigator.popAndPushNamed(context, '/signin');

用户登录成功后,我们可以推送同一个Home()页面。

void _signIn(){
if (_success){
Navigator.popAndPushNamed(context, '/home');
}
}

@override
  Widget build(BuildContext context) {
    return MaterialApp(
      routes: {
        '/home': (context) => HomePage(),
      });