From 10519672090ed1b6e759f7ef43f4355b327835e7 Mon Sep 17 00:00:00 2001 From: alexmercerind Date: Fri, 13 Aug 2021 14:02:34 +0530 Subject: [PATCH] [ffi] Check if stream controllers are closed before adding events --- ffi/lib/src/internal/ffi.dart | 42 ++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/ffi/lib/src/internal/ffi.dart b/ffi/lib/src/internal/ffi.dart index dd8aab61..6a21b280 100644 --- a/ffi/lib/src/internal/ffi.dart +++ b/ffi/lib/src/internal/ffi.dart @@ -205,9 +205,10 @@ final ReceivePort receiver = new ReceivePort() players[playerId]!.playback.isSeekable = event[3] == '1' ? true : false; players[playerId]!.playback.isCompleted = false; - players[playerId]! - .playbackController - .add(players[playerId]!.playback); + if (!players[playerId]!.playbackController.isClosed) + players[playerId]! + .playbackController + .add(players[playerId]!.playback); break; } case 'positionEvent': @@ -216,9 +217,10 @@ final ReceivePort receiver = new ReceivePort() Duration(milliseconds: int.parse(event[3])); players[playerId]!.position.duration = Duration(milliseconds: int.parse(event[4])); - players[playerId]! - .positionController - .add(players[playerId]!.position); + if (!players[playerId]!.positionController.isClosed) + players[playerId]! + .positionController + .add(players[playerId]!.position); break; } case 'openEvent': @@ -253,34 +255,38 @@ final ReceivePort receiver = new ReceivePort() players[playerId]!.current.medias = medias; players[playerId]!.current.media = medias[players[playerId]!.current.index!]; - players[playerId]! - .currentController - .add(players[playerId]!.current); + if (!players[playerId]!.currentController.isClosed) + players[playerId]! + .currentController + .add(players[playerId]!.current); break; } case 'completeEvent': { players[playerId]!.playback.isCompleted = event[2] == '1' ? true : false; - players[playerId]! - .playbackController - .add(players[playerId]!.playback); + if (!players[playerId]!.playbackController.isClosed) + players[playerId]! + .playbackController + .add(players[playerId]!.playback); break; } case 'volumeEvent': { players[playerId]!.general.volume = double.parse(event[2]); - players[playerId]! - .generalController - .add(players[playerId]!.general); + if (!players[playerId]!.generalController.isClosed) + players[playerId]! + .generalController + .add(players[playerId]!.general); break; } case 'rateEvent': { players[playerId]!.general.rate = double.parse(event[2]); - players[playerId]! - .generalController - .add(players[playerId]!.general); + if (!players[playerId]!.generalController.isClosed) + players[playerId]! + .generalController + .add(players[playerId]!.general); break; } }