full_screen.dart 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_ijkplayer/flutter_ijkplayer.dart';
  3. import 'package:ijkplayer_example/i18n/i18n.dart';
  4. class FullScreen extends StatefulWidget {
  5. @override
  6. _FullScreenState createState() => _FullScreenState();
  7. }
  8. class _FullScreenState extends State<FullScreen> {
  9. var controller = IjkMediaController();
  10. Orientation get orientation => MediaQuery.of(context).orientation;
  11. DataSource source = DataSource.network(
  12. "https://www.sample-videos.com/video123/mp4/360/big_buck_bunny_360p_30mb.mp4",
  13. );
  14. @override
  15. void initState() {
  16. super.initState();
  17. controller.setDataSource(source, autoPlay: true);
  18. }
  19. @override
  20. void dispose() {
  21. controller?.dispose();
  22. super.dispose();
  23. }
  24. @override
  25. Widget build(BuildContext context) {
  26. if (orientation == Orientation.landscape) {
  27. return _buildFullScreenPlayer();
  28. }
  29. return Scaffold(
  30. appBar: AppBar(
  31. title: Text(currentI18n.autoFullScreenTitle),
  32. ),
  33. body: ListView(
  34. children: <Widget>[
  35. _buildPlayerItem(),
  36. ],
  37. ),
  38. );
  39. }
  40. _buildPlayerItem() {
  41. return Container(
  42. height: 200,
  43. child: IjkPlayer(
  44. mediaController: controller,
  45. ),
  46. );
  47. }
  48. _buildFullScreenPlayer() {
  49. var data = MediaQuery.of(context);
  50. return Material(
  51. child: Container(
  52. width: data.size.width,
  53. height: data.size.height,
  54. child: IjkPlayer(
  55. mediaController: controller,
  56. ),
  57. ),
  58. );
  59. }
  60. }
  61. class FullScreen2 extends StatefulWidget {
  62. @override
  63. _FullScreen2State createState() => _FullScreen2State();
  64. }
  65. class _FullScreen2State extends State<FullScreen2> {
  66. var controller = IjkMediaController();
  67. Orientation get orientation => MediaQuery.of(context).orientation;
  68. DataSource source = DataSource.network(
  69. "https://www.sample-videos.com/video123/mp4/360/big_buck_bunny_360p_30mb.mp4",
  70. );
  71. @override
  72. void initState() {
  73. super.initState();
  74. portraitUp();
  75. }
  76. @override
  77. void dispose() {
  78. controller.dispose();
  79. unlockOrientation();
  80. super.dispose();
  81. }
  82. @override
  83. Widget build(BuildContext context) {
  84. if (orientation == Orientation.landscape) {
  85. return buildLandscape();
  86. }
  87. return buildNormal();
  88. }
  89. Widget buildLandscape() {
  90. // SystemChrome.setEnabledSystemUIOverlays([]);
  91. // OrientationPlugin.setEnabledSystemUIOverlays([]);
  92. return WillPopScope(
  93. child: Scaffold(
  94. body: Stack(
  95. children: <Widget>[
  96. IjkPlayer(
  97. mediaController: controller,
  98. ),
  99. Container(
  100. height: 44.0,
  101. width: 44.0,
  102. child: IconButton(
  103. icon: Icon(
  104. Icons.fullscreen_exit,
  105. color: Colors.white,
  106. ),
  107. onPressed: portraitUp,
  108. ),
  109. ),
  110. ],
  111. ),
  112. ),
  113. onWillPop: () async {
  114. if (orientation == Orientation.landscape) {
  115. portraitUp();
  116. return false;
  117. }
  118. return true;
  119. },
  120. );
  121. }
  122. Widget buildNormal() {
  123. return Scaffold(
  124. appBar: AppBar(
  125. title: Text(currentI18n.changeFullScreenWithButton),
  126. ),
  127. body: ListView(
  128. children: <Widget>[
  129. AspectRatio(
  130. aspectRatio: 1,
  131. child: IjkPlayer(
  132. mediaController: controller,
  133. controllerWidgetBuilder: (ctl) {
  134. return DefaultIJKControllerWidget(
  135. controller: ctl,
  136. verticalGesture: false,
  137. );
  138. },
  139. ),
  140. ),
  141. RaisedButton(
  142. onPressed: () async {
  143. await controller.setDataSource(source);
  144. await controller.play();
  145. },
  146. child: Text(currentI18n.play),
  147. ),
  148. RaisedButton(
  149. onPressed: setLandScapeLeft,
  150. child: Text(currentI18n.fullScreen),
  151. ),
  152. ],
  153. ),
  154. );
  155. }
  156. setLandScapeLeft() async {
  157. await IjkManager.setLandScape();
  158. }
  159. portraitUp() async {
  160. await IjkManager.setPortrait();
  161. }
  162. unlockOrientation() async {
  163. await IjkManager.unlockOrientation();
  164. }
  165. }