我正在使用拍子,我的问题是我创建了多个屏幕作为独立的dart文件...并且在主屏幕中我创建了一个抽屉...问题是:当我选择任何屏幕时,它会导航到它。 ..但问题是:
如果我按下硬件后退按钮..它将带我回到应用程序的第一个屏幕,即Splash屏幕。
如果我按下应用程序栏中的后退按钮...它将带我回到上一屏幕,但抽屉显示为打开状态!
如果抽屉打开,并且我按了“硬件后退”按钮,则它没有关闭……也使我回到了第一个屏幕(启动屏幕)……就像我的第一点一样。 例如:我的主页导航器代码:
onPressed:(){Navigator.push(context, MaterialPageRoute(builder:(context)=> Profile(), )
Nore:我已经读过WillPopScope ..并使用了它..但实际情况仍然如此。
任何帮助将不胜感激...最好的问候
答案 0 :(得分:1)
我解决了这一问题,方法是在将其推送到新屏幕之前,在初始屏幕中添加以下代码。
Navigator.popUntil(context, ModalRoute.withName('/scrren'));
答案 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(),
});