123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235 |
- import 'dart:io';
- import 'package:auto_orientation/auto_orientation.dart';
- import 'package:chewie/chewie.dart';
- import 'package:chewie/src/chewie_player.dart';
- import 'package:flutter/cupertino.dart';
- import 'package:flutter/material.dart';
- import 'package:flutter/services.dart';
- import 'package:video_player/video_player.dart';
- void main() {
- runApp(
- ChewieDemo(),
- );
- }
- class ChewieDemo extends StatefulWidget {
- ChewieDemo({this.title = 'Chewie Demo'});
- final String title;
- @override
- State<StatefulWidget> createState() {
- return _ChewieDemoState();
- }
- }
- class _ChewieDemoState extends State<ChewieDemo> {
- TargetPlatform _platform;
- VideoPlayerController _videoPlayerController1;
- VideoPlayerController _videoPlayerController2;
- ChewieController _chewieController;
- @override
- void initState() {
- super.initState();
- _videoPlayerController1 = VideoPlayerController.network(
- 'https://flutter.github.io/assets-for-api-docs/assets/videos/butterfly.mp4');
- _videoPlayerController2 = VideoPlayerController.network(
- 'https://www.sample-videos.com/video123/mp4/480/big_buck_bunny_480p_20mb.mp4');
- _chewieController = ChewieController(
- videoPlayerController: _videoPlayerController1,
- aspectRatio: 3 / 2,
- autoPlay: true,
- looping: true,
- routePageBuilder: (BuildContext context, Animation<double> animation,
- Animation<double> secondAnimation, provider) {
- return AnimatedBuilder(
- animation: animation,
- builder: (BuildContext context, Widget child) {
- return VideoScaffold(
- child: Scaffold(
- resizeToAvoidBottomPadding: false,
- body: Container(
- alignment: Alignment.center,
- color: Colors.black,
- child: provider,
- ),
- ),
- );
- },
- );
- }
- // Try playing around with some of these other options:
- // showControls: false,
- // materialProgressColors: ChewieProgressColors(
- // playedColor: Colors.red,
- // handleColor: Colors.blue,
- // backgroundColor: Colors.grey,
- // bufferedColor: Colors.lightGreen,
- // ),
- // placeholder: Container(
- // color: Colors.grey,
- // ),
- // autoInitialize: true,
- );
- }
- @override
- void dispose() {
- _videoPlayerController1.dispose();
- _videoPlayerController2.dispose();
- _chewieController.dispose();
- super.dispose();
- }
- @override
- Widget build(BuildContext context) {
- return MaterialApp(
- title: widget.title,
- theme: ThemeData.light().copyWith(
- platform: _platform ?? Theme.of(context).platform,
- ),
- home: Scaffold(
- appBar: AppBar(
- title: Text(widget.title),
- ),
- body: Column(
- children: <Widget>[
- Expanded(
- child: Center(
- child: Chewie(
- controller: _chewieController,
- ),
- ),
- ),
- FlatButton(
- onPressed: () {
- _chewieController.enterFullScreen();
- },
- child: Text('Fullscreen'),
- ),
- Row(
- children: <Widget>[
- Expanded(
- child: FlatButton(
- onPressed: () {
- setState(() {
- _chewieController.dispose();
- _videoPlayerController2.pause();
- _videoPlayerController2.seekTo(Duration(seconds: 0));
- _chewieController = ChewieController(
- videoPlayerController: _videoPlayerController1,
- aspectRatio: 3 / 2,
- autoPlay: true,
- looping: true,
- );
- });
- },
- child: Padding(
- child: Text("Video 1"),
- padding: EdgeInsets.symmetric(vertical: 16.0),
- ),
- ),
- ),
- Expanded(
- child: FlatButton(
- onPressed: () {
- setState(() {
- _chewieController.dispose();
- _videoPlayerController1.pause();
- _videoPlayerController1.seekTo(Duration(seconds: 0));
- _chewieController = ChewieController(
- videoPlayerController: _videoPlayerController2,
- aspectRatio: 3 / 2,
- autoPlay: true,
- looping: true,
- );
- });
- },
- child: Padding(
- padding: EdgeInsets.symmetric(vertical: 16.0),
- child: Text("Video 2"),
- ),
- ),
- )
- ],
- ),
- Row(
- children: <Widget>[
- Expanded(
- child: FlatButton(
- onPressed: () {
- setState(() {
- _platform = TargetPlatform.android;
- });
- },
- child: Padding(
- child: Text("Android controls"),
- padding: EdgeInsets.symmetric(vertical: 16.0),
- ),
- ),
- ),
- Expanded(
- child: FlatButton(
- onPressed: () {
- setState(() {
- _platform = TargetPlatform.iOS;
- });
- },
- child: Padding(
- padding: EdgeInsets.symmetric(vertical: 16.0),
- child: Text("iOS controls"),
- ),
- ),
- )
- ],
- )
- ],
- ),
- ),
- );
- }
- }
- class VideoScaffold extends StatefulWidget {
- const VideoScaffold({Key key, this.child}) : super(key: key);
- final Widget child;
- @override
- State<StatefulWidget> createState() => _VideoScaffoldState();
- }
- class _VideoScaffoldState extends State<VideoScaffold> {
- @override
- void initState() {
- if(Platform.isIOS){
- AutoOrientation.landscapeLeftMode();
- }else{
- SystemChrome.setPreferredOrientations([
- DeviceOrientation.landscapeRight,
- DeviceOrientation.landscapeLeft,
- ]);
- }
- super.initState();
- }
- @override
- dispose() {
- SystemChrome.setPreferredOrientations([
- DeviceOrientation.portraitUp,
- DeviceOrientation.portraitDown,
- ]);
- AutoOrientation.portraitUpMode();
- super.dispose();
- }
- @override
- Widget build(BuildContext context) {
- return widget.child;
- }
- }
|