Skip to content

Commit 6df772b

Browse files
committed
Added guard for SystemNavigationManager. Fixes #4357
1 parent edb9b1b commit 6df772b

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

CommunityToolkit.WinUI.UI.Controls.Layout/ListDetailsView/ListDetailsView.BackButton.cs

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ private void SetBackButtonVisibility(ListDetailsViewState? previousState = null)
3838
return;
3939
}
4040

41+
SystemNavigationManager navigationManager = Window.Current == null ? null : SystemNavigationManager.GetForCurrentView();
42+
4143
if (ViewState == ListDetailsViewState.Details)
4244
{
4345
if (BackButtonBehavior == BackButtonBehavior.Inline && _inlineBackButton != null)
@@ -47,8 +49,7 @@ private void SetBackButtonVisibility(ListDetailsViewState? previousState = null)
4749
else if (BackButtonBehavior == BackButtonBehavior.Automatic)
4850
{
4951
// Continue to support the system back button if it is being used
50-
SystemNavigationManager navigationManager = SystemNavigationManager.GetForCurrentView();
51-
if (navigationManager.AppViewBackButtonVisibility == AppViewBackButtonVisibility.Visible)
52+
if (navigationManager?.AppViewBackButtonVisibility == AppViewBackButtonVisibility.Visible)
5253
{
5354
// Setting this indicates that the system back button is being used
5455
_previousSystemBackButtonVisibility = navigationManager.AppViewBackButtonVisibility;
@@ -66,10 +67,12 @@ private void SetBackButtonVisibility(ListDetailsViewState? previousState = null)
6667
}
6768
else if (BackButtonBehavior != BackButtonBehavior.Manual)
6869
{
69-
SystemNavigationManager navigationManager = SystemNavigationManager.GetForCurrentView();
70-
_previousSystemBackButtonVisibility = navigationManager.AppViewBackButtonVisibility;
70+
if (navigationManager != null)
71+
{
72+
_previousSystemBackButtonVisibility = navigationManager.AppViewBackButtonVisibility;
7173

72-
navigationManager.AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible;
74+
navigationManager.AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible;
75+
}
7376
}
7477
}
7578
else if (previousState == ListDetailsViewState.Details)
@@ -96,7 +99,11 @@ private void SetBackButtonVisibility(ListDetailsViewState? previousState = null)
9699
if (_previousSystemBackButtonVisibility.HasValue)
97100
{
98101
// Make sure we show the back button if the stack can navigate back
99-
SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = _previousSystemBackButtonVisibility.Value;
102+
if (navigationManager != null)
103+
{
104+
navigationManager.AppViewBackButtonVisibility = _previousSystemBackButtonVisibility.Value;
105+
}
106+
100107
_previousSystemBackButtonVisibility = null;
101108
}
102109
}

0 commit comments

Comments
 (0)