Jaime Blasco
Committed by GitHub

Merge pull request #57 from DenDos/master

Add closeProgressThreshold parameter
@@ -52,6 +52,7 @@ showMaterialModalBottomSheet( @@ -52,6 +52,7 @@ showMaterialModalBottomSheet(
52 |AnimationController secondAnimation| The `secondAnimation` parameter allows you to provide an animation controller that will be used to animate push/pop of the modal route. Using this param is advised against and will be probably removed in future versions | 52 |AnimationController secondAnimation| The `secondAnimation` parameter allows you to provide an animation controller that will be used to animate push/pop of the modal route. Using this param is advised against and will be probably removed in future versions |
53 |bool bounce = false| The `bounce` parameter specifies if the bottom sheet can go beyond the top boundary while dragging | 53 |bool bounce = false| The `bounce` parameter specifies if the bottom sheet can go beyond the top boundary while dragging |
54 |Duration duration = const Duration(milliseconds: 400)| The `duration` of modal opening | 54 |Duration duration = const Duration(milliseconds: 400)| The `duration` of modal opening |
  55 +|double closeProgressThreshold = 0.6| The `closeProgressThreshold` specifies when the bottom sheet will be dismissed when user drags it. |
55 56
56 57
57 #### Material params 58 #### Material params
@@ -42,6 +42,7 @@ class ModalBottomSheet extends StatefulWidget { @@ -42,6 +42,7 @@ class ModalBottomSheet extends StatefulWidget {
42 /// Creates a bottom sheet. 42 /// Creates a bottom sheet.
43 const ModalBottomSheet({ 43 const ModalBottomSheet({
44 Key key, 44 Key key,
  45 + this.closeProgressThreshold,
45 this.animationController, 46 this.animationController,
46 this.animationCurve, 47 this.animationCurve,
47 this.enableDrag = true, 48 this.enableDrag = true,
@@ -57,6 +58,10 @@ class ModalBottomSheet extends StatefulWidget { @@ -57,6 +58,10 @@ class ModalBottomSheet extends StatefulWidget {
57 assert(builder != null), 58 assert(builder != null),
58 super(key: key); 59 super(key: key);
59 60
  61 + /// The closeProgressThreshold parameter
  62 + /// specifies when the bottom sheet will be dismissed when user drags it.
  63 + final double closeProgressThreshold;
  64 +
60 /// The animation controller that controls the bottom sheet's entrance and 65 /// The animation controller that controls the bottom sheet's entrance and
61 /// exit animations. 66 /// exit animations.
62 /// 67 ///
@@ -152,7 +157,8 @@ class _ModalBottomSheetState extends State<ModalBottomSheet> @@ -152,7 +157,8 @@ class _ModalBottomSheetState extends State<ModalBottomSheet>
152 widget.animationController.value < _willPopThreshold; 157 widget.animationController.value < _willPopThreshold;
153 158
154 bool get hasReachedCloseThreshold => 159 bool get hasReachedCloseThreshold =>
155 - widget.animationController.value < _closeProgressThreshold; 160 + widget.animationController.value <
  161 + (widget.closeProgressThreshold ?? _closeProgressThreshold);
156 162
157 void _close() { 163 void _close() {
158 isDragging = false; 164 isDragging = false;
@@ -11,6 +11,7 @@ const Duration _bottomSheetDuration = Duration(milliseconds: 400); @@ -11,6 +11,7 @@ const Duration _bottomSheetDuration = Duration(milliseconds: 400);
11 class _ModalBottomSheet<T> extends StatefulWidget { 11 class _ModalBottomSheet<T> extends StatefulWidget {
12 const _ModalBottomSheet({ 12 const _ModalBottomSheet({
13 Key key, 13 Key key,
  14 + this.closeProgressThreshold,
14 this.route, 15 this.route,
15 this.secondAnimationController, 16 this.secondAnimationController,
16 this.bounce = false, 17 this.bounce = false,
@@ -22,6 +23,7 @@ class _ModalBottomSheet<T> extends StatefulWidget { @@ -22,6 +23,7 @@ class _ModalBottomSheet<T> extends StatefulWidget {
22 assert(enableDrag != null), 23 assert(enableDrag != null),
23 super(key: key); 24 super(key: key);
24 25
  26 + final double closeProgressThreshold;
25 final ModalBottomSheetRoute<T> route; 27 final ModalBottomSheetRoute<T> route;
26 final bool expanded; 28 final bool expanded;
27 final bool bounce; 29 final bool bounce;
@@ -85,6 +87,7 @@ class _ModalBottomSheetState<T> extends State<_ModalBottomSheet<T>> { @@ -85,6 +87,7 @@ class _ModalBottomSheetState<T> extends State<_ModalBottomSheet<T>> {
85 label: _getRouteLabel(), 87 label: _getRouteLabel(),
86 explicitChildNodes: true, 88 explicitChildNodes: true,
87 child: ModalBottomSheet( 89 child: ModalBottomSheet(
  90 + closeProgressThreshold: widget.closeProgressThreshold,
88 expanded: widget.route.expanded, 91 expanded: widget.route.expanded,
89 containerBuilder: widget.route.containerBuilder, 92 containerBuilder: widget.route.containerBuilder,
90 animationController: widget.route._animationController, 93 animationController: widget.route._animationController,
@@ -113,6 +116,7 @@ class _ModalBottomSheetState<T> extends State<_ModalBottomSheet<T>> { @@ -113,6 +116,7 @@ class _ModalBottomSheetState<T> extends State<_ModalBottomSheet<T>> {
113 116
114 class ModalBottomSheetRoute<T> extends PopupRoute<T> { 117 class ModalBottomSheetRoute<T> extends PopupRoute<T> {
115 ModalBottomSheetRoute({ 118 ModalBottomSheetRoute({
  119 + this.closeProgressThreshold,
116 this.containerBuilder, 120 this.containerBuilder,
117 this.builder, 121 this.builder,
118 this.scrollController, 122 this.scrollController,
@@ -131,6 +135,7 @@ class ModalBottomSheetRoute<T> extends PopupRoute<T> { @@ -131,6 +135,7 @@ class ModalBottomSheetRoute<T> extends PopupRoute<T> {
131 assert(enableDrag != null), 135 assert(enableDrag != null),
132 super(settings: settings); 136 super(settings: settings);
133 137
  138 + final double closeProgressThreshold;
134 final WidgetWithChildBuilder containerBuilder; 139 final WidgetWithChildBuilder containerBuilder;
135 final ScrollWidgetBuilder builder; 140 final ScrollWidgetBuilder builder;
136 final bool expanded; 141 final bool expanded;
@@ -180,6 +185,7 @@ class ModalBottomSheetRoute<T> extends PopupRoute<T> { @@ -180,6 +185,7 @@ class ModalBottomSheetRoute<T> extends PopupRoute<T> {
180 context: context, 185 context: context,
181 // removeTop: true, 186 // removeTop: true,
182 child: _ModalBottomSheet<T>( 187 child: _ModalBottomSheet<T>(
  188 + closeProgressThreshold: closeProgressThreshold,
183 route: this, 189 route: this,
184 secondAnimationController: secondAnimationController, 190 secondAnimationController: secondAnimationController,
185 expanded: expanded, 191 expanded: expanded,
@@ -75,6 +75,7 @@ Future<T> showBarModalBottomSheet<T>({ @@ -75,6 +75,7 @@ Future<T> showBarModalBottomSheet<T>({
75 Color backgroundColor, 75 Color backgroundColor,
76 double elevation, 76 double elevation,
77 ShapeBorder shape, 77 ShapeBorder shape,
  78 + double closeProgressThreshold,
78 Clip clipBehavior, 79 Clip clipBehavior,
79 Color barrierColor = Colors.black87, 80 Color barrierColor = Colors.black87,
80 bool bounce = true, 81 bool bounce = true,
@@ -99,6 +100,7 @@ Future<T> showBarModalBottomSheet<T>({ @@ -99,6 +100,7 @@ Future<T> showBarModalBottomSheet<T>({
99 .push(ModalBottomSheetRoute<T>( 100 .push(ModalBottomSheetRoute<T>(
100 builder: builder, 101 builder: builder,
101 bounce: bounce, 102 bounce: bounce,
  103 + closeProgressThreshold: closeProgressThreshold,
102 containerBuilder: (_, __, child) => BarBottomSheet( 104 containerBuilder: (_, __, child) => BarBottomSheet(
103 child: child, 105 child: child,
104 control: topControl, 106 control: topControl,
@@ -70,6 +70,7 @@ Future<T> showCupertinoModalBottomSheet<T>({ @@ -70,6 +70,7 @@ Future<T> showCupertinoModalBottomSheet<T>({
70 @required ScrollWidgetBuilder builder, 70 @required ScrollWidgetBuilder builder,
71 Color backgroundColor, 71 Color backgroundColor,
72 double elevation, 72 double elevation,
  73 + double closeProgressThreshold,
73 ShapeBorder shape, 74 ShapeBorder shape,
74 Clip clipBehavior, 75 Clip clipBehavior,
75 Color barrierColor, 76 Color barrierColor,
@@ -110,6 +111,7 @@ Future<T> showCupertinoModalBottomSheet<T>({ @@ -110,6 +111,7 @@ Future<T> showCupertinoModalBottomSheet<T>({
110 ), 111 ),
111 secondAnimationController: secondAnimation, 112 secondAnimationController: secondAnimation,
112 expanded: expand, 113 expanded: expand,
  114 + closeProgressThreshold: closeProgressThreshold,
113 barrierLabel: barrierLabel, 115 barrierLabel: barrierLabel,
114 elevation: elevation, 116 elevation: elevation,
115 bounce: bounce, 117 bounce: bounce,
@@ -139,6 +141,7 @@ class CupertinoModalBottomSheetRoute<T> extends ModalBottomSheetRoute<T> { @@ -139,6 +141,7 @@ class CupertinoModalBottomSheetRoute<T> extends ModalBottomSheetRoute<T> {
139 CupertinoModalBottomSheetRoute({ 141 CupertinoModalBottomSheetRoute({
140 ScrollWidgetBuilder builder, 142 ScrollWidgetBuilder builder,
141 WidgetWithChildBuilder containerBuilder, 143 WidgetWithChildBuilder containerBuilder,
  144 + double closeProgressThreshold,
142 String barrierLabel, 145 String barrierLabel,
143 double elevation, 146 double elevation,
144 ShapeBorder shape, 147 ShapeBorder shape,
@@ -160,6 +163,7 @@ class CupertinoModalBottomSheetRoute<T> extends ModalBottomSheetRoute<T> { @@ -160,6 +163,7 @@ class CupertinoModalBottomSheetRoute<T> extends ModalBottomSheetRoute<T> {
160 assert(isDismissible != null), 163 assert(isDismissible != null),
161 assert(enableDrag != null), 164 assert(enableDrag != null),
162 super( 165 super(
  166 + closeProgressThreshold: closeProgressThreshold,
163 scrollController: scrollController, 167 scrollController: scrollController,
164 containerBuilder: containerBuilder, 168 containerBuilder: containerBuilder,
165 builder: builder, 169 builder: builder,
@@ -318,6 +322,7 @@ class CupertinoScaffold extends StatefulWidget { @@ -318,6 +322,7 @@ class CupertinoScaffold extends StatefulWidget {
318 static Future<T> showCupertinoModalBottomSheet<T>({ 322 static Future<T> showCupertinoModalBottomSheet<T>({
319 @required BuildContext context, 323 @required BuildContext context,
320 @required ScrollWidgetBuilder builder, 324 @required ScrollWidgetBuilder builder,
  325 + double closeProgressThreshold,
321 Curve animationCurve, 326 Curve animationCurve,
322 Curve previousRouteAnimationCurve, 327 Curve previousRouteAnimationCurve,
323 Color backgroundColor, 328 Color backgroundColor,
@@ -345,6 +350,7 @@ class CupertinoScaffold extends StatefulWidget { @@ -345,6 +350,7 @@ class CupertinoScaffold extends StatefulWidget {
345 final topRadius = CupertinoScaffold.of(context).topRadius; 350 final topRadius = CupertinoScaffold.of(context).topRadius;
346 final result = await Navigator.of(context, rootNavigator: useRootNavigator) 351 final result = await Navigator.of(context, rootNavigator: useRootNavigator)
347 .push(CupertinoModalBottomSheetRoute<T>( 352 .push(CupertinoModalBottomSheetRoute<T>(
  353 + closeProgressThreshold: closeProgressThreshold,
348 builder: builder, 354 builder: builder,
349 secondAnimationController: CupertinoScaffold.of(context).animation, 355 secondAnimationController: CupertinoScaffold.of(context).animation,
350 containerBuilder: (context, _, child) => _CupertinoBottomSheetContainer( 356 containerBuilder: (context, _, child) => _CupertinoBottomSheetContainer(
@@ -6,6 +6,7 @@ import 'dart:async'; @@ -6,6 +6,7 @@ import 'dart:async';
6 Future<T> showMaterialModalBottomSheet<T>({ 6 Future<T> showMaterialModalBottomSheet<T>({
7 @required BuildContext context, 7 @required BuildContext context,
8 @required ScrollWidgetBuilder builder, 8 @required ScrollWidgetBuilder builder,
  9 + double closeProgressThreshold,
9 Color backgroundColor, 10 Color backgroundColor,
10 double elevation, 11 double elevation,
11 ShapeBorder shape, 12 ShapeBorder shape,
@@ -31,6 +32,7 @@ Future<T> showMaterialModalBottomSheet<T>({ @@ -31,6 +32,7 @@ Future<T> showMaterialModalBottomSheet<T>({
31 final result = await Navigator.of(context, rootNavigator: useRootNavigator) 32 final result = await Navigator.of(context, rootNavigator: useRootNavigator)
32 .push(ModalBottomSheetRoute<T>( 33 .push(ModalBottomSheetRoute<T>(
33 builder: builder, 34 builder: builder,
  35 + closeProgressThreshold: closeProgressThreshold,
34 containerBuilder: _materialContainerBuilder( 36 containerBuilder: _materialContainerBuilder(
35 context, 37 context,
36 backgroundColor: backgroundColor, 38 backgroundColor: backgroundColor,