@@ -30,36 +30,9 @@ class ApiVideoLiveStreamController {
30
30
bool get isInitialized => _isInitialized;
31
31
32
32
/// Events listeners
33
- List < ApiVideoLiveStreamEventsListener > _eventsListeners = [] ;
33
+ _EventListenersManager _eventsListenersManager = _EventListenersManager () ;
34
34
List <ApiVideoLiveStreamWidgetListener > _widgetListeners = [];
35
35
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
-
63
36
/// Creates a new [ApiVideoLiveStreamController] instance.
64
37
ApiVideoLiveStreamController (
65
38
{required AudioConfig initialAudioConfig,
@@ -71,13 +44,11 @@ class ApiVideoLiveStreamController {
71
44
72
45
/// Creates a new live stream instance with initial audio and video configurations.
73
46
Future <void > initialize () async {
74
- _platform.setListener (_platformListener );
47
+ _platform.setListener (_eventsListenersManager );
75
48
_textureId = await _platform.initialize () ?? kUninitializedTextureId;
76
49
77
50
for (var listener in [..._widgetListeners]) {
78
- if (listener.onTextureReady != null ) {
79
- listener.onTextureReady !();
80
- }
51
+ listener.onTextureReady ();
81
52
}
82
53
83
54
await setCameraPosition (_initialCameraPosition);
@@ -92,7 +63,7 @@ class ApiVideoLiveStreamController {
92
63
/// Disposes the live stream instance.
93
64
Future <void > dispose () async {
94
65
_platform.setListener (null );
95
- _eventsListeners. clear ();
66
+ _eventsListenersManager. dispose ();
96
67
_widgetListeners.clear ();
97
68
await _platform.dispose ();
98
69
return ;
@@ -197,30 +168,14 @@ class ApiVideoLiveStreamController {
197
168
return Texture (textureId: textureId);
198
169
}
199
170
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
-
216
171
/// Adds a new widget listener from the events listener.
217
172
void addEventsListener (ApiVideoLiveStreamEventsListener listener) {
218
- _eventsListeners .add (listener);
173
+ _eventsListenersManager .add (listener);
219
174
}
220
175
221
176
/// Removes an events listener.
222
177
void removeEventsListener (ApiVideoLiveStreamEventsListener listener) {
223
- _eventsListeners .remove (listener);
178
+ _eventsListenersManager .remove (listener);
224
179
}
225
180
226
181
/// This is exposed for internal use only. Do not use it.
@@ -235,3 +190,49 @@ class ApiVideoLiveStreamController {
235
190
_widgetListeners.remove (listener);
236
191
}
237
192
}
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