我设计了我的应用,然后决定使用路由并使用Firebase进行身份验证。
如果用户要通过电子邮件登录,则在根页面中有一些按钮,请转到EmailLogin
页面
在EmailLogin
页中,如果用户在进入EmailRegister
页并注册之前未注册。
我用了3次Navigator.pop()
,从堆栈中弹出:EmailRegister
,EmailLogin
和LoginPage
然后按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}}小部件,但我如何发送?因为页面堆栈看起来像这样:根->登录->注册
我每页发送回调还是需要执行的操作?
答案 0 :(得分:0)
我认为您之前安排页面路线的方式是正确的。您可以使用
Navigator.of(context).popUntil()
,返回到根目录。Navigator.of(context).pushAndRemoveUntil()
,推动主目录并移除直到根目录尽管这可以对导航查询进行排序,但我仍然不明白为什么要在首页中设置setState()。说明或一些代码会更好