dialog_util.dart 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. // @dart=2.9
  2. import 'dart:math';
  3. import 'package:confetti/confetti.dart';
  4. import 'package:flutter/material.dart';
  5. import 'package:photos/ui/common/loading_widget.dart';
  6. import 'package:photos/ui/common/progress_dialog.dart';
  7. ProgressDialog createProgressDialog(
  8. BuildContext context,
  9. String message, {
  10. isDismissible = false,
  11. }) {
  12. final dialog = ProgressDialog(
  13. context,
  14. type: ProgressDialogType.normal,
  15. isDismissible: isDismissible,
  16. barrierColor: Colors.black12,
  17. );
  18. dialog.style(
  19. message: message,
  20. messageTextStyle: Theme.of(context).textTheme.caption,
  21. backgroundColor: Theme.of(context).dialogTheme.backgroundColor,
  22. progressWidget: const EnteLoadingWidget(),
  23. borderRadius: 10,
  24. elevation: 10.0,
  25. insetAnimCurve: Curves.easeInOut,
  26. );
  27. return dialog;
  28. }
  29. Future<T> showConfettiDialog<T>({
  30. @required BuildContext context,
  31. WidgetBuilder builder,
  32. bool barrierDismissible = true,
  33. Color barrierColor,
  34. bool useSafeArea = true,
  35. bool useRootNavigator = true,
  36. RouteSettings routeSettings,
  37. Alignment confettiAlignment = Alignment.center,
  38. }) {
  39. final pageBuilder = Builder(
  40. builder: builder,
  41. );
  42. final ConfettiController confettiController =
  43. ConfettiController(duration: const Duration(seconds: 1));
  44. confettiController.play();
  45. return showDialog(
  46. context: context,
  47. builder: (BuildContext buildContext) {
  48. return Stack(
  49. children: [
  50. pageBuilder,
  51. Align(
  52. alignment: confettiAlignment,
  53. child: ConfettiWidget(
  54. confettiController: confettiController,
  55. blastDirection: pi / 2,
  56. emissionFrequency: 0,
  57. numberOfParticles: 100,
  58. // a lot of particles at once
  59. gravity: 1,
  60. blastDirectionality: BlastDirectionality.explosive,
  61. ),
  62. ),
  63. ],
  64. );
  65. },
  66. barrierDismissible: barrierDismissible,
  67. barrierColor: barrierColor,
  68. useSafeArea: useSafeArea,
  69. useRootNavigator: useRootNavigator,
  70. routeSettings: routeSettings,
  71. );
  72. }