Example #1
0
        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);
        }
Example #2
0
        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);
        }