11using Microsoft . AspNetCore . Components ;
2+ using Octokit ;
23using System . ComponentModel ;
34using System . Diagnostics ;
45
@@ -42,10 +43,13 @@ private void OnSizeChanged(object sender, EventArgs e)
4243
4344 private async void ViewModel_PropertyChanged ( Object sender , PropertyChangedEventArgs e )
4445 {
45- await HandlePageIndexChangedAsync ( ) ;
46+ if ( e . PropertyName == nameof ( ViewModel . SelectedPageIndex ) )
47+ {
48+ await HandlePageIndexChangedByWebViewAsync ( ) ;
49+ }
4650 }
4751
48- private async void OnScrolled ( object sender , ScrolledEventArgs e )
52+ private void OnScrolled ( object sender , ScrolledEventArgs e )
4953 {
5054 if ( IsAnimating )
5155 return ;
@@ -58,41 +62,73 @@ private async void OnScrolled(object sender, ScrolledEventArgs e)
5862
5963 if ( scrollY > ( maxScrollY - threshold ) )
6064 {
61- if ( ViewModel . SelectedPageIndex < ResumeInputStackLayout . Children . Count - 1 )
65+ if ( ViewModel . SelectedPageIndex < ( ResumeInputStackLayout . Children . Count - 1 ) )
6266 {
63- await ChangePage ( ViewModel . SelectedPageIndex + 1 ) ;
67+ ChangePage ( ViewModel . SelectedPageIndex + 1 ) ;
6468 }
6569 }
6670 else if ( scrollY < ( threshold ) )
6771 {
6872 if ( ViewModel . SelectedPageIndex > 0 )
6973 {
70- await ChangePage ( ViewModel . SelectedPageIndex - 1 ) ;
74+ ChangePage ( ViewModel . SelectedPageIndex - 1 ) ;
7175 }
7276 }
7377 }
7478 #endregion
7579
7680 #region [ Methods ]
77- private async Task HandlePageIndexChangedAsync ( )
81+ private void ChangePage ( int newPage )
82+ {
83+ ViewModel . PreviousSelectedPageIndex = ViewModel . SelectedPageIndex ;
84+ ViewModel . SelectedPageIndex = newPage ;
85+
86+ //await BlazorWebViewElement.TryDispatchAsync(async sp =>
87+ //{
88+ // var navigationManager = sp.GetRequiredService<NavigationManager>();
89+ // var newUri = ViewModel.BlazorWebViewStartPath + ViewModel.Pages[newPage];
90+ // if (navigationManager.Uri != navigationManager.ToAbsoluteUri(newUri).ToString())
91+ // {
92+ // await Task.Delay(800);
93+ // navigationManager.NavigateTo(newUri, true);
94+ // await Task.Delay(800);
95+ // }
96+ //});
97+ }
98+
99+ private async Task HandlePageIndexChangedByWebViewAsync ( )
78100 {
101+ IsAnimating = true ;
102+
79103 var previousLayout = ResumeInputStackLayout . Children [ ViewModel . PreviousSelectedPageIndex ] as VisualElement ;
80104 var currentLayout = ResumeInputStackLayout . Children [ ViewModel . SelectedPageIndex ] as VisualElement ;
81105
82- await previousLayout . FadeTo ( 0 , 500 ) ;
83- previousLayout . IsVisible = false ;
106+ if ( previousLayout != null )
107+ {
108+ await Task . Delay ( 100 ) ;
109+ await previousLayout . FadeTo ( 0 , 300 ) ;
110+ previousLayout . IsVisible = false ;
111+ }
112+
113+ if ( currentLayout != null )
114+ {
115+ await Task . Delay ( 100 ) ;
116+ currentLayout . IsVisible = true ;
117+ await currentLayout . FadeTo ( 1 , 300 ) ;
118+ }
84119
85- currentLayout . IsVisible = true ;
86- await currentLayout . FadeTo ( 1 , 500 ) ;
87120 await AdjustLayout ( ) ;
121+
122+ IsAnimating = false ;
88123 }
89124
90125 private async Task AdjustLayout ( )
91126 {
92127 IsAnimating = true ;
93128 var currentPageHeight = 0.0 ;
129+ var currentElement = ResumeInputStackLayout . Children [ ViewModel . SelectedPageIndex ] as VisualElement ;
94130
95- if ( ResumeInputStackLayout . Children [ ViewModel . SelectedPageIndex ] is VisualElement stackChildrenElement )
131+ if ( currentElement is VisualElement stackChildrenElement )
96132 {
97133 stackChildrenElement . Measure ( double . PositiveInfinity , double . PositiveInfinity ) ;
98134 currentPageHeight = stackChildrenElement . DesiredSize . Height ;
@@ -111,46 +147,8 @@ private async Task AdjustLayout()
111147 }
112148
113149 await Task . Delay ( 300 ) ;
114- await ResumeInputScrollView . ScrollToAsync ( 0 , desiredHeight * 0.1 , true ) ;
115-
116- IsAnimating = false ;
117- }
118-
119- private async Task ChangePage ( int newPage )
120- {
121- IsAnimating = true ;
122-
123- var currentLayout = ResumeInputStackLayout . Children [ ViewModel . SelectedPageIndex ] as VisualElement ;
124- var newLayout = ResumeInputStackLayout . Children [ newPage ] as VisualElement ;
125-
126- if ( currentLayout != null )
127- {
128- await currentLayout . FadeTo ( 0 , 500 ) ;
129- currentLayout . IsVisible = false ;
130- }
131-
132- //await BlazorWebViewElement.TryDispatchAsync(async sp =>
133- //{
134- // NavigationManager = sp.GetRequiredService<NavigationManager>();
135- // var newUri = ViewModel.BlazorWebViewStartPath + ViewModel.Pages[newPage];
136- // if (NavigationManager.Uri != NavigationManager.ToAbsoluteUri(newUri).ToString())
137- // {
138- // await Task.Delay(800);
139- // NavigationManager.NavigateTo(newUri, true);
140- // await Task.Delay(800);
141- // }
142- //});
143-
144- ViewModel . PreviousSelectedPageIndex = ViewModel . SelectedPageIndex ;
145- ViewModel . SelectedPageIndex = newPage ;
146-
147- if ( newLayout != null )
148- {
149- newLayout . IsVisible = true ;
150- await newLayout . FadeTo ( 1 , 500 ) ;
151- }
152-
153- await AdjustLayout ( ) ;
150+ //await ResumeInputScrollView.ScrollToAsync(0, desiredHeight * 0.1, true);
151+ await ResumeInputScrollView . ScrollToAsync ( currentElement , ScrollToPosition . Center , true ) ;
154152
155153 IsAnimating = false ;
156154 }
0 commit comments