动作后生成颤振路线?

Generating Flutter route after action?

我试图在成功登录后自动返回到我的菜单屏幕,但我在生成 Widget 构建 and/or 上下文时遇到了问题。我在无状态小部件中执行此操作。这是我的代码。我想在最后一个打印语句之后调用路由...

Future<Null> _handleSignIn() async {
    try {
      await _googleSignIn.disconnect();
      GoogleSignInAccount googleUser = await _googleSignIn.signIn();
      GoogleSignInAuthentication googleAuth = await googleUser.authentication;

      print(googleAuth.idToken);

      await FirebaseAuth.instance.signInWithGoogle(idToken: googleAuth.idToken, accessToken: googleAuth.accessToken);


    } catch (error) {
      print(error);
    }
    print("Let's Do This");
    print(_googleSignIn.currentUser.displayName);
    print(FirebaseAuth.instance.currentUser);
  }

根据我从您的问题中了解到的情况,您基本上需要设置登录按钮,以便在成功登录后将用户重定向到您希望他们所在的位置。

您可以按如下方式设置您的 onPressed 调用,从这里开始应该没问题:

onPressed: () {_handleSignIn().whenComplete( ()=>Navigator.of(context).pushNamed("/MyHome"));
                      }

注意您不能在构建方法之外使用 Navigator,因此您始终需要在小部件中处理导航部分。 查看此答案的评论。

还有另一种无需用户交互的方法。

class SplashScreen extends StatelessWidget {

  Future<bool> _checkSignIn(BuildContext context) async {
    await globals.checkSignIn();
    globals.intialRoute = '/';
    if (globals.signInMode == SignInMode.SignedIn) {
      Navigator.of(context).pushNamedAndRemoveUntil('/', ModalRoute.withName('/splash'));
    } else {
      Navigator.pushReplacementNamed(context, '/login');
    }
    return true;
  }

  @override
  Widget build(BuildContext context) {
    _checkSignIn(context);
    return Scaffold(
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        crossAxisAlignment: CrossAxisAlignment.center,
        children: const <Widget>[
          CircularProgressIndicator(),
        ],
      ),
    );
  }
}

globals.checkSignIn() 方法检查用户是否已经登录。它 returns globals.signInMode 基于登录状态。根据状态,调用导航器导航到下一页。

在没有 "await" 的构建方法中调用了 _checkSignIn() 方法。这是因为我们的目的是在等待登录检查时只构建一个屏幕。检查完成后,导航器会处理剩下的事情。