From 92165cb361e43497adda398b3b98d7a90e3e97be Mon Sep 17 00:00:00 2001 From: Aamir Date: Thu, 8 Feb 2024 11:00:28 +0300 Subject: [PATCH] Changes --- lib/config/config.dart | 2 +- lib/main.dart | 4 +- .../call/chat_outgoing_call_screen.dart | 11 +- lib/voipcall/provider/chat_call_provider.dart | 154 ++++++------------ lib/widgets/drawer/app_drawer_widget.dart | 45 +++-- pubspec.yaml | 2 +- 6 files changed, 88 insertions(+), 130 deletions(-) diff --git a/lib/config/config.dart b/lib/config/config.dart index c5afb016..b8c828de 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -345,7 +345,7 @@ var UPDATE_COVID_QUESTIONNAIRE = 'Services/Doctors.svc/REST/COVID19_Questionnari var CHANNEL = 3; var GENERAL_ID = 'Cs2020@2016\$2958'; var IP_ADDRESS = '10.20.10.20'; -var VERSION_ID = 12.4; +var VERSION_ID = 12.8; var SETUP_ID = '91877'; var LANGUAGE = 2; // var PATIENT_OUT_SA = 0; diff --git a/lib/main.dart b/lib/main.dart index da7c7097..b4e62ee0 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -121,9 +121,7 @@ class _MyApp extends State { ChangeNotifierProvider(create: (context) => CompareList()), ChangeNotifierProvider(create: (context) => OrderPreviewViewModel()), ChangeNotifierProvider(create: (context) => PayfortViewModel()), - ChangeNotifierProvider( - create: (context) => ChatCallProvider(), - ), + ChangeNotifierProvider(create: (context) => ChatCallProvider()), ], child: Consumer( builder: (context, projectProvider, child) => MaterialApp( diff --git a/lib/voipcall/call/chat_outgoing_call_screen.dart b/lib/voipcall/call/chat_outgoing_call_screen.dart index f3d6b950..9be8e14e 100644 --- a/lib/voipcall/call/chat_outgoing_call_screen.dart +++ b/lib/voipcall/call/chat_outgoing_call_screen.dart @@ -20,7 +20,6 @@ class OutGoingCall extends StatefulWidget { class _OutGoingCallState extends State { ChatCallProvider callProvider; - //late ChatProviderModel chatProvider; bool loader = true; @override @@ -29,18 +28,12 @@ class _OutGoingCallState extends State { } Future init() async { + print("INITTTTTTTT"); widget.isVideoCall ? callProvider.isVideoCall = true : callProvider.isVideoCall = false; callProvider.isOutGoingCall = true; - // IosCallPayload payload = IosCallPayload( - // incomingCallerId: widget.outGoingCallData.callerId.toString(), - // incomingCallerName: widget.outGoingCallData.callerName, - // incomingCallReciverId: widget.outGoingCallData.receiverId.toString(), - // incomingCallType: widget.outGoingCallData.callType, - // uuid: "", - // callData: widget.outGoingCallData.toRawJson()); - // await Utils.saveStringFromPrefs("iosCallPayload", jsonEncode(payload)); await callProvider.initLocalCamera(callData: widget.outGoingCallData, context: context); loader = false; + print("INITTTTTTTT ENDDDD"); } @override diff --git a/lib/voipcall/provider/chat_call_provider.dart b/lib/voipcall/provider/chat_call_provider.dart index 902b916f..5cb8b788 100644 --- a/lib/voipcall/provider/chat_call_provider.dart +++ b/lib/voipcall/provider/chat_call_provider.dart @@ -8,7 +8,6 @@ import 'package:diplomaticquarterapp/models/chat/call.dart'; import 'package:diplomaticquarterapp/models/chat/webrtc_payloads.dart'; import 'package:diplomaticquarterapp/routes.dart'; import 'package:diplomaticquarterapp/uitl/navigation_service.dart'; -import 'package:diplomaticquarterapp/uitl/utils.dart'; import 'package:diplomaticquarterapp/voipcall/call/chat_incoming_call_screen.dart'; import 'package:diplomaticquarterapp/voipcall/consts.dart'; import 'package:diplomaticquarterapp/voipcall/model/get_single_user_chat_call.dart'; @@ -56,38 +55,35 @@ class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin { List devices = []; Future buildHubConnection() async { - try { - chatHubConnection = await getHubConnection(); - } catch (e) { - Utils.showErrorToast(e.toString()); - } - await chatHubConnection.start(); - if (kDebugMode) { - print("Hub Conn: Startedddddddd"); - } - // chatHubConnection.on("OnDeliveredChatUserAsync", onMsgReceived); - // chatHubConnection.on("OnGetChatConversationCount", onNewChatConversion); - // chatHubConnection.on("OnDeliveredGroupChatHistoryAsync", onGroupMsgReceived); + chatHubConnection = await getHubConnection(); + if (chatHubConnection != null) await chatHubConnection.start(); + print("Hub Conn: Startedddddddd"); registerCallListners(); + Future.delayed(Duration(seconds: 3), () {}); + return; } -//{"id":341682,"userName":"Aamir.Muhammad","email":"Aamir.Muhammad@cloudsolutions.com.sa","phone":null,"title":"Aamir Saleem Ahmad Dost Muhammad","token":"eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJuYW1laWQiOiIzNDE2ODIiLCJlbWFpbCI6IkFhbWlyLk11aGFtbWFkQGNsb3Vkc29sdXRpb25zLmNvbS5zYSIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd3MvMjAwOC8wNi9pZGVudGl0eS9jbGFpbXMvdXNlcmRhdGEiOiJBYW1pci5NdWhhbW1hZCIsIm5iZiI6MTcwNzIwNTAyMywiZXhwIjoxNzA3MjkxNDIzLCJpYXQiOjE3MDcyMDUwMjN9.Zz2bcsMwiLAAWGZh2E_p5Qs6ItMt0JHhDFI_0DLdggCQtt6HHcT4n8nvqMZx-uYr3jLwqhA_IAjTuaCeSE15sw","isDomainUser":true,"isActiveCode":false,"encryptedUserId":"nn7RkYzbnQc=","encryptedUserName":"/QruOyp4QMcmNXKZlljUgg=="} Future getHubConnection() async { - AppState().chatDetails.response = Response.fromJson( - { - "id": 341682, - "userName": "Aamir.Muhammad", - "email": "Aamir.Muhammad@cloudsolutions.com.sa", - "phone": null, - "title": "Aamir Saleem Ahmad Dost Muhammad", - "token": - "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJuYW1laWQiOiIzNDE2ODIiLCJlbWFpbCI6IkFhbWlyLk11aGFtbWFkQGNsb3Vkc29sdXRpb25zLmNvbS5zYSIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd3MvMjAwOC8wNi9pZGVudGl0eS9jbGFpbXMvdXNlcmRhdGEiOiJBYW1pci5NdWhhbW1hZCIsIm5iZiI6MTcwNzIwNTAyMywiZXhwIjoxNzA3MjkxNDIzLCJpYXQiOjE3MDcyMDUwMjN9.Zz2bcsMwiLAAWGZh2E_p5Qs6ItMt0JHhDFI_0DLdggCQtt6HHcT4n8nvqMZx-uYr3jLwqhA_IAjTuaCeSE15sw", - "isDomainUser": true, - "isActiveCode": false, - "encryptedUserId": "nn7RkYzbnQc=", - "encryptedUserName": "/QruOyp4QMcmNXKZlljUgg==" - }, - ); + if (AppState().chatDetails == null) { + AppState().chatDetails = UserAutoLoginModel.fromJson( + { + "response": { + "id": 341682, + "userName": "Aamir.Muhammad", + "email": "Aamir.Muhammad@cloudsolutions.com.sa", + "phone": null, + "title": "Aamir Saleem Ahmad Dost Muhammad", + "token": + "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJuYW1laWQiOiIzNDE2ODIiLCJlbWFpbCI6IkFhbWlyLk11aGFtbWFkQGNsb3Vkc29sdXRpb25zLmNvbS5zYSIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd3MvMjAwOC8wNi9pZGVudGl0eS9jbGFpbXMvdXNlcmRhdGEiOiJBYW1pci5NdWhhbW1hZCIsIm5iZiI6MTcwNzM3NzMyMiwiZXhwIjoxNzA3NDYzNzIyLCJpYXQiOjE3MDczNzczMjJ9.qYzwICr5URSIE0kQ0PQypKZCpqTAx0EYBNlhHl8Bq0InpmL4zhvHHDfC6YPNL1DTQpfp6kk5G7VZTr6nCAmuyg", + "isDomainUser": true, + "isActiveCode": false, + "encryptedUserId": "nn7RkYzbnQc=", + "encryptedUserName": "/QruOyp4QMcmNXKZlljUgg==" + }, + "errorResponses": null, + }, + ); + } HubConnection hub; HttpConnectionOptions httpOp = HttpConnectionOptions(skipNegotiation: false, logMessageContent: true); @@ -97,10 +93,26 @@ class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin { return hub; } + Future makeCall({String callType}) async { + Map json = { + "callerID": AppState().chatDetails.response.id, + "callerName": AppState().chatDetails.response.userName, + "callerEmail": AppState().chatDetails.response.email, + "callerTitle": AppState().chatDetails.response.title, + "callerPhone": AppState().chatDetails.response.phone, + "receiverID": 266642, + "receiverName": "Muhammad Alam", + "receiverEmail": "Muhamad.Alam@cloudsolutions.com.sa", + "receiverTitle": "Muhammad Alam", + "receiverPhone": "123456789", + "title": "Muhammad Alam", + "callType": callType == "VIDEO" ? "Video" : "Audio", + }; + CallDataModel callData = CallDataModel.fromJson(json); + return callData; + } + void registerCallListners() { - if (kDebugMode) { - print("=================== Call Listeners Registered ======================="); - } chatHubConnection.on("OnCallAcceptedAsync", onCallAcceptedAsync); chatHubConnection.on("OnIceCandidateAsync", onIceCandidateAsync); chatHubConnection.on("OnOfferAsync", onOfferAsync); @@ -132,16 +144,14 @@ class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin { isCallEnded = false; outGoingCallData = callData; await initStreams(); - await startCall(callType: isVideoCall ? "Video" : "Audio", context: context); _pc = await creatOfferWithCon(); - connectOutgoing(); + isOutGoingCall = true; notifyListeners(); } void connectOutgoing() { isOutGoingCall = true; - // notifyListeners(); } Future startCall({String callType, BuildContext context}) async { @@ -558,11 +568,11 @@ class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin { 'optional': [] }; RTCPeerConnection pc = await createPeerConnection(configuration, offerSdpConstraints); - // await pc.addStream(_localStream!); + await pc.addStream(_localStream); //Changed By Aamir - _localStream?.getTracks().forEach((track) { - pc.addTrack(track, _localStream); - }); + // _localStream.getTracks().forEach((track) { + // pc.addTrack(track, _localStream); + // }); pc.onConnectionState = (RTCPeerConnectionState state) {}; pc.onAddStream = (MediaStream stream) { remoteRenderer.srcObject = stream; @@ -694,14 +704,15 @@ class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin { ///////////////// Incoming Call /////////////////////////////// Future initStreams() async { + print("INIT STREAMSSSSS"); List devices = await navigator.mediaDevices.enumerateDevices(); remoteRenderer = RTCVideoRenderer(); - localVideoRenderer ??= RTCVideoRenderer(); + localVideoRenderer = RTCVideoRenderer(); await localVideoRenderer.initialize(); try { _localStream = await navigator.mediaDevices.getUserMedia({ 'audio': true, - 'video': isVideoCall + 'video': true ? { 'mandatory': { 'minWidth': '640', // Provide your own width, height and frame rate here @@ -722,67 +733,6 @@ class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin { } catch (e) { print("Failed to get user media: $e"); } - // _localStream = await navigator.mediaDevices.getUserMedia(isVideoCall - // ? Platform.isIOS - // ? { - // 'audio': true, - // 'video': { - // 'facingMode': 'user', // Use 'user' for front camera, 'environment' for back camera - // 'width': { - // 'ideal': 1080, // Set the ideal width (maximum quality) - // }, - // 'height': { - // 'ideal': 1920, // Set the ideal height (maximum quality) - // }, - // 'frameRate': { - // 'ideal': 30, // Set the ideal frame rate (adjust as needed) - // }, - // }, - // } - // : { - // 'audio': true, - // 'video': { - // 'facingMode': 'user', // Use 'user' for front camera, 'environment' for back camera - // 'width': { - // 'ideal': 1920, // Set the ideal width (maximum quality) - // }, - // 'height': { - // 'ideal': 1080, // Set the ideal height (maximum quality) - // }, - // 'frameRate': { - // 'ideal': 30, // Set the ideal frame rate (adjust as needed) - // }, - // }, - // } - // - // // ? { - // // "video": { - // // "mandatory": { - // // "width": {"min": 1080}, - // // "height": {"min": 1920} - // // }, - // // "optional": Platform.isAndroid - // // ? [ - // // {'sourceId': devices[1].deviceId}, - // // { - // // "width": {"max": 1080} - // // }, - // // {"frameRate": 30}, - // // {"facingMode": "user"} - // // ] - // // : [ - // // {"frameRate": 30}, - // // {"facingMode": "user"} - // // ] - // // }, - // // "frameRate": 30, - // // "width": 1080, //420,//640,//1280, - // // "height": 1920, //240//480//720 - // // "audio": true, - // // } - // : audioConstraints); - - // localVideoRenderer.srcObject = _localStream; await remoteRenderer.initialize(); notifyListeners(); } diff --git a/lib/widgets/drawer/app_drawer_widget.dart b/lib/widgets/drawer/app_drawer_widget.dart index bbc1e55f..1ff141d7 100644 --- a/lib/widgets/drawer/app_drawer_widget.dart +++ b/lib/widgets/drawer/app_drawer_widget.dart @@ -8,7 +8,6 @@ import 'package:diplomaticquarterapp/core/service/privilege_service.dart'; import 'package:diplomaticquarterapp/core/viewModels/appointment_rate_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/pharmacy_module_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; -import 'package:diplomaticquarterapp/extensions/string_extensions.dart'; import 'package:diplomaticquarterapp/models/Appointments/toDoCountProviderModel.dart'; import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart'; import 'package:diplomaticquarterapp/models/Authentication/check_activation_code_response.dart'; @@ -19,9 +18,7 @@ import 'package:diplomaticquarterapp/pages/DrawerPages/notifications/notificatio import 'package:diplomaticquarterapp/pages/landing/landing_page.dart'; import 'package:diplomaticquarterapp/pages/livecare/livecare_home.dart'; import 'package:diplomaticquarterapp/pages/rateAppointment/rate_appointment_doctor.dart'; -import 'package:diplomaticquarterapp/pages/webRTC/call_page.dart'; import 'package:diplomaticquarterapp/routes.dart'; -import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart'; import 'package:diplomaticquarterapp/services/authentication/auth_provider.dart'; import 'package:diplomaticquarterapp/services/clinic_services/get_clinic_service.dart'; import 'package:diplomaticquarterapp/services/family_files/family_files_provider.dart'; @@ -29,26 +26,18 @@ import 'package:diplomaticquarterapp/services/livecare_services/livecare_provide import 'package:diplomaticquarterapp/theme/colors.dart'; import 'package:diplomaticquarterapp/theme/theme_notifier.dart'; import 'package:diplomaticquarterapp/theme/theme_value.dart'; -import 'package:diplomaticquarterapp/uitl/HMGNetworkConnectivity.dart'; -import 'package:diplomaticquarterapp/uitl/LocalNotification.dart'; import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; -import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/utils.dart'; import 'package:diplomaticquarterapp/uitl/utils_new.dart'; +import 'package:diplomaticquarterapp/voipcall/call/chat_outgoing_call_screen.dart'; +import 'package:diplomaticquarterapp/voipcall/provider/chat_call_provider.dart'; import 'package:diplomaticquarterapp/widgets/dialogs/confirm_dialog.dart'; import 'package:diplomaticquarterapp/widgets/text/app_texts_widget.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; - -// import 'package:flutter_amazonpaymentservices/environment_type.dart'; -// import 'package:flutter_amazonpaymentservices/flutter_amazonpaymentservices.dart'; - -// import 'package:flutter_amazonpaymentservices/environment_type.dart'; -// import 'package:flutter_amazonpaymentservices/flutter_amazonpaymentservices.dart'; - // import 'package:flutter_amazonpaymentservices/flutter_amazonpaymentservices.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:in_app_review/in_app_review.dart'; @@ -78,6 +67,7 @@ class _AppDrawerState extends State { AppointmentRateViewModel appointmentRateViewModel = locator(); PrivilegeService _privilegeService = locator(); ToDoCountProviderModel toDoProvider; + ChatCallProvider callProv; String booldType; String notificationCount; final authService = new AuthProvider(); @@ -93,6 +83,7 @@ class _AppDrawerState extends State { Widget build(BuildContext context) { projectProvider = Provider.of(context); toDoProvider = Provider.of(context); + callProv = Provider.of(context); return Container( width: MediaQuery.of(context).size.width * 0.75, color: Theme.of(context).scaffoldBackgroundColor, @@ -222,7 +213,7 @@ class _AppDrawerState extends State { builder: (BuildContext context, AsyncSnapshot snapshot) { switch (snapshot.connectionState) { case ConnectionState.waiting: - return Padding(padding: EdgeInsets.all(10), child:CircularProgressIndicator()); + return Padding(padding: EdgeInsets.all(10), child: CircularProgressIndicator()); default: if (snapshot.hasError) return Padding(padding: EdgeInsets.all(10), child: Text(snapshot.error)); @@ -457,6 +448,32 @@ class _AppDrawerState extends State { onTap: () { Navigator.of(context).push(FadePage(page: UserAgreementPage())); }, + ), + GestureDetector( + onTap: () async { + //Aamir Call + callProv.buildHubConnection(); + await callProv.makeCall(callType: "VIDEO").then((value) { + Future.delayed(Duration(seconds: 3), () { + Navigator.push( + context, + MaterialPageRoute( + builder: (BuildContext context) => OutGoingCall( + isVideoCall: value.callType == "VIDEO" ? true : false, + outGoingCallData: value, + ), + ), + ); + }); + }); + }, + child: Card( + child: Container( + height: 50, + width: 200, + child: Center(child: Text("Call Test")), + ), + ), ) ], )) diff --git a/pubspec.yaml b/pubspec.yaml index 7da3d581..38f2221d 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -213,7 +213,7 @@ dependencies: wave: ^0.2.0 # sms_retriever: ^1.0.0 sms_otp_auto_verify: ^2.1.0 - flutter_ios_voip_kit: ^0.0.5 + flutter_ios_voip_kit: ^0.1.0 google_api_availability: ^3.0.1 # open_file: ^3.2.1 open_filex: ^4.3.2