#flutter #dart
#трепетание #dart
Вопрос:
Я пытаюсь понять, почему IDE не жалуется на изменение типа с Object на Future в этой функции:
class PromotionRepository implements IPromotionRepository {
final CollectionReference collection =
FirebaseFirestore.instance.collection('promotions');
Future<List<Promotion>> getAllPromotions() async {
QuerySnapshot query = await collection.get();
List<Promotion> promotions =
query.docs.map((doc) => Promotion.fromFirestore(doc)).toList();
return promotions;
}
}
В этом случае я возвращаю List<Promotion>
, а не Future<List<Promotion>
, но в сигнатуре метода я возвращаю тип, определенный как Feature...
Нет никакой разницы, если я перейду на just List<Promotion>
. В обоих случаях это работает одинаково.
Ответ №1:
Вы возвращаетесь List<Promotion>
, но внутри асинхронного метода. Все, что возвращается в асинхронных методах, является a Future
.
Вы даже объявили тип перед именем метода.
Здесь у вас есть несколько простых примеров. Обратите внимание, что true
возвращается везде, но в разных типах методов.
void main() {
print(streamTest().runtimeType); // result: Stream<bool>
print(asyncTest().runtimeType); // result: Future<bool>
print(syncTest().runtimeType); // esult bool
}
Stream<bool> streamTest() async* {
yield true;
}
Future<bool> asyncTest() async => true;
bool syncTest() => true;