private StateMachine <NavigationState, NavigationTrigger> CreateNavigationStateMachine() { var stateMachine = new StateMachine <NavigationState, NavigationTrigger>(NavigationState.Init); stateMachine.Configure(NavigationState.Init) .Permit(NavigationTrigger.Unauthorized, NavigationState.Login) .OnExitAsync(() => _navigation.PopAsync()); stateMachine.Configure(NavigationState.Login) .Permit(NavigationTrigger.LoginSucceeded, NavigationState.Tabs) .OnEntryAsync(() => LoginNavigationHandler.HandleArriveAsync(NavigationKind.New)) .OnExitAsync(() => LoginNavigationHandler.HandleLeaveAsync()); stateMachine.Configure(NavigationState.Tabs) .Permit(NavigationTrigger.SelectionRequested, NavigationState.Selector) .OnEntryFromAsync(NavigationTrigger.LoginSucceeded, () => TabsNavigationHandler.HandleArriveAsync(NavigationKind.New)) .OnEntryFromAsync(NavigationTrigger.ItemSelected, () => TabsNavigationHandler.HandleArriveAsync(NavigationKind.Reentry)) .OnExitAsync(() => TabsNavigationHandler.HandleLeaveAsync()); stateMachine.Configure(NavigationState.Selector) .Permit(NavigationTrigger.ItemSelected, NavigationState.Tabs) .OnEntryAsync(() => SelectorNavigationHandler.HandleArriveAsync(NavigationKind.New)) .OnExitAsync(() => SelectorNavigationHandler.HandleLeaveAsync()); return(stateMachine); }
public ViewPresenter(INavigation navigation, IServiceProvider serviceProvider) { _navigation = navigation ?? throw new ArgumentNullException(nameof(navigation)); _serviceProvider = serviceProvider ?? throw new ArgumentNullException(nameof(serviceProvider)); _stateMachine = CreateNavigationStateMachine(); LoginNavigationHandler = new LoginNavigationHandler(_serviceProvider, _navigation, _stateMachine); TabsNavigationHandler = new TabsNavigationHandler(_serviceProvider, _navigation, _stateMachine); SelectorNavigationHandler = new SelectorNavigationHandler(_serviceProvider, _navigation, _stateMachine); }