Flutter Future Progress Dialog

Показывает диалог прогресса с анимацией во время ожидания завершения Future и возвращает результат этого Future.

Flutter
2Звезды
0Форки
v1.4.2

Обзор

Показывает диалог прогресса с анимацией во время ожидания завершения 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

thenixan

62 commits
OleksandrFedyay

OleksandrFedyay

33 commits

Информация о репозитории

Стек технологий
Flutter
Версия
v1.4.2
Лицензия
BSD-3-Clause
Контрибьюторы
2
Последнее изменение
13 окт. 2025 г., 14:04

Активность

Звезды2
Форки0
Наблюдатели2

Хотите внести вклад?

Посмотреть репозиторий