Firebase 选择现有帐户时,点击谷歌登录,无休止地加载图标

Firebase 选择现有帐户时,点击谷歌登录,无休止地加载图标,firebase,flutter,android-studio,dart,google-signin,Firebase,Flutter,Android Studio,Dart,Google Signin,选择现有帐户时,我会看到无休止的加载图标 我可以第一次创建一个帐户并登录,但当我关闭android studio,然后重新启动main.dart&emulator,然后尝试登录该现有帐户时,我会看到无限加载图标: 这是loginPage.dart代码:- import 'dart:async'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:firebase_auth/firebase_auth.

选择现有帐户时,我会看到无休止的加载图标

我可以第一次创建一个帐户并登录,但当我关闭android studio,然后重新启动main.dart&emulator,然后尝试登录该现有帐户时,我会看到无限加载图标:

这是
loginPage.dart
代码:-

import 'dart:async';

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:telegramchatapp/Pages/HomePage.dart';
import 'package:telegramchatapp/Widgets/ProgressWidget.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:google_sign_in/google_sign_in.dart';
import 'package:shared_preferences/shared_preferences.dart';


class LoginScreen extends StatefulWidget {

  LoginScreen({Key key}) : super(key : key);

  @override
  LoginScreenState createState() => LoginScreenState();
}



class LoginScreenState extends State<LoginScreen> {

  final GoogleSignIn googleSignIn = GoogleSignIn();
  final FirebaseAuth firebaseAuth = FirebaseAuth.instance;
  SharedPreferences preferences;

  bool isLoggedIn = false;
  bool isLoading = false;
  FirebaseUser currentUser;

  @override
  void initState() {
    // TODO: implement initState
    super.initState();

    isSignedIn();
  }

