Слайдер карусели 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,
          );
        }),
      );

Ползунок отображения кода с точным номером, но каждое слайд-шоу первого видео (видео с нулевым индексом) не подходит. Большое спасибо за любое решение.

0 ответов

Другие вопросы по тегам