#asynchronous #flutter #future
#асинхронный #flutter #будущее
Вопрос:
У меня есть метод
Future<FirebaseUser> getCurrentUser() async {
FirebaseUser user = await _firebaseAuth.currentUser();
return user;
}
Я хочу иметь возможность вызывать его в каком-либо другом модуле, выполнив :
if (class.getCurrentUser() != null) {
// Do something
}
Кажется, я не могу понять, как получить фактическое значение, а не объект Future, хранящий значение. Например, в C я могу просто сделать future.get()
, который заблокирует и вернет значение мне. Есть ли эквивалент в flutter? Я новичок в языке и искал часами и, похоже, не могу найти решение именно этой проблемы.
Ответ №1:
Из вашего кода кажется, что вам действительно нужен только 1 await
:
Future<FirebaseUser> getCurrentUser() async {
return _firebaseAuth.currentUser();
}
if (await class.getCurrentUser() != null) {
// Do something
}
Ответ №2:
Вы также должны ожидать результата при вызове вашего метода следующим образом:
FirebaseUser currentUser = await class.getCurrentUser();
if (currentUser != null) {
// Do something
}
Комментарии:
1. В таком случае, стоит ли ожидать в исходном методе? Кажется немного неуклюжим, поскольку мне придется делать это каждый раз, когда я вызываю этот метод.
2. @hromer К сожалению, именно так работают фьючерсы в dart. Вам понадобятся оба ожидания.
3. @dshukertjr смотрите ответ человека, на самом деле код не обязательно должен быть таким подробным.