Exemple #1
0
 protected virtual void Dispose(bool disposing)
 {
     if (disposing)
     {
         _rootPageRenderer?.Dispose();
         _viewStack?.Unrealize();
         (ShellSection as IShellSectionController).NavigationRequested -= OnNavigationRequested;
     }
 }
Exemple #2
0
        protected async Task SetCurrentShellItemControllerAsync(IShellItemRenderer value)
        {
            _incomingRenderer = value;
            await _activeTransition;

            // This means the selected item changed while the active transition
            // was finishing up
            if (_incomingRenderer != value ||
                value.ShellItem != this.Shell.CurrentItem)
            {
                (value as IDisconnectable)?.Disconnect();
                value?.Dispose();
                return;
            }

            var oldRenderer = _currentShellItemRenderer;

            (oldRenderer as IDisconnectable)?.Disconnect();
            var newRenderer = value;

            _currentShellItemRenderer = value;

            AddChildViewController(newRenderer.ViewController);
            View.AddSubview(newRenderer.ViewController.View);
            View.SendSubviewToBack(newRenderer.ViewController.View);

            newRenderer.ViewController.View.Frame = View.Bounds;

            if (oldRenderer != null)
            {
                var transition = CreateShellItemTransition();

                _activeTransition = transition.Transition(oldRenderer, newRenderer);
                await _activeTransition;

                oldRenderer.ViewController.RemoveFromParentViewController();
                oldRenderer.ViewController.View.RemoveFromSuperview();
                oldRenderer.Dispose();
            }
            else
            {
                View.AddSubview(newRenderer.ViewController.View);
            }

            // current renderer is still valid
            if (_currentShellItemRenderer == value)
            {
                UpdateBackgroundColor();
                UpdateFlowDirection();
            }
        }
Exemple #3
0
        protected virtual void Dispose(bool disposing)
        {
            if (_disposed)
            {
                return;
            }

            _disposed = true;

            if (disposing)
            {
                if (_currentRenderer != null && _currentRenderer.Fragment.IsAlive())
                {
                    FragmentTransaction transaction = FragmentManager.BeginTransaction();
                    transaction.RemoveEx(_currentRenderer.Fragment);
                    transaction.CommitAllowingStateLossEx();
                    FragmentManager.ExecutePendingTransactionsEx();
                }

                Element.PropertyChanged -= OnElementPropertyChanged;
                Element.SizeChanged     -= OnElementSizeChanged;
                ((IShellController)Element).RemoveAppearanceObserver(this);

                // This cast is necessary because IShellFlyoutRenderer doesn't implement IDisposable
                (_flyoutRenderer as IDisposable)?.Dispose();

                _currentRenderer.Dispose();
                _currentRenderer = null;
            }

            Element = null;
            // TODO: free unmanaged resources (unmanaged objects) and override a finalizer below.
            // TODO: set large fields to null.

            _disposed = true;
        }