动作后产生扑动路线



成功登录后,我试图自动将返回到菜单屏幕,并且在生成小部件构建和/或上下文时遇到了困难。我正在用无状态的小部件进行此操作。这是我的代码。我想在上次打印语句之后打电话...

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: () {_handleSignIn().whenComplete( ()=>Navigator.of(context).pushNamed("/MyHome"));
                      }

注意您无法在构建方法之外使用导航器,因此您始终需要处理小部件内的导航零件。检查此答案的评论。

没有用户交互的另一种方法可以做到。

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()方法检查用户是否已经签名。它基于signin状态返回Globals.SignInmode。基于状态,导航器被要求导航到下一页。

_checkSignin()方法在没有"等待"的构建方法中调用。这是因为我们的目的是在等待签名检查时仅构建屏幕。检查完成后,导航器会处理其余的。

相关内容

  • 没有找到相关文章

最新更新