import 'dart:convert'; import 'package:carousel_slider/carousel_slider.dart'; import 'package:flutter/material.dart'; import 'package:mymuseum_visitapp/Models/resourceModel.dart'; import 'package:mymuseum_visitapp/constants.dart'; class SliderImagesWidget extends StatefulWidget { final List resources; final double height; SliderImagesWidget({required this.resources, required this.height}); @override _SliderImagesWidget createState() => _SliderImagesWidget(); } class _SliderImagesWidget extends State { late CarouselController? sliderController; int currentIndex = 1; @override void initState() { sliderController = CarouselController(); super.initState(); } @override void dispose() { sliderController = null; super.dispose(); } @override Widget build(BuildContext context) { Size size = MediaQuery.of(context).size; return Stack( children: [ Column( crossAxisAlignment: CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ if(widget.resources.isNotEmpty) CarouselSlider( carouselController: sliderController, options: CarouselOptions( onPageChanged: (int index, CarouselPageChangedReason reason) { setState(() { currentIndex = index + 1; }); }, // height: widget.height * 0.95, enlargeCenterPage: true, reverse: false, ), items: widget.resources.map((i) { return Builder( builder: (BuildContext context) { return Container( //color: Colors.red, //height: widget.height * 1, //width: size.width * 0.95, child: ClipRRect( borderRadius: BorderRadius.circular(15.0), child: Image.memory(base64Decode(i!.data!))/*PhotoView( imageProvider: Image.memory(base64Decode(i!.data!)).image, minScale: PhotoViewComputedScale.contained * 0.8, maxScale: PhotoViewComputedScale.contained * 3.0, backgroundDecoration: BoxDecoration( color: Colors.transparent, /*shape: BoxShape.rectangle, borderRadius: BorderRadius.circular(15.0),*/ ), )*/, ), ); }, ); }).toList(), ), ], ), if(widget.resources.length > 1) Positioned( top: widget.height * 0.45, right: 0, child: InkWell( onTap: () { sliderController!.nextPage(duration: const Duration(milliseconds: 500), curve: Curves.fastOutSlowIn); }, child: const Icon( Icons.chevron_right, size: 45, color: kBlue2, ), ) ), if(widget.resources.length > 1) Positioned( top: widget.height * 0.45, left: 0, child: InkWell( onTap: () { if (widget.resources.isNotEmpty) { sliderController!.previousPage(duration: const Duration(milliseconds: 500), curve: Curves.fastOutSlowIn); } }, child: const Icon( Icons.chevron_left, size: 45, color: kBlue2, ), ) ), if(widget.resources.isNotEmpty) Padding( padding: const EdgeInsets.only(bottom: 0), child: Align( alignment: Alignment.bottomCenter, child: InkWell( onTap: () { sliderController!.nextPage(duration: const Duration(milliseconds: 500), curve: Curves.fastOutSlowIn); }, child: Text( currentIndex.toString()+'/'+widget.resources.length.toString(), style: const TextStyle(fontSize: kArticleContentSize, fontWeight: FontWeight.w500, color: kBlue2), ), ) ), ), if(widget.resources.isEmpty) const Center(child: Text("Aucune image à afficher", style: TextStyle(fontSize: kNoneInfoOrIncorrect),)) ] ); } }