【问题标题】:Why Bottom Tab is still visible when I navigate to another screen?为什么当我导航到另一个屏幕时底部选项卡仍然可见?
【发布时间】:2020-12-26 01:10:55
【问题描述】:

这是应用程序中的登录页面,登录后我的应用程序在底部选项卡下包含另外 2 个屏幕,但是当我尝试注销并导航回登录屏幕时,它确实导航但底部标签栏仍保留在底部这不在登录页面中。

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()
                },
              )),
    );
  }
}

谢谢。

【问题讨论】:

    标签: firebase flutter dart routes navigator


    【解决方案1】:
    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'))
    

    【讨论】:

    • 有关导航结帐的更多信息,请查看此链接“medium.com/flutter-community/flutter-push-pop-push-1bb718b13c31”@Himanshu Ranjan
    • 第二个解决方案真的很好用,你能告诉我为什么普通的 navigator.pushnamed 不起作用吗?为什么这个解决方案有效?谢谢
    • 当您注销时,它将通过删除所有路由(如主屏幕、仪表板等)将登录屏幕推送为新屏幕。当您使用 Navigator.push() 时,它将不起作用,您可以通过在应用程序中导航来使用它,注销或登录后,您需要将屏幕推送为新屏幕。因此,当您尝试按下后退按钮时,它不会转到任何一个屏幕,它将退出应用程序,因为所有路线都已删除从堆栈中,有关更多详细信息,请参阅我提供的链接@HimanshuRanjan
    • rootNavigator: true 将获取最高的根小部件 Scaffold 或 MaterialApp 并避免显示 BottomNavigationBar。
    猜你喜欢
    • 1970-01-01
    • 2022-11-05
    • 1970-01-01
    • 2023-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多