Navigator.pop()没有弹出最新的路线

时间:2018-03-22 21:38:07

标签: routing dart flutter

我正在尝试构建一个流程,如果用户未登录,则应用程序会将登录页面压入堆栈。完成登录后,会弹出登录页面并返回主页。

虽然推送有效,但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.按下登录屏幕 我可以登录 3.完成登录后,打印(“我应该已经弹出”) 4. print(_val)返回true 流行音乐似乎不起作用......

1 个答案:

答案 0 :(得分:1)

这是因为pushNamed 隐藏当前视图以显示新视图。

这意味着您的旧视图不再位于窗口小部件树上。因此,您以前用Navigator.of(context)完成的上下文不再存在。

您可以做的是将Navigator.of(context)的结果存储在局部变量中。并重复使用它来同时调用pushNamedpop

final navigator = Navigator.of(context);
await navigator.pushNamed('/login');
navigator.pop();