dialog_util.dart 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  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<T> showConfettiDialog<T>({
  66. @required BuildContext context,
  67. WidgetBuilder builder,
  68. bool barrierDismissible = true,
  69. Color barrierColor,
  70. bool useSafeArea = true,
  71. bool useRootNavigator = true,
  72. RouteSettings routeSettings,
  73. Alignment confettiAlignment = Alignment.center,
  74. }) {
  75. final pageBuilder = Builder(
  76. builder: builder,
  77. );
  78. final ConfettiController confettiController =
  79. ConfettiController(duration: const Duration(seconds: 1));
  80. confettiController.play();
  81. return showDialog(
  82. context: context,
  83. builder: (BuildContext buildContext) {
  84. return Stack(
  85. children: [
  86. pageBuilder,
  87. Align(
  88. alignment: confettiAlignment,
  89. child: ConfettiWidget(
  90. confettiController: confettiController,
  91. blastDirection: pi / 2,
  92. emissionFrequency: 0,
  93. numberOfParticles: 100,
  94. // a lot of particles at once
  95. gravity: 1,
  96. blastDirectionality: BlastDirectionality.explosive,
  97. ),
  98. ),
  99. ],
  100. );
  101. },
  102. barrierDismissible: barrierDismissible,
  103. barrierColor: barrierColor,
  104. useSafeArea: useSafeArea,
  105. useRootNavigator: useRootNavigator,
  106. routeSettings: routeSettings,
  107. );
  108. }