From e16dc4440d0c6e174f115aff6c7b10b445f50b48 Mon Sep 17 00:00:00 2001 From: chunhtai <47866232+chunhtai@users.noreply.github.com> Date: Fri, 15 Apr 2022 13:05:07 -0700 Subject: [PATCH] Revert "Fix Backbutton is not displayed when there is a endDrawer (#101869)" (#101998) This reverts commit e2d12060a2bc574a3e1209e206d5cf031cdbc335. --- .../flutter/lib/src/material/app_bar.dart | 6 +++--- .../flutter/lib/src/material/scaffold.dart | 21 +++++++------------ .../flutter/lib/src/widgets/navigator.dart | 1 + 3 files changed, 11 insertions(+), 17 deletions(-) diff --git a/packages/flutter/lib/src/material/app_bar.dart b/packages/flutter/lib/src/material/app_bar.dart index b7c321a8d9..39c7bd39c3 100644 --- a/packages/flutter/lib/src/material/app_bar.dart +++ b/packages/flutter/lib/src/material/app_bar.dart @@ -807,9 +807,9 @@ class _AppBarState extends State { final bool hasDrawer = scaffold?.hasDrawer ?? false; final bool hasEndDrawer = scaffold?.hasEndDrawer ?? false; + final bool canPop = parentRoute?.canPop ?? false; final bool useCloseButton = parentRoute is PageRoute && parentRoute.fullscreenDialog; - final bool requiresAppBarDismiss = scaffold?.requiresAppBarDismiss ?? false; - final bool hasActiveRouteBelow = parentRoute?.hasActiveRouteBelow ?? false; + final double toolbarHeight = widget.toolbarHeight ?? appBarTheme.toolbarHeight ?? kToolbarHeight; final bool backwardsCompatibility = widget.backwardsCompatibility ?? appBarTheme.backwardsCompatibility ?? false; @@ -880,7 +880,7 @@ class _AppBarState extends State { tooltip: MaterialLocalizations.of(context).openAppDrawerTooltip, ); } else { - if (hasActiveRouteBelow || requiresAppBarDismiss) + if (!hasEndDrawer && canPop) leading = useCloseButton ? const CloseButton() : const BackButton(); } } diff --git a/packages/flutter/lib/src/material/scaffold.dart b/packages/flutter/lib/src/material/scaffold.dart index befb93a07d..d60904d04a 100644 --- a/packages/flutter/lib/src/material/scaffold.dart +++ b/packages/flutter/lib/src/material/scaffold.dart @@ -1917,20 +1917,13 @@ class ScaffoldState extends State with TickerProviderStateMixin, Resto /// Whether this scaffold has a non-null [Scaffold.appBar]. bool get hasAppBar => widget.appBar != null; - /// Whether this scaffold has a non-null [Scaffold.drawer]. bool get hasDrawer => widget.drawer != null; - /// Whether this scaffold has a non-null [Scaffold.endDrawer]. bool get hasEndDrawer => widget.endDrawer != null; - /// Whether this scaffold has a non-null [Scaffold.floatingActionButton]. bool get hasFloatingActionButton => widget.floatingActionButton != null; - /// Whether this scaffold requires [Scaffold.appBar] to automatically add - /// dismiss button. - bool get requiresAppBarDismiss => _persistentSheetHistoryEntry != null; - double? _appBarMaxHeight; /// The max height the [Scaffold.appBar] uses. /// @@ -2058,28 +2051,28 @@ class ScaffoldState extends State with TickerProviderStateMixin, Resto PersistentBottomSheetController? _currentBottomSheet; final GlobalKey _currentBottomSheetKey = GlobalKey(); - LocalHistoryEntry? _persistentSheetHistoryEntry; void _maybeBuildPersistentBottomSheet() { if (widget.bottomSheet != null && _currentBottomSheet == null) { // The new _currentBottomSheet is not a local history entry so a "back" button // will not be added to the Scaffold's appbar and the bottom sheet will not // support drag or swipe to dismiss. final AnimationController animationController = BottomSheet.createAnimationController(this)..value = 1.0; + LocalHistoryEntry? persistentSheetHistoryEntry; bool _persistentBottomSheetExtentChanged(DraggableScrollableNotification notification) { if (notification.extent > notification.initialExtent) { - if (_persistentSheetHistoryEntry == null) { - _persistentSheetHistoryEntry = LocalHistoryEntry(onRemove: () { + if (persistentSheetHistoryEntry == null) { + persistentSheetHistoryEntry = LocalHistoryEntry(onRemove: () { if (notification.extent > notification.initialExtent) { DraggableScrollableActuator.reset(notification.context); } showBodyScrim(false, 0.0); _floatingActionButtonVisibilityValue = 1.0; - _persistentSheetHistoryEntry = null; + persistentSheetHistoryEntry = null; }); - ModalRoute.of(context)!.addLocalHistoryEntry(_persistentSheetHistoryEntry!); + ModalRoute.of(context)!.addLocalHistoryEntry(persistentSheetHistoryEntry!); } - } else if (_persistentSheetHistoryEntry != null) { - ModalRoute.of(context)!.removeLocalHistoryEntry(_persistentSheetHistoryEntry!); + } else if (persistentSheetHistoryEntry != null) { + ModalRoute.of(context)!.removeLocalHistoryEntry(persistentSheetHistoryEntry!); } return false; } diff --git a/packages/flutter/lib/src/widgets/navigator.dart b/packages/flutter/lib/src/widgets/navigator.dart index 0b92115c15..93d0bc5f21 100644 --- a/packages/flutter/lib/src/widgets/navigator.dart +++ b/packages/flutter/lib/src/widgets/navigator.dart @@ -486,6 +486,7 @@ abstract class Route { } /// Whether there is at least one active route underneath this route. + @protected bool get hasActiveRouteBelow { if (_navigator == null) return false;