5 Réponses :
J'ai eu le même problème et j'ai trouvé l'exemple dans le firebase_auth
https://github.com/flutter/plugins/blob/master/packages/firebase_auth/example/lib/main.dart
Essayez de remplacer votre méthode handleSignIn avec
Future<FirebaseUser> _handleSignIn() async { GoogleSignInAccount googleUser = await _googleSignIn.signIn(); GoogleSignInAuthentication googleAuth = await googleUser.authentication; final AuthCredential credential = GoogleAuthProvider.getCredential( accessToken: googleAuth.accessToken, idToken: googleAuth.idToken, ); final FirebaseUser user = await _auth.signInWithCredential(credential); print("signed in " + user.displayName); return user; }
Il se peut que la méthode signInWithGoogle soit valide mais je n'ai rien trouvé dessus et le code ci-dessus fonctionne pour moi.
Cela a résolu le problème de compilation. Au moment de l'exécution, je suis en mesure de m'authentifier avec le compte Google, mais maintenant cette méthode lance 'PlatformException (sign_in_failed, com.google.android.gms.common.api.ApiException: 16:, null)'
Cela s'est avéré être un problème de configuration. Problème résolu. Merci, Paul.
@ T.Cervenka quel problème de configuration était-ce et comment l'avez-vous résolu ?? Parce que j'obtiens également la même exception au moment de l'exécution
Désolé, je ne me souviens pas exactement de ce qui n'allait pas. J'ai trouvé tellement de problèmes de configuration pour flutter / firebase_auth que j'ai pris des notes que je serais heureux de vous envoyer si vous m'envoyez un mail à tom@cervenka.org
_auth.signInWithCredential
renvoie Future
.
Comme l'a dit @Nimish David Mathew, il renvoie le résultat, il pourrait donc être: résultat final = attendre _auth.signInWithCredential (credential); utilisateur final = result.user;
Cette implémentation a été à nouveau modifiée, donc maintenant _auth.signInWithCredential renvoie une instance AuthResult, et vous pouvez accéder à l'utilisateur en tant que propriété de cet objet.
Future<FirebaseUser> _handleSignIn() async { GoogleSignInAccount googleUser = await _googleSignIn.signIn(); GoogleSignInAuthentication googleAuth = await googleUser.authentication; final AuthCredential credential = GoogleAuthProvider.getCredential( accessToken: googleAuth.accessToken, idToken: googleAuth.idToken, ); final AuthResult authResult = await _auth.signInWithCredential(credential); FirebaseUser user = authResult.user; print("signed in " + user.displayName); return user; }
c'est une méthode pour se connecter avec google auth
Future<FirebaseUser> signInWithGoogle() async { final GoogleSignInAccount googleSignInAccount = await googleSignIn.signIn(); final GoogleSignInAuthentication googleSignInAuthentication = await googleSignInAccount.authentication; final AuthCredential credential = GoogleAuthProvider.getCredential( accessToken: googleSignInAuthentication.accessToken, idToken: googleSignInAuthentication.idToken, ); final AuthResult authResult = await _firebaseAuth.signInWithCredential(credential); final FirebaseUser user = authResult.user; final FirebaseUser currentUser = await _firebaseAuth.currentUser(); if (currentUser != null) { final QuerySnapshot result = await Firestore.instance .collection('users') .where("id", isEqualTo: currentUser.uid) .getDocuments(); final List<DocumentSnapshot> document = result.documents; if (document.length == 0) { Firestore.instance .collection('users') .document(currentUser.uid) .setData({ 'id': currentUser.uid, 'username': currentUser.displayName, 'profilePicture': currentUser.photoUrl }); } else {} } return user;
}
import 'package:firebase_auth/firebase_auth.dart'; import 'package:google_sign_in/google_sign_in.dart'; final FirebaseAuth _auth = FirebaseAuth.instance; final GoogleSignIn googleSignIn = GoogleSignIn(); Future<String> signInWithGoogle() async { final GoogleSignInAccount googleSignInAccount = await googleSignIn.signIn(); final GoogleSignInAuthentication googleSignInAuthentication = await googleSignInAccount.authentication; final AuthCredential credential = GoogleAuthProvider.getCredential( accessToken: googleSignInAuthentication.accessToken, idToken: googleSignInAuthentication.idToken, ); final AuthResult authResult = await _auth.signInWithCredential(credential); final FirebaseUser user = authResult.user; assert(!user.isAnonymous); assert(await user.getIdToken() != null); final FirebaseUser currentUser = await _auth.currentUser(); assert(user.uid == currentUser.uid); return 'signInWithGoogle succeeded: $user'; } follow this approach which simple and best in my point view
Veuillez ajouter des commentaires au code pour l'expliquer. Cela peut aider les futurs visiteurs.
Cette réponse a été copiée à partir d'ici: Classe non définie 'FirebaseUser'
À partir de la version firebase_auth 0.18.0 :
Dans la dernière version de firebase_auth
, la classe FirebaseUser
a été remplacée par User, et la classe AuthResult
a été remplacé par UserCredentail
. Par conséquent, changez votre code comme suit:
var user = FirebaseAuth.instance.currentUser; print(user.uid);
FirebaseUser
changé en User
AuthResult
changé en UserCredential
GoogleAuthProvider.getCredential ()
changé en GoogleAuthProvider.credential ()
onAuthStateChanged
qui notifie les modifications de l'état de connexion de l'utilisateur a été remplacé par authStateChanges()
currentUser ( )
qui est une méthode pour récupérer l'utilisateur actuellement connecté, a été remplacée par la propriété currentUser
et elle ne renvoie plus un Future
. p>
Exemple des deux méthodes ci-dessus:
FirebaseAuth.instance.authStateChanges().listen((event) { print(event.email); });
Et:
Future<User> currentUser() async { final GoogleSignInAccount account = await googleSignIn.signIn(); final GoogleSignInAuthentication authentication = await account.authentication; final GoogleAuthCredential credential = GoogleAuthProvider.credential( idToken: authentication.idToken, accessToken: authentication.accessToken); final UserCredential authResult = await _auth.signInWithCredential(credential); final User user = authResult.user; return user; }
Est-ce que cela répond à votre question? Méthode Flutter Firebase.signInWithGoogle introuvable