11import 'dart:async' ;
2+
23import 'package:flutter/foundation.dart' ;
34import 'package:flutter/material.dart' ;
45import 'package:flutter_webrtc/flutter_webrtc.dart' ;
@@ -152,11 +153,20 @@ class _MyCallScreenWidget extends State<CallScreenWidget>
152153 @override
153154 void registrationStateChanged (RegistrationState state) {}
154155
156+ void _cleanUp () {
157+ _localStream? .getTracks ()? .forEach ((track) {
158+ track.stop ();
159+ });
160+ _localStream.dispose ();
161+ _localStream = null ;
162+ }
163+
155164 void _backToDialPad () {
156165 _timer.cancel ();
157166 Timer (Duration (seconds: 2 ), () {
158167 Navigator .of (context).pop ();
159168 });
169+ _cleanUp ();
160170 }
161171
162172 void _handelStreams (CallState event) async {
@@ -165,7 +175,7 @@ class _MyCallScreenWidget extends State<CallScreenWidget>
165175 if (_localRenderer != null ) {
166176 _localRenderer.srcObject = stream;
167177 }
168- if (! kIsWeb) {
178+ if (! kIsWeb && ! WebRTC .platformIsDesktop ) {
169179 event.stream? .getAudioTracks ()? .first? .enableSpeakerphone (false );
170180 }
171181 _localStream = stream;
@@ -200,22 +210,27 @@ class _MyCallScreenWidget extends State<CallScreenWidget>
200210 }
201211
202212 void _handleAccept () async {
203- final mediaConstraints = < String , dynamic > {'audio' : true , 'video' : true };
213+ bool remote_has_video = call.remote_has_video;
214+ final mediaConstraints = < String , dynamic > {
215+ 'audio' : true ,
216+ 'video' : remote_has_video
217+ };
204218 MediaStream mediaStream;
205219
206- if (kIsWeb && ! voiceonly ) {
220+ if (kIsWeb && remote_has_video ) {
207221 mediaStream =
208222 await navigator.mediaDevices.getDisplayMedia (mediaConstraints);
209223 mediaConstraints['video' ] = false ;
210224 MediaStream userStream =
211225 await navigator.mediaDevices.getUserMedia (mediaConstraints);
212226 mediaStream.addTrack (userStream.getAudioTracks ()[0 ], addToNative: true );
213227 } else {
214- mediaConstraints['video' ] = ! voiceonly ;
228+ mediaConstraints['video' ] = remote_has_video ;
215229 mediaStream = await navigator.mediaDevices.getUserMedia (mediaConstraints);
216230 }
217231
218- call.answer (helper.buildCallOptions (), mediaStream: mediaStream);
232+ call.answer (helper.buildCallOptions (! remote_has_video),
233+ mediaStream: mediaStream);
219234 }
220235
221236 void _switchCamera () {
0 commit comments