Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Асинхронные операции в Dart
Async/await в Dart построен на основе Future — объекта, который представляет потенциальное значение или ошибку, которые станут доступны в будущем. Это основа для неблокирующей разработки в Flutter.
Future: основной блок
Future — это placeholder для значения, которое будет доступно позже. Он может находиться в одном из трёх состояний:
- Pending — операция в процессе
- Completed with value — успешно завершена с результатом
- Completed with error — завершена с ошибкой
Future<String> fetchData() {
return Future.delayed(Duration(seconds: 2), () {
return 'Data loaded';
});
}
fetchData().then((result) {
print(result);
}).catchError((error) {
print('Error: $error');
});
async/await: синтаксический сахар
async/await упрощает работу с Future, делая код более читаемым. Функция с async всегда возвращает Future.
Future<String> fetchData() async {
await Future.delayed(Duration(seconds: 2));
return 'Data loaded';
}
final result = await fetchData();
print(result);
try {
final data = await fetchData();
print(data);
} on Exception catch (e) {
print('Error: $e');
}
Микротаски vs Макротаски
Dart использует две очереди:
- Microtask queue — высокий приоритет (Future, callbacks)
- Macrotask queue — низкий приоритет (setTimeout, I/O)
print('1. Start');
Future(() => print('2. Future'));
print('3. Sync code');
Streams: Future на стероидах
Stream — это асинхронная последовательность событий.
Stream<int> countdownStream() async* {
for (int i = 5; i > 0; i--) {
yield i;
await Future.delayed(Duration(seconds: 1));
}
}
countdownStream().listen((value) {
print('Countdown: $value');
}, onError: (error) {
print('Error: $error');
});
Future.wait: параллельные операции
Future<void> loadAllData() async {
final results = await Future.wait([
fetchUser(),
fetchPosts(),
fetchComments(),
]);
}
Лучшие практики
- Избегайте .then().then().then() — используйте async/await
- Всегда обрабатывайте ошибки — try-catch или catchError
- Отменяйте подписки — используйте StreamSubscription.cancel()
- Используйте Future.wait для параллелизма — не await последовательно
- Профилируйте перформанс — async операции могут повлиять на UI
Эти концепции — фундамент для работы с API, базами данных и real-time обновлениями в Flutter приложениях.