如何将Firebase用户UID与Firestore文档ID进行匹配-Flutter



我是个新手。所以请耐心等待。

我正在使用Firebase和Provider创建一个房地产应用程序。我有两个根集合(1(";用户";和(2(";属性";

我想完成一项具体任务。虽然这看起来是一项简单的任务,但我仍然无法解决它。任务是将Firebase用户UID存储为名为"的rool集合的Firestore文档ID;用户";当用户注册时。

我遇到的问题是Firestore文档ID是自动生成的,而不是Firebase用户UID。此外,在Firestore中,userId字段显示为null。请在这里查看我的数据库截图

感谢您的关注和时间。

这是我的user_model.dart

class NayyaaUser {
String? uid;
String name;
String email;
String? phone;
NayyaaUser({this.uid, required this.name, required this.email, this.phone});
//send data to Firestore
Map<String, dynamic> toMap() {
return {
'userId': uid,
'userName': name,
'userEmail': email,
'userPhone': phone,
};
}
//draw data from firestore
factory NayyaaUser.fromFirestore(Map<String, dynamic> firestore) =>
NayyaaUser(
uid: firestore['userId'],
email: firestore['userEmail'] ?? " ",
name: firestore['userName'] ?? " ",
phone: firestore['userPhone'] ?? " ",
);
} 

这是我的user_provider.dart

class UserProvider extends ChangeNotifier {
final firestoreService = FirestoreService();
final authService = AuthService();

String? _userId;
String? _name;
String? _email;
String? _phone;

//getters
String? get userId => _userId;
String? get name => _name;
String? get email => _email;
String? get phone => _phone;
//setters
changeName(String value) {
_name = value;
notifyListeners();
}
changeEmail(String value) {
_email = value;
notifyListeners();
}
changePhone(String value) {
_phone = value;
notifyListeners();
}
saveUserProfile() {
if (_userId == null) {
var updateUserProfile = NayyaaUser(
// userId: _userId,
uid: _userId,
name: name ?? '',
email: email ?? '',
phone: phone ?? '');
firestoreService.saveUserDataToFirestore(updateUserProfile);
} else {
var newUserProfile = NayyaaUser(
// userId: _userId,
uid: _userId,
name: name ?? '',
email: email ?? '',
phone: phone ?? '');
firestoreService.saveUserDataToFirestore(newUserProfile);
}
}
}

这是auth_service.dart

class AuthService {
final FirebaseAuth _authInstance = FirebaseAuth.instance;
//create user obj based on "User" from Firebase
NayyaaUser? _userFromFirebase(User? user) {
return user != null
? NayyaaUser(
uid: user.uid,
name: '',
email: '',
phone: '',
)
: null;
}
// auth change user stream
Stream<NayyaaUser?> get userAuthStatus {
return _authInstance.authStateChanges().map(_userFromFirebase);
}

// sign in with email + password
Future signIn(String email, String password) async {
try {
UserCredential userAuthResult = await _authInstance
.signInWithEmailAndPassword(email: email, password: password);
User? user = userAuthResult.user;
return _userFromFirebase(user!);
} catch (e) {
// ignore: avoid_print
print(e.toString());
return null;
}
}

Future signUp(String email, String password) async {
try {
UserCredential userAuthResult = await _authInstance
.createUserWithEmailAndPassword(email: email, password: password);
User? user = userAuthResult.user;
return _userFromFirebase(user);
} catch (e) {
print(e.toString());
return null;
}
}
// sign out
Future signOut() async {
try {
return await _authInstance.signOut();
} catch (e) {
// ignore: avoid_print
print(e.toString());
return null;
}
}
}

这是firestore_service.dart

class FirestoreService {
final CollectionReference _userRef =
FirebaseFirestore.instance.collection('users');
final CollectionReference _propertyRef =
FirebaseFirestore.instance.collection('properties');

//add or update user to firestore
Future<void> saveUserDataToFirestore(NayyaaUser nayyaaUserData) {
return _userRef.doc(nayyaaUserData.uid).set(nayyaaUserData.toMap());
}
// fetch user data from firestore
Stream<List<NayyaaUser>> getNayyaaUser() {
return _userRef.snapshots().map((snapshot) => snapshot.docs
.map((document) =>
NayyaaUser.fromFirestore(document.data() as Map<String, dynamic>))
.toList());
}
}

登录/注册成功后,您可以从FirebaseAuth.instance.currentUser?获取用户id?。uid

最新更新