我已经实现了Firebase google登录并保持登录状态,但是似乎我一直在瞬间看到登录页面。也许我应该添加加载指示器?如果是这样,我应该怎么做,顺便说一句,我已经添加了负载,但没有显示。还是我的代码实现有问题?下面是我的代码和gif。
final FirebaseAuth _auth = FirebaseAuth.instance;
final GoogleSignIn _googleSignIn = new GoogleSignIn();
class LoginPage extends StatefulWidget {
@override
_LoginPageState createState() => _LoginPageState();
}
class _LoginPageState extends State<LoginPage> {
FirebaseUser user;
bool loading = false;
bool isLoggedIn = false;
void onLoginStatusChanged(bool isLoggedIn) {
setState(() {
this.isLoggedIn = isLoggedIn;
});
}
@override
void initState() {
super.initState();
isSignedIn();
}
void isSignedIn() async {
setState(() {
loading = true;
});
isLoggedIn = await _googleSignIn.isSignedIn();
if (isLoggedIn) {
Navigator.pushReplacement(
context, MaterialPageRoute(builder: (context) => HomePage()));
}
setState(() {
loading = false;
});
}
Future _testSignInWithGoogle() async {
setState(() {
loading = true;
});
final GoogleSignInAccount _currentUser = await _googleSignIn.signIn();
final GoogleSignInAuthentication googleAuth =
await _currentUser.authentication;
final AuthCredential credential = GoogleAuthProvider.getCredential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
final FirebaseUser user = await _auth.signInWithCredential(credential);
assert(user.email != null);
assert(user.displayName != null);
assert(!user.isAnonymous);
assert(await user.getIdToken() != null);
final FirebaseUser currentUser = await _auth.currentUser();
assert(user.uid == currentUser.uid);
if (user != null) {
setState(() {
loading = false;
});
Navigator.pushReplacement(
context, MaterialPageRoute(builder: (context) => HomePage()));
} else {
Fluttertoast.showToast(msg: "Login failed :(");
}
return currentUser;
}
}