【发布时间】:2018-09-01 11:54:45
【问题描述】:
我正在尝试构建一个流程,如果用户未登录,应用程序会将登录页面推送到堆栈上。一旦他们完成登录,它就会弹出登录页面并返回主页。
虽然 push 有效,但 pop 段不起作用 - 我可以让 pop 返回要推送的值,但我无法关闭 /login 路由。我错过了什么吗?
home_page.dart
class _HomePageState extends State<HomePage> with UserAccount {
@override
void initState() {
super.initState();
if (!isLoggedIn) {
print("not logged in, going to login page");
SchedulerBinding.instance.addPostFrameCallback((_) async{
var _val = await Navigator.of(context).pushNamed("/login");
print("I SHOULD HAVE POPPED");
print(_val);
Navigator.of(context).pop();
});
}
}
login_page.dart
class _LoginPageState extends State<LoginPage> with UserAccount {
void _googleLogin() async {
await googleClient.doGooglesignIn();
Navigator.of(context).pop(true);
}
导致的行为是:
1.登录界面被推送
2. 我可以登录
3. print("I SHOULD HAVE POPPED") 在我完成登录后运行
4. print(_val) 返回 true
5. pop 好像不行……
【问题讨论】:
-
您正在使用
Navigator.of(context),但您在使用它时没有任何上下文,因此它可能没有调用您期望的导航器。