Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振:在等待Google登录完成时显示加载小部件_Flutter - Fatal编程技术网

Flutter 颤振:在等待Google登录完成时显示加载小部件

Flutter 颤振:在等待Google登录完成时显示加载小部件,flutter,Flutter,在登录Google时,就在我进入userInfoPath之前,屏幕变黑,然后再次显示登录页面,然后再转到userInfoPath。我正在尝试添加加载小部件,以便它可以很好地从google登录过渡到userInfoPath,但我可以获取加载小部件,并且它保持在加载小部件上,而不移动到UserInfoScreen,或者我根本无法获取它。关于如何解决这一问题的帮助将是巨大的 登录屏幕 class LoginScreen extends StatefulWidget { @override _L

在登录Google时,就在我进入userInfoPath之前,屏幕变黑,然后再次显示登录页面,然后再转到userInfoPath。我正在尝试添加加载小部件,以便它可以很好地从google登录过渡到userInfoPath,但我可以获取加载小部件,并且它保持在加载小部件上,而不移动到UserInfoScreen,或者我根本无法获取它。关于如何解决这一问题的帮助将是巨大的

登录屏幕

class LoginScreen extends StatefulWidget {
  @override
  _LoginScreenState createState() => _LoginScreenState();
}
class _LoginScreenState extends State<LoginScreen> {
  AuthService auth = AuthService();
  @override
  void initState() {
    super.initState();
    auth.getUser.then(
      (user) { 
        if (user != null) {
         Navigator.pushReplacementNamed(context, SharedStrings.userInfoPath);
        }
      },
    );
  }
  @override
  Widget build(BuildContext context) {
    return SafeArea(
          child: Scaffold(
        backgroundColor: white,
        body: Container(
          padding: Sizes2.edInsAll,
          decoration: const BoxDecoration(),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.center,
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
            children: [
              Image.asset(Strings.imageLogo,
                width: Sizes2.imageWidth,
                height: Sizes2.imageHeight,
              ),
              Text(SharedStrings.planetRescue, style: appName, textAlign: TextAlign.center),
              Text(Strings.liveSustainablySlogan, style: greySubTxt, textAlign: TextAlign.center),
              LoginButton(
                text: Strings.loginWithGoogle,
                icon: FontAwesomeIcons.google,
                color: orangeGrey,
                loginMethod: auth.googleSignIn,
              ),
              Container(
                margin: Sizes1.onlyBot,
                child: FlatButton.icon(
                  padding: Sizes2.edInsAll,
                  icon: const Icon(Icons.email, color: Colors.white),
                  color: orangeGrey,
                  onPressed: () => changeScreen(context, AuthWidget()),
                  label: Expanded(
                    child: Text(Strings.loginWithEmail, style: formalBtnTextSml, textAlign: TextAlign.center),
                  ),
                ),
              ),
  
...
加载小部件

class Loading extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Container(
      color: white,
      child: Center(
        child: SpinKitChasingDots(
          color: deepOrange,
          size: Sizes2.loadSz,
        ),
      ),
    );
  }
}

首先,创建以下两种方法:

void showDialogue(BuildContext context){
  showDialog(
  context: context,
  builder: (BuildContext context) => Loading(),
); 
}

void hideProgressDialogue(BuildContext context) {
Navigator.of(context).pop(Loading());}
然后在您的
登录按钮中,替换您的:

onPressed: () async {
      var user = await loginMethod();
      if (user != null) {
        Navigator.pushReplacementNamed(context, SharedStrings.userInfoPath);
      }
与:


让我知道这是否对您有效:)

欢迎:)我很高兴它在@SK7 Happy Coding:)@iamnabrink Happy Coding:)
onPressed: () async {
      var user = await loginMethod();
      if (user != null) {
        Navigator.pushReplacementNamed(context, SharedStrings.userInfoPath);
      }
    onPressed: () async {
        showDialogue(context);
          var user = await loginMethod();
          if (user != null) {
            hideProgressDialogue(context);
            Navigator.pushReplacementNamed(context, SharedStrings.userInfoPath);
          }