Flutter + Firebase updateDisplayName при создании учетной записи с электронной почтой и паролем - PullRequest
0 голосов
/ 16 февраля 2019

Я новичок во Flutter и действительно, очень плохо знаком с firebase.

Я пытаюсь создать пользователя с помощью createUserWithEmailAndPasswordMethod.Я успешно создал, но я пытаюсь улучшить его, позволив пользователю ввести желаемое имя пользователя и установив его в атрибуте displayName.

Мой код выглядит следующим образом:

    _createUser() async {
UserUpdateInfo updateInfo = UserUpdateInfo();
updateInfo.displayName = _usernameController.text;

FirebaseUser user = await _auth
    .createUserWithEmailAndPassword(
  email: _emailController.text,
  password: _passwordController.text,
)
    .then((user) {
  user.updateProfile(updateInfo);
});
print('USERNAME IS: ${user.displayName}');
}

Проблема в том, что когда я запускаю приложение, оно всегда выдает это исключение:

NoSuchMethodError: The getter 'displayName' was called on null.

Каждый раз, когда я отлаживаю, переменная user также отображается как ноль, даже если пользователь создан иЯ могу напечатать адрес электронной почты и пароль!

Полагаю, проблема в том, что Firebase user равно нулю, но даже если я переместу print('USERNAME IS: ${user.displayName}'); сразу после updateProfile, то же самое происходит.

Надеюсь, вы, ребята, можете помочь!Спасибо.

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019

Итак, у меня сработало следующее: мне пришлось вызывать метод reload (), чтобы получить новую информацию о пользователе после updateProfile ().После некоторых изменений метод выглядит следующим образом:

  _createUser() async {
UserUpdateInfo updateInfo = UserUpdateInfo();
updateInfo.displayName = _usernameController.text;

await _auth
    .createUserWithEmailAndPassword(
  email: _emailController.text,
  password: _passwordController.text,
)
    .then((user) async {
  await user.updateProfile(updateInfo);
  await user.reload();
  FirebaseUser updatedUser = await _auth.currentUser();
  print('USERNAME IS: ${updatedUser.displayName}');
  Navigator.of(context).push(
    MaterialPageRoute<Map>(
      builder: (BuildContext context) {
        return Posts(_googleSignIn, updatedUser);
      },
    ),
  );
}).catchError((error) {
  print('Something Went Wrong: ${error.toString()}');
});
}
0 голосов
/ 16 февраля 2019

Вы не должны использовать await, а затем вместе.await является заменой метода then.

_createUser() async {
await _auth
    .createUserWithEmailAndPassword(
  email: _emailController.text,
  password: _passwordController.text,
)
FirebaseUser user = await _auth.currentUser();

  UserUpdateInfo updateInfo = UserUpdateInfo();
  updateInfo.displayName = _usernameController.text;
  user.updateProfile(updateInfo);
  print('USERNAME IS: ${user.displayName}');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...