protected override async Task OnParametersSetAsync() { previousVisibility = currentVisibility; if (IsOpen && (currentVisibility == ModalVisibilityState.Closed || currentVisibility == ModalVisibilityState.AnimatingClosed)) { currentVisibility = ModalVisibilityState.AnimatingOpen; } if (!IsOpen && (currentVisibility == ModalVisibilityState.Open || currentVisibility == ModalVisibilityState.AnimatingOpen)) { currentVisibility = ModalVisibilityState.AnimatingClosed; // This StateHasChanged call was added because using a custom close button in NavigationTemplate did not cause a state change to occur. // The result was that the animation class would not get added and the close transition would not show. This is a hack to make it work. StateHasChanged(); } Debug.WriteLine($"Was: {previousVisibility} Current:{currentVisibility}"); if (_jsAvailable) { if (currentVisibility != previousVisibility) { Debug.WriteLine("Clearing animation timer"); _clearExistingAnimationTimer(); if (currentVisibility == ModalVisibilityState.AnimatingOpen) { isAnimating = true; animationRenderStart = true; _animateTo(ModalVisibilityState.Open); } else if (currentVisibility == ModalVisibilityState.AnimatingClosed) { isAnimating = true; _animateTo(ModalVisibilityState.Closed); } } } await base.OnParametersSetAsync(); }
public Modal() { _animationTimer = new Timer(); _clearExistingAnimationTimer = () => { if (_animationTimer.Enabled) { _animationTimer.Stop(); _animationTimer.Elapsed -= _handler; } }; _animateTo = (animationState) => { _animationTimer.Interval = 200; _handler = null; _handler = (s, e) => { InvokeAsync(() => { //Debug.WriteLine("Inside invokeAsync from animateTo timer elapsed"); _animationTimer.Elapsed -= _handler; _animationTimer.Stop(); previousVisibility = currentVisibility; currentVisibility = animationState; _onTransitionComplete(); }); }; _animationTimer.Elapsed += _handler; _animationTimer.Start(); }; _onTransitionComplete = () => { isAnimating = false; StateHasChanged(); }; }