Ответ
Асинхронность в Dart — это модель выполнения, при которой долгие операции (сетевые запросы, чтение файлов, вычисления) не блокируют основной поток (изолят), отвечающий за отрисовку UI и обработку событий. Это критически важно для поддержания плавности интерфейса во Flutter.
Основные концепции:
Future<T>— объект-обещание, который представляет результат (успешныйTили ошибка) некоторой асинхронной операции, которая завершится в будущем.async/await— ключевые слова, которые позволяют писать асинхронный код в синхронном, линейном стиле, что гораздо читабельнее цепочек.then().Stream<T>— последовательность асинхронных событий, поступающих со временем (например, события от сервера через WebSocket, пользовательский ввод).
Практический пример (сетевой запрос):
import 'package:http/http.dart' as http;
Future<void> fetchUserData(String userId) async {
// `await` приостанавливает выполнение этой функции, но НЕ основного потока.
// Пока мы ждем ответа от сервера, UI может обрабатывать другие события.
try {
final response = await http.get(
Uri.parse('https://api.example.com/users/$userId'),
);
if (response.statusCode == 200) {
// Данные получены, можно обновить состояние виджета
print('User data: ${response.body}');
} else {
throw Exception('Failed to load user. Status: ${response.statusCode}');
}
} on SocketException catch (e) {
// Обработка ошибок сети
print('Network error: $e');
} catch (e) {
// Обработка любых других ошибок
print('Unexpected error: $e');
}
}
// Использование:
// В методе initState() виджета или по нажатию кнопки:
// await fetchUserData('123');
Ключевые моменты:
- Функция, содержащая
await, должна быть помечена какasync. awaitне блокирует весь изолят, он лишь приостанавливает выполнение текущей асинхронной функции.- Ошибки в асинхронных операциях отлично ловятся стандартными блоками
try/catch. - Для работы с множеством параллельных операций используют
Future.wait().
Без асинхронности любая долгая операция "замораживала" бы интерфейс приложения.
Видео-ответы
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