如何将setState从导航器堆栈的最后一页发送到根页?

时间:2019-11-10 19:35:03

标签: flutter

我设计了我的应用,然后决定使用路由并使用Firebase进行身份验证。

如果用户要通过电子邮件登录,则在根页面中有一些按钮,请转到EmailLogin页面

EmailLogin页中,如果用户在进入EmailRegister页并注册之前未注册。

我用了3次Navigator.pop(),从堆栈中弹出:EmailRegisterEmailLoginLoginPage 然后按LoggedIn,但是当我按“后退”按钮时,我看到黑屏。


import 'package:flutter/material.dart';
import 'loginPage.dart';
import 'login-register/emailLogin.dart';
import 'login-register/emailRegister.dart';
import 'login-register/authentication.dart';
import 'logged-in/logged-in.dart';


BaseAuth auth = new Auth();

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      //home: LoginPage(),
      initialRoute: '/',
      routes: {
        // When navigating to the "/" route, build the FirstScreen widget.
        '/': (context) => LoginPage(),
        '/loggedIn' : (context) => LoggedIn(auth: auth),
        '/emailLogin': (context) => EmailLogin(),
        '/emailRegister': (context) => EmailRegister(auth: auth),
        //'/emailRegister': (context) => EmailRegister(),

      },
    );
  }
}

我改变了主意,决定为根路由设计HomePage,如果用户登录,请参见LoggedIn页,否则请参见loginPage,但我需要将setstate发送到{ {1}}小部件,但我如何发送?因为页面堆栈看起来像这样:根->登录->注册

我每页发送回调还是需要执行的操作?

1 个答案:

答案 0 :(得分:0)

我认为您之前安排页面路线的方式是正确的。您可以使用

  1. Navigator.of(context).popUntil(),返回到根目录。
  2. Navigator.of(context).pushAndRemoveUntil(),推动主目录并移除直到根目录

尽管这可以对导航查询进行排序,但我仍然不明白为什么要在首页中设置setState()。说明或一些代码会更好