Esempio n. 1
0
        bool _hasDraggedTooFar(DragUpdateDetails details)
        {
            Offset offCenter = details.localPosition - new Offset(size.width / 2, size.height / 2);

            return(Mathf.Pow(Mathf.Max(0, offCenter.dx.abs() - size.width / 2), 2) + Mathf.Pow(Mathf.Max(0, offCenter.dy.abs() - size.height / 2), 2) > CupertinoSlidingSegmentedControlsUtils._kTouchYDistanceThreshold);
        }
Esempio n. 2
0
        void _handleDragUpdate(DragUpdateDetails details)
        {
            if (!this._isActive || this._moveController.isAnimating)
            {
                return;
            }

            float delta         = details.primaryDelta ?? 0.0f;
            float oldDragExtent = this._dragExtent;

            switch (this.widget.direction)
            {
            case DismissDirection.horizontal:
            case DismissDirection.vertical:
                this._dragExtent += delta;
                break;

            case DismissDirection.up:
                if (this._dragExtent + delta < 0)
                {
                    this._dragExtent += delta;
                }

                break;

            case DismissDirection.down:
                if (this._dragExtent + delta > 0)
                {
                    this._dragExtent += delta;
                }

                break;

            case DismissDirection.endToStart:
                switch (Directionality.of(this.context))
                {
                case TextDirection.rtl:
                    if (this._dragExtent + delta > 0)
                    {
                        this._dragExtent += delta;
                    }

                    break;

                case TextDirection.ltr:
                    if (this._dragExtent + delta < 0)
                    {
                        this._dragExtent += delta;
                    }

                    break;
                }

                break;

            case DismissDirection.startToEnd:
                switch (Directionality.of(this.context))
                {
                case TextDirection.rtl:
                    if (this._dragExtent + delta < 0)
                    {
                        this._dragExtent += delta;
                    }

                    break;

                case TextDirection.ltr:
                    if (this._dragExtent + delta > 0)
                    {
                        this._dragExtent += delta;
                    }

                    break;
                }

                break;
            }

            if (oldDragExtent.sign() != this._dragExtent.sign())
            {
                this.setState(() => { this._updateMoveAnimation(); });
            }

            if (!this._moveController.isAnimating)
            {
                this._moveController.setValue(this._dragExtent.abs() / this._overallDragAxisExtent);
            }
        }