public async Task CloseModal(bool animation = false) { await Device.InvokeOnMainThreadAsync(async() => { try { Debug.WriteLine($"CloseModal(animation={animation})"); Page page = null; if (Device.RuntimePlatform == Device.Android) { page = await _navigation.Navigation.PopModalAsync(false); } else { page = await _navigation.Navigation.PopModalAsync(animation); } if (page != null) { var pageKey = _pagesByKey.First(p => p.Value == page.GetType()).Key; Debug.WriteLine($"CloseModal():PageKey({pageKey})"); } CurrentPage = _navigation.CurrentPage; AppStateController.PopViewState(); } catch (Exception ex) { Debug.WriteLine(ex); } }); }
public async Task PopToRootAsync() { await Device.InvokeOnMainThreadAsync(async() => { try { Debug.WriteLine($"PopToRootAsync()"); while (_navigation.Navigation.ModalStack.Any()) { await _navigation.Navigation.PopModalAsync(false); } await _navigation.Navigation.PopToRootAsync(false); CurrentPage = _navigation.CurrentPage; AppStateController.ClearNavigationMetaStack(); } catch (Exception ex) { Debug.WriteLine(ex); } }); }
protected override async void OnStart() { var result = await DependencyService.Get <IPermissionService>() .CheckPermissions(Permission.Storage); if (!result.Any(x => x.Value == PermissionStatus.Granted)) { return; } //await ClearTablesAsync(); await CreateTablesAsync(); var navigationService = SimpleIoc.Default.GetInstance <INavigationService>(); var navList = AppStateController.RestoreState(); AppStateController.ClearNavigationMetaStack(); foreach (var nav in navList) { switch (nav.CurrentPage) { case "MainPage": await navigationService.ReplaceRoot(Locator.Home); break; default: break; } } base.OnStart(); }
protected override void OnResume() { try { AppStateController.ResetState(); } catch (Exception ex) { Debug.WriteLine(ex); } }
private void SavePreviousPageState(string pageKey) { Debug.WriteLine($"SavePreviousPageState(pageKey={pageKey})"); if (string.IsNullOrEmpty(pageKey)) { AppStateController.SaveViewState(((IContentPage)_navigation.CurrentPage)?.OnSleep()); } else { var page = _navigation.Navigation.ModalStack.FirstOrDefault(x => x.GetType() == _pagesByKey[pageKey]); AppStateController.SaveViewState(((IContentPage)page)?.OnSleep()); } }
protected override void OnSleep() { try { if (((MasterDetailPage)Application.Current.MainPage).Detail is NavigationPage navigation) { AppStateController.SaveViewState(navigation.Navigation.ModalStack.Any() ? ((IContentPage)navigation.Navigation.ModalStack.Last()).OnSleep() : ((IContentPage)navigation.Navigation.NavigationStack.Last()).OnSleep()); AppStateController.SaveFinalState(); } } catch (Exception ex) { Debug.WriteLine(ex); } }