8000 FEFACTOR - Readability (replace if by null operator) · wer-mathurin/flutter-webrtc@d2da74d · GitHub
[go: up one dir, main page]

Skip to content

Commit d2da74d

Browse files
committed
FEFACTOR - Readability (replace if by null operator)
FIX - Return the same MediaStream when remove from JS add NPE guard REFACTOR - Remove depracated call to getUserMedia add missing final keyword
1 parent 54d906d commit d2da74d

File tree

5 files changed

+44
-45
lines changed

5 files changed

+44
-45
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,4 @@ WorkspaceSettings.xcsettings
1414
example/.flutter-plugins
1515
example/android/local.properties
1616
.dart_tool/package_config.json
17+
android/.project

lib/web/get_user_media.dart

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,21 @@ import 'media_stream.dart';
88
class navigator {
99
static Future<MediaStream> getUserMedia(
1010
Map<String, dynamic> mediaConstraints) async {
11+
//TODO: Can be remove when dart null safety will be enforce
12+
if (mediaConstraints == null) mediaConstraints = Map<String, dynamic>();
13+
1114
try {
12-
final nav = HTML.window.navigator;
1315
if (mediaConstraints['video'] is Map) {
1416
if (mediaConstraints['video']['facingMode'] != null) {
1517
mediaConstraints['video'].remove('facingMode');
1618
}
1719
}
18-
final jsStream = await nav.getUserMedia(
19-
audio: mediaConstraints['audio'] ?? false,
20-
video: mediaConstraints['video'] ?? false);
20+
21+
mediaConstraints.putIfAbsent('video', () => false);
22+
mediaConstraints.putIfAbsent('audio', () => false);
23+
24+
final mediaDevices = HTML.window.navigator.mediaDevices;
25+
final jsStream = await mediaDevices.getUserMedia(mediaConstraints);
2126
return MediaStream(jsStream, 'local');
2227
} catch (e) {
2328
throw 'Unable to getUserMedia: ${e.toString()}';

lib/web/media_stream.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import 'media_stream_track.dart';
55

66
class MediaStream {
77
final HTML.MediaStream jsStream;
8-
String _ownerTag;
9-
MediaStream(this.jsStream, this._ownerTag);
8+
final String _ownerTag;
9+
const MediaStream(this.jsStream, this._ownerTag);
1010

1111
Future<void> getMediaTracks() {
1212
return Future.value();

lib/web/media_stream_track.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import 'dart:js' as JS;
55
class MediaStreamTrack {
66
final HTML.MediaStreamTrack jsTrack;
77

8-
MediaStreamTrack(this.jsTrack);
8+
const MediaStreamTrack(this.jsTrack);
99

1010
set enabled(bool enabled) => jsTrack.enabled = enabled;
1111

lib/web/rtc_peerconnection.dart

Lines changed: 31 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ class RTCPeerConnection {
3535
RTCSignalingState _signalingState;
3636
RTCIceGatheringState _iceGatheringState;
3737
RTCIceConnectionState _iceConnectionState;
38+
MediaStream _mediaStream;
3839

3940
// public: delegate
4041
SignalingStateCallback onSignalingState;
@@ -64,71 +65,63 @@ class RTCPeerConnection {
6465

6566
RTCPeerConnection(this._jsPc) {
6667
_peerConnectionId = base64Encode(this.toString().codeUnits);
68+
6769
_jsPc.onAddStream.listen((mediaStreamEvent) {
6870
final jsStream = mediaStreamEvent.stream;
69-
print("onaddstream argument: $jsStream");
70-
final mediaStream = MediaStream(jsStream, _peerConnectionId);
71-
if (onAddStream != null) {
72-
onAddStream(mediaStream);
73-
}
71+
this._mediaStream = MediaStream(jsStream, _peerConnectionId);
72+
onAddStream?.call(_mediaStream);
73+
7474
jsStream.onAddTrack.listen((mediaStreamTrackEvent) {
7575
final jsTrack =
7676
(mediaStreamTrackEvent as HTML.MediaStreamTrackEvent).track;
7777
final MediaStreamTrack track = MediaStreamTrack(jsTrack);
78-
mediaStream.addTrack(track, addToNative: false);
79-
if (onAddTrack != null) {
80-
onAddTrack(mediaStream, track);
81-
}
78+
_mediaStream.addTrack(track, addToNative: false).then((_) {
79+
onAddTrack?.call(_mediaStream, track);
80+
});
8281
});
82+
8383
jsStream.onRemoveTrack.listen((mediaStreamTrackEvent) {
8484
final jsTrack =
8585
(mediaStreamTrackEvent as HTML.MediaStreamTrackEvent).track;
8686
final MediaStreamTrack track = MediaStreamTrack(jsTrack);
87-
mediaStream.removeTrack(track, removeFromNative: false);
88-
if (onRemoveTrack != null) {
89-
onRemoveTrack(mediaStream, track);
90-
}
87+
_mediaStream.removeTrack(track, removeFromNative: false).then((_) {
88+
onRemoveTrack?.call(_mediaStream, track);
89+
});
9190
});
9291
});
92+
9393
_jsPc.onDataChannel.listen((dataChannelEvent) {
94-
if (onDataChannel != null) {
95-
final dc = RTCDataChannel(dataChannelEvent.channel);
96-
onDataChannel(dc);
97-
}
94+
onDataChannel?.call(RTCDataChannel(dataChannelEvent.channel));
9895
});
96+
9997
_jsPc.onIceCandidate.listen((iceEvent) {
100-
if (onIceCandidate != null && iceEvent.candidate != null) {
101-
onIceCandidate(RTCIceCandidate.fromJs(iceEvent.candidate));
98+
if (iceEvent.candidate != null) {
99+
onIceCandidate?.call(RTCIceCandidate.fromJs(iceEvent.candidate));
102100
}
103101
});
102+
104103
_jsPc.onIceConnectionStateChange.listen((_) {
105-
if (onIceConnectionState != null) {
106-
_iceConnectionState =
107-
iceConnectionStateForString(_jsPc.iceConnectionState);
108-
onIceConnectionState(_iceConnectionState);
109-
}
104+
this._iceConnectionState =
105+
iceConnectionStateForString(_jsPc.iceConnectionState);
106+
onIceConnectionState?.call(_iceConnectionState);
110107
});
108+
111109
JS.JsObject.fromBrowserObject(_jsPc)['onicegatheringstatechange'] =
112110
JS.JsFunction.withThis((_) {
113-
if (onIceGatheringState != null) {
114-
_iceGatheringState =
115-
iceGatheringStateforString(_jsPc.iceGatheringState);
116-
onIceGatheringState(_iceGatheringState);
117-
}
111+
this._iceGatheringState =
112+
iceGatheringStateforString(_jsPc.iceGatheringState);
113+
onIceGatheringState.call(_iceGatheringState);
118114
});
115+
119116
_jsPc.onRemoveStream.listen((mediaStreamEvent) {
120-
final jsStream = mediaStreamEvent.stream;
121-
final mediaStream = MediaStream(jsStream, _peerConnectionId);
122-
if (onRemoveStream != null) {
123-
onRemoveStream(mediaStream);
124-
}
117+
onRemoveStream?.call(_mediaStream);
125118
});
119+
126120
_jsPc.onSignalingStateChange.listen((_) {
127-
if (onSignalingState != null) {
128-
_signalingState = signalingStateForString(_jsPc.signalingState);
129-
onSignalingState(_signalingState);
130-
}
121+
_signalingState = signalingStateForString(_jsPc.signalingState);
122+
onSignalingState?.call(_signalingState);
131123
});
124+
132125
JS.JsObject.fromBrowserObject(_jsPc)['ontrack'] =
133126
JS.JsFunction.withThis((_, trackEvent) {
134127
// trackEvent is JsObject conforming to RTCTrackEvent

0 commit comments

Comments
 (0)
0