Получение результата метода Future flutter

#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 смотрите ответ человека, на самом деле код не обязательно должен быть таким подробным.