Флаттер: как реализовать возможность удаления изображения в карусели

#dart #flutter

#дротик #флаттер

Вопрос:

Я пытался найти способ добавить к изображениям в карусели Dismissible или Gesturedetector (carousel_pro), чтобы пользователь мог провести пальцем или нажать, чтобы удалить данное изображение, но безуспешно! Был бы признателен за любые подсказки или идеи о том, как этого добиться.

 AspectRatio(
  aspectRatio: 0.9,
  child: Carousel(
    images: aData.images.map((url) {
      return GestureDetector(
        child: CachedNetworkImageProvider(url),
        onTap: () {});
    }).toList(),
    dotSize: 4.0,
    dotSpacing: 15.0,
    dotBgColor: Colors.transparent,
    dotColor: Colors.red,
    autoplay: false,
  ),
),  

Это выдает ошибку: тип аргумента ‘CachedNetworkImageProvider’ не может быть присвоен типу параметра ‘Widget’.

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

1. вы пробовали метод tap из GestureDetector?

2. Я сделал. Пожалуйста, смотрите Редактирование, где я добавил GestureDetector.

Ответ №1:

это способ использования CahedImage в Flutter

 CachedNetworkImage(
        placeholder: CircularProgressIndicator(),
        imageUrl:
            'https://picsum.photos/250?image=9',
      ),
  

итак, ваш код будет

  return GestureDetector(
    child:CachedNetworkImage(
        placeholder: CircularProgressIndicator(),
        imageUrl:
            'https://picsum.photos/250?image=9',
      ),
    onTap: () {});
})
  

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

1. Хорошо, спасибо. По сути, это просто замена CachedNetworkImageProvider на CachedNetworkImage. Не уверен, почему я использовал CachedNetworkImageProvider (использовал его в других проектах), но я попробую это и посмотрю, создает ли это другие проблемы.

2. Попробуйте и дайте мне знать

3. Ну, у меня наконец-то была возможность попробовать это и выдала эту ошибку во время выполнения: было выдано следующее утверждение при создании Carousel (dirty, состояние: CarouselState #6e9c6): тип ‘GestureDetector’ не является подтипом типа ‘ImageProvider<dynamic>’

4. А затем я удалил GestureDetector, и теперь ошибка такова: было выдано следующее утверждение при создании Carousel (dirty, состояние: CarouselState #617f8): тип ‘CachedNetworkImage’ не является подтипом типа ‘ImageProvider<dynamic>’. Итак, теперь я помню, почему я использовал CachedNetworkImageProvider в других моих проектах, это то, что carousel_pro не принимает никаких других поставщиков кэша.

5. Итак, все еще не знаю, как можно удалять изображения непосредственно в карусели. Кто-нибудь?

Ответ №2:

если вы просто хотите удалить элемент с экрана (не удаляя из базы данных), вам нужно обернуть GestureDetector в оператор if.

 class YourClass extends StatefullWidget{
  boolean showCaroussel = true;
.......
return  showCaroussel ? GestureDetector(
child:CachedNetworkImage(
    placeholder: CircularProgressIndicator(),
    imageUrl:
        'https://picsum.photos/250?image=9',
  ),
onTap: () {
 setState((){
showCaroussel  = !showCaroussel ;
});
}) ;
}): Container();
  

Надеюсь, это сработает..