Rodinei Fagundes

add top radius to cupertino bottom shet

@@ -21,10 +21,7 @@ import '../bottom_sheet_route.dart'; @@ -21,10 +21,7 @@ import '../bottom_sheet_route.dart';
21 21
22 const double _behind_widget_visible_height = 10; 22 const double _behind_widget_visible_height = 10;
23 23
24 -const BorderRadius _default_border_radius = BorderRadius.only(  
25 - topLeft: Radius.circular(12),  
26 - topRight: Radius.circular(12),  
27 -); 24 +const Radius _default_top_radius = Radius.circular(12);
28 25
29 /// Cupertino Bottom Sheet Container 26 /// Cupertino Bottom Sheet Container
30 /// 27 ///
@@ -34,10 +31,10 @@ const BorderRadius _default_border_radius = BorderRadius.only( @@ -34,10 +31,10 @@ const BorderRadius _default_border_radius = BorderRadius.only(
34 class _CupertinoBottomSheetContainer extends StatelessWidget { 31 class _CupertinoBottomSheetContainer extends StatelessWidget {
35 final Widget child; 32 final Widget child;
36 final Color backgroundColor; 33 final Color backgroundColor;
37 - final BorderRadius borderRadius; 34 + final Radius topRadius;
38 35
39 const _CupertinoBottomSheetContainer( 36 const _CupertinoBottomSheetContainer(
40 - {Key key, this.child, this.backgroundColor, this.borderRadius}) 37 + {Key key, this.child, this.backgroundColor, @required this.topRadius})
41 : super(key: key); 38 : super(key: key);
42 39
43 @override 40 @override
@@ -52,7 +49,7 @@ class _CupertinoBottomSheetContainer extends StatelessWidget { @@ -52,7 +49,7 @@ class _CupertinoBottomSheetContainer extends StatelessWidget {
52 return Padding( 49 return Padding(
53 padding: EdgeInsets.only(top: topPadding), 50 padding: EdgeInsets.only(top: topPadding),
54 child: ClipRRect( 51 child: ClipRRect(
55 - borderRadius: borderRadius, 52 + borderRadius: BorderRadius.vertical(top: topRadius),
56 child: Container( 53 child: Container(
57 decoration: 54 decoration:
58 BoxDecoration(color: _backgroundColor, boxShadow: [shadow]), 55 BoxDecoration(color: _backgroundColor, boxShadow: [shadow]),
@@ -74,7 +71,6 @@ Future<T> showCupertinoModalBottomSheet<T>({ @@ -74,7 +71,6 @@ Future<T> showCupertinoModalBottomSheet<T>({
74 Color backgroundColor, 71 Color backgroundColor,
75 double elevation, 72 double elevation,
76 ShapeBorder shape, 73 ShapeBorder shape,
77 - BorderRadius borderRadius = _default_border_radius,  
78 Clip clipBehavior, 74 Clip clipBehavior,
79 Color barrierColor, 75 Color barrierColor,
80 bool expand = false, 76 bool expand = false,
@@ -83,6 +79,7 @@ Future<T> showCupertinoModalBottomSheet<T>({ @@ -83,6 +79,7 @@ Future<T> showCupertinoModalBottomSheet<T>({
83 bool bounce = true, 79 bool bounce = true,
84 bool isDismissible, 80 bool isDismissible,
85 bool enableDrag = true, 81 bool enableDrag = true,
  82 + Radius topRadius = _default_top_radius,
86 }) async { 83 }) async {
87 assert(context != null); 84 assert(context != null);
88 assert(builder != null); 85 assert(builder != null);
@@ -103,7 +100,7 @@ Future<T> showCupertinoModalBottomSheet<T>({ @@ -103,7 +100,7 @@ Future<T> showCupertinoModalBottomSheet<T>({
103 containerBuilder: (context, _, child) => _CupertinoBottomSheetContainer( 100 containerBuilder: (context, _, child) => _CupertinoBottomSheetContainer(
104 child: child, 101 child: child,
105 backgroundColor: backgroundColor, 102 backgroundColor: backgroundColor,
106 - borderRadius: borderRadius, 103 + topRadius: topRadius,
107 ), 104 ),
108 secondAnimationController: secondAnimation, 105 secondAnimationController: secondAnimation,
109 expanded: expand, 106 expanded: expand,
@@ -115,11 +112,14 @@ Future<T> showCupertinoModalBottomSheet<T>({ @@ -115,11 +112,14 @@ Future<T> showCupertinoModalBottomSheet<T>({
115 isDismissible: isDismissible ?? expand == false ? true : false, 112 isDismissible: isDismissible ?? expand == false ? true : false,
116 modalBarrierColor: barrierColor ?? Colors.black12, 113 modalBarrierColor: barrierColor ?? Colors.black12,
117 enableDrag: enableDrag, 114 enableDrag: enableDrag,
  115 + topRadius: topRadius,
118 )); 116 ));
119 return result; 117 return result;
120 } 118 }
121 119
122 class CupertinoModalBottomSheetRoute<T> extends ModalBottomSheetRoute<T> { 120 class CupertinoModalBottomSheetRoute<T> extends ModalBottomSheetRoute<T> {
  121 + final Radius topRadius;
  122 +
123 CupertinoModalBottomSheetRoute({ 123 CupertinoModalBottomSheetRoute({
124 ScrollWidgetBuilder builder, 124 ScrollWidgetBuilder builder,
125 WidgetWithChildBuilder containerBuilder, 125 WidgetWithChildBuilder containerBuilder,
@@ -134,6 +134,7 @@ class CupertinoModalBottomSheetRoute<T> extends ModalBottomSheetRoute<T> { @@ -134,6 +134,7 @@ class CupertinoModalBottomSheetRoute<T> extends ModalBottomSheetRoute<T> {
134 bool enableDrag = true, 134 bool enableDrag = true,
135 @required bool expanded, 135 @required bool expanded,
136 RouteSettings settings, 136 RouteSettings settings,
  137 + this.topRadius = _default_top_radius,
137 }) : assert(expanded != null), 138 }) : assert(expanded != null),
138 assert(isDismissible != null), 139 assert(isDismissible != null),
139 assert(enableDrag != null), 140 assert(enableDrag != null),
@@ -180,18 +181,25 @@ class CupertinoModalBottomSheetRoute<T> extends ModalBottomSheetRoute<T> { @@ -180,18 +181,25 @@ class CupertinoModalBottomSheetRoute<T> extends ModalBottomSheetRoute<T> {
180 Widget getPreviousRouteTransition(BuildContext context, 181 Widget getPreviousRouteTransition(BuildContext context,
181 Animation<double> secondaryAnimation, Widget child) { 182 Animation<double> secondaryAnimation, Widget child) {
182 return _CupertinoModalTransition( 183 return _CupertinoModalTransition(
183 - secondaryAnimation: secondaryAnimation, body: child); 184 + secondaryAnimation: secondaryAnimation,
  185 + body: child,
  186 + topRadius: topRadius,
  187 + );
184 } 188 }
185 } 189 }
186 190
187 class _CupertinoModalTransition extends StatelessWidget { 191 class _CupertinoModalTransition extends StatelessWidget {
188 final Animation<double> secondaryAnimation; 192 final Animation<double> secondaryAnimation;
  193 + final Radius topRadius;
189 194
190 final Widget body; 195 final Widget body;
191 196
192 - const _CupertinoModalTransition(  
193 - {Key key, @required this.secondaryAnimation, @required this.body})  
194 - : super(key: key); 197 + const _CupertinoModalTransition({
  198 + Key key,
  199 + @required this.secondaryAnimation,
  200 + @required this.body,
  201 + @required this.topRadius,
  202 + }) : super(key: key);
195 203
196 @override 204 @override
197 Widget build(BuildContext context) { 205 Widget build(BuildContext context) {
@@ -218,7 +226,7 @@ class _CupertinoModalTransition extends StatelessWidget { @@ -218,7 +226,7 @@ class _CupertinoModalTransition extends StatelessWidget {
218 final scale = 1 - progress / 10; 226 final scale = 1 - progress / 10;
219 final radius = progress == 0 227 final radius = progress == 0
220 ? 0.0 228 ? 0.0
221 - : (1 - progress) * startRoundCorner + progress * 12; 229 + : (1 - progress) * startRoundCorner + progress * topRadius.x;
222 return Stack( 230 return Stack(
223 children: <Widget>[ 231 children: <Widget>[
224 Container(color: Colors.black), 232 Container(color: Colors.black),
@@ -260,8 +268,11 @@ class CupertinoScaffold extends StatefulWidget { @@ -260,8 +268,11 @@ class CupertinoScaffold extends StatefulWidget {
260 context.dependOnInheritedWidgetOfExactType<_CupertinoScaffold>(); 268 context.dependOnInheritedWidgetOfExactType<_CupertinoScaffold>();
261 269
262 final Widget body; 270 final Widget body;
  271 + final Radius topRadius;
263 272
264 - const CupertinoScaffold({Key key, this.body}) : super(key: key); 273 + const CupertinoScaffold(
  274 + {Key key, this.body, this.topRadius = _default_top_radius})
  275 + : super(key: key);
265 276
266 @override 277 @override
267 State<StatefulWidget> createState() => _CupertinoScaffoldState(); 278 State<StatefulWidget> createState() => _CupertinoScaffoldState();
@@ -276,6 +287,7 @@ class CupertinoScaffold extends StatefulWidget { @@ -276,6 +287,7 @@ class CupertinoScaffold extends StatefulWidget {
276 bool bounce = true, 287 bool bounce = true,
277 bool isDismissible, 288 bool isDismissible,
278 bool enableDrag = true, 289 bool enableDrag = true,
  290 + Radius topRadius = _default_top_radius,
279 }) async { 291 }) async {
280 assert(context != null); 292 assert(context != null);
281 assert(builder != null); 293 assert(builder != null);
@@ -296,6 +308,7 @@ class CupertinoScaffold extends StatefulWidget { @@ -296,6 +308,7 @@ class CupertinoScaffold extends StatefulWidget {
296 containerBuilder: (context, _, child) => _CupertinoBottomSheetContainer( 308 containerBuilder: (context, _, child) => _CupertinoBottomSheetContainer(
297 child: child, 309 child: child,
298 backgroundColor: backgroundColor, 310 backgroundColor: backgroundColor,
  311 + topRadius: topRadius,
299 ), 312 ),
300 expanded: expand, 313 expanded: expand,
301 barrierLabel: barrierLabel, 314 barrierLabel: barrierLabel,
@@ -303,6 +316,7 @@ class CupertinoScaffold extends StatefulWidget { @@ -303,6 +316,7 @@ class CupertinoScaffold extends StatefulWidget {
303 isDismissible: isDismissible ?? expand == false ? true : false, 316 isDismissible: isDismissible ?? expand == false ? true : false,
304 modalBarrierColor: barrierColor ?? Colors.black12, 317 modalBarrierColor: barrierColor ?? Colors.black12,
305 enableDrag: enableDrag, 318 enableDrag: enableDrag,
  319 + topRadius: topRadius,
306 )); 320 ));
307 return result; 321 return result;
308 } 322 }
@@ -333,6 +347,7 @@ class _CupertinoScaffoldState extends State<CupertinoScaffold> @@ -333,6 +347,7 @@ class _CupertinoScaffoldState extends State<CupertinoScaffold>
333 child: _CupertinoModalTransition( 347 child: _CupertinoModalTransition(
334 secondaryAnimation: animationController, 348 secondaryAnimation: animationController,
335 body: widget.body, 349 body: widget.body,
  350 + topRadius: widget.topRadius,
336 ), 351 ),
337 ); 352 );
338 } 353 }