Firebase 当我导航到另一个屏幕时,为什么底部选项卡仍然可见?

Firebase 当我导航到另一个屏幕时,为什么底部选项卡仍然可见?,firebase,flutter,dart,routes,navigator,Firebase,Flutter,Dart,Routes,Navigator,这是应用程序中的登录页面,我的应用程序在登录后的底部选项卡下还包含两个屏幕,但当我尝试注销并导航回登录屏幕时,它确实进行了导航,但底部选项卡栏仍保留在底部,而不在登录页面中 FlatButton.icon( onPressed: () => { _auth.signOutGoogle(), Navigator.push(

这是应用程序中的登录页面,我的应用程序在登录后的底部选项卡下还包含两个屏幕,但当我尝试注销并导航回登录屏幕时,它确实进行了导航,但底部选项卡栏仍保留在底部,而不在登录页面中

FlatButton.icon(
              onPressed: () => {
                    
                    _auth.signOutGoogle(),
                    Navigator.push(
                        context,
                        MaterialPageRoute(
                            builder: (context) =>  SignIn()))
                  },
              icon: Icon(Icons.exit_to_app),
              label: Text('Sign Out'))
这是我的注销按钮,下面是我定义所有路线的main.dart文件

void main() {
  SystemChrome.setEnabledSystemUIOverlays([]);
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MultiProvider(
      providers: [
        StreamProvider.value(value: AuthService().user),
      ],
      child: Consumer<User>(
          builder: (ctx, auth, _) => MaterialApp(
                title: 'Flutter Demo',
                theme: ThemeData(
                  visualDensity: VisualDensity.adaptivePlatformDensity,
                ),
                home: Wrapper(),
                routes: {
                  '/homescreen': (ctx) => HomeScreen(),
                  '/signin': (ctx) => SignIn(),
                  '/dashboard': (ctx) => DashBoard(),
                  '/status': (ctx) => Status()
                },
              )),
    );
  }
}
void main(){
SystemChrome.SetEnabledSystemEmioVerlays([]);
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
//此小部件是应用程序的根。
@凌驾
小部件构建(构建上下文){
回程多供应商(
供应商:[
StreamProvider.value(值:AuthService().user),
],
儿童:消费者(
建筑商:(ctx,认证,)=>MaterialApp(
标题:“颤振演示”,
主题:主题数据(
视觉密度:视觉密度。自适应平台密度,
),
主:Wrapper(),
路线:{
“/homescreen”:(ctx)=>homescreen(),
“/signin”:(ctx)=>signin(),
“/dashboard”:(ctx)=>dashboard(),
“/status”:(ctx)=>status()
},
)),
);
}
}

谢谢。

有关导航签出此链接的更多信息“@Himanshu ranjan第二种解决方案确实很有效,您能告诉我为什么普通的navigator.pushnamed无法工作吗?为什么这个解决方案有效?谢谢当您注销时,它将通过删除所有路线(如主屏幕、仪表板等)将登录屏幕推为新屏幕。当您使用Navigator.push()时,它将不起作用,您可以通过NavaGate在应用程序中使用此功能,注销或登录后,您需要将屏幕推为新屏幕。因此,当您尝试按“上一步”按钮时,它不会转到任何一个屏幕,它将退出应用程序,因为所有路由都已从堆栈中移除,有关更多详细信息,请参阅我提供的链接@himanshuranjanter rootNavigator:true将获得最高的根小部件Scaffold或MaterialApp,并避免显示底部导航栏。
FlatButton.icon(
          onPressed: () => {
                    
           _auth.signOutGoogle(),

      Navigator.pushAndRemoveUntil(
      context,
      MaterialPageRoute(builder: (context) => SignIn()),
     (Route<dynamic> route) => false,);

          
                  },
              icon: Icon(Icons.exit_to_app),
              label: Text('Sign Out'))
  FlatButton.icon(
              onPressed: () => {
                        
               _auth.signOutGoogle(),

                 Navigator.of(context, rootNavigator: true).pushReplacement(
            MaterialPageRoute(builder: (context) => SignIn()));
              
                      },
                  icon: Icon(Icons.exit_to_app),
                  label: Text('Sign Out'))