dialog_util.dart 3.0 KB

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