@@ -30,36 +30,9 @@ class ApiVideoLiveStreamController {
3030 bool get isInitialized => _isInitialized;
3131
3232 /// Events listeners
33- List < ApiVideoLiveStreamEventsListener > _eventsListeners = [] ;
33+ _EventListenersManager _eventsListenersManager = _EventListenersManager () ;
3434 List <ApiVideoLiveStreamWidgetListener > _widgetListeners = [];
3535
36- late ApiVideoLiveStreamEventsListener _platformListener =
37- ApiVideoLiveStreamEventsListener (onConnectionSuccess: () {
38- _eventsListeners.forEach ((listener) {
39- if (listener.onConnectionSuccess != null ) {
40- listener.onConnectionSuccess !();
41- }
42- });
43- }, onConnectionFailed: (error) {
44- _eventsListeners.forEach ((listener) {
45- if (listener.onConnectionFailed != null ) {
46- listener.onConnectionFailed !(error);
47- }
48- });
49- }, onDisconnection: () {
50- _eventsListeners.forEach ((listener) {
51- if (listener.onDisconnection != null ) {
52- listener.onDisconnection !();
53- }
54- });
55- }, onError: (error) {
56- _eventsListeners.forEach ((listener) {
57- if (listener.onError != null ) {
58- listener.onError !(error);
59- }
60- });
61- });
62-
6336 /// Creates a new [ApiVideoLiveStreamController] instance.
6437 ApiVideoLiveStreamController (
6538 {required AudioConfig initialAudioConfig,
@@ -71,13 +44,11 @@ class ApiVideoLiveStreamController {
7144
7245 /// Creates a new live stream instance with initial audio and video configurations.
7346 Future <void > initialize () async {
74- _platform.setListener (_platformListener );
47+ _platform.setListener (_eventsListenersManager );
7548 _textureId = await _platform.initialize () ?? kUninitializedTextureId;
7649
7750 for (var listener in [..._widgetListeners]) {
78- if (listener.onTextureReady != null ) {
79- listener.onTextureReady !();
80- }
51+ listener.onTextureReady ();
8152 }
8253
8354 await setCameraPosition (_initialCameraPosition);
@@ -92,7 +63,7 @@ class ApiVideoLiveStreamController {
9263 /// Disposes the live stream instance.
9364 Future <void > dispose () async {
9465 _platform.setListener (null );
95- _eventsListeners. clear ();
66+ _eventsListenersManager. dispose ();
9667 _widgetListeners.clear ();
9768 await _platform.dispose ();
9869 return ;
@@ -197,30 +168,14 @@ class ApiVideoLiveStreamController {
197168 return Texture (textureId: textureId);
198169 }
199170
200- /// Adds a new events listener from the direct callbacks.
201- /// Returns the listener instance. You can remove it later with [removeEventsListener] .
202- ApiVideoLiveStreamEventsListener addCallbacksListener (
203- {VoidCallback ? onConnectionSuccess,
204- Function (String )? onConnectionFailed,
205- VoidCallback ? onDisconnection,
206- Function (Exception )? onError}) {
207- final listener = ApiVideoLiveStreamEventsListener (
208- onConnectionSuccess: onConnectionSuccess,
209- onConnectionFailed: onConnectionFailed,
210- onDisconnection: onDisconnection,
211- onError: onError);
212- _eventsListeners.add (listener);
213- return listener;
214- }
215-
216171 /// Adds a new widget listener from the events listener.
217172 void addEventsListener (ApiVideoLiveStreamEventsListener listener) {
218- _eventsListeners .add (listener);
173+ _eventsListenersManager .add (listener);
219174 }
220175
221176 /// Removes an events listener.
222177 void removeEventsListener (ApiVideoLiveStreamEventsListener listener) {
223- _eventsListeners .remove (listener);
178+ _eventsListenersManager .remove (listener);
224179 }
225180
226181 /// This is exposed for internal use only. Do not use it.
@@ -235,3 +190,49 @@ class ApiVideoLiveStreamController {
235190 _widgetListeners.remove (listener);
236191 }
237192}
193+
194+ class _EventListenersManager with ApiVideoLiveStreamEventsListener {
195+ final List <ApiVideoLiveStreamEventsListener > listeners = [];
196+
197+ void onConnectionSuccess () {
198+ for (var listener in listeners) {
199+ listener.onConnectionSuccess ();
200+ }
201+ }
202+
203+ void onConnectionFailed (String reason) {
204+ for (var listener in listeners) {
205+ listener.onConnectionFailed (reason);
206+ }
207+ }
208+
209+ void onDisconnection () {
210+ for (var listener in listeners) {
211+ listener.onDisconnection ();
212+ }
213+ }
214+
215+ void onError (Exception error) {
216+ for (var listener in listeners) {
217+ listener.onError (error);
218+ }
219+ }
220+
221+ void onVideoSizeChanged (Size size) {
222+ for (var listener in listeners) {
223+ listener.onVideoSizeChanged (size);
224+ }
225+ }
226+
227+ void add (ApiVideoLiveStreamEventsListener listener) {
228+ listeners.add (listener);
229+ }
230+
231+ void remove (ApiVideoLiveStreamEventsListener listener) {
232+ listeners.remove (listener);
233+ }
234+
235+ void dispose () {
236+ listeners.clear ();
237+ }
238+ }
0 commit comments