ijk_event_channel.dart 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import 'dart:async';
  2. import 'package:flutter/services.dart';
  3. import 'package:flutter_ijkplayer/src/video_info.dart';
  4. import './ijkplayer.dart';
  5. class IJKEventChannel {
  6. int get textureId => controller?.textureId;
  7. IjkMediaController controller;
  8. IJKEventChannel(this.controller);
  9. MethodChannel channel;
  10. String get channelName => "top.kikt/ijkplayer/event/$textureId";
  11. Completer _prepareCompleter;
  12. Future<void> init() async {
  13. channel = MethodChannel(channelName);
  14. channel.setMethodCallHandler(handler);
  15. }
  16. void dispose() {
  17. channel.setMethodCallHandler(null);
  18. controller = null;
  19. }
  20. Future<dynamic> handler(MethodCall call) async {
  21. switch (call.method) {
  22. case "finish": // 播放完毕
  23. // var index = call.arguments["type"];
  24. // var type = FinishType.values[index];
  25. onPlayFinish(getInfo(call));
  26. break;
  27. case "playStateChange":
  28. onPlayStateChange(getInfo(call));
  29. break;
  30. case "prepare":
  31. onPrepare(getInfo(call));
  32. break;
  33. case "rotateChanged":
  34. onRotateChanged(call);
  35. break;
  36. default:
  37. return MissingPluginException(
  38. "$channelName ${call.method} not implement",
  39. );
  40. }
  41. return true;
  42. }
  43. VideoInfo getInfo(MethodCall call) {
  44. var map = call.arguments.cast<String, dynamic>();
  45. return VideoInfo.fromMap(map);
  46. }
  47. void onPlayFinish(VideoInfo info) {
  48. controller.isPlaying = info.isPlaying;
  49. }
  50. void onPlayStateChange(VideoInfo info) {
  51. controller.isPlaying = info.isPlaying;
  52. }
  53. void onPrepare(VideoInfo info) {
  54. controller.isPlaying = info.isPlaying;
  55. _prepareCompleter?.complete();
  56. _prepareCompleter = null;
  57. }
  58. Future<void> waitPrepare() {
  59. _prepareCompleter = Completer();
  60. return _prepareCompleter.future;
  61. }
  62. void autoPlay(IjkMediaController ijkMediaController) async {
  63. try {
  64. await waitPrepare();
  65. ijkMediaController.play();
  66. } catch (e) {
  67. print(e);
  68. }
  69. }
  70. void onRotateChanged(MethodCall call) {
  71. var info = getInfo(call);
  72. print("onRotateChanged , info = $info");
  73. }
  74. }
  75. // enum FinishType {
  76. // playEnd,
  77. // userExit,
  78. // error,
  79. // }