问题描述
我可以使用 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']
);
}
}
//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);