Касание воспринимается как вертикальное перетаскивание при жестко заданном жесте смахивания

У меня есть 1 детектор жестов, который упаковывает 10 разных карточек и позволяет их пролистывать. На каждой карте есть 3 детектора жестов (в основном кнопки). Смахивание работает, как ожидалось, но первые 6 карточек не запускают действие касания при касании (Gesture Arena сообщает мне, что горизонтальное перетаскивание борется с вертикальным перетаскиванием -> поэтому жест касания воспринимается как вертикальное перетаскивание).

Мне кажется странным, что последние 4 карты срабатывают при нажатии, а смахивание работает идеально

Я пробовал изменить GestureDetectors на InkWell, но не вышло.

@override
  Widget build(BuildContext context) {
    return GestureDetector(
      onHorizontalDragStart: _onHorizontalDragStart,
      onHorizontalDragUpdate: _onHorizontalDragUpdate,
      onHorizontalDragEnd: _onHorizontalDragEnd,
      behavior: HitTestBehavior.translucent,
      child: Stack(
      children: _buildCards(),
    ),
    );
  }

List<Widget> _buildCards() {
        return [
          _buildCard(0, 10, scrollPercent),
          _buildCard(1, 10, scrollPercent),
          _buildCard(2, 10, scrollPercent),
          _buildCard(3, 10, scrollPercent),
          _buildCard(4, 10, scrollPercent),
          _buildCard(5, 10, scrollPercent),
          _buildCard(6, 10, scrollPercent),
          _buildCard(7, 10, scrollPercent),
          _buildCard(8, 10, scrollPercent),
          _buildCard(9, 10, scrollPercent),
        ];
      }

Widget _buildCard(int cardIndex, int cardCount, double scrollPercent) {
    final cardScrollPercent = scrollPercent / (1 / cardCount);
    final parallax = scrollPercent - (cardIndex / cardCount);

    return FractionalTranslation(
      translation: Offset(cardIndex - cardScrollPercent, 0.0),
      child: Transform(
        transform: _buildCardProjection(cardScrollPercent - cardIndex),
              child: card1(parallax, cardIndex
        ),
      )
      );
  }

Card1 апеллируется последней, и она представляет собой саму карту. Вот код свойства onTap GestureDetector для Card1

onTap: () {
 showDialog(
    context: context,
    builder: (BuildContext context) => CustomDialog(
       title: "Title",
       description:"Test",
       buttonText: "Okay",
  ),

); },


person Flutterino Loverino    schedule 23.05.2019    source источник
comment
вам нужно предоставить соответствующий код, чтобы люди могли помочь   -  person Kevin    schedule 23.05.2019
comment
@ Кевин, теперь лучше?   -  person Flutterino Loverino    schedule 23.05.2019


Ответы (1)


Похоже, вас может заинтересовать замена вашей настройки виджетом PageView. Он использует PageController для управления жестами смахивания. Посмотрите видео об этом Виджет недели - PageView

person ThinkDigital    schedule 23.05.2019
comment
Большое спасибо! Это именно то, что мне было нужно. - person Flutterino Loverino; 23.05.2019