Browse Source

Merge remote-tracking branch 'origin/controller-ui'

Caijinglong 6 years ago
parent
commit
4061b3bb8f

+ 2 - 2
example/lib/main.dart

@@ -173,9 +173,9 @@ class HomePageState extends State<HomePage> {
         FlatButton(
           child: StreamBuilder<bool>(
             stream: controller.playingStream,
-            initialData: controller.isPlaying,
+            initialData: controller?.isPlaying ?? false,
             builder: (context, snapshot) {
-              var isPlaying = snapshot.data;
+              var isPlaying = snapshot.hasData && snapshot.data;
               return Text(isPlaying ? "暂停" : "播放");
             },
           ),

+ 1 - 1
lib/flutter_ijkplayer.dart

@@ -1,4 +1,4 @@
 export 'src/ijkplayer.dart';
 export 'src/error.dart';
 export 'src/video_info.dart';
-export 'src/controller_builder_delegate.dart' show DefaultControllerWidget;
+export 'src/controller_builder.dart' show DefaultControllerWidget;

+ 0 - 2
lib/src/controller.dart

@@ -111,8 +111,6 @@ class IjkMediaController {
 
   Future<void> playOrPause() async {
     var videoInfo = await getVideoInfo();
-    print(videoInfo);
-
     var playing = videoInfo.isPlaying;
     if (playing) {
       await _plugin?.pause();

+ 88 - 0
lib/src/controller_builder.dart

@@ -0,0 +1,88 @@
+import 'dart:async';
+
+import 'package:flutter/material.dart';
+import 'package:flutter_ijkplayer/flutter_ijkplayer.dart';
+
+Widget defaultBuildIjkControllerWidget(IjkMediaController controller) {
+  return DefaultControllerWidget(controller);
+}
+
+class DefaultControllerWidget extends StatefulWidget {
+  final IjkMediaController controller;
+
+  const DefaultControllerWidget(this.controller);
+
+  @override
+  _DefaultControllerWidgetState createState() =>
+      _DefaultControllerWidgetState();
+}
+
+class _DefaultControllerWidgetState extends State<DefaultControllerWidget> {
+  IjkMediaController get controller => widget.controller;
+
+  bool _isShow = true;
+
+  set isShow(bool value) {
+    _isShow = value;
+    print("call show");
+    setState(() {});
+    if (value == true) {
+      controller.refreshVideoInfo();
+    }
+  }
+
+  bool get isShow => _isShow;
+
+  Timer progressTimer;
+
+  @override
+  void initState() {
+    super.initState();
+    startTimer();
+  }
+
+  @override
+  void dispose() {
+    stopTimer();
+    super.dispose();
+  }
+
+  void startTimer() {
+    progressTimer = Timer.periodic(Duration(milliseconds: 400), (timer) {
+      controller.refreshVideoInfo();
+    });
+  }
+
+  void stopTimer() {
+    progressTimer?.cancel();
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    return GestureDetector(
+      behavior: HitTestBehavior.translucent,
+      child: buildContent(),
+      onDoubleTap: () {
+        print("ondouble tap");
+        controller.playOrPause();
+      },
+      onTap: () => isShow = !isShow,
+    );
+  }
+
+  Widget buildContent() {
+    if (!isShow) {
+      return Container();
+    }
+    return StreamBuilder<VideoInfo>(
+      stream: controller.videoInfoStream,
+      builder: (context, snapshot) {
+        if (!snapshot.hasData) {
+          return Container();
+        }
+        var info = snapshot.data;
+        return Container();
+      },
+    );
+  }
+}

+ 0 - 23
lib/src/controller_builder_delegate.dart

@@ -1,23 +0,0 @@
-import 'package:flutter/widgets.dart';
-import './ijkplayer.dart';
-
-Widget defaultBuildIjkControllerWidget(IjkMediaController controller) {
-  return DefaultControllerWidget(controller);
-}
-
-class DefaultControllerWidget extends StatefulWidget {
-  final IjkMediaController controller;
-
-  const DefaultControllerWidget(this.controller);
-
-  @override
-  _DefaultControllerWidgetState createState() =>
-      _DefaultControllerWidgetState();
-}
-
-class _DefaultControllerWidgetState extends State<DefaultControllerWidget> {
-  @override
-  Widget build(BuildContext context) {
-    return Container();
-  }
-}

+ 1 - 1
lib/src/ijkplayer.dart

@@ -7,7 +7,7 @@ import 'package:flutter_ijkplayer/src/ijk_event_channel.dart';
 import 'package:flutter_ijkplayer/src/video_info.dart';
 import './error.dart';
 
-import './controller_builder_delegate.dart';
+import './controller_builder.dart';
 
 part './controller.dart';
 

+ 1 - 1
lib/src/video_info.dart

@@ -11,7 +11,7 @@ class VideoInfo {
 
   double get radio => width / height;
 
-  double get progress => currentPosition ?? 0 / duration ?? 1;
+  double get progress => (currentPosition ?? 0) / (duration ?? 1);
 
   VideoInfo.fromMap(Map<String, dynamic> map) {
     if (map == null) {