Комментарии (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 приложениях.
Похожие вопросы
- Что такое паттерн Singleton?
- Что такое InheritedWidget и как его использовать?
- Для чего нужно много скроллинг виджетов?
- На каком потоке выполняются запросы в сеть?
- Какие знаешь виджеты которые позволяют верстать адаптивный под размер экранов интерфейс?
- Как создать адаптивный (responsive) интерфейс во Flutter?
- Как работать с AnimationController?
- Что такое Deeplink?
- Почему Dart высокопроизводительный?
- Как переопределить операторы сравнения в Dart?
- Какие знаешь инструменты для для анализа performance?
- Что такое BuildContext и как он используется?
- Как передаются constraint по дереву?
- Расскажи про жизненный цикл iOS приложения
- Как деплоить Flutter приложение в production?
- Как локализовать Flutter-приложение?
- Как относишься к реализации виджета через методы?
- Что такое паттерн Builder?
- Какая временная сложность read в связном списке?
- Приведи пример использования принципа DRY