Флаттер: пользовательский нижний лист с одним дочерним видом прокрутки - PullRequest
0 голосов
/ 17 июня 2019

[массовое редактирование]

Привет, мне нужна ваша помощь, чтобы понять причину поведения этого виджета:

class Bottom extends StatefulWidget {
  @override
  _Bottom createState() => _Bottom();
}

class _Bottom extends State<Bottom> with SingleTickerProviderStateMixin {
  AnimationController _controller;
  double get maxHeight => MediaQuery.of(context).size.height;
  double get headerTopMargin =>
      lerp(20, 20 + MediaQuery.of(context).padding.top);

  @override
  void initState() {
    super.initState();
    _controller = AnimationController(
      vsync: this,
      duration: Duration(milliseconds: 600),
    );
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  double lerp(double min, double max) =>
      lerpDouble(min, max, _controller.value);

  Widget get _singleCard => Card(
                      color: Colors.white,
                      child: Padding(padding: EdgeInsets.all(20),),
                      );

  List<Widget> _hundredCards(){
    List<Widget> _list = [];
    for (int i = 0; i<100; i++) _list.add(_singleCard);
    return _list;
  }

  @override
  Widget build(BuildContext context) {
    return AnimatedBuilder(
      animation: _controller,
      builder: (context, child) {
        double _height = lerp(minHeight, maxHeight);
        return Positioned(
          height: _height,
          left: 0,
          right: 0,
          bottom: 0,
          child: GestureDetector(
            onTap: _toggle,
            onVerticalDragUpdate: _handleDragUpdate,
            onVerticalDragEnd: _handleDragEnd,
            child: Container(
              padding: const EdgeInsets.symmetric(horizontal: 32),
              decoration: BoxDecoration(
                color: Colors.deepPurpleAccent,
                borderRadius:
                    const BorderRadius.vertical(top: Radius.circular(32)),
              ),
              child: SingleChildScrollView(
                child: Column(
                                    children:
              // SCROLL PROPERLY 
              <Widget>[
                _singleCard,
              ],

              //==> PROBLEM HERE!!!<=== 
              // DOESN'T SCOLL, BUT THE LIST IS SCROLLABLE INSTEAD
              //_hundredCards(),  <=== here 
                ),
              ),
            ),
          ),
        );
      },
    );
  }

  void _toggle() {
    final bool isOpen = _controller.status == AnimationStatus.completed;
    _controller.fling(velocity: isOpen ? -2 : 2);
  }

  void _handleDragUpdate(DragUpdateDetails details) {
    _controller.value -= details.primaryDelta / maxHeight;
  }

  void _handleDragEnd(DragEndDetails details) {
    if (_controller.isAnimating ||
        _controller.status == AnimationStatus.completed) return;
    final double flingVelocity =
        details.velocity.pixelsPerSecond.dy / maxHeight;
    if (flingVelocity < 0.0)
      _controller.fling(velocity: math.max(2.0, -flingVelocity));
    else if (flingVelocity > 0.0)
      _controller.fling(velocity: math.min(-2.0, -flingVelocity));
    else
      _controller.fling(velocity: _controller.value < 0.5 ? -2.0 : 2.0);
  }
}

Я хотел бы иметь прокручиваемый список ВНУТРИ позиционированногокоторый содержит детектор жестов, контейнер и т. д.

Если я помещу детектор жестов в контейнер, это не устраивает, есть идеи обойтись?

заранее спасибо

...