Флаттер как убрать нижнюю навигацию с навигацией - PullRequest
0 голосов
/ 14 сентября 2018

Я хочу удалить все сложенные маршруты и вернуться на страницу авторизации.Моя домашняя страница выглядит следующим образом.

class _HomeScreenState extends State<HomeScreen> {
      final List<StatelessWidget> pages = [
        new Page1(),
        new Page2(),
        new Page3(),
        new Page3(),
      ];        

      @override
      Widget build(BuildContext context) {
        return new WillPopScope(
          onWillPop: () async {
            await Future<bool>.value(true);
          },
          child: new CupertinoTabScaffold(
            tabBar: new CupertinoTabBar(
              activeColor: Colors.blue,
              inactiveColor: Colors.grey,
              items: const <BottomNavigationBarItem>[
                BottomNavigationBarItem(
                  icon: Icon(Icons.looks_one),
                  title: Text('Page1'),
                ),
                BottomNavigationBarItem(
                  icon: Icon(Icons.looks_two),
                  title: Text('Page2'),
                ),
                BottomNavigationBarItem(
                  icon: Icon(Icons.looks_3),
                  title: Text('Page3'),
                ),
                BottomNavigationBarItem(
                  icon: Icon(Icons.looks_4),
                  title: Text('Page4'),
                ),
              ],
            ),
            tabBuilder: (BuildContext context, int index) {
              return new DefaultTextStyle(
                style: const TextStyle(
                  fontFamily: '.SF UI Text',
                  fontSize: 17.0,
                  color: CupertinoColors.black,
                ),
                child: new CupertinoTabView(
                  builder: (BuildContext context) {
                    return pages[index];
                  },
                ),
              );
            },
          ),
        );
      }
    }

И я хочу удалить CupertinoTabBar при выходе пользователя из системы.Я попробовал вот так.

Navigator.of(context).pushReplacement(MaterialPageRoute(builder: (context) => new AtuhScreen()));

Он правильно вышел на экран, но нижняя навигация все еще видна.
Как правильно удалить нижнюю навигацию?

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Код

Navigator.of(context).pushReplacement(MaterialPageRoute(builder: (context) => new AtuhScreen()));

будет исправлен следующим образом:

Navigator.of(context, rootNavigator: true).pushReplacement(MaterialPageRoute(builder: (context) => new AtuhScreen()));

rootNavigator: true получит самый высокий корневой виджет Scaffold или MaterialApp и не будет отображать BottomNavigationBar.

0 голосов
/ 15 сентября 2018

Поскольку вы используете FireBase_auth: тогда вы можете использовать StreamBuilder для обработки процесса подписи и выхода.Например:

final FirebaseAuth _auth = FirebaseAuth.instance;
void main() {
  runApp(MaterialApp(
    //home: MyLoginPage(),
    home: StreamBuilder(
        stream: _auth.onAuthStateChanged,
        builder: (context, snap) {
          if (snap.connectionState == ConnectionState.waiting) {
            return SplashScreen();
          } else {
            if (snap.hasData) {
              return HomeScreen(
                user: snap.data,
                signOut: signOut,
              );
            }
            return MyLoginPage();
          }
        }),
    theme: ThemeData(
        primarySwatch: Colors.blue,
        accentColor: Colors.blue),
  ));
}

void signOut() async {
  await _auth.signOut();
}

Затем вы можете просто вызвать SignOut () с любого из экранов страницы, и вы получите новый экран. Как показано в примере MyLoginPage ().Нравится:

class Page3 extends StatelessWidget {
  final Function signOut;

  Page3(this.signOut);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Third'),
      ),
      body: Center(child: RaisedButton(onPressed: ()=> signOut,child: Text("Sign-Out"),),),
    );
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...