@@ -57,3 +57,51 @@ Widget _buildMaterialDialogTransitions(BuildContext context, Animation<double> a
5757 child: child,
5858 );
5959}
60+
61+ Future <T > showElasticDialog <T >({
62+ @required BuildContext context,
63+ bool barrierDismissible = true ,
64+ WidgetBuilder builder,
65+ }) {
66+
67+ final ThemeData theme = Theme .of (context, shadowThemeOnly: true );
68+ return showGeneralDialog (
69+ context: context,
70+ pageBuilder: (BuildContext buildContext, Animation <double > animation, Animation <double > secondaryAnimation) {
71+ final Widget pageChild = Builder (builder: builder);
72+ return SafeArea (
73+ child: Builder (
74+ builder: (BuildContext context) {
75+ return theme != null
76+ ? Theme (data: theme, child: pageChild)
77+ : pageChild;
78+ }
79+ ),
80+ );
81+ },
82+ barrierDismissible: barrierDismissible,
83+ barrierLabel: MaterialLocalizations .of (context).modalBarrierDismissLabel,
84+ barrierColor: Colors .black54,
85+ transitionDuration: const Duration (milliseconds: 550 ),
86+ transitionBuilder: _buildDialogTransitions,
87+ );
88+ }
89+
90+ Widget _buildDialogTransitions (BuildContext context, Animation <double > animation, Animation <double > secondaryAnimation, Widget child) {
91+ return FadeTransition (
92+ opacity: CurvedAnimation (
93+ parent: animation,
94+ curve: Curves .easeOut,
95+ ),
96+ child: SlideTransition (
97+ position: Tween <Offset >(
98+ begin: const Offset (0.0 , 0.3 ),
99+ end: Offset .zero
100+ ).animate (CurvedAnimation (
101+ parent: animation,
102+ curve: animation.status != AnimationStatus .forward ? Curves .easeOutBack: ElasticOutCurve (0.85 ),
103+ )),
104+ child: child,
105+ ),
106+ );
107+ }
0 commit comments