onDragEnd method
Implementation
@override
onDragEnd(dragEndDetails, String dir, bool isOpen)
{
const int dragLeeway = 200; // drag leeway for completing open/closes on drag end
var con = widget.model.constraints;
double h = con.maxHeight?? MediaQuery.of(context).size.height;
double w = con.maxWidth ?? MediaQuery.of(context).size.width;
double screenHeight = h;
double screenWidth = w;
if (animate == false) {
if (dir == 'vertical') {
// TOP SHEET
if (openSheet == 'top') {
if (isOpen) { // should close ?
if (dragEndDetails.primaryVelocity! < -300 ||
(fromBottom! > (screenHeight - widget.model.sizeTop!) + (dragLeeway *
((widget.model.sizeTop != null) ? widget.model.sizeTop! /
screenHeight : 1)))) { // yes, close
setState(() {
animate = true;
fromBottom = screenHeight;
openSheet = null;
});
}
else { // no, keep open
setState(() {
animate = true;
fromBottom = widget.model.sizeTop != null
? screenHeight - widget.model.sizeTop!
: 0;
});
}
}
else { // should open ?
if (dragEndDetails.primaryVelocity! > 300 ||
(screenHeight - fromBottom!) > (dragLeeway *
((widget.model.sizeTop != null) ? widget.model.sizeTop! /
screenHeight : 1))) { // yes, open
setState(() {
animate = true;
fromBottom = widget.model.sizeTop != null
? screenHeight - widget.model.sizeTop!
: 0;
});
}
else { // no, keep closed
setState(() {
animate = true;
fromBottom = screenHeight;
openSheet = null;
});
}
}
}
// BOTTOM SHEET
if (openSheet == 'bottom') {
if (isOpen) { // should close ?
if (dragEndDetails.primaryVelocity! > 300 ||
(fromTop! > (screenHeight - widget.model.sizeBottom!) + (dragLeeway *
((widget.model.sizeBottom != null) ? widget.model.sizeBottom! /
screenHeight : 1)))) { // yes, close
setState(() {
animate = true;
fromTop = screenHeight;
openSheet = null;
});
}
else { // no, keep open
setState(() {
animate = true;
fromTop = widget.model.sizeBottom != null ? screenHeight -
widget.model.sizeBottom! : 0;
});
}
}
else { // should open ?
if (dragEndDetails.primaryVelocity! < -300 ||
(screenHeight - fromTop!) > (dragLeeway *
((widget.model.sizeBottom != null) ? widget.model.sizeBottom! /
screenHeight : 1))) { // yes, open
setState(() {
animate = true;
fromTop = widget.model.sizeBottom != null ? screenHeight -
widget.model.sizeBottom! : 0;
});
}
else { // no, keep closed
setState(() {
animate = true;
fromTop = screenHeight;
openSheet = null;
});
}
}
}
}
else if (dir == 'horizontal') {
// LEFT SHEET
if (openSheet == 'left') {
if (isOpen) { // should close ?
if (dragEndDetails.primaryVelocity! < -300 ||
(fromRight! > (screenWidth - widget.model.sizeLeft!) + (dragLeeway *
((widget.model.sizeLeft != null) ? widget.model.sizeLeft! /
screenWidth : 1)))) { // yes, close
setState(() {
animate = true;
fromRight = screenWidth;
openSheet = null;
});
}
else { // no, keep open
setState(() {
animate = true;
fromRight = widget.model.sizeLeft != null
? screenWidth - widget.model.sizeLeft!
: 0;
});
}
}
else { // should open ?
if (dragEndDetails.primaryVelocity! > 300 ||
(screenWidth - fromRight!) > (dragLeeway *
((widget.model.sizeLeft != null) ? widget.model.sizeLeft! /
screenWidth : 1))) { // yes, open
setState(() {
animate = true;
fromRight = widget.model.sizeLeft != null
? screenWidth - widget.model.sizeLeft!
: 0;
});
}
else { // no, keep closed
setState(() {
animate = true;
fromRight = screenWidth;
openSheet = null;
});
}
}
}
// RIGHT SHEET
if (openSheet == 'right') {
if (isOpen) { // should close ?
if (dragEndDetails.primaryVelocity! > 300 ||
(fromLeft! > (screenWidth - widget.model.sizeRight!) + (dragLeeway *
((widget.model.sizeRight != null) ? widget.model.sizeRight! /
screenWidth : 1)))) { // yes, close
setState(() {
animate = true;
fromLeft = screenWidth;
openSheet = null;
});
}
else { // no, keep open
setState(() {
animate = true;
fromLeft = widget.model.sizeRight != null ? screenWidth -
widget.model.sizeRight! : 0;
});
}
}
else { // should open ?
if (dragEndDetails.primaryVelocity! < -300 ||
(screenWidth - fromLeft!) > (dragLeeway *
((widget.model.sizeRight != null) ? widget.model.sizeRight! /
screenWidth : 1))) { // yes, open
setState(() {
animate = true;
fromLeft = widget.model.sizeRight != null ? screenWidth -
widget.model.sizeRight! : 0;
});
}
else { // no, keep closed
setState(() {
animate = true;
fromLeft = screenWidth;
openSheet = null;
});
}
}
}
}
}
}