ijkplayer.dart 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. import 'dart:async';
  2. import 'dart:io';
  3. import 'package:flutter/material.dart';
  4. import 'package:flutter/services.dart';
  5. import 'error.dart';
  6. import 'package:flutter_ijkplayer/src/helper/logutil.dart';
  7. import 'package:flutter_ijkplayer/src/entity/video_info.dart';
  8. import 'widget/controller_widget_builder.dart';
  9. import 'widget/ijkplayer_builder.dart';
  10. import 'engine/ijk_controller_manager.dart';
  11. part 'controller.dart';
  12. part 'ijk_event_channel.dart';
  13. part 'engine/manager.dart';
  14. /// Main Classes of Library
  15. class IjkPlayer extends StatefulWidget {
  16. final IjkMediaController mediaController;
  17. /// See [DefaultIJKControllerWidget]
  18. final ControllerWidgetBuilder controllerWidgetBuilder;
  19. /// See [buildDefaultIjkPlayer]
  20. final PlayerBuilder playerBuilder;
  21. /// Main Classes of Library
  22. const IjkPlayer({
  23. Key key,
  24. @required this.mediaController,
  25. this.controllerWidgetBuilder = defaultBuildIjkControllerWidget,
  26. this.playerBuilder = buildDefaultIjkPlayer,
  27. }) : super(key: key);
  28. @override
  29. IjkPlayerState createState() => IjkPlayerState();
  30. }
  31. /// State of [IjkPlayer]
  32. class IjkPlayerState extends State<IjkPlayer> {
  33. /// see [IjkMediaController]
  34. IjkMediaController controller;
  35. @override
  36. void initState() {
  37. super.initState();
  38. controller = widget.mediaController ?? IjkMediaController();
  39. }
  40. @override
  41. void didUpdateWidget(IjkPlayer oldWidget) {
  42. super.didUpdateWidget(oldWidget);
  43. }
  44. @override
  45. void dispose() {
  46. super.dispose();
  47. }
  48. @override
  49. Widget build(BuildContext context) {
  50. var video = StreamBuilder<int>(
  51. stream: controller.textureIdStream,
  52. initialData: controller.textureId,
  53. builder: (context, snapshot) {
  54. if (!snapshot.hasData) {
  55. return Container();
  56. }
  57. var id = snapshot.data;
  58. return StreamBuilder<VideoInfo>(
  59. stream: controller.videoInfoStream,
  60. builder: (context, videoInfoSnapShot) {
  61. return _buildTexture(id, videoInfoSnapShot.data);
  62. });
  63. },
  64. );
  65. var controllerWidget = widget.controllerWidgetBuilder?.call(controller);
  66. Widget stack = Stack(
  67. children: <Widget>[
  68. IgnorePointer(child: video),
  69. controllerWidget,
  70. ],
  71. );
  72. // return stack;
  73. return Material(
  74. child: stack,
  75. color: Colors.black,
  76. );
  77. }
  78. Widget _buildTexture(int id, VideoInfo info) {
  79. if (widget?.playerBuilder != null) {
  80. return widget.playerBuilder.call(context, controller, info);
  81. }
  82. if (id == null) {
  83. return Container(
  84. color: Colors.black,
  85. );
  86. }
  87. return Container(
  88. color: Colors.black,
  89. child: Texture(
  90. textureId: id,
  91. ),
  92. );
  93. }
  94. }