From 82a10167b58be94c707d933b5083ca2a0f1647cc Mon Sep 17 00:00:00 2001 From: Christer Date: Wed, 6 Nov 2019 12:58:28 +0100 Subject: [PATCH] Added valid start rect. --- lib/slide_container.dart | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/lib/slide_container.dart b/lib/slide_container.dart index fcee484..6b7ed73 100644 --- a/lib/slide_container.dart +++ b/lib/slide_container.dart @@ -111,6 +111,8 @@ class SlideContainer extends StatefulWidget { /// Register this controller to be able to manually force a slide in a given direction. final SlideContainerController controller; + final Rect validStartDragRect; + SlideContainer({ @required this.child, this.slideDirection = SlideContainerDirection.vertical, @@ -119,6 +121,7 @@ class SlideContainer extends StatefulWidget { this.dampeningStrength = 8.0, this.minSlideDistanceToValidate, this.maxSlideDistance, + this.validStartDragRect, this.onSlideStarted, this.onSlideValidated, this.onSlideUnvalidated, @@ -142,6 +145,7 @@ class _State extends State with TickerProviderStateMixin { double dragValue = 0.0; double dragTarget = 0.0; bool isFirstDragFrame = true; + bool isValidDrag = false; bool didValidate = false; bool didForceSlide = false; AnimationController animationController; @@ -381,6 +385,14 @@ class _State extends State with TickerProviderStateMixin { }); void handlePanStart(DragStartDetails details) { + if(widget.validStartDragRect != null) { + isValidDrag = widget.validStartDragRect.contains(details.localPosition); + } else { + isValidDrag = true; + } + + if(!isValidDrag) return; + didForceSlide = false; animationController.stop(); isFirstDragFrame = true; @@ -392,6 +404,8 @@ class _State extends State with TickerProviderStateMixin { } void handlePanUpdate(DragUpdateDetails details) { + if(!isValidDrag) return; + if (didForceSlide) { return; } @@ -412,6 +426,8 @@ class _State extends State with TickerProviderStateMixin { } void handlePanEnd(DragEndDetails details) { + if(!isValidDrag) return; + if (didForceSlide) { return; }