  void isSignedIn() async{
    this.setState(() {
      isLoggedIn = true;
    });

    preferences = await SharedPreferences.getInstance();
    isLoggedIn = await googleSignIn.isSignedIn();

    if(isLoggedIn){
      Navigator.push(context, MaterialPageRoute(builder: (context) => HomeScreen(currentUserId: preferences.getString("id"))));
    }

    this.setState(() {
      isLoading = false;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        decoration: BoxDecoration(
          gradient: LinearGradient(
            begin: Alignment.topRight,
            end: Alignment.bottomLeft,
            colors: [Colors.blueAccent, Colors.black12],
          ),
        ),
        alignment: Alignment.center,
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: <Widget>[
            Text(
              "Solef App",
              style: TextStyle(fontSize: 82.0, color: Colors.white, fontFamily: "Signatra"),
            ),
            GestureDetector(
              onTap: controlSignIn,
              child: Center(
                child: Column(
                  children: <Widget>[
                    Container(
                      width: 270.0,
                      height: 65.0,
                      decoration: BoxDecoration(
                        image: DecorationImage(
                          image: AssetImage(
                              "assets/images/google_signin_button.png"),
                        ),
                      ),
                    ),
                    Padding(
                      padding: EdgeInsets.all(1.0),
                      child: isLoading ? circularProgress() : Container(),
                    ),
                  ],
                ),
              ),
            )
          ],
        ),
      ),
    );
  }


  Future<Null> controlSignIn() async {

    preferences = await SharedPreferences.getInstance();

    this.setState(() {
      isLoading = true;
    });

    /*GoogleSignIn _googleSignIn = GoogleSignIn(
      scopes: [
        'email',
        'https://www.googleapis.com/auth/contacts.readonly',
      ],
    );*/
    
    GoogleSignInAccount googleUser = await googleSignIn.signIn();
    GoogleSignInAuthentication googleAuthentication = await googleUser.authentication;
    
    final AuthCredential credential = GoogleAuthProvider.getCredential(idToken: googleAuthentication.idToken, accessToken: googleAuthentication.accessToken);

    FirebaseUser firebaseUser = (await firebaseAuth.signInWithCredential(credential)).user;

    //SignIn Success
    if(firebaseUser != null){
      //check if already signup
      final QuerySnapshot resultQuery = await Firestore.instance.collection("users").where("id", isEqualTo: firebaseUser.uid).getDocuments();
      final List<DocumentSnapshot> documentSnapshots = resultQuery.documents;

      //save data to firestore - if new user
      if(documentSnapshots.length == 0){
        Firestore.instance.collection("users").document(firebaseUser.uid).setData(
            {
              "nickname": firebaseUser.displayName,
              "photoUrl": firebaseUser.photoUrl,
              "id": firebaseUser.uid,
              "aboutMe": "I'm using SOLEF chat app.",
              "createdAt": DateTime.now().millisecondsSinceEpoch.toString(),
              "chatingWith": null,
            });
          //write data to Local
          currentUser = firebaseUser;
          await preferences.setString("id", currentUser.uid);
          await preferences.setString("nickname", currentUser.displayName);
          await preferences.setString("photoUrl", currentUser.photoUrl);

      }else{
        //write data to Local
        currentUser = firebaseUser;
        await preferences.setString("id", documentSnapshots[0]["id"]);
        await preferences.setString("nickname", documentSnapshots[0]["nickname"]);
        await preferences.setString("photoUrl", documentSnapshots[0]["photoUrl"]);
        await preferences.setString("aboutMe", documentSnapshots[0]["aboutMe"]);
      }
      Fluttertoast.showToast(msg: "SignIn Successful.");
      this.setState(() {
        isLoading = false;
      });
      
      Navigator.push(context, MaterialPageRoute(builder: (context) => HomeScreen(currentUserId: firebaseUser.uid)));
      
    }
    
    //SignIn Not Success - Failed
    else{
      Fluttertoast.showToast(msg: "Try Again, SignIn Failed.");
      this.setState(() {
        isLoading = false;
      });
    }
  }


}
导入'dart:async';
导入“包:cloud_firestore/cloud_firestore.dart”;
导入“包:firebase_auth/firebase_auth.dart”;
进口“包装:颤振/材料.省道”;
导入“包:app/Pages/HomePage.dart”;
导入“package:app/Widgets/ProgressWidget.dart”;
进口“包装:fluttoast/fluttoast.dart”;
导入“包:google_sign_in/google_sign_in.dart”;
导入“package:shared_preferences/shared_preferences.dart”;
类LoginScreen扩展StatefulWidget{
LoginScreen({Key}):超级(Key:Key);
@凌驾
LoginScreenState createState()=>LoginScreenState();
}
类LoginScreenState扩展了状态{
最终谷歌签名谷歌签名=谷歌签名();
final FirebaseAuth FirebaseAuth=FirebaseAuth.instance;
共享参考偏好;
bool isLoggedIn=false;
bool isLoading=false;
FirebaseUser当前用户;
@凌驾
void initState(){
//TODO:实现initState
super.initState();
isSignedIn();
}
void isSignedIn()异步{
此.setState(){
isLoggedIn=真;
});
preferences=等待SharedReferences.getInstance();
isLoggedIn=等待googleSignIn.isSignedIn();
如果(isLoggedIn){
推送(上下文,MaterialPage路由(生成器:(上下文)=>主屏幕(currentUserId:preferences.getString(“id”)));
}
此.setState(){
isLoading=false;
});
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
主体:容器(
装饰:盒子装饰(
梯度:线性梯度(
开始:Alignment.topRight,
结束:对齐。左下角,
颜色:[colors.blueAccent,colors.black12],
),
),
对齐:对齐.center,
子:列(
mainAxisAlignment:mainAxisAlignment.center,
crossAxisAlignment:crossAxisAlignment.center,
儿童:[
正文(
“Solef应用程序”,
样式:TextStyle(fontSize:82.0,颜色:Colors.white,fontFamily:“Signatra”),
),
手势检测器(
onTap:controlSignIn,
儿童:中心(
子:列(
儿童:[
容器(
宽度:270.0,
身高:65.0,
装饰:盒子装饰(
图像:装饰图像(
图片:资产评估(
“资产/图像/谷歌登录按钮.png”),
),
),
),
填充物(
填充:所有边缘设置(1.0),
子项:isLoading?circularProgress():容器(),
),
],
),
),
)
],
),
),
);
}
Future controlSignIn()异步{
preferences=等待SharedReferences.getInstance();
此.setState(){
isLoading=true;
});
/*谷歌签名(
范围:[
“电子邮件”,
'https://www.googleapis.com/auth/contacts.readonly',
],
);*/
GoogleSignInAccount googleUser=等待googleSignIn.signIn();
GoogleSignInAuthentication googleAuthentication=等待googleUser.authentication;
final AuthCredential credential=GoogleAuthProvider.getCredential(idToken:googleAuthentication.idToken,accessToken:googleAuthentication.accessToken);
FirebaseUser FirebaseUser=(等待firebaseAuth.signInWithCredential(credential)).user;
//表示成功
if(firebaseUser!=null){
//检查是否已经注册
final QuerySnapshot resultQuery=wait Firestore.instance.collection(“users”)。其中(“id”,isEqualTo:firebaseUser.uid)。getDocuments();
最终列表文档快照=resultQuery.documents;
//将数据保存到firestore-如果是新用户
如果(documentSnapshots.length==0){
Firestore.instance.collection(“users”).document(firebaseUser.uid).setData(
{
“昵称”:firebaseUser.displayName,
“photoUrl”:firebaseUser.photoUrl,
“id”:firebaseUser.uid,
“aboutMe”:“我正在使用SOLEF聊天应用程序。”,
“createdAt”:DateTime.now().millissecondssinceepoch.toString(),
“chatingWith”:空,
});
//将数据写入本地
currentUser=firebaseUser;
wait preferences.setString(“id”,currentUser.uid);
wait preferences.setString(“昵称”,currentUser.displayName);
wait preferences.setString(“photoUrl”,currentUser.photoUrl);
}否则{
//将数据写入本地
currentUser=firebaseUser;
wait preferences.setString(“id”,documentSnapshots[0][“id]”);
等待首选项。setString(“昵称”,documentSnapshots[0][“昵称”]);
wait preferences.setString(“photoUrl”,documentSnapshots[0][“photoUrl]”);
wait preferences.setString(“aboutMe”,documentSnapshots[0][“aboutMe”]);
}
showtoots(msg:“SignIn Successful.”);
此.setState(){
isLoading=false;
});
推送(上下文,MaterialPage路由(生成器:(上下文)=>主屏幕(currentUserId:firebaseUser.uid));
}
//登录未成功-失败
否则{
showtoots(消息:“重试,登录失败”);
此.setState(){
isLoading=false;
});
}
}
}
这是主页。dart:<
import 'dart:async';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:google_sign_in/google_sign_in.dart';


import '../main.dart';


class HomeScreen extends StatefulWidget {

  final String currentUserId;
  HomeScreen({Key key, @required this.currentUserId}) : super(key : key);

  @override
  State createState() => HomeScreenState();
}

class HomeScreenState extends State<HomeScreen> {

  @override
  Widget build(BuildContext context) {
    return RaisedButton.icon(onPressed: logoutUser, icon: Icon(Icons.close), label: Text("Sign Out"));
  }

  final GoogleSignIn googleSignIn = GoogleSignIn();

  Future<Null> logoutUser() async{
    await FirebaseAuth.instance.signOut();
    await googleSignIn.disconnect();
    await googleSignIn.signOut();

    Navigator.of(context).pushAndRemoveUntil(MaterialPageRoute(builder: (context) => MyApp()), (Route<dynamic> route ) => false);

  }
}


class UserResult extends StatelessWidget
{
  @override
  Widget build(BuildContext context) {

  }
}