4
votes

Méthode Flutter Firebase.signInWithGoogle introuvable

J'essaie d'ajouter l'authentification Google dans mon application Flutter. Mais mon studio Android ne parvient pas à trouver la méthode signInWithGoogle sous la classe FirebaseAuth . Je veux dire quand j'écris FirebaseAuth. signInWithGoogle Le studio Android se plaint en disant La méthode signInWithGoogle n'est pas définie pour la classe Firebase .

J'ai déjà Firebase.signInWithEmailAndPassword et cela fonctionne bien.

J'ai ci-dessous la dépendance dans pubspec.yaml firebase_auth: ^ 0.8.0 + 1

Voici mes importations dans la classe ...

import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:google_sign_in/google_sign_in.dart';
import 'package:my_project/auth.dart';
import 'package:my_project/register.dart';
import 'package:my_project/signin/button_list.dart';
import 'package:my_project/signin/button_view.dart';
import 'package:my_project/utils.dart';
class _LoginPageState extends State<LoginPage> {
 final formKey = GlobalKey<FormState>();

// Google Sign In
final GoogleSignIn _googleSignIn = GoogleSignIn();
final FirebaseAuth _auth = FirebaseAuth.instance; // No errors so far

ci-dessous est la méthode dans la même classe qui montre l'erreur entrez la description de l'image ici

De plus, lorsque je clique sur ctrl + espace pour voir toutes les méthodes sous FirebaseAuth , le signInWithGoogle méthode du tout.

 entrez la description de l'image ici

s'il vous plaît aider! Merci d'avance ...


7 commentaires

Avez-vous suivi toutes les étapes ? Assurez-vous que vous disposez d'un FirebaseAuth.instance


Oui. En fait, j'ai déjà une connexion avec e-mail et mot de passe dans Firebase.


Vos importations semblent correctes. Ça doit être autre chose. Pouvez-vous modifier avec le code complet?


consultez l'exemple fourni dans le dépôt Firebase_auth github github.com/flutter/plugins/blob/master/packages/firebase_aut‌ h /…


@Harshapulikollu Je vais l'essayer aujourd'hui et mettre à jour le message. merci pour votre temps et votre aide


Merci @Harshapulikollu cela a résolu mon problème


Je vais l'afficher comme réponse, veuillez l'accepter.


3 Réponses :


10
votes

consultez l'exemple fourni dans le référentiel github firebase_auth https://github.com/ flutter / plugins / blob / master / packages / firebase_auth / example / lib / main.dart # L70

Future<String> _testSignInWithGoogle() async {
    final GoogleSignInAccount googleUser = await _googleSignIn.signIn();
    final GoogleSignInAuthentication googleAuth =
        await googleUser.authentication;
    final AuthCredential credential = GoogleAuthProvider.getCredential(
      accessToken: googleAuth.accessToken,
      idToken: googleAuth.idToken,
    );

    final AuthResult authResult = await _auth.signInWithCredential(credential);
    final FirebaseUser user = authResult.user;
    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);

    return 'signInWithGoogle succeeded: $user';
}


1 commentaires

Je pense que quelque chose a dû changer depuis, car de nos jours, _auth.signInWithCredential (credential) rend AuthResult pas FirebaseUser . Pour accéder à l'utilisateur, utilisez (wait _auth.signInWithCredential (credential)). User .



5
votes

Ajout à la réponse acceptée, depuis la version 0.12.0 de firebase_auth:

Les méthodes de connexion renvoient désormais AuthResult au lieu de FirebaseUser. Récupérez FirebaseUser à l'aide de la propriété user d'AuthResult.

La solution correcte est donc:

...
    final AuthResult authResult = await _auth.signInWithCredential(credential);
    final FirebaseUser user = authResult.user;
...


0 commentaires

0
votes

Au lieu d'utiliser fireebaseauth.signInWithGoogle (qui est déprécié)
utilisez:

Future handleSign() async {
preferences = await SharedPreferences.getInstance();
setState(() {
  loading = true;
});

GoogleSignInAccount googleUser = await googleSignIn.signIn();
GoogleSignInAuthentication googleSignInAuthentication = await googleUser
    .authentication;
AuthCredential credential = GoogleAuthProvider.getCredential(
    idToken: googleSignInAuthentication.idToken,
    accessToken: googleSignInAuthentication.accessToken);
}

Votre code ressemblera à ceci:

AuthCredential credential = GoogleAuthProvider.getCredential(
    idToken: googleSignInAuthentication.idToken,
    accessToken: googleSignInAuthentication.accessToken
);


0 commentaires