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?