2

I am trying to use a chewie controller that allows me to scroll down when inside of full screen to perform an action. Basically, once a user enters full screen for a video they should be able to scroll down to view a different video. I created a listener that listens to updates for my chewie controller. I wrapped my Chewie player in a gesture detector and if it enters full screen, and panUpdate is called, it should open a new video in full screen. However, nothing happens when in full screen and the gesture detector does not work.

Here is my code:

import 'dart:math';

import 'package:chewie/chewie.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:video_player/video_player.dart';
import 'package:visibility_detector/visibility_detector.dart';

import '../screens/mainScreen.dart';

class ChewieVideoWidget extends StatefulWidget {
  final String asset;
  final bool autoPlay;

  ChewieVideoWidget(this.asset, this.autoPlay);

  @override
  _ChewieVideoWidgetState createState() => _ChewieVideoWidgetState();
}

class _ChewieVideoWidgetState extends State<ChewieVideoWidget> {
  late ChewieController chewieController;
  late VideoPlayerController videoPlayerController;
  bool _isPlaying = false;

  @override
  void initState() {
    super.initState();
    videoPlayerController = VideoPlayerController.asset(widget.asset);
    chewieController = ChewieController(
      videoPlayerController: videoPlayerController,
      autoPlay: widget.autoPlay,
      aspectRatio: 16 / 9,
      autoInitialize: true,
      errorBuilder: (context, errorMessage) {
        return Center(
          child: Text(
            errorMessage,
            style: const TextStyle(color: Colors.white),
          ),
        );
      },
      customControls: const MaterialControls(),
      materialProgressColors: ChewieProgressColors(
        playedColor: Colors.lightBlue,
        handleColor: Colors.white,
        bufferedColor: Colors.white.withOpacity(0.5),
        backgroundColor: Colors.grey.withOpacity(.5),
      ),
    );
    chewieController.addListener(() { 
      print("FULL SCREEN:${chewieController.isFullScreen}");
    });
    Future.delayed(Duration.zero, () {
      chewieController.deviceOrientationsOnEnterFullScreen = [
        DeviceOrientation.landscapeLeft,
        DeviceOrientation.landscapeRight
      ];
      chewieController.deviceOrientationsAfterFullScreen = [
        DeviceOrientation.portraitUp
      ];
    });
  }

  @override
  void dispose() {
    chewieController.pause();
    chewieController.dispose();
    videoPlayerController.dispose();
    print('chewie disposed');
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return VisibilityDetector(
      key: Key(Random().toString()),
      onVisibilityChanged: (VisibilityInfo info) {
        if (info.visibleFraction <= 0.9 && mounted) {
          chewieController.pause();
        }
      },
      child: GestureDetector(
        onPanUpdate: (details) {
          if (chewieController.isFullScreen == true) {
            if (details.delta.dy < -5) {
              Navigator.of(context).push(
                MaterialPageRoute<void>(
                  builder: (BuildContext context) => MainScreen(1),
                ),
              );
            }
          }
        },
        child: AspectRatio(
          aspectRatio: 16 / 9,
          child: Chewie(
            controller: chewieController,
          ),
        ),
      ),
    );
  }
}

Can anyone help me figure out how to perform actions while in full screen of a video player using chewie controller?

0 Answers0