Слайдер карусели Flutter для динамических видео
Я пытаюсь создать приложение, в котором gridview показывает видео из папки локального хранилища и щелкает любой ползунок открытия видео и воспроизводит видео. Для этого проведите пальцем влево или вправо, чтобы воспроизвести следующее или предыдущее видео.
Я использую пакет Carousel Slider для реализации эффекта скольжения для динамических видеоданных, для воспроизведения видео я использую пакет видеоплеера.
Код для класса Slider ниже
class VideoSlider extends StatefulWidget {
const VideoSlider({
Key? key,
required this.listOfVideos, // Contains all videos in folder
required this.initialIndex, // initial index used in carousel options to show current page
}) : super(key: key);
final List<String> listOfVideos;
final int initialIndex;
@override
_VideoSliderState createState() => _VideoSliderState();
}
class _VideoSliderState extends State<VideoSlider> {
List<VideoPlayerController> controller = []; // list to contain controller for all files in floder
int i = 0; // used in carousel items to specify controller list index
@override
void initState() {
super.initState();
// used for loop to add controller for all files in controller list
for (int j = 0; j < widget.listOfVideos.length; j++) {
controller.add(
VideoPlayerController.file(File(widget.listOfVideos[j]))
..initialize().then((value) {
setState(() {});
}),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: CarouselSlider(
items: widget.listOfVideos.map((e) {
return controller[i].value.isInitialized
? AspectRatio(
aspectRatio: controller[i].value.aspectRatio,
child: VideoPlayer(controller[i]))
: Container(),}).toList(),
options: CarouselOptions(
height: double.infinity,
viewportFraction: 1,
initialPage: widget.initialIndex,
enlargeCenterPage: true,
enableInfiniteScroll: false,
), ),
// fab to play and pause video
floatingActionButton: FloatingActionButton(
onPressed: () {
setState(() {
_controller.value.isPlaying
? _controller.pause()
: _controller.play();
});
},
child: Icon(
_controller.value.isPlaying ? Icons.pause : Icons.play_arrow,
),
),
);
}
Откуда я звоню VideoSlider
Navigator.push(
context,
MaterialPageRoute(builder: (context) {
return VideoSlider(
listOfVideos: listOfFiles,
initialIndex: index,
);
}),
);
Ползунок отображения кода с точным номером, но каждое слайд-шоу первого видео (видео с нулевым индексом) не подходит. Большое спасибо за любое решение.