full_screen.dart 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter/services.dart';
  3. import 'package:flutter_ijkplayer/flutter_ijkplayer.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("切换横竖屏可以看到界面变化"),
  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. return WillPopScope(
  92. child: Scaffold(
  93. body: Stack(
  94. children: <Widget>[
  95. IjkPlayer(
  96. mediaController: controller,
  97. ),
  98. Container(
  99. height: 44.0,
  100. width: 44.0,
  101. child: IconButton(
  102. icon: Icon(Icons.fullscreen_exit),
  103. onPressed: portraitUp,
  104. ),
  105. ),
  106. ],
  107. ),
  108. ),
  109. onWillPop: () async {
  110. if (orientation == Orientation.landscape) {
  111. portraitUp();
  112. return false;
  113. }
  114. return true;
  115. },
  116. );
  117. }
  118. Widget buildNormal() {
  119. SystemChrome.setEnabledSystemUIOverlays([
  120. SystemUiOverlay.top,
  121. SystemUiOverlay.bottom,
  122. ]);
  123. return Scaffold(
  124. appBar: AppBar(
  125. title: Text("手动切换全屏(强制)"),
  126. ),
  127. body: ListView(
  128. children: <Widget>[
  129. AspectRatio(
  130. aspectRatio: 1,
  131. child: IjkPlayer(
  132. mediaController: controller,
  133. controllerWidgetBuilder: (ctl) {
  134. return DefaultControllerWidget(
  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("播放"),
  147. ),
  148. RaisedButton(
  149. onPressed: setLandScapeLeft,
  150. child: Text("全屏"),
  151. ),
  152. ],
  153. ),
  154. );
  155. }
  156. void setLandScapeLeft() async {
  157. await SystemChrome.setPreferredOrientations(
  158. [DeviceOrientation.landscapeLeft],
  159. );
  160. }
  161. void portraitUp() async {
  162. await SystemChrome.setPreferredOrientations([
  163. DeviceOrientation.portraitUp,
  164. ]);
  165. await SystemChrome.restoreSystemUIOverlays();
  166. }
  167. void unlockOrientation() {
  168. SystemChrome.setPreferredOrientations([
  169. DeviceOrientation.landscapeLeft,
  170. DeviceOrientation.landscapeRight,
  171. DeviceOrientation.portraitUp,
  172. ]);
  173. }
  174. }