Как сделать идентификатор пользователя идентификатором документа во 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() позволяет указать ключ.

Другие вопросы по тегам