full_screen.dart 4.4 KB

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