ijkplayer.dart 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import 'dart:async';
  2. import 'package:flutter/material.dart';
  3. import 'package:flutter/services.dart';
  4. part './controller.dart';
  5. class IjkPlayer extends StatefulWidget {
  6. final IjkMediaController controller;
  7. const IjkPlayer({Key key, this.controller}) : super(key: key);
  8. @override
  9. _IjkPlayerState createState() => _IjkPlayerState();
  10. }
  11. class _IjkPlayerState extends State<IjkPlayer> {
  12. IjkMediaController get controller => widget.controller;
  13. StreamController<int> _streamController = StreamController.broadcast();
  14. Stream<int> get stream => _streamController.stream;
  15. @override
  16. void initState() {
  17. super.initState();
  18. controller?.addListener(updateTextureId);
  19. }
  20. void updateTextureId() {
  21. print("update id = ${controller.textureId}");
  22. _streamController.add(controller.textureId);
  23. }
  24. @override
  25. void dispose() {
  26. controller?.removeListener(updateTextureId);
  27. _streamController.close();
  28. super.dispose();
  29. }
  30. @override
  31. Widget build(BuildContext context) {
  32. return StreamBuilder<int>(
  33. stream: stream,
  34. builder: (context, snapshot) {
  35. if (!snapshot.hasData) {
  36. return Container();
  37. }
  38. return _buildContent(snapshot.data);
  39. });
  40. }
  41. Widget _buildContent(int id) {
  42. if (id == null) {
  43. return Container(
  44. color: Colors.black,
  45. );
  46. }
  47. return Container(
  48. color: Colors.black,
  49. child: Texture(
  50. textureId: id,
  51. ),
  52. );
  53. }
  54. }