使用 Facebook Input 注册 Cloud Firestore

问题描述

我可以使用 Facebook 登录,但无法注册 Cloud Firestore。我如何获得建议的资源?我可以使用 Google 登录,但在这里我遇到了问题。我已经分享了下面的代码。我没有收到错误。该信息来自 Facebook,但点击了 try catch 过程中的按钮:

Future<Kullanici> facebookIleGiris() async {
 
  print("Login wiht facebook");
  FacebookLoginResult _result = await _facebookLogin.logIn(['email']);
  switch(_result.status){
    case FacebookLoginStatus.cancelledByUser:
    print("user logout");
    break;
    case FacebookLoginStatus.error:
      print("error");
      break;
    case FacebookLoginStatus.loggedIn:
      await _loginWithFacebook(_result);
    break;
  }
}
 
_loginWithFacebook(FacebookLoginResult _result) async {
  FacebookAccesstoken accesstoken = _result.accesstoken;
  AuthCredential _credential =
  FacebookAuthProvider.getCredential(accesstoken: accesstoken.token);
  AuthResult result = await _firebaseAuth.signInWithCredential(_credential);
  print('${result.user.uid}  ');
  print('${result.user.displayName} Now login');
  print('${result.user.email}  ');
  print('${result.user.photoUrl}   ');
  print('${result.user.phoneNumber}');
  return _kullaniciOlustur(result.user);

按钮点击

void _faceIleGiris() async {
  print("user clicked");
  var _yetkilendirmeServisi = Provider.of<YetkilendirmeServisi>(context,listen: false);
  print("user 2. step");
 
  try {
    Kullanici kullanici = await _yetkilendirmeServisi.facebookIleGiris();
    print("kullanici kontrole başladi ${kullanici.email}");
 
    if (kullanici != null) {
      print(" ${kullanici.email}");
 
      Kullanici fireStoreKullanici = await FirestoreServisi().kullaniciGetir(kullanici.id);
      if (fireStoreKullanici == null) {
        print("user created ${kullanici.email}");
 
        FirestoreServisi().kullaniciOlustur(
            id: kullanici.id,email: kullanici.email,kullaniciAdi: kullanici.userName,fotoUrl: kullanici.fotoUrl
        );
        print(" ${kullanici.email}");
        print("the end");
      }
    }
  }
      catch(ex){
    print(ex);
  }

用户.dart

import 'package:Flutter/cupertino.d art';
import 'package:cloud_firestore/cloud_firestore. dart';
import 'package:firebase_auth/firebase_auth. dart';
class Kullanici{
  final String id;
  final String userName;
  final String email;
  final String fotoUrl;
 
  Kullanici({@required this.id,this.userName,this.email,this.fotoUrl});
 
  factory Kullanici.firebasedenUret(FirebaseUser user){
    return Kullanici(id:user.uid,userName: user.displayName,email: user.email,fotoUrl: user.photoUrl
    );
 
 
  }
 
  factory Kullanici.dokumandanuret(DocumentSnapshot doc){
    return Kullanici(
        id: doc.documentID,userName: doc['kullaniciAdi'],email: doc['email'],fotoUrl: doc['fotoUrl']
 
    );
  }
}

createuser 方法

//Kullaniciolustur
class FirestoreServisi{
  final Firestore _firestore= Firestore.instance;
  Future<void> kullaniciOlustur({id,email,kullaniciAdi,fotoUrl=""}) async {
    await  _firestore.collection("kullanicilar").document(id).setData({
      "kullaniciAdi":kullaniciAdi,"email":email,"fotoUrl":fotoUrl,"dTarih":""
    });
    
  }

解决方法

当FacebookIleGiris()方法用Facebook登录时,将要启动的函数改成已启动的函数,错误已解决。

facebookIleGiris() async {
    print("facebook ile giriş başladi");
    FacebookLoginResult _result = await _facebookLogin.logIn(['email']);
    switch(_result.status){
      case FacebookLoginStatus.loggedIn:
       var a= await  _loginWithFacebook(_result);
       return a;
      break;
      case FacebookLoginStatus.cancelledByUser:
      print("kullanici çıktı");
      break;
      case FacebookLoginStatus.error:
        print("error");
        break;
    }
  }
 _loginWithFacebook(FacebookLoginResult _result) async {
    FacebookAccessToken accessToken = _result.accessToken;
    AuthCredential _credential =
    FacebookAuthProvider.getCredential(accessToken: accessToken.token);
    AuthResult result = await _firebaseAuth.signInWithCredential(_credential);
    print('${result.user.uid}  ');
    print('${result.user.displayName} şimdi giriş yaptı');
    print('${result.user.photoUrl}  ');
    print('${result.user.email}   ');
    print(result.runtimeType);
    return _kullaniciOlustur(result.user);

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...