full_screen.dart 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  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: IjkPlayer(
  93. mediaController: controller,
  94. ),
  95. onWillPop: () async {
  96. if (orientation == Orientation.landscape) {
  97. portraitUp();
  98. return false;
  99. }
  100. return true;
  101. },
  102. );
  103. }
  104. Widget buildNormal() {
  105. SystemChrome.setEnabledSystemUIOverlays([
  106. SystemUiOverlay.top,
  107. SystemUiOverlay.bottom,
  108. ]);
  109. return Scaffold(
  110. appBar: AppBar(
  111. title: Text("手动切换全屏(强制)"),
  112. ),
  113. body: ListView(
  114. children: <Widget>[
  115. AspectRatio(
  116. aspectRatio: 1,
  117. child: IjkPlayer(
  118. mediaController: controller,
  119. controllerWidgetBuilder: (ctl) {
  120. return DefaultControllerWidget(
  121. controller: ctl,
  122. verticalGesture: false,
  123. );
  124. },
  125. ),
  126. ),
  127. RaisedButton(
  128. onPressed: () async {
  129. await controller.setDataSource(source);
  130. await controller.play();
  131. },
  132. child: Text("播放"),
  133. ),
  134. RaisedButton(
  135. onPressed: setLandScapeLeft,
  136. child: Text("全屏"),
  137. ),
  138. ],
  139. ),
  140. );
  141. }
  142. void setLandScapeLeft() async {
  143. await SystemChrome.setPreferredOrientations(
  144. [DeviceOrientation.landscapeLeft],
  145. );
  146. }
  147. void portraitUp() async {
  148. await SystemChrome.setPreferredOrientations([
  149. DeviceOrientation.portraitUp,
  150. ]);
  151. await SystemChrome.restoreSystemUIOverlays();
  152. }
  153. void unlockOrientation() {
  154. SystemChrome.setPreferredOrientations([
  155. DeviceOrientation.landscapeLeft,
  156. DeviceOrientation.landscapeRight,
  157. DeviceOrientation.portraitUp,
  158. ]);
  159. }
  160. }