Как получить идентификатор пользователя из firebase auth как строку? - PullRequest
1 голос
/ 20 июня 2019

Я пытаюсь вставить данные в firestore с идентифицированным идентификатором пользователя в качестве идентификатора документа, но я получил значение null из параметра.

Пожалуйста, посмотрите на мой сценарий.

void didChangeDependencies() {
  uid = '';
  super.didChangeDependencies();
}

Future _fetchUID() async {
  var auth = AuthProvider.of(context).auth;
  return await auth.getCurrentUser().then((user) => _uid = user.uid);
}

_validateAndSubmit() async {
  setState(() {
    _errorMessage = '';
    _isLoading = true;
  });

  if (_validateAndSave()) {
    try {
      _fetchUID();
      await Report.create(_uid, _suspectName, _plateNumber, _civilizationId,
          _drivingLicenseId, _clause, _description);
      return Navigator.of(context).pop();
    } catch (e) {
      setState(() {
        _isLoading = false;
        _errorMessage = e.message;
      });
      print(_errorMessage);
      throw Exception(e);
    }
  }
}

В этом методе ниже вы можете видеть, что я уже пытался установить _uid, но все еще не могу получить значение _uid.

Future _fetchUID() async {
  var auth = AuthProvider.of(context).auth;
  return await auth.getCurrentUser().then((user) => _uid = user.uid);
}

Так выглядит метод getCurrentUser().

Future<FirebaseUser> getCurrentUser() async {
  FirebaseUser user = await _firebaseAuth.currentUser();
  return user;
}

Я делаю это неправильно?

1 Ответ

2 голосов
/ 20 июня 2019

Прежде всего, вы смешали синтаксис Future.then и синтаксис async await.
Вероятно, вы должны написать свой метод следующим образом:

void _fetchUID() async {
  var auth = AuthProvider.of(context).auth;
  _uid = (await auth.getCurrentUser()).uid;
}

Если _uidТем не менее, null для вас после вызова _fetchUID таким образом, вы просто не вошли в систему, что означает, что FirebaseUser не существует, так как вам сначала нужно войти.

В вашем методе _validateAndSubmitвы также сначала должны дождаться вашего _fetchUID вызова, в противном случае он пройдет _uid до того, как ему будет присвоено значение.

...
try {
  await _fetchUID();
  await Report.create(_uid, ..);
  ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...