#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();
Надеюсь, это сработает..