@@ -19,11 +19,14 @@ internal sealed class NavigationStackCore
1919
2020 bool isRunning ;
2121
22- public async UniTask PopAsync ( NavigationContext context , CancellationToken cancellationToken = default )
22+ public async UniTask PopAsync ( INavigation navigation , NavigationContext context , CancellationToken cancellationToken = default )
2323 {
24+ var copiedContext = context . CreateCopy ( ) ;
25+ copiedContext . Options = context . Options ?? navigation . DefaultOptions ;
26+
2427 if ( isRunning )
2528 {
26- switch ( context . Options . AwaitOperation )
29+ switch ( copiedContext . Options . AwaitOperation )
2730 {
2831 case NavigationAwaitOperation . Error :
2932 throw new InvalidOperationException ( "Navigation is currently in transition." ) ;
@@ -43,10 +46,10 @@ public async UniTask PopAsync(NavigationContext context, CancellationToken cance
4346 pageStack . TryPop ( out var page ) ;
4447 pageStack . TryPeek ( out activePage ) ;
4548
46- var task1 = NavigationHelper . InvokeOnDisappear ( page , callbackReceivers , context , cancellationToken ) ;
49+ var task1 = NavigationHelper . InvokeOnDisappear ( page , callbackReceivers , copiedContext , cancellationToken ) ;
4750 var task2 = activePage == null
4851 ? UniTask . CompletedTask
49- : NavigationHelper . InvokeOnAppear ( activePage , callbackReceivers , context , cancellationToken ) ;
52+ : NavigationHelper . InvokeOnAppear ( activePage , callbackReceivers , copiedContext , cancellationToken ) ;
5053
5154 await UniTask . WhenAll ( task1 , task2 ) ;
5255
@@ -58,11 +61,14 @@ public async UniTask PopAsync(NavigationContext context, CancellationToken cance
5861 }
5962 }
6063
61- public async UniTask PushAsync ( Func < UniTask < IPage > > pageFactory , NavigationContext context , CancellationToken cancellationToken = default )
64+ public async UniTask PushAsync ( INavigation navigation , Func < UniTask < IPage > > pageFactory , NavigationContext context , CancellationToken cancellationToken = default )
6265 {
66+ var copiedContext = context . CreateCopy ( ) ;
67+ copiedContext . Options = context . Options ?? navigation . DefaultOptions ;
68+
6369 if ( isRunning )
6470 {
65- switch ( context . Options . AwaitOperation )
71+ switch ( copiedContext . Options . AwaitOperation )
6672 {
6773 case NavigationAwaitOperation . Error :
6874 throw new InvalidOperationException ( "Navigation is currently in transition." ) ;
@@ -83,8 +89,8 @@ public async UniTask PushAsync(Func<UniTask<IPage>> pageFactory, NavigationConte
8389
8490 var task1 = activePage == null
8591 ? UniTask . CompletedTask
86- : NavigationHelper . InvokeOnDisappear ( activePage , callbackReceivers , context , cancellationToken ) ;
87- var task2 = NavigationHelper . InvokeOnAppear ( page , callbackReceivers , context , cancellationToken ) ;
92+ : NavigationHelper . InvokeOnDisappear ( activePage , callbackReceivers , copiedContext , cancellationToken ) ;
93+ var task2 = NavigationHelper . InvokeOnAppear ( page , callbackReceivers , copiedContext , cancellationToken ) ;
8894
8995 await UniTask . WhenAll ( task1 , task2 ) ;
9096
0 commit comments