ijkplayer.dart 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import 'dart:async';
  2. import 'dart:io';
  3. import 'package:flutter/material.dart';
  4. import 'package:flutter/services.dart';
  5. import 'package:flutter_ijkplayer/src/ijk_event_channel.dart';
  6. import 'package:flutter_ijkplayer/src/video_info.dart';
  7. import './error.dart';
  8. import './controller_builder.dart';
  9. part './controller.dart';
  10. part './manager.dart';
  11. typedef Widget ControllerWidgetBuilder(IjkMediaController controller);
  12. class IjkPlayer extends StatefulWidget {
  13. final IjkMediaController mediaController;
  14. final ControllerWidgetBuilder controllerWidgetBuilder;
  15. const IjkPlayer({
  16. Key key,
  17. this.mediaController,
  18. this.controllerWidgetBuilder = defaultBuildIjkControllerWidget,
  19. }) : super(key: key);
  20. @override
  21. IjkPlayerState createState() => IjkPlayerState();
  22. }
  23. class IjkPlayerState extends State<IjkPlayer> {
  24. IjkMediaController controller;
  25. @override
  26. void initState() {
  27. super.initState();
  28. controller = widget.mediaController ?? IjkMediaController();
  29. }
  30. @override
  31. void dispose() {
  32. controller?.dispose();
  33. super.dispose();
  34. }
  35. @override
  36. Widget build(BuildContext context) {
  37. var video = StreamBuilder<int>(
  38. stream: controller.textureIdStream,
  39. initialData: controller.textureId,
  40. builder: (context, snapshot) {
  41. if (!snapshot.hasData) {
  42. return Container();
  43. }
  44. return _buildVideoContent(snapshot.data);
  45. },
  46. );
  47. var controllerWidget = widget.controllerWidgetBuilder?.call(controller);
  48. return Stack(
  49. children: <Widget>[
  50. IgnorePointer(child: video),
  51. controllerWidget,
  52. ],
  53. );
  54. }
  55. Widget _buildVideoContent(int id) {
  56. if (id == null) {
  57. return Container(
  58. color: Colors.black,
  59. );
  60. }
  61. return Container(
  62. color: Colors.black,
  63. child: Texture(
  64. textureId: id,
  65. ),
  66. );
  67. }
  68. }