dialog_util.dart 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. import 'dart:math';
  2. import 'package:confetti/confetti.dart';
  3. import 'package:flutter/material.dart';
  4. import 'package:photos/ui/common/loading_widget.dart';
  5. import 'package:photos/ui/common/progress_dialog.dart';
  6. ProgressDialog createProgressDialog(BuildContext context, String message) {
  7. final dialog = ProgressDialog(
  8. context,
  9. type: ProgressDialogType.normal,
  10. isDismissible: false,
  11. barrierColor: Colors.black12,
  12. );
  13. dialog.style(
  14. message: message,
  15. messageTextStyle: Theme.of(context).textTheme.caption,
  16. backgroundColor: Theme.of(context).dialogTheme.backgroundColor,
  17. progressWidget: const EnteLoadingWidget(),
  18. borderRadius: 10,
  19. elevation: 10.0,
  20. insetAnimCurve: Curves.easeInOut,
  21. );
  22. return dialog;
  23. }
  24. Future<dynamic> showErrorDialog(
  25. BuildContext context,
  26. String title,
  27. String content,
  28. ) {
  29. final AlertDialog alert = AlertDialog(
  30. shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)),
  31. title: Text(
  32. title,
  33. style: Theme.of(context).textTheme.headline6,
  34. ),
  35. content: Text(content),
  36. actions: [
  37. TextButton(
  38. child: Text(
  39. "Ok",
  40. style: TextStyle(
  41. color: Theme.of(context).colorScheme.onSurface,
  42. ),
  43. ),
  44. onPressed: () {
  45. Navigator.of(context, rootNavigator: true).pop('dialog');
  46. },
  47. ),
  48. ],
  49. );
  50. return showDialog(
  51. context: context,
  52. builder: (BuildContext context) {
  53. return alert;
  54. },
  55. barrierColor: Colors.black12,
  56. );
  57. }
  58. Future<dynamic> showGenericErrorDialog(BuildContext context) {
  59. return showErrorDialog(context, "Something went wrong", "Please try again.");
  60. }
  61. Future<T> showConfettiDialog<T>({
  62. @required BuildContext context,
  63. WidgetBuilder builder,
  64. bool barrierDismissible = true,
  65. Color barrierColor,
  66. bool useSafeArea = true,
  67. bool useRootNavigator = true,
  68. RouteSettings routeSettings,
  69. Alignment confettiAlignment = Alignment.center,
  70. }) {
  71. final pageBuilder = Builder(
  72. builder: builder,
  73. );
  74. final ConfettiController confettiController =
  75. ConfettiController(duration: const Duration(seconds: 1));
  76. confettiController.play();
  77. return showDialog(
  78. context: context,
  79. builder: (BuildContext buildContext) {
  80. return Stack(
  81. children: [
  82. pageBuilder,
  83. Align(
  84. alignment: confettiAlignment,
  85. child: ConfettiWidget(
  86. confettiController: confettiController,
  87. blastDirection: pi / 2,
  88. emissionFrequency: 0,
  89. numberOfParticles: 100,
  90. // a lot of particles at once
  91. gravity: 1,
  92. blastDirectionality: BlastDirectionality.explosive,
  93. ),
  94. ),
  95. ],
  96. );
  97. },
  98. barrierDismissible: barrierDismissible,
  99. barrierColor: barrierColor,
  100. useSafeArea: useSafeArea,
  101. useRootNavigator: useRootNavigator,
  102. routeSettings: routeSettings,
  103. );
  104. }