Showing
7 changed files
with
32 additions
and
16 deletions
| @@ -41,5 +41,7 @@ | @@ -41,5 +41,7 @@ | ||
| 41 | </array> | 41 | </array> |
| 42 | <key>UIViewControllerBasedStatusBarAppearance</key> | 42 | <key>UIViewControllerBasedStatusBarAppearance</key> |
| 43 | <false/> | 43 | <false/> |
| 44 | + <key>CADisableMinimumFrameDurationOnPhone</key> | ||
| 45 | + <true/> | ||
| 44 | </dict> | 46 | </dict> |
| 45 | </plist> | 47 | </plist> |
| @@ -10,7 +10,7 @@ import 'package:modal_bottom_sheet/src/utils/scroll_to_top_status_bar.dart'; | @@ -10,7 +10,7 @@ import 'package:modal_bottom_sheet/src/utils/scroll_to_top_status_bar.dart'; | ||
| 10 | import 'package:modal_bottom_sheet/src/utils/bottom_sheet_suspended_curve.dart'; | 10 | import 'package:modal_bottom_sheet/src/utils/bottom_sheet_suspended_curve.dart'; |
| 11 | 11 | ||
| 12 | const Curve _decelerateEasing = Cubic(0.0, 0.0, 0.2, 1.0); | 12 | const Curve _decelerateEasing = Cubic(0.0, 0.0, 0.2, 1.0); |
| 13 | -const Curve _modalBottomSheetCurve = _decelerateEasing; | 13 | + |
| 14 | const Duration _bottomSheetDuration = Duration(milliseconds: 400); | 14 | const Duration _bottomSheetDuration = Duration(milliseconds: 400); |
| 15 | const double _minFlingVelocity = 500.0; | 15 | const double _minFlingVelocity = 500.0; |
| 16 | const double _closeProgressThreshold = 0.6; | 16 | const double _closeProgressThreshold = 0.6; |
| @@ -34,7 +34,6 @@ class ModalBottomSheet extends StatefulWidget { | @@ -34,7 +34,6 @@ class ModalBottomSheet extends StatefulWidget { | ||
| 34 | /// Creates a bottom sheet. | 34 | /// Creates a bottom sheet. |
| 35 | const ModalBottomSheet({ | 35 | const ModalBottomSheet({ |
| 36 | Key? key, | 36 | Key? key, |
| 37 | - this.closeProgressThreshold, | ||
| 38 | required this.animationController, | 37 | required this.animationController, |
| 39 | this.animationCurve, | 38 | this.animationCurve, |
| 40 | this.enableDrag = true, | 39 | this.enableDrag = true, |
| @@ -45,11 +44,16 @@ class ModalBottomSheet extends StatefulWidget { | @@ -45,11 +44,16 @@ class ModalBottomSheet extends StatefulWidget { | ||
| 45 | required this.expanded, | 44 | required this.expanded, |
| 46 | required this.onClosing, | 45 | required this.onClosing, |
| 47 | required this.child, | 46 | required this.child, |
| 48 | - }) : super(key: key); | 47 | + this.minFlingVelocity = _minFlingVelocity, |
| 48 | + double? closeProgressThreshold, | ||
| 49 | + this.willPopThreshold = _willPopThreshold, | ||
| 50 | + }) : closeProgressThreshold = | ||
| 51 | + closeProgressThreshold ?? _closeProgressThreshold, | ||
| 52 | + super(key: key); | ||
| 49 | 53 | ||
| 50 | /// The closeProgressThreshold parameter | 54 | /// The closeProgressThreshold parameter |
| 51 | /// specifies when the bottom sheet will be dismissed when user drags it. | 55 | /// specifies when the bottom sheet will be dismissed when user drags it. |
| 52 | - final double? closeProgressThreshold; | 56 | + final double closeProgressThreshold; |
| 53 | 57 | ||
| 54 | /// The animation controller that controls the bottom sheet's entrance and | 58 | /// The animation controller that controls the bottom sheet's entrance and |
| 55 | /// exit animations. | 59 | /// exit animations. |
| @@ -100,6 +104,14 @@ class ModalBottomSheet extends StatefulWidget { | @@ -100,6 +104,14 @@ class ModalBottomSheet extends StatefulWidget { | ||
| 100 | 104 | ||
| 101 | final ScrollController scrollController; | 105 | final ScrollController scrollController; |
| 102 | 106 | ||
| 107 | + /// The minFlingVelocity parameter | ||
| 108 | + /// Determines how fast the sheet should be flinged before closing. | ||
| 109 | + final double minFlingVelocity; | ||
| 110 | + | ||
| 111 | + /// The willPopThreshold parameter | ||
| 112 | + /// Determines how far the sheet should be flinged before closing. | ||
| 113 | + final double willPopThreshold; | ||
| 114 | + | ||
| 103 | @override | 115 | @override |
| 104 | ModalBottomSheetState createState() => ModalBottomSheetState(); | 116 | ModalBottomSheetState createState() => ModalBottomSheetState(); |
| 105 | 117 | ||
| @@ -147,8 +159,7 @@ class ModalBottomSheetState extends State<ModalBottomSheet> | @@ -147,8 +159,7 @@ class ModalBottomSheetState extends State<ModalBottomSheet> | ||
| 147 | widget.animationController.value < _willPopThreshold; | 159 | widget.animationController.value < _willPopThreshold; |
| 148 | 160 | ||
| 149 | bool get hasReachedCloseThreshold => | 161 | bool get hasReachedCloseThreshold => |
| 150 | - widget.animationController.value < | ||
| 151 | - (widget.closeProgressThreshold ?? _closeProgressThreshold); | 162 | + widget.animationController.value < widget.closeProgressThreshold; |
| 152 | 163 | ||
| 153 | void _close() { | 164 | void _close() { |
| 154 | isDragging = false; | 165 | isDragging = false; |
| @@ -237,7 +248,7 @@ class ModalBottomSheetState extends State<ModalBottomSheet> | @@ -237,7 +248,7 @@ class ModalBottomSheetState extends State<ModalBottomSheet> | ||
| 237 | } | 248 | } |
| 238 | 249 | ||
| 239 | // If speed is bigger than _minFlingVelocity try to close it | 250 | // If speed is bigger than _minFlingVelocity try to close it |
| 240 | - if (velocity > _minFlingVelocity) { | 251 | + if (velocity > widget.minFlingVelocity) { |
| 241 | tryClose(); | 252 | tryClose(); |
| 242 | } else if (hasReachedCloseThreshold) { | 253 | } else if (hasReachedCloseThreshold) { |
| 243 | if (widget.animationController.value > 0.0) { | 254 | if (widget.animationController.value > 0.0) { |
| @@ -327,7 +338,7 @@ class ModalBottomSheetState extends State<ModalBottomSheet> | @@ -327,7 +338,7 @@ class ModalBottomSheetState extends State<ModalBottomSheet> | ||
| 327 | } | 338 | } |
| 328 | } | 339 | } |
| 329 | 340 | ||
| 330 | - Curve get _defaultCurve => widget.animationCurve ?? _modalBottomSheetCurve; | 341 | + Curve get _defaultCurve => widget.animationCurve ?? _decelerateEasing; |
| 331 | 342 | ||
| 332 | @override | 343 | @override |
| 333 | void initState() { | 344 | void initState() { |
| @@ -136,9 +136,10 @@ class ModalBottomSheetRoute<T> extends PageRoute<T> { | @@ -136,9 +136,10 @@ class ModalBottomSheetRoute<T> extends PageRoute<T> { | ||
| 136 | required this.expanded, | 136 | required this.expanded, |
| 137 | this.bounce = false, | 137 | this.bounce = false, |
| 138 | this.animationCurve, | 138 | this.animationCurve, |
| 139 | - this.duration, | 139 | + Duration? duration, |
| 140 | RouteSettings? settings, | 140 | RouteSettings? settings, |
| 141 | - }) : super(settings: settings); | 141 | + }) : duration = duration ?? _bottomSheetDuration, |
| 142 | + super(settings: settings); | ||
| 142 | 143 | ||
| 143 | final double? closeProgressThreshold; | 144 | final double? closeProgressThreshold; |
| 144 | final WidgetWithChildBuilder? containerBuilder; | 145 | final WidgetWithChildBuilder? containerBuilder; |
| @@ -150,13 +151,13 @@ class ModalBottomSheetRoute<T> extends PageRoute<T> { | @@ -150,13 +151,13 @@ class ModalBottomSheetRoute<T> extends PageRoute<T> { | ||
| 150 | final bool enableDrag; | 151 | final bool enableDrag; |
| 151 | final ScrollController? scrollController; | 152 | final ScrollController? scrollController; |
| 152 | 153 | ||
| 153 | - final Duration? duration; | 154 | + final Duration duration; |
| 154 | 155 | ||
| 155 | final AnimationController? secondAnimationController; | 156 | final AnimationController? secondAnimationController; |
| 156 | final Curve? animationCurve; | 157 | final Curve? animationCurve; |
| 157 | 158 | ||
| 158 | @override | 159 | @override |
| 159 | - Duration get transitionDuration => duration ?? _bottomSheetDuration; | 160 | + Duration get transitionDuration => duration; |
| 160 | 161 | ||
| 161 | @override | 162 | @override |
| 162 | bool get barrierDismissible => isDismissible; | 163 | bool get barrierDismissible => isDismissible; |
| @@ -244,6 +245,7 @@ Future<T?> showCustomModalBottomSheet<T>({ | @@ -244,6 +245,7 @@ Future<T?> showCustomModalBottomSheet<T>({ | ||
| 244 | bool enableDrag = true, | 245 | bool enableDrag = true, |
| 245 | Duration? duration, | 246 | Duration? duration, |
| 246 | RouteSettings? settings, | 247 | RouteSettings? settings, |
| 248 | + double? closeProgressThreshold, | ||
| 247 | }) async { | 249 | }) async { |
| 248 | assert(debugCheckHasMediaQuery(context)); | 250 | assert(debugCheckHasMediaQuery(context)); |
| 249 | assert(debugCheckHasMaterialLocalizations(context)); | 251 | assert(debugCheckHasMaterialLocalizations(context)); |
| @@ -268,6 +270,7 @@ Future<T?> showCustomModalBottomSheet<T>({ | @@ -268,6 +270,7 @@ Future<T?> showCustomModalBottomSheet<T>({ | ||
| 268 | animationCurve: animationCurve, | 270 | animationCurve: animationCurve, |
| 269 | duration: duration, | 271 | duration: duration, |
| 270 | settings: settings, | 272 | settings: settings, |
| 273 | + closeProgressThreshold: closeProgressThreshold, | ||
| 271 | )); | 274 | )); |
| 272 | return result; | 275 | return result; |
| 273 | } | 276 | } |
| @@ -81,7 +81,6 @@ Future<T?> showBarModalBottomSheet<T>({ | @@ -81,7 +81,6 @@ Future<T?> showBarModalBottomSheet<T>({ | ||
| 81 | Color? backgroundColor, | 81 | Color? backgroundColor, |
| 82 | double? elevation, | 82 | double? elevation, |
| 83 | ShapeBorder? shape, | 83 | ShapeBorder? shape, |
| 84 | - double? closeProgressThreshold, | ||
| 85 | Clip? clipBehavior, | 84 | Clip? clipBehavior, |
| 86 | Color barrierColor = Colors.black87, | 85 | Color barrierColor = Colors.black87, |
| 87 | bool bounce = true, | 86 | bool bounce = true, |
| @@ -95,6 +94,7 @@ Future<T?> showBarModalBottomSheet<T>({ | @@ -95,6 +94,7 @@ Future<T?> showBarModalBottomSheet<T>({ | ||
| 95 | Duration? duration, | 94 | Duration? duration, |
| 96 | RouteSettings? settings, | 95 | RouteSettings? settings, |
| 97 | SystemUiOverlayStyle? overlayStyle, | 96 | SystemUiOverlayStyle? overlayStyle, |
| 97 | + double? closeProgressThreshold, | ||
| 98 | }) async { | 98 | }) async { |
| 99 | assert(debugCheckHasMediaQuery(context)); | 99 | assert(debugCheckHasMediaQuery(context)); |
| 100 | assert(debugCheckHasMaterialLocalizations(context)); | 100 | assert(debugCheckHasMaterialLocalizations(context)); |
| @@ -74,7 +74,6 @@ Future<T?> showCupertinoModalBottomSheet<T>({ | @@ -74,7 +74,6 @@ Future<T?> showCupertinoModalBottomSheet<T>({ | ||
| 74 | required WidgetBuilder builder, | 74 | required WidgetBuilder builder, |
| 75 | Color? backgroundColor, | 75 | Color? backgroundColor, |
| 76 | double? elevation, | 76 | double? elevation, |
| 77 | - double? closeProgressThreshold, | ||
| 78 | ShapeBorder? shape, | 77 | ShapeBorder? shape, |
| 79 | Clip? clipBehavior, | 78 | Clip? clipBehavior, |
| 80 | Color? barrierColor, | 79 | Color? barrierColor, |
| @@ -92,6 +91,7 @@ Future<T?> showCupertinoModalBottomSheet<T>({ | @@ -92,6 +91,7 @@ Future<T?> showCupertinoModalBottomSheet<T>({ | ||
| 92 | Color? transitionBackgroundColor, | 91 | Color? transitionBackgroundColor, |
| 93 | BoxShadow? shadow, | 92 | BoxShadow? shadow, |
| 94 | SystemUiOverlayStyle? overlayStyle, | 93 | SystemUiOverlayStyle? overlayStyle, |
| 94 | + double? closeProgressThreshold, | ||
| 95 | }) async { | 95 | }) async { |
| 96 | assert(debugCheckHasMediaQuery(context)); | 96 | assert(debugCheckHasMediaQuery(context)); |
| 97 | final hasMaterialLocalizations = | 97 | final hasMaterialLocalizations = |
| @@ -5,7 +5,6 @@ import 'dart:async'; | @@ -5,7 +5,6 @@ import 'dart:async'; | ||
| 5 | /// Shows a modal material design bottom sheet. | 5 | /// Shows a modal material design bottom sheet. |
| 6 | Future<T?> showMaterialModalBottomSheet<T>({ | 6 | Future<T?> showMaterialModalBottomSheet<T>({ |
| 7 | required BuildContext context, | 7 | required BuildContext context, |
| 8 | - double? closeProgressThreshold, | ||
| 9 | required WidgetBuilder builder, | 8 | required WidgetBuilder builder, |
| 10 | Color? backgroundColor, | 9 | Color? backgroundColor, |
| 11 | double? elevation, | 10 | double? elevation, |
| @@ -21,6 +20,7 @@ Future<T?> showMaterialModalBottomSheet<T>({ | @@ -21,6 +20,7 @@ Future<T?> showMaterialModalBottomSheet<T>({ | ||
| 21 | bool enableDrag = true, | 20 | bool enableDrag = true, |
| 22 | Duration? duration, | 21 | Duration? duration, |
| 23 | RouteSettings? settings, | 22 | RouteSettings? settings, |
| 23 | + double? closeProgressThreshold, | ||
| 24 | }) async { | 24 | }) async { |
| 25 | assert(debugCheckHasMediaQuery(context)); | 25 | assert(debugCheckHasMediaQuery(context)); |
| 26 | assert(debugCheckHasMaterialLocalizations(context)); | 26 | assert(debugCheckHasMaterialLocalizations(context)); |
-
Please register or login to post a comment