Skip to content

Commit 9e3f0ab

Browse files
authored
Fix publications' track property initialization (#867)
The constructors of `LocalTrackPublication` and `RemoteTrackPublication` relied on setting the `track` property during initialization. However, because `updateTrack()` was an un-awaited async method, the `track` property was null immediately after construction, which caused confusion.
1 parent 7fd949d commit 9e3f0ab

File tree

3 files changed

+15
-15
lines changed

3 files changed

+15
-15
lines changed

lib/src/publication/local.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,7 @@ class LocalTrackPublication<T extends LocalTrack> extends TrackPublication<T> {
3131
required this.participant,
3232
required lk_models.TrackInfo info,
3333
required T track,
34-
}) : super(info: info) {
35-
updateTrack(track);
34+
}) : super(info: info, track: track) {
3635
// register dispose func
3736
onDispose(() async {
3837
// this object is responsible for disposing track

lib/src/publication/remote.dart

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ class RemoteTrackPublication<T extends RemoteTrack>
105105
required this.participant,
106106
required lk_models.TrackInfo info,
107107
T? track,
108-
}) : super(info: info) {
108+
}) : super(info: info, track: track) {
109109
logger.fine('RemoteTrackPublication.init track: $track, info: $info');
110110

111111
// register dispose func
@@ -121,8 +121,6 @@ class RemoteTrackPublication<T extends RemoteTrack>
121121
cancelFunc: (func) => _cancelPendingTrackSettingsUpdateRequest = func,
122122
wait: const Duration(milliseconds: 1500),
123123
);
124-
125-
updateTrack(track);
126124
}
127125

128126
@internal

lib/src/publication/track_publication.dart

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -68,13 +68,16 @@ abstract class TrackPublication<T extends Track> extends Disposable {
6868

6969
TrackPublication({
7070
required lk_models.TrackInfo info,
71+
required T? track,
7172
}) : sid = info.sid,
7273
name = info.name,
7374
kind = info.type.toLKType(),
7475
source = info.source.toLKType(),
7576
_simulcasted = info.simulcast,
7677
_metadataMuted = info.muted,
77-
_mimeType = info.mimeType {
78+
_mimeType = info.mimeType,
79+
_track = track {
80+
if (track != null) _attachTrackListener(track);
7881
updateFromInfo(info);
7982
}
8083

@@ -110,19 +113,19 @@ abstract class TrackPublication<T extends Track> extends Disposable {
110113
// dispose previous track (if exists)
111114
await _track?.dispose();
112115
_track = newValue;
113-
114-
if (newValue != null) {
115-
// listen for Track's muted events
116-
final listener = newValue.createListener()
117-
..on<InternalTrackMuteUpdatedEvent>(
118-
(event) => _onTrackMuteUpdatedEvent(event));
119-
// dispose listener when the track is disposed
120-
newValue.onDispose(() => listener.dispose());
121-
}
116+
if (newValue != null) _attachTrackListener(newValue);
122117

123118
return true;
124119
}
125120

121+
void _attachTrackListener(T track) {
122+
// listen for Track's muted events
123+
final listener = track.createListener()
124+
..on<InternalTrackMuteUpdatedEvent>((event) => _onTrackMuteUpdatedEvent(event));
125+
// dispose listener when the track is disposed
126+
track.onDispose(() => listener.dispose());
127+
}
128+
126129
void _onTrackMuteUpdatedEvent(InternalTrackMuteUpdatedEvent event) {
127130
// send signal to server (if mute initiated by local user)
128131
if (event.shouldSendSignal) {

0 commit comments

Comments
 (0)