From 88ac343203d9cdc6b578b7b521847af0c57e1eaa Mon Sep 17 00:00:00 2001 From: Aamir-iMac Date: Wed, 24 May 2023 17:22:11 +0300 Subject: [PATCH] Changes On iOS --- lib/provider/chat_call_provider.dart | 58 +++++++++---------- .../chat/call/chat_incoming_call_screen.dart | 26 ++++++--- .../chat/call/chat_outgoing_call_screen.dart | 20 ++++--- 3 files changed, 57 insertions(+), 47 deletions(-) diff --git a/lib/provider/chat_call_provider.dart b/lib/provider/chat_call_provider.dart index 604604e..3660668 100644 --- a/lib/provider/chat_call_provider.dart +++ b/lib/provider/chat_call_provider.dart @@ -22,8 +22,9 @@ class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin { // Video Call late RTCPeerConnection _pc; late ChatProviderModel chatProvModel; - RTCVideoRenderer localVideoRenderer = RTCVideoRenderer(); - RTCVideoRenderer remoteRenderer = RTCVideoRenderer(); + RTCVideoRenderer? localVideoRenderer; + RTCVideoRenderer? remoteRenderer; + final AudioPlayer player = AudioPlayer(); MediaStream? _localStream; late CallDataModel outGoingCallData; @@ -206,21 +207,21 @@ class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin { isCamOff = false; isMicOff = false; isLoudSpeaker = false; - localVideoRenderer.srcObject = null; - remoteRenderer.srcObject = null; isIncomingCall = false; isOutGoingCall = false; if (_pc.connectionState == RTCPeerConnectionState.RTCPeerConnectionStateConnected) { print("------------------ PC Stopped ----------------------------"); _pc.close(); - remoteRenderer.dispose(); - localVideoRenderer.dispose(); - if (_localStream != null) { - _localStream!.dispose(); - _localStream = null; - } _pc.dispose(); } + remoteRenderer!.dispose(); + localVideoRenderer!.dispose(); + localVideoRenderer = null; + remoteRenderer = null; + if (_localStream != null) { + _localStream!.dispose(); + _localStream = null; + } if (chatHubConnection != null && !isUserOnline) { chatHubConnection.stop(); } @@ -240,18 +241,19 @@ class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin { isCamOff = false; isMicOff = false; isLoudSpeaker = false; - localVideoRenderer.srcObject = null; - remoteRenderer.srcObject = null; + if (_pc.connectionState == RTCPeerConnectionState.RTCPeerConnectionStateConnected) { _pc.close(); - remoteRenderer.dispose(); - localVideoRenderer.dispose(); - if (_localStream != null) { - _localStream!.dispose(); - _localStream = null; - } _pc.dispose(); } + remoteRenderer!.dispose(); + localVideoRenderer!.dispose(); + localVideoRenderer = null; + remoteRenderer = null; + if (_localStream != null) { + _localStream!.dispose(); + _localStream = null; + } isOutGoingCall = false; isIncomingCall = false; // await initStreams().whenComplete(() => notifyListeners()); @@ -428,7 +430,7 @@ class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin { await pc!.addStream(_localStream!); pc?.onConnectionState = (RTCPeerConnectionState state) {}; pc?.onAddStream = (MediaStream stream) { - remoteRenderer.srcObject = stream; + remoteRenderer!.srcObject = stream; notifyListeners(); }; pc!.onIceCandidate = (RTCIceCandidate e) async { @@ -537,7 +539,7 @@ class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin { void loudOn() { isLoudSpeaker = !isLoudSpeaker; - remoteRenderer.srcObject?.getAudioTracks().forEach((track) { + remoteRenderer!.srcObject?.getAudioTracks().forEach((track) { if (isLoudSpeaker) { track.enableSpeakerphone(true); } else { @@ -556,16 +558,12 @@ class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin { ///////////////// Incoming Call /////////////////////////////// Future initStreams() async { - await localVideoRenderer.initialize(); - if (_localStream == null) { - MediaStream? m; - _localStream = m; - _localStream = await navigator.mediaDevices.getUserMedia(isVideoCall ? videoConstraints : audioConstraints); - } else { - _localStream = await navigator.mediaDevices.getUserMedia(isVideoCall ? videoConstraints : audioConstraints); - } - localVideoRenderer.srcObject = _localStream; - await remoteRenderer.initialize(); + localVideoRenderer = RTCVideoRenderer(); + remoteRenderer = RTCVideoRenderer(); + await localVideoRenderer!.initialize(); + _localStream ??= await navigator.mediaDevices.getUserMedia(isVideoCall ? videoConstraints : audioConstraints); + localVideoRenderer!.srcObject = _localStream; + await remoteRenderer!.initialize(); } Future startIncomingCallViaKit({bool isVCall = true, required var inCallData}) async { diff --git a/lib/ui/chat/call/chat_incoming_call_screen.dart b/lib/ui/chat/call/chat_incoming_call_screen.dart index f72ff84..f890696 100644 --- a/lib/ui/chat/call/chat_incoming_call_screen.dart +++ b/lib/ui/chat/call/chat_incoming_call_screen.dart @@ -32,17 +32,22 @@ class _StartCallPageState extends State { @override void initState() { - cProv = Provider.of(context, listen: false); - provider = Provider.of(context, listen: false); super.initState(); - startCall(); } @override void dispose() { super.dispose(); } + + + @override + void didChangeDependencies() { + // TODO: implement didChangeDependencies + super.didChangeDependencies(); + } + void startCall() async { IncomingCallModel? sessionData; dynamic calls = await FlutterCallkitIncoming.activeCalls(); @@ -117,6 +122,9 @@ class _StartCallPageState extends State { @override Widget build(BuildContext context) { + cProv=context.read(); + provider=context.read(); + startCall(); return Scaffold( extendBody: true, body: Consumer2( @@ -137,7 +145,7 @@ class _StartCallPageState extends State { if (!provider.isAudioCall && provider.isVideoCall) Positioned.fill( child: RTCVideoView( - provider.remoteRenderer, + provider.remoteRenderer!, objectFit: RTCVideoViewObjectFit.RTCVideoViewObjectFitCover, key: const Key('remote'), ), @@ -157,7 +165,7 @@ class _StartCallPageState extends State { height: 200, width: 140, child: RTCVideoView( - provider.localVideoRenderer, + provider.localVideoRenderer!, mirror: true, objectFit: RTCVideoViewObjectFit.RTCVideoViewObjectFitCover, ), @@ -328,8 +336,8 @@ class _StartCallPageState extends State { provider.endCall(isUserOnline: cpm.isUserOnline).then((bool value) { if (value) { Navigator.of(context).pop(); - print("Reintiiiiiiitttiiiiiiii"); - provider.initStreams(); + // print("Reintiiiiiiitttiiiiiiii"); + // provider.initStreams(); } }); }, @@ -362,7 +370,7 @@ class _StartCallPageState extends State { if (!provider.isAudioCall && provider.isVideoCall) Positioned.fill( child: RTCVideoView( - provider.remoteRenderer, + provider.remoteRenderer!, objectFit: RTCVideoViewObjectFit.RTCVideoViewObjectFitCover, key: const Key('remote'), ), @@ -382,7 +390,7 @@ class _StartCallPageState extends State { height: 200, width: 140, child: RTCVideoView( - provider.localVideoRenderer, + provider.localVideoRenderer!, mirror: true, objectFit: RTCVideoViewObjectFit.RTCVideoViewObjectFitCover, ), diff --git a/lib/ui/chat/call/chat_outgoing_call_screen.dart b/lib/ui/chat/call/chat_outgoing_call_screen.dart index 2767e57..6a1a3c7 100644 --- a/lib/ui/chat/call/chat_outgoing_call_screen.dart +++ b/lib/ui/chat/call/chat_outgoing_call_screen.dart @@ -29,9 +29,6 @@ class _OutGoingCallState extends State { @override void initState() { - chatProvider = Provider.of(context, listen: false); - callProvider = Provider.of(context, listen: false); - init(); super.initState(); } @@ -45,15 +42,22 @@ class _OutGoingCallState extends State { void dispose() { super.dispose(); } + + @override + void didChangeDependencies() { + // TODO: implement didChangeDependencies + super.didChangeDependencies(); + } @override Widget build(BuildContext context) { + chatProvider = Provider.of(context, listen: true); + callProvider = Provider.of(context, listen: true); + init(); return Scaffold( body: Consumer(builder: (BuildContext context, ChatCallProvider chatcp, Widget? child) { if (chatcp.isCallEnded) { Navigator.pop(context); - print("Reintiiiiiiittt"); - chatcp.initStreams(); } return Stack( alignment: FractionalOffset.center, @@ -61,7 +65,7 @@ class _OutGoingCallState extends State { if (chatcp.isVideoCall) Positioned.fill( child: RTCVideoView( - chatcp.localVideoRenderer, + chatcp.localVideoRenderer!, objectFit: RTCVideoViewObjectFit.RTCVideoViewObjectFitCover, ), ), @@ -150,8 +154,8 @@ class _OutGoingCallState extends State { chatcp.endCall(isUserOnline: chatProvider.isUserOnline).then((bool value) { if (value) { Navigator.of(context).pop(); - print("Reintiiiiiiitttzzzz"); - chatcp.initStreams(); + // print("Reintiiiiiiitttzzzz"); + // chatcp.initStreams(); } }); },