| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- import 'dart:async';
- import 'package:chewie/src/chewie_controller.dart';
- import 'package:chewie/src/player_with_controls.dart';
- import 'package:flutter/material.dart';
- import 'package:flutter/services.dart';
- import 'package:flutter/widgets.dart';
- import 'package:screen/screen.dart';
- /// A Video Player with Material and Cupertino skins.
- ///
- /// `video_player` is pretty low level. Chewie wraps it in a friendly skin to
- /// make it easy to use!
- class Chewie extends StatefulWidget {
- Chewie({
- Key key,
- this.controller,
- }) : assert(controller != null, 'You must provide a chewie controller'),
- super(key: key);
- /// The [ChewieController]
- final ChewieController controller;
- @override
- ChewieState createState() {
- return ChewieState();
- }
- }
- class ChewieState extends State<Chewie> {
- bool _isFullScreen = false;
- @override
- void initState() {
- super.initState();
- widget.controller.addListener(listener);
- }
- @override
- void dispose() {
- widget.controller.removeListener(listener);
- super.dispose();
- }
- void listener() async {
- if (widget.controller.isFullScreen && !_isFullScreen) {
- _isFullScreen = true;
- await _pushFullScreenWidget(context);
- } else if (_isFullScreen) {
- Navigator.of(context).pop();
- _isFullScreen = false;
- }
- }
- @override
- Widget build(BuildContext context) {
- return ChewieControllerProvider(
- controller: widget.controller,
- child: PlayerWithControls(),
- );
- }
- Widget _buildFullScreenVideo(
- BuildContext context, Animation<double> animation) {
- return Scaffold(
- resizeToAvoidBottomPadding: false,
- body: Container(
- alignment: Alignment.center,
- color: Colors.black,
- child: ChewieControllerProvider(
- controller: widget.controller,
- child: PlayerWithControls(),
- ),
- ),
- );
- }
- Widget _fullScreenRoutePageBuilder(
- BuildContext context,
- Animation<double> animation,
- Animation<double> secondaryAnimation,
- ) {
- return AnimatedBuilder(
- animation: animation,
- builder: (BuildContext context, Widget child) {
- return _buildFullScreenVideo(context, animation);
- },
- );
- }
- Future<dynamic> _pushFullScreenWidget(BuildContext context) async {
- final isAndroid = Theme.of(context).platform == TargetPlatform.android;
- final TransitionRoute<Null> route = PageRouteBuilder<Null>(
- settings: RouteSettings(isInitialRoute: false),
- pageBuilder: _fullScreenRoutePageBuilder,
- );
- SystemChrome.setEnabledSystemUIOverlays([]);
- if (isAndroid) {
- SystemChrome.setPreferredOrientations([
- DeviceOrientation.landscapeLeft,
- DeviceOrientation.landscapeRight,
- ]);
- }
- if (!widget.controller.allowedScreenSleep) {
- Screen.keepOn(true);
- }
- await Navigator.of(context).push(route);
- bool isKeptOn = await Screen.isKeptOn;
- if (isKeptOn) {
- Screen.keepOn(false);
- }
- SystemChrome.setEnabledSystemUIOverlays(SystemUiOverlay.values);
- SystemChrome.setPreferredOrientations([
- DeviceOrientation.portraitUp,
- DeviceOrientation.portraitDown,
- DeviceOrientation.landscapeLeft,
- DeviceOrientation.landscapeRight,
- ]);
- }
- }
|