I know that I'm pretty late to the party, but I have something that I think might help. So, you need to do four (4) things in your VideoPlayerController class:
1. Create an instance of your state class.
2. Create a method (play) which will be accessible in your PlayerContainer class
3. In your method, use the VideoPlayerControllerState instance to call the method in your state class.
4. Finally, when you createState, do so using the instance that you already created.
class VideoPlayerController extends StatefulWidget {
final VideoPlayerControllerState vpcs = VideoPlayerControllerState();
void play() {
vpcs.play();
}
@override
State<StatefulWidget> createState() => vpcs;
}
As you see, the play method uses vpcs (the VideoPlayerControllerState instance) to call the play method already in your state class.
In your PlayerContainer class, use your member variable to call the play method.
class PlayerContainerState extends State<PlayerContainer> {
VideoPlayerController _vpc;
@override
void initState() {
super.initState();
_vpc = VideoPlayerController();
}
...
void _handlePressPlay(){
_vpc.play();
}
...
@override
Widget build(BuildContext context) {
return ... //your video player widget using _vpc as your VideoPlayerController
_vpc,
);
}
}
You can call _handlePressPlay() from the onPressed method of your play button. Alternatively, just put _vpc.play() in the onPressed method. Your choice :-).