Browse Source

调整了controller ,使用stream模式

Caijinglong 6 years ago
parent
commit
cf30878202
3 changed files with 22 additions and 25 deletions
  1. 4 4
      example/ios/Podfile.lock
  2. 16 8
      lib/src/controller.dart
  3. 2 13
      lib/src/ijkplayer.dart

+ 4 - 4
example/ios/Podfile.lock

@@ -9,8 +9,8 @@ PODS:
 
 DEPENDENCIES:
   - Flutter (from `.symlinks/flutter/ios`)
-  - flutter_ijkplayer (from `/Users/caijinglong/Documents/GitHub/flutter_ijkplayer/ios/flutter_ijkplayer.podspec`)
-  - photo_manager (from `/Users/caijinglong/.pub-cache/hosted/pub.flutter-io.cn/photo_manager-0.3.3/ios/photo_manager.podspec`)
+  - flutter_ijkplayer (from `/Users/cai/Documents/GitHub/flutter_ijkplayer/ios/flutter_ijkplayer.podspec`)
+  - photo_manager (from `/Users/cai/.pub-cache/hosted/pub.flutter-io.cn/photo_manager-0.3.3/ios/photo_manager.podspec`)
 
 SPEC REPOS:
   https://github.com/cocoapods/specs.git:
@@ -20,9 +20,9 @@ EXTERNAL SOURCES:
   Flutter:
     :path: ".symlinks/flutter/ios"
   flutter_ijkplayer:
-    :path: "/Users/caijinglong/Documents/GitHub/flutter_ijkplayer/ios/flutter_ijkplayer.podspec"
+    :path: "/Users/cai/Documents/GitHub/flutter_ijkplayer/ios/flutter_ijkplayer.podspec"
   photo_manager:
-    :path: "/Users/caijinglong/.pub-cache/hosted/pub.flutter-io.cn/photo_manager-0.3.3/ios/photo_manager.podspec"
+    :path: "/Users/cai/.pub-cache/hosted/pub.flutter-io.cn/photo_manager-0.3.3/ios/photo_manager.podspec"
 
 SPEC CHECKSUMS:
   Flutter: 58dd7d1b27887414a370fcccb9e645c08ffd7a6a

+ 16 - 8
lib/src/controller.dart

@@ -1,9 +1,19 @@
 part of './ijkplayer.dart';
 
 /// Media Controller
-class IjkMediaController extends ChangeNotifier {
-  /// textureId
-  int textureId;
+class IjkMediaController {
+  int _textureId;
+
+  int get textureId => _textureId;
+
+  set textureId(int id) {
+    _textureId = id;
+    _textureIdController.add(id);
+  }
+
+  StreamController<int> _textureIdController = StreamController.broadcast();
+
+  Stream<int> get textureIdStream => _textureIdController.stream;
 
   _IjkPlugin _plugin;
 
@@ -24,7 +34,8 @@ class IjkMediaController extends ChangeNotifier {
 
   Stream<bool> get playingStream => _playingController.stream;
 
-  StreamController<VideoInfo> _videoInfoController = StreamController.broadcast();
+  StreamController<VideoInfo> _videoInfoController =
+      StreamController.broadcast();
 
   Stream<VideoInfo> get videoInfoStream => _videoInfoController.stream;
 
@@ -45,12 +56,11 @@ class IjkMediaController extends ChangeNotifier {
     await reset();
     _playingController.close();
     _videoInfoController.close();
-    super.dispose();
+    _textureIdController.close();
   }
 
   Future<void> reset() async {
     this.textureId = null;
-    this.notifyListeners();
     _plugin?.dispose();
     _plugin = null;
     eventChannel?.dispose();
@@ -97,7 +107,6 @@ class IjkMediaController extends ChangeNotifier {
     await _initIjk();
     _autoPlay(autoPlay);
     await setDataSource();
-    this.notifyListeners();
   }
 
   Future<void> playOrPause() async {
@@ -138,7 +147,6 @@ class IjkMediaController extends ChangeNotifier {
     var info = await getVideoInfo();
     isPlaying = info.isPlaying;
     _videoInfoController.add(info);
-    this.notifyListeners();
   }
 
   void _autoPlay(bool autoPlay) {

+ 2 - 13
lib/src/ijkplayer.dart

@@ -30,26 +30,14 @@ class IjkPlayer extends StatefulWidget {
 class IjkPlayerState extends State<IjkPlayer> {
   IjkMediaController controller;
 
-  StreamController<int> _streamController = StreamController.broadcast();
-
-  Stream<int> get stream => _streamController.stream;
-
   @override
   void initState() {
     super.initState();
     controller = widget.mediaController ?? IjkMediaController();
-    controller?.addListener(updateTextureId);
-  }
-
-  void updateTextureId() {
-    print("update id = ${controller.textureId}");
-    _streamController.add(controller.textureId);
   }
 
   @override
   void dispose() {
-    controller?.removeListener(updateTextureId);
-    _streamController?.close();
     controller?.dispose();
     super.dispose();
   }
@@ -57,7 +45,8 @@ class IjkPlayerState extends State<IjkPlayer> {
   @override
   Widget build(BuildContext context) {
     var video = StreamBuilder<int>(
-      stream: stream,
+      stream: controller.textureIdStream,
+      initialData: controller.textureId,
       builder: (context, snapshot) {
         if (!snapshot.hasData) {
           return Container();