GestureDetector в ListView.builder в Flutter

#flutter #listview #flutter-layout

#flutter #listview #flutter-макет

Вопрос:

Я пытаюсь добавить GestureDetector в свой виджет ListView, который содержит изображения, но, похоже, он не работает. Аналогичный вопрос задавался об этом раньше, но это тоже не помогло.

Вот мой код:

 ListView.builder(
          scrollDirection: Axis.horizontal,
          itemBuilder: (BuildContext ctx, int index) {
            return Container(
                width: 160,
                child: Card(
                 child: Wrap(
                  children: <Widget>[
                     GestureDetector( onTap: () => Print_on_layout(index),
                      child: Image.network(a[index], fit: BoxFit.fill,)
                     )
                  ],
                ),
              ),
            );
          },
          itemCount: a.length,
        ),
  

Комментарии:

1. Вы получаете сообщение об ошибке? Что вы имеете в виду — это не работает?

Ответ №1:

Я полагаю, это как-то связано с виджетом переноса, который может мешать пространству, в котором может быть обнаружено касание. Попробуйте удалить его. Если это не сработает, пожалуйста, сообщите нам, если вы получите сообщение об ошибке.

Ответ №2:

Используйте gesturedetector в качестве родительского контейнера, которого нет на изображении. как и в списке, вы возвращаете только один виджет, поэтому вам следует использовать контейнер с детектором жестов. Попробуйте этот код:

 ListView.builder(
            scrollDirection: Axis.horizontal,
              itemBuilder: (BuildContext ctx, int index) {
                return
                  GestureDetector(onTap: () => Print_on_layout(index),
    
                  child: Container(
                    width: 160,
                    child: Card(
                      child: Wrap(
                        children: <Widget>[
                          Image.network(a[index], fit: BoxFit.fill,)
                        ],
                      ),
                    ),
                  ),
                );
              },
              itemCount: a.length,
            ),