Ключевое слово async
Ключевое слово async ставится после списка параметров функции
перед ее телом и превращает обычную функцию в асинхронную.
Такая функция всегда возвращает объект Future, даже если
внутри нее возвращается обычное значение - Dart автоматически
оборачивает его в Future. Внутри асинхронной функции можно
использовать ключевое слово await, которое приостанавливает
выполнение до завершения переданного Future, не блокируя при
этом основной поток программы. Если функция помечена как
async, но ничего не возвращает, она все равно возвращает
Future<void>.
Синтаксис
Future<Type> functionName(parameters) async
{
// body
}
Пример
Давайте объявим простую асинхронную функцию, которая возвращает число, и вызовем ее:
Future<int> getNumber() async
{
return 5;
}
void main() async
{
int res = await getNumber();
print(res);
}
Результат выполнения кода:
5
Пример
Асинхронная функция без возвращаемого значения имеет тип
Future<void>. Давайте вызовем такую функцию и дождемся
ее завершения:
Future<void> showMessage() async
{
print('start');
await Future.delayed(Duration(seconds: 1));
print('end');
}
void main() async
{
await showMessage();
}
Результат выполнения кода:
"start"
"end"
Пример
Асинхронную функцию можно вызвать и без await - тогда
она вернет объект Future, который можно обработать
через метод then:
Future<String> getStr() async
{
return 'abcde';
}
void main()
{
getStr().then((res) {
print(res);
});
}
Результат выполнения кода:
"abcde"