view.dart 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import 'package:fis_measure/index.dart';
  2. import 'package:fis_measure/interfaces/process/player/play_controller.dart';
  3. import 'package:fis_vid/data_host/data_host.dart';
  4. import 'package:flutter/material.dart';
  5. import 'package:vid_player_demo/widgets/image_cache.dart';
  6. import 'widgets/image_player.dart';
  7. class ImagePlayerView extends StatefulWidget {
  8. const ImagePlayerView({Key? key}) : super(key: key);
  9. @override
  10. _ImagePlayerViewState createState() => _ImagePlayerViewState();
  11. }
  12. class _ImagePlayerViewState extends State<ImagePlayerView> {
  13. IPlayerController? _playerController;
  14. IPlayerController get playerController => _playerController!;
  15. VidDataHost? _vidDataHost;
  16. VidDataHost get dataHost => _vidDataHost!;
  17. bool _ifInit = false;
  18. List<String> mockData = [
  19. "http://cdn-bj.fis.plus/093BE20682B14BFB95D811F221A2B2FD.vid"
  20. ];
  21. void loadVidDataHost(String url) {
  22. print("${DateTime.now()} Load vid data host");
  23. _vidDataHost = VidDataHost(url);
  24. _playerController = VidPlayerController(dataHost: dataHost);
  25. }
  26. void clickPlay() {
  27. print("${DateTime.now()} Click play");
  28. if (_ifInit) {
  29. playerController.play();
  30. } else {
  31. dataHost.load().then((value) {
  32. if (value == null) {
  33. // TOOO: add log
  34. } else {
  35. playerController.setLoadState(value != null);
  36. Future.delayed(const Duration(milliseconds: 100), () {
  37. playerController.play();
  38. });
  39. print("${DateTime.now()} Load vid data host success");
  40. }
  41. _ifInit = true;
  42. });
  43. }
  44. }
  45. void clickPause() {
  46. print("${DateTime.now()} Click pause");
  47. playerController.pause();
  48. }
  49. @override
  50. void initState() {
  51. super.initState();
  52. loadVidDataHost(mockData[0]);
  53. }
  54. @override
  55. Widget build(BuildContext context) {
  56. return Scaffold(
  57. appBar: AppBar(
  58. title: const Text('基于Image的播放器'),
  59. ),
  60. body: Center(
  61. child: Column(
  62. mainAxisAlignment: MainAxisAlignment.spaceEvenly,
  63. children: [
  64. const ShowImageCache(),
  65. ElevatedButton(
  66. onPressed: () {
  67. clickPlay();
  68. },
  69. child: const Text('Play')),
  70. ElevatedButton(
  71. onPressed: () {
  72. clickPause();
  73. },
  74. child: const Text('Pause')),
  75. SizedBox(
  76. width: 500,
  77. height: 500,
  78. child: RepaintBoundary(
  79. child: VidImagePlayer(
  80. _playerController as VidPlayerController,
  81. ),
  82. ),
  83. ),
  84. ],
  85. ),
  86. ),
  87. );
  88. }
  89. @override
  90. void dispose() {
  91. print("ImagePlayerView dispose");
  92. playerController.dispose();
  93. dataHost.release();
  94. super.dispose();
  95. }
  96. }