У меня есть 2 метода. Один, который создает пользователя, называется signUp, а другой, который добавляет отображаемое имя в профиль пользователя, называется updatesUser. Во время процесса регистрации я также вызываю метод updateUser. После успешной регистрации пользователь отправляется на домашний экран.

Однако при завершении регистрации, когда пользователь находится на главном экране, отображаемое имя показывается как "null". Но потом все работает, когда тот же пользователь выходит из системы и снова входит.

Объект пользователя и ссылки определены в родительском классе этих методов:

class FirebaseController extends GetxController {
  FirebaseAuth _auth = FirebaseAuth.instance;
  Rx _firebaseUser = Rx();
  String get user => _firebaseUser.value?.email;
  String get userid => _firebaseUser.value?.uid;
  String get displayName => _firebaseUser.value?.displayName;



void signUp(String username, String email, String password) async {
    CollectionReference dbref = FirebaseFirestore.instance.collection("users");

    await _auth
        .createUserWithEmailAndPassword(email: email, password: password)
        .then((value) {
      dbref
          .doc(userid)
          .set({
            "username": username,
            "email": email,
            "password": password,
            "uid": userid,
           })
          .then((value) => updateUser(username: username))
          .then((value) => Get.offAll(HomeScreen()));
    }).catchError(
      (onError) =>
          Get.snackbar("Error while creating account ", onError.message),
    );
  }

Это мой метод updateUser, который вызывается во время "signUp"

.
void updateUser({username}) async {
    await _auth.currentUser
        .updateProfile(displayName: username)
        .then((value) => _firebaseUser.value.reload())
        .then((value) => Get.snackbar("User Created", "User has been created"))
        .catchError((onError) =>
            Get.snackbar("Error while Updating DisplayName ", onError.message));
  }

Что я делаю не так?!

Ответы (1)

Речь идет не о том, что вы делаете неправильно. Речь идет о том, что вы вообще не делаете.

Обновление профиля пользователя не обновляет объект User для пользователя, который в данный момент зарегистрирован. Если вы хотите увидеть изменения в новом профиле, необходимо использовать reload() для этого объекта пользователя.

Смотрите также:

2022 WebDevInsider