Тип FutureOr
Тип FutureOr<T> означает одно из двух:
уже готовое значение типа T или
Future<T>, которое даст такое значение позже.
Это не отдельный объект, который создают конструктором,
а пометка типа. Она нужна там, где функция может
вернуть результат сразу или отложить его.
Тип лежит в библиотеке dart:async,
её нужно импортировать. Оператор await
подходит и к голому значению, и к Future:
в обоих случаях получается T.
Синтаксис
import 'dart:async';
FutureOr<int> name = 10;
FutureOr<int> name = Future<int>.value(10);
Пример
Давайте вернём из функции то число,
то будущий результат с тем же типом FutureOr<int>:
import 'dart:async';
FutureOr<int> load(bool later)
{
if (later)
{
return Future<int>.value(10);
}
return 10;
}
void main() async
{
print(await load(false));
print(await load(true));
}
Результат выполнения кода:
10
10
Пример
Давайте проверим, какой из двух вариантов сейчас лежит в переменной:
import 'dart:async';
void main()
{
FutureOr<int> direct = 4;
FutureOr<int> later = Future<int>.value(6);
print(direct is int);
print(later is Future<int>);
}
Результат выполнения кода:
true
true
Пример
Давайте примем FutureOr<int> и дождёмся числа.
Future.value подходит и для готового значения,
и для будущего результата:
import 'dart:async';
Future<int> normalize(FutureOr<int> value)
{
return Future<int>.value(value);
}
void main() async
{
print(await normalize(4));
print(await normalize(Future<int>.value(6)));
}
Результат выполнения кода:
4
6