public WidgetsViewport(RectTransform node, IWidgetsProvider widgetsProvider, WidgetsAlignment alignment, float spacing)
        {
            _node               = node;
            _itemWidgetsPool    = new WidgetsPool(widgetsProvider, _node);
            _widgets            = new List <IWidget>();
            _alignment          = alignment;
            _spacing            = spacing;
            _axis               = AxisMaskDesc.WidgetsAlignmentAxis[_alignment];
            _edgesLastPositions = new Dictionary <WidgetsAlignment, float>();

            SetPivotAndAnchors(_node);
            Reset();
        }
        public void Init(IItemsProvider itemsProvider, IWidgetsProvider widgetsProvider)
        {
            _itemsProvider   = itemsProvider;
            _itemsViewport   = new ItemsViewport(itemsProvider);
            _widgetsViewport = new WidgetsViewport(_contentNode, widgetsProvider, _alignment, _spacing);
            Axis axis = AxisMaskDesc.WidgetsAlignmentAxis[_alignment];

            _scroller = GetComponent <Scroller>();
            _scroller.Init(_viewportNode, axis, _speedCoef, _inertiaCoef, _elasticityCoef);
            _scroller.onScroll += OnScroll;

            _scrollNavigation = GetComponent <ScrollNavigation>();
            _scrollNavigation.Init(_itemsViewport, _widgetsViewport, axis, InitialRefreshViewport);
            _scrollNavigation.onScroll         += OnScrollNavigation;
            _scrollNavigation.onScrollStarted  += OnScrollNavigationStarted;
            _scrollNavigation.onScrollFinished += OnScrollNavigationFinished;

            InitialRefreshViewport();
        }