Как сделать идентификатор пользователя идентификатором документа во Flutter с помощью Firebase с помощью пакета Getx?
Несмотря на всю шумиху вокруг Getx, я решил использовать его в своем первом проекте, к сожалению, по getx не так много руководств по сравнению с другими. Это моя первая сборка, как я могу создать идентификатор пользователя в качестве идентификатора документа, я следую шаблону MVC, и это контроллер этой сборки.
Вот мой код.
import 'package:firebase_auth/firebase_auth.dart';
import 'package:get/get.dart';
import 'package:wlykmain/views/homepage.dart';
import 'package:wlykmain/views/login.dart';
class FirebaseController extends GetxController {
bool isHidden = true;
void toggleBetween() {
isHidden = !isHidden;
update();
}
FirebaseAuth _auth = FirebaseAuth.instance;
Rx<User> _firebaseUser = Rx<User>();
String get user => _firebaseUser.value?.email;
@override
// ignore: must_call_super
void onInit() {
_firebaseUser.bindStream(_auth.authStateChanges());
}
void signUp(
String firstname,
String lastname,
String email,
String password,
) async {
CollectionReference reference =
FirebaseFirestore.instance.collection("Users");
String uid = _auth.currentUser.uid;
reference.doc(uid).set({});
Map<String, dynamic> userdata = {
"First Name": firstname,
"Last Name": lastname,
"Email": email,
"uid": uid
};
await _auth
.createUserWithEmailAndPassword(email: email, password: password)
.then((value) {
reference.add(userdata).then((value) => (Get.offAll(LoginPage())));
}).catchError(
(onError) => Get.snackbar(
'Error creating account',
onError.message,
snackPosition: SnackPosition.TOP,
),
);
}
void login(String email, String password) async {
CollectionReference reference =
FirebaseFirestore.instance.collection("Users");
String uid = _auth.currentUser.uid;
reference.doc(uid).set({"uid": uid});
return await _auth
.signInWithEmailAndPassword(email: email, password: password)
// ignore: unnecessary_statements
.then((value) {
(Get.offAll(MyHome()));
}).catchError(
(onError) => Get.snackbar('Error while logging in', onError.message),
);
}
void signOut() async {
await _auth.signOut().then((value) => Get.offAll(LoginPage()));
}
}
1 ответ
Вы должны заменить на
doc(uid).set()
в твоей
signUp()
метод:
void signUp(
String firstname,
String lastname,
String email,
String password,
) async {
// ...
await _auth
.createUserWithEmailAndPassword(email: email, password: password)
.then((value) {
reference.doc(uid).set(userdata).then((value) => (Get.offAll(LoginPage())));
}).catchError(
(onError) => Get.snackbar(
'Error creating account',
onError.message,
snackPosition: SnackPosition.TOP,
),
);
}
add()
генерирует новый ключ для этого документа Cloud Firestore, а
doc()
позволяет указать ключ.