diff --git a/example/lib/widgets/controls.dart b/example/lib/widgets/controls.dart index 68aa62a..e04cd0a 100644 --- a/example/lib/widgets/controls.dart +++ b/example/lib/widgets/controls.dart @@ -69,8 +69,7 @@ class _ControlsWidgetState extends State { void _toggleCamera() async { // - final track = - participant.videoTracks.firstOrNull?.track as LocalVideoTrack?; + final track = participant.videoTracks.firstOrNull?.track; if (track == null) return; try { diff --git a/lib/src/participant/local_participant.dart b/lib/src/participant/local_participant.dart index 75bcec8..a889ea3 100644 --- a/lib/src/participant/local_participant.dart +++ b/lib/src/participant/local_participant.dart @@ -75,7 +75,7 @@ class LocalParticipant extends Participant { ); await engine.negotiate(); - final pub = LocalTrackPublication(trackInfo, track, this); + final pub = LocalTrackPublication(trackInfo, track, this); addTrackPublication(pub); [events, roomEvents].emit(LocalTrackPublishedEvent( @@ -158,7 +158,7 @@ class LocalParticipant extends Participant { ); await engine.negotiate(); - final pub = LocalTrackPublication(trackInfo, track, this); + final pub = LocalTrackPublication(trackInfo, track, this); addTrackPublication(pub); [events, roomEvents].emit(LocalTrackPublishedEvent( @@ -241,12 +241,12 @@ class LocalParticipant extends Participant { super.subscribedTracks.cast().toList(); @override - List get videoTracks => - super.videoTracks.cast(); + List> get videoTracks => + super.videoTracks.cast>(); @override - List get audioTracks => - super.audioTracks.cast(); + List> get audioTracks => + super.audioTracks.cast>(); } extension LocalParticipantTrackSourceExt on LocalParticipant { diff --git a/lib/src/participant/remote_participant.dart b/lib/src/participant/remote_participant.dart index b245dc1..44f4453 100644 --- a/lib/src/participant/remote_participant.dart +++ b/lib/src/participant/remote_participant.dart @@ -1,4 +1,5 @@ import 'package:flutter_webrtc/flutter_webrtc.dart' as rtc; +import 'package:livekit_client/livekit_client.dart'; import 'package:meta/meta.dart'; import '../constants.dart'; @@ -7,9 +8,9 @@ import '../extensions.dart'; import '../logger.dart'; import '../managers/event.dart'; import '../proto/livekit_models.pb.dart' as lk_models; +import '../publication/remote_track_publication.dart'; import '../rtc_engine.dart'; import '../track/remote/audio.dart'; -import '../publication/remote_track_publication.dart'; import '../track/remote/video.dart'; import '../track/track.dart'; import '../types.dart'; @@ -25,12 +26,12 @@ class RemoteParticipant extends Participant { super.subscribedTracks.cast().toList(); @override - List get videoTracks => - super.videoTracks.cast(); + List> get videoTracks => + super.videoTracks.cast>(); @override - List get audioTracks => - super.audioTracks.cast(); + List> get audioTracks => + super.audioTracks.cast>(); RemoteParticipant( this._engine, @@ -134,7 +135,14 @@ class RemoteParticipant extends Participant { for (final trackInfo in info.tracks) { RemoteTrackPublication? pub = getTrackPublication(trackInfo.sid); if (pub == null) { - pub = RemoteTrackPublication(trackInfo, this); + final RemoteTrackPublication pub; + if (trackInfo.type == lk_models.TrackType.VIDEO) { + pub = RemoteTrackPublication(trackInfo, this); + } else if (trackInfo.type == lk_models.TrackType.AUDIO) { + pub = RemoteTrackPublication(trackInfo, this); + } else { + throw UnexpectedStateException('Unknown track type'); + } newPubs.add(pub); addTrackPublication(pub); } else { diff --git a/lib/src/publication/local_track_publication.dart b/lib/src/publication/local_track_publication.dart index 8d2879a..ca0bba8 100644 --- a/lib/src/publication/local_track_publication.dart +++ b/lib/src/publication/local_track_publication.dart @@ -7,11 +7,11 @@ import '../track/local.dart'; import '../track/track.dart'; import 'track_publication.dart'; -class LocalTrackPublication extends TrackPublication { +class LocalTrackPublication extends TrackPublication { final LocalParticipant _participant; @override - covariant LocalTrack? track; + covariant T? track; LocalTrackPublication( lk_models.TrackInfo info, diff --git a/lib/src/publication/remote_track_publication.dart b/lib/src/publication/remote_track_publication.dart index de0020b..1d69f1a 100644 --- a/lib/src/publication/remote_track_publication.dart +++ b/lib/src/publication/remote_track_publication.dart @@ -31,9 +31,9 @@ class RendererVisibility { /// Represents a track publication from a RemoteParticipant. Provides methods to /// control if we should subscribe to the track, and its quality (for video). -class RemoteTrackPublication extends TrackPublication { +class RemoteTrackPublication extends TrackPublication { @override - covariant RemoteTrack? track; + covariant T? track; final RemoteParticipant _participant; bool _enabled = true;