dialog_util.dart 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  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: title.isEmpty
  32. ? const SizedBox.shrink()
  33. : Text(
  34. title,
  35. style: Theme.of(context).textTheme.headline6,
  36. ),
  37. content: Text(content),
  38. actions: [
  39. TextButton(
  40. child: Text(
  41. "Ok",
  42. style: TextStyle(
  43. color: Theme.of(context).colorScheme.onSurface,
  44. ),
  45. ),
  46. onPressed: () {
  47. Navigator.of(context, rootNavigator: true).pop('dialog');
  48. },
  49. ),
  50. ],
  51. );
  52. return showDialog(
  53. context: context,
  54. builder: (BuildContext context) {
  55. return alert;
  56. },
  57. barrierColor: Colors.black12,
  58. );
  59. }
  60. Future<dynamic> showGenericErrorDialog(BuildContext context) {
  61. return showErrorDialog(context, "Something went wrong", "Please try again.");
  62. }
  63. Future<T> showConfettiDialog<T>({
  64. @required BuildContext context,
  65. WidgetBuilder builder,
  66. bool barrierDismissible = true,
  67. Color barrierColor,
  68. bool useSafeArea = true,
  69. bool useRootNavigator = true,
  70. RouteSettings routeSettings,
  71. Alignment confettiAlignment = Alignment.center,
  72. }) {
  73. final pageBuilder = Builder(
  74. builder: builder,
  75. );
  76. final ConfettiController confettiController =
  77. ConfettiController(duration: const Duration(seconds: 1));
  78. confettiController.play();
  79. return showDialog(
  80. context: context,
  81. builder: (BuildContext buildContext) {
  82. return Stack(
  83. children: [
  84. pageBuilder,
  85. Align(
  86. alignment: confettiAlignment,
  87. child: ConfettiWidget(
  88. confettiController: confettiController,
  89. blastDirection: pi / 2,
  90. emissionFrequency: 0,
  91. numberOfParticles: 100,
  92. // a lot of particles at once
  93. gravity: 1,
  94. blastDirectionality: BlastDirectionality.explosive,
  95. ),
  96. ),
  97. ],
  98. );
  99. },
  100. barrierDismissible: barrierDismissible,
  101. barrierColor: barrierColor,
  102. useSafeArea: useSafeArea,
  103. useRootNavigator: useRootNavigator,
  104. routeSettings: routeSettings,
  105. );
  106. }