From 2fc3f958896d3cc9344e027bfdea8b1ae81ccb29 Mon Sep 17 00:00:00 2001 From: gianlucaparadise Date: Thu, 13 Jan 2022 19:37:00 +0100 Subject: [PATCH] MiniController Progress listener --- .../mini_controller/MiniController.dart | 7 +-- .../MiniControllerProgress.dart | 43 +++++++++++++++++++ 2 files changed, 45 insertions(+), 5 deletions(-) create mode 100644 lib/src/cast/widgets/mini_controller/MiniControllerProgress.dart diff --git a/lib/src/cast/widgets/mini_controller/MiniController.dart b/lib/src/cast/widgets/mini_controller/MiniController.dart index c9fc2d5..acb6efe 100644 --- a/lib/src/cast/widgets/mini_controller/MiniController.dart +++ b/lib/src/cast/widgets/mini_controller/MiniController.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import '../../../../cast.dart'; +import 'MiniControllerProgress.dart'; import 'MiniControllerThumbnail.dart'; import 'MiniControllerPlayPauseButton.dart'; @@ -78,11 +79,7 @@ class MiniController extends StatelessWidget { } }, ), - LinearProgressIndicator( - color: Colors.red, - backgroundColor: Colors.transparent, - value: 0.1, - ), + MiniControllerProgress(castFramework: castFramework), ], ); } diff --git a/lib/src/cast/widgets/mini_controller/MiniControllerProgress.dart b/lib/src/cast/widgets/mini_controller/MiniControllerProgress.dart new file mode 100644 index 0000000..7ce188e --- /dev/null +++ b/lib/src/cast/widgets/mini_controller/MiniControllerProgress.dart @@ -0,0 +1,43 @@ +import 'package:flutter/material.dart'; + +import '../../../../cast.dart'; + +class MiniControllerProgress extends StatelessWidget { + final FlutterCastFramework castFramework; + + const MiniControllerProgress({ + Key? key, + required this.castFramework, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + var remoteMediaClient = + this.castFramework.castContext.sessionManager.remoteMediaClient; + + return StreamBuilder( + stream: remoteMediaClient.progressStream, + builder: (context, snapshot) { + final double progressPercent; + + final progressInfo = snapshot.data; + if (snapshot.hasData && progressInfo != null) { + final duration = progressInfo.durationMs; + final progress = progressInfo.progressMs; + + // this is the denominator, can't be 0 + final durationFix = duration == 0 ? 1 : duration; + progressPercent = progress / durationFix; + } else { + progressPercent = 0; + } + + return LinearProgressIndicator( + color: Colors.red, + backgroundColor: Colors.transparent, + value: progressPercent, + ); + }, + ); + } +}