Flutter Future Progress Dialog
Показывает диалог прогресса с анимацией во время ожидания завершения Future и возвращает результат этого Future.
Обзор
Показывает диалог прогресса с анимацией во время ожидания завершения Future и возвращает результат этого Future.
Возможности
- Отображение диалога прогресса во время выполнения Future
- Диалоги в стиле Material и Cupertino
- Адаптивный диалог, соответствующий стилю платформы
- Поддержка пользовательского построителя диалогов
- Типобезопасная обработка результатов
- Обработка ошибок с трассировкой стека

Начало работы
- установите библиотеку
flutter pub add flutter_future_progress_dialog
- импортируйте библиотеку
import 'package:flutter_future_progress_dialog/flutter_future_progress_dialog.dart';
Использование
Полный рабочий пример можно найти в директории example.
Диалог возвращает тип ProgressDialogResult<T>, который может быть:
Success<T>содержащий успешное значение результатаFailureсодержащий ошибку и трассировку стека
Вы можете обработать оба случая используя pattern-matching:
Вот краткий пример использования showProgressDialog.
Вызовите showProgressDialog внутри вашей функции. Передайте аргументы context и future. Затем обработайте результат.
Дополнительно вы можете использовать showCupertinoProgressDialog для отображения диалога в стиле cupertino и showAdaptiveProgressDialog для отображения диалога, соответствующего операционной системе.
Future<String> myFuture() async {
await Future.delayed(const Duration(seconds: 2));
return 'my string';
}
Future<void> yourFunction(BuildContext context) async {
final result = await showProgressDialog(
context: context,
future: () => myFuture(),
);
if (!mounted) {
return;
}
switch (result) {
case Failure(:final error):
await showDialog(
context: context,
builder: (context) {
return AlertDialog(
content: Text(
'$error',
textAlign: TextAlign.center,
),
actions: [
TextButton(
onPressed: () {
Navigator.of(context).pop();
},
child: const Text(
'OK',
),
),
],
);
},
);
case Success<String>(:final value):
// переменная value будет содержать значение 'my string' здесь
break;
}
}
Опционально вы можете передать builder для создания пользовательского диалога прогресса
Future<ProgressDialogResult<LongRunningTaskResult>> buttonCallback({
required BuildContext context,
}) async {
return await showProgressDialog(
future: () => myLongRunningTask(),
context: context,
builder: (context) => AlertDialog(
content: Text('Идет загрузка'),
),
);
}
Топ контрибьюторов
thenixan
OleksandrFedyay
Информация о репозитории
- Стек технологий
- Flutter
- Версия
- v1.4.2
- Лицензия
- BSD-3-Clause
- Контрибьюторы
- 2
- Последнее изменение
- 13 окт. 2025 г., 14:04