isPopGestureEnabled method

bool isPopGestureEnabled()

Implementation

bool isPopGestureEnabled() {
  final route = widget.route;
  // If there's nothing to go back to, then obviously we don't support
  // the back gesture.
  if (route.isFirst) return false;
  // If the route wouldn't actually pop if we popped it, then the gesture
  // would be really confusing (or would skip internal routes),
  //so disallow it.
  if (route.willHandlePopInternally) return false;
  // If attempts to dismiss this route might be vetoed such as in a page
  // with forms, then do not allow the user to dismiss the route with a swipe.
  // ignore: invalid_use_of_protected_member
  if (route.hasScopedWillPopCallback) return false;
  // Fullscreen dialogs aren't dismissible by back swipe.
  if (route.fullscreenDialog) return false;
  // If we're in an animation already, we cannot be manually swiped.
  if (route.animation!.status != AnimationStatus.completed) return false;
  // If we're being popped into, we also cannot be swiped until the pop above
  // it completes. This translates to our secondary animation being
  // dismissed.
  if (route.secondaryAnimation!.status != AnimationStatus.dismissed) {
    return false;
  }
  // If we're in a gesture already, we cannot start another.
  if (isPopGestureInProgress()) return false;

  // Looks like a back gesture would be welcome!
  return true;
}