Ejemplo n.º 1
0
 public Viewport(
     Key key = null,
     AxisDirection axisDirection      = AxisDirection.down,
     AxisDirection?crossAxisDirection = null,
     float anchor                      = 0.0f,
     ViewportOffset offset             = null,
     Key center                        = null,
     float?cacheExtent                 = null,
     CacheExtentStyle cacheExtentStyle = CacheExtentStyle.pixel,
     List <Widget> slivers             = null
     ) : base(key: key, children: slivers)
 {
     D.assert(offset != null);
     D.assert(slivers != null);
     D.assert(center == null || LinqUtils <Widget> .WhereList(slivers, ((Widget child) => child.key == center)).Count() == 1);
     D.assert(cacheExtentStyle != null);
     D.assert(cacheExtentStyle != CacheExtentStyle.viewport || cacheExtent != null);
     this.axisDirection      = axisDirection;
     this.crossAxisDirection = crossAxisDirection;
     this.anchor             = anchor;
     this.offset             = offset;
     this.center             = center;
     this.cacheExtent        = cacheExtent;
     this.cacheExtentStyle   = cacheExtentStyle;
 }
Ejemplo n.º 2
0
        public static ScrollMetrics copyWith(ScrollMetrics it,
                                             float?minScrollExtent       = null,
                                             float?maxScrollExtent       = null,
                                             float?pixels                = null,
                                             float?viewportDimension     = null,
                                             AxisDirection?axisDirection = null,
                                             float?viewportFraction      = null
                                             )
        {
            if (it is IPageMetrics)
            {
                return(new PageMetrics(
                           minScrollExtent: minScrollExtent ?? it.minScrollExtent,
                           maxScrollExtent: maxScrollExtent ?? it.maxScrollExtent,
                           pixels: pixels ?? it.pixels,
                           viewportDimension: viewportDimension ?? it.viewportDimension,
                           axisDirection: axisDirection ?? it.axisDirection,
                           viewportFraction: viewportFraction ?? ((IPageMetrics)it).viewportFraction
                           ));
            }

            return(new FixedScrollMetrics(
                       minScrollExtent: minScrollExtent ?? it.minScrollExtent,
                       maxScrollExtent: maxScrollExtent ?? it.maxScrollExtent,
                       pixels: pixels ?? it.pixels,
                       viewportDimension: viewportDimension ?? it.viewportDimension,
                       axisDirection: axisDirection ?? it.axisDirection
                       ));
        }
Ejemplo n.º 3
0
 public ShrinkWrappingViewport(
     Key key = null,
     AxisDirection?axisDirection      = AxisDirection.down,
     AxisDirection?crossAxisDirection = null,
     ViewportOffset offset            = null,
     List <Widget> slivers            = null
     ) : base(key: key, children: slivers ?? new List <Widget>())
 {
     D.assert(offset != null);
     this.axisDirection      = axisDirection;
     this.crossAxisDirection = crossAxisDirection;
     this.offset             = offset;
 }
Ejemplo n.º 4
0
        AxisDirection?_getDirection(BuildContext context)
        {
            switch (widget.scrollDirection)
            {
            case Axis.horizontal:
                D.assert(WidgetsD.debugCheckHasDirectionality(context));
                TextDirection textDirection = Directionality.of(context);
                AxisDirection?axisDirection = AxisUtils.textDirectionToAxisDirection(textDirection);
                return(widget.reverse ? AxisUtils.flipAxisDirection(axisDirection) : axisDirection);

            case Axis.vertical:
                return(widget.reverse ? AxisDirection.up : AxisDirection.down);
            }

            throw new UIWidgetsError("fail to get axis direction");
        }
Ejemplo n.º 5
0
        public static bool axisDirectionIsReversed(AxisDirection?axisDirection)
        {
            D.assert(axisDirection != null);
            switch (axisDirection)
            {
            case AxisDirection.up:
            case AxisDirection.left:
                return(true);

            case AxisDirection.down:
            case AxisDirection.right:
                return(false);
            }

            throw new Exception("unknown axisDirection");
        }
Ejemplo n.º 6
0
        public static Axis?axisDirectionToAxis(AxisDirection?axisDirection)
        {
            D.assert(axisDirection != null);
            switch (axisDirection)
            {
            case AxisDirection.up:
            case AxisDirection.down:
                return(Axis.vertical);

            case AxisDirection.left:
            case AxisDirection.right:
                return(Axis.horizontal);
            }

            return(null);
        }
Ejemplo n.º 7
0
        public static AxisDirection?applyGrowthDirectionToAxisDirection(
            AxisDirection?axisDirection, GrowthDirection?growthDirection)
        {
            D.assert(axisDirection != null);
            D.assert(growthDirection != null);
            switch (growthDirection)
            {
            case GrowthDirection.forward:
                return(axisDirection);

            case GrowthDirection.reverse:
                return(AxisUtils.flipAxisDirection(axisDirection));
            }

            throw new Exception("unknown growthDirection");
        }
Ejemplo n.º 8
0
        public override Widget build(BuildContext context)
        {
            AxisDirection?axisDirection = _getDirection(context);
            ScrollPhysics physics       = new _ForceImplicitScrollPhysics(
                allowImplicitScrolling: widget.allowImplicitScrolling
                ).applyTo(widget.pageSnapping
                ? PageViewUtils._kPagePhysics.applyTo(widget.physics)
                : widget.physics);

            return(new NotificationListener <ScrollNotification>(
                       onNotification: (ScrollNotification notification) => {
                if (notification.depth == 0 && widget.onPageChanged != null &&
                    notification is ScrollUpdateNotification)
                {
                    IPageMetrics metrics = (IPageMetrics)notification.metrics;
                    int currentPage = metrics.page.round();
                    if (currentPage != _lastReportedPage)
                    {
                        _lastReportedPage = currentPage;
                        widget.onPageChanged(currentPage);
                    }
                }

                return false;
            },
                       child: new Scrollable(
                           dragStartBehavior: widget.dragStartBehavior,
                           axisDirection: axisDirection,
                           controller: widget.controller,
                           physics: physics,
                           viewportBuilder: (BuildContext _context, ViewportOffset position) => {
                return new Viewport(
                    cacheExtent: widget.allowImplicitScrolling ? 1.0f : 0.0f,
                    cacheExtentStyle: CacheExtentStyle.viewport,
                    axisDirection: axisDirection,
                    offset: position,
                    slivers: new List <Widget> {
                    new SliverFillViewport(
                        viewportFraction: widget.controller.viewportFraction,
                        _delegate: widget.childrenDelegate
                        )
                }
                    );
            }
                           )
                       ));
        }
Ejemplo n.º 9
0
 public PageMetrics copyWith(
     float?minScrollExtent       = null,
     float?maxScrollExtent       = null,
     float?pixels                = null,
     float?viewportDimension     = null,
     AxisDirection?axisDirection = null,
     float?viewportFraction      = null
     )
 {
     return(new PageMetrics(
                minScrollExtent: minScrollExtent ?? this.minScrollExtent,
                maxScrollExtent: maxScrollExtent ?? this.maxScrollExtent,
                pixels: pixels ?? this.pixels,
                viewportDimension: viewportDimension ?? this.viewportDimension,
                axisDirection: axisDirection ?? this.axisDirection,
                viewportFraction: viewportFraction ?? this.viewportFraction
                ));
 }
Ejemplo n.º 10
0
 public FixedExtentMetrics copyWith(
     float?minScrollExtent       = null,
     float?maxScrollExtent       = null,
     float?pixels                = null,
     float?viewportDimension     = null,
     AxisDirection?axisDirection = null,
     int?itemIndex               = null
     )
 {
     return(new FixedExtentMetrics(
                minScrollExtent: minScrollExtent ?? this.minScrollExtent,
                maxScrollExtent: maxScrollExtent ?? this.maxScrollExtent,
                pixels: pixels ?? this.pixels,
                viewportDimension: viewportDimension ?? this.viewportDimension,
                axisDirection: axisDirection ?? this.axisDirection,
                itemIndex: itemIndex ?? this.itemIndex
                ));
 }
Ejemplo n.º 11
0
        public Scrollable(
            Key key = null,
            AxisDirection?axisDirection     = AxisDirection.down,
            ScrollController controller     = null,
            ScrollPhysics physics           = null,
            ViewportBuilder viewportBuilder = null,
            ScrollIncrementCalculator incrementCalculator = null,
            DragStartBehavior dragStartBehavior           = DragStartBehavior.start
            ) : base(key: key)
        {
            D.assert(axisDirection != null);
            D.assert(viewportBuilder != null);

            this.axisDirection       = axisDirection.Value;
            this.controller          = controller;
            this.physics             = physics;
            this.viewportBuilder     = viewportBuilder;
            this.incrementCalculator = incrementCalculator;
            this.dragStartBehavior   = dragStartBehavior;
        }
Ejemplo n.º 12
0
        public static AxisDirection?flipAxisDirection(AxisDirection?axisDirection)
        {
            D.assert(axisDirection != null);
            switch (axisDirection.Value)
            {
            case AxisDirection.up:
                return(AxisDirection.down);

            case AxisDirection.right:
                return(AxisDirection.left);

            case AxisDirection.down:
                return(AxisDirection.up);

            case AxisDirection.left:
                return(AxisDirection.right);
            }

            return(null);
        }
Ejemplo n.º 13
0
        public Viewport(
            Key key = null,
            AxisDirection axisDirection      = AxisDirection.down,
            AxisDirection?crossAxisDirection = null,
            float anchor          = 0.0f,
            ViewportOffset offset = null,
            Key center            = null,
            float?cacheExtent     = null,
            List <Widget> slivers = null
            ) : base(key: key, children: slivers)
        {
            D.assert(offset != null);
            D.assert(center == null || this.children.Count(child => child.key == center) == 1);

            this.axisDirection      = axisDirection;
            this.crossAxisDirection = crossAxisDirection;
            this.anchor             = anchor;
            this.offset             = offset;
            this.center             = center;
            this.cacheExtent        = cacheExtent;
        }
Ejemplo n.º 14
0
        public override Widget build(BuildContext context)
        {
            List <Widget> slivers       = buildSlivers(context);
            AxisDirection?axisDirection = getDirection(context);

            ScrollController scrollController = primary ? PrimaryScrollController.of(context) : controller;

            Scrollable scrollable = new Scrollable(
                dragStartBehavior: dragStartBehavior,
                axisDirection: axisDirection,
                controller: scrollController,
                physics: physics,
                viewportBuilder: (viewportContext, offset) =>
                buildViewport(viewportContext, offset, axisDirection, slivers)
                );

            Widget scrollableResult = primary && scrollController != null
                ? (Widget)PrimaryScrollController.none(child: scrollable)
                : scrollable;

            if (keyboardDismissBehavior == ScrollViewKeyboardDismissBehavior.onDrag)
            {
                return(new NotificationListener <ScrollUpdateNotification>(
                           child: scrollableResult,
                           onNotification: (ScrollUpdateNotification notification) => {
                    FocusScopeNode focusScope = FocusScope.of(context);
                    if (notification.dragDetails != null && focusScope.hasFocus)
                    {
                        focusScope.unfocus();
                    }

                    return false;
                }
                           ));
            }
            else
            {
                return(scrollableResult);
            }
        }
Ejemplo n.º 15
0
 public void update(ScrollMetrics metrics, AxisDirection axisDirection)
 {
     this._lastMetrics       = metrics;
     this._lastAxisDirection = axisDirection;
     this.notifyListeners();
 }
Ejemplo n.º 16
0
        public static AxisDirection?getDefaultCrossAxisDirection(BuildContext context, AxisDirection?axisDirection)
        {
            D.assert(axisDirection != null);
            switch (axisDirection)
            {
            case AxisDirection.up:
                return(AxisUtils.textDirectionToAxisDirection(Directionality.of(context)));

            case AxisDirection.right:
                return(AxisDirection.down);

            case AxisDirection.down:
                return(AxisUtils.textDirectionToAxisDirection(Directionality.of(context)));

            case AxisDirection.left:
                return(AxisDirection.down);
            }
            return(null);
        }