Compare commits

...

4 Commits

Author SHA1 Message Date
Aamir Muhammad 00abbd8630 WebRtc Event Changes 3 years ago
Aamir Muhammad 65c380997e WebRtc Event Changes 3 years ago
Zohaib Iqbal Kambrani 691ee4ccbf Updated Events 3 years ago
Zohaib Iqbal Kambrani cf8951f66a no message 3 years ago

@ -34,7 +34,7 @@ configurations.all {
}
android {
compileSdkVersion 31
compileSdkVersion 33
sourceSets {
main.java.srcDirs += 'src/main/kotlin'

@ -90,7 +90,7 @@
</intent-filter>
</activity>
<receiver android:exported="true" android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationBootReceiver">
<receiver android:exported="true" tools:replace="android:exported" android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationBootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.MY_PACKAGE_REPLACED"/>

@ -20,8 +20,8 @@ var PACKAGES_ORDERS = '/api/orders';
var PACKAGES_ORDER_HISTORY = '/api/orders/items';
var PACKAGES_TAMARA_OPT = '/api/orders/paymentoptions/tamara';
// var BASE_URL = 'http://10.50.100.198:3334/';
// var BASE_URL = 'https://uat.hmgwebservices.com/';
var BASE_URL = 'https://hmgwebservices.com/';
var BASE_URL = 'https://uat.hmgwebservices.com/';
// var BASE_URL = 'https://hmgwebservices.com/';
// Pharmacy UAT URLs
// var BASE_PHARMACY_URL = 'https://uat.hmgwebservices.com/epharmacy/api/';

@ -81,7 +81,7 @@ class IncomingCallData {
isCall = json['is_call'];
sound = json['sound'];
server = json['server'];
isWebRTC = json['isWebRTC'] ?? "false";
isWebRTC = json['is_webrtc'] ?? "true";
}
Map<String, dynamic> toJson() {
@ -111,7 +111,7 @@ class IncomingCallData {
data['is_call'] = this.isCall;
data['sound'] = this.sound;
data['server'] = this.server;
data['isWebRTC'] = this.isWebRTC;
data['is_webrtc'] = this.isWebRTC;
return data;
}
}

@ -73,7 +73,6 @@ class LandingPage extends StatefulWidget {
class _LandingPageState extends State<LandingPage> with WidgetsBindingObserver {
var authProvider = new AuthProvider();
int currentTab = 0;
PageController pageController;
ProjectViewModel projectViewModel;
@ -123,7 +122,7 @@ class _LandingPageState extends State<LandingPage> with WidgetsBindingObserver {
"DoctorImageURL": "https://image.shutterstock.com/image-vector/sample-stamp-square-grunge-sign-260nw-1474408826.jpg",
"callerID": "9920",
"PatientID": "1231755",
"is_call": "true"
"is_call": "true",
};
void _requestIOSPermissions() {
@ -451,16 +450,15 @@ class _LandingPageState extends State<LandingPage> with WidgetsBindingObserver {
}
dummyCall() async {
final server = await SelectionDialog(
context,
title: "Select Server",
items: ["https://livecareturn.hmg.com:8086", "https://104.197.179.1:8086"]
).show();
// final server = await SelectionDialog(
// context,
// title: "Select Server",
// items: ["https://livecareturn.hmg.com:8086", "https://104.197.179.1:8086"]
// ).show();
final json = {
"callerID": "s1",
"PatientID": "s2",
"callerID": "9920",
"PatientID": "1231755",
"msgID": "123",
"notfID": "123",
"notification_foreground": "true",
@ -484,7 +482,9 @@ class _LandingPageState extends State<LandingPage> with WidgetsBindingObserver {
"videoUrl": "video",
"picture": "video",
"is_call": "true",
"server": server,
"is_webrtc": "true",
// "server": "https://192.168.8.163:8086",
"server": "https://livecareturn.hmg.com:8086",
};
IncomingCallData incomingCallData = IncomingCallData.fromJson(json);
@ -618,6 +618,7 @@ class _LandingPageState extends State<LandingPage> with WidgetsBindingObserver {
changeCurrentTab(1);
},
onLoginClick: () {
login();
},
onMedicalFileClick: () {

@ -4,10 +4,11 @@ import 'package:camera/camera.dart';
import 'package:diplomaticquarterapp/models/LiveCare/IncomingCallData.dart';
import 'package:diplomaticquarterapp/pages/conference/widgets/platform_exception_alert_dialog.dart';
import 'package:diplomaticquarterapp/pages/landing/landing_page.dart';
import 'package:diplomaticquarterapp/pages/videocall-webrtc-rnd/webrtc/signaling.dart';
import 'package:diplomaticquarterapp/pages/videocall-webrtc-rnd/webrtc/start_video_call.dart';
import 'package:diplomaticquarterapp/pages/webRTC/OpenTok/OpenTok.dart';
import 'package:diplomaticquarterapp/pages/webRTC/signaling.dart';
import 'package:diplomaticquarterapp/services/livecare_services/livecare_provider.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/uitl/utils_new.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
@ -15,7 +16,7 @@ import 'package:flutter/material.dart';
import 'package:just_audio/just_audio.dart';
import '../../config/config.dart';
import '../videocall-webrtc-rnd/utils/device_info.dart';
class IncomingCall extends StatefulWidget {
IncomingCallData incomingCallData;
@ -34,14 +35,17 @@ class _IncomingCallState extends State<IncomingCall> with SingleTickerProviderSt
CameraController _controller;
Future<void> _initializeControllerFuture;
bool isCameraReady = false;
Signaling signaling = Signaling()..init();
Signaling _signaling;
SessionOneToOne _session;
@override
void initState() {
_animationController = AnimationController(vsync: this, duration: Duration(milliseconds: 500));
isCameraReady = false;
//_runAnimation();
connectSignaling();
WidgetsBinding.instance.addPostFrameCallback((_) =>_runAnimation());
super.initState();
}
@ -51,6 +55,9 @@ class _IncomingCallState extends State<IncomingCall> with SingleTickerProviderSt
player.stop();
_controller.dispose();
disposeAudioResources();
// _signaling.close();
super.dispose();
}
@ -203,21 +210,15 @@ class _IncomingCallState extends State<IncomingCall> with SingleTickerProviderSt
}
void _runAnimation() async {
final cameras = await availableCameras();
final firstCamera = cameras[1];
_controller = CameraController(
// Get a specific camera from the list of available cameras.
firstCamera,
// Define the resolution to use.
ResolutionPreset.medium,
);
_initializeControllerFuture = _controller.initialize();
setState(() {
isCameraReady = true;
});
setState(() {});
setAudioFile();
for (int i = 0; i < 100; i++) {
await _animationController.forward();
@ -231,30 +232,28 @@ class _IncomingCallState extends State<IncomingCall> with SingleTickerProviderSt
// final roomModel = RoomModel(name: widget.incomingCallData.name, token: widget.incomingCallData.sessionId, identity: widget.incomingCallData.identity);
await _controller.dispose();
changeCallStatusAPI(4);
if (_session != null && _signaling != null) {
await Navigator.of(context).pushReplacement(
MaterialPageRoute(
// fullscreenDialog: true,
builder: (BuildContext context) {
final caller = widget.incomingCallData.callerID;
final receiver = widget.incomingCallData.receiverID;
final host = widget.incomingCallData.server;
if (widget.incomingCallData.isWebRTC == "true") {
return StartVideoCall(caller: caller, receiver: receiver, iAmCaller: false, host: host);
return StartVideoCall(signaling: _signaling, session: _session);
} else {
return OpenTokConnectCallPage(
apiKey: OPENTOK_API_KEY,
sessionId: widget.incomingCallData.sessionId,
token: widget.incomingCallData.token
);
return OpenTokConnectCallPage(apiKey: OPENTOK_API_KEY, sessionId: widget.incomingCallData.sessionId, token: widget.incomingCallData.token);
}
// return VideoCallWebPage(receiverId: widget.incomingCallData.receiverID, callerId: widget.incomingCallData.callerID); // Web WebRTC VideoCall
// return CallHomePage(receiverId: widget.incomingCallData.receiverID, callerId: widget.incomingCallData.callerID); // App WebRTC VideoCall
},
),
);
} else {
// Invalid Params/Data
AppToast.showErrorToast(message: "Failed to establish connection with server");
}
} catch (err) {
print(err);
await PlatformExceptionAlertDialog(
@ -265,8 +264,7 @@ class _IncomingCallState extends State<IncomingCall> with SingleTickerProviderSt
void changeCallStatusAPI(int sessionStatus) {
LiveCareService service = new LiveCareService();
service.endCallAPI(widget.incomingCallData.sessionId, sessionStatus, context).then((res) {
}).catchError((err) {
service.endCallAPI(widget.incomingCallData.sessionId, sessionStatus, context).then((res) {}).catchError((err) {
print(err);
});
}
@ -274,8 +272,11 @@ class _IncomingCallState extends State<IncomingCall> with SingleTickerProviderSt
void backToHome() async {
// final connected = await signaling.declineCall(widget.incomingCallData.callerID, widget.incomingCallData.receiverID);
LandingPage.isOpenCallPage = false;
// _signaling
player.stop();
changeCallStatusAPI(3);
_signaling.bye(_session, callRejected: true);
_signaling.callDisconnected(_session, callRejected: true);
Navigator.of(context).pop();
}
@ -297,4 +298,29 @@ class _IncomingCallState extends State<IncomingCall> with SingleTickerProviderSt
print("Error: $e");
}
}
connectSignaling({@required bool iAmCaller = false}) async {
print("----------------- + Signaling Connection Started ---------------------------");
final caller = widget.incomingCallData.callerID;
final receiver = widget.incomingCallData.receiverID;
final host = widget.incomingCallData.server;
final selfRole = iAmCaller ? "Caller" : "Receiver";
final selfId = iAmCaller ? caller : receiver;
final selfUser = SocketUser(id: selfId, name: "$selfRole-$selfId", userAgent: DeviceInfo.userAgent, moreInfo: {});
final remoteRole = !iAmCaller ? "Caller" : "Receiver";
final remoteId = !iAmCaller ? caller : receiver;
final remoteUser = SocketUser(id: remoteId, name: "$remoteRole-$remoteId", userAgent: DeviceInfo.userAgent, moreInfo: {});
final sessionId = "$caller-$receiver";
_session = SessionOneToOne(id: sessionId, local_user: selfUser, remote_user: remoteUser);
_signaling = Signaling(host, session: _session);
await _signaling.connect();
if (_signaling.state == SignalingState.Open) {
return;
}
}
}

@ -8,7 +8,7 @@ import '../utils/turn.dart' if (dart.library.js) '../utils/turn_web.dart';
enum SignalingState { Open, Closed, Error }
enum CallState { Calling, Ringing, Invite, Connected, Bye }
enum CallState {Bye}
const JsonEncoder _encoder = JsonEncoder();
@ -50,6 +50,8 @@ class SocketUser{
}
class Signaling {
SignalingState state;
var _host;
var _turnCredential;
@ -68,7 +70,8 @@ class Signaling {
Function(SessionOneToOne session, MediaStream stream) onRemoveRemoteStream;
Function(dynamic event) onPeersUpdate;
Function(dynamic event) onConnected;
Function(dynamic event) onRemoteConnected;
Function(dynamic event) onCallAccepted;
Function(dynamic event) onCallRejected;
Function(SessionOneToOne session, RTCDataChannel dc, RTCDataChannelMessage data) onDataChannelMessage;
Function(SessionOneToOne session, RTCDataChannel dc) onDataChannel;
@ -105,7 +108,7 @@ class Signaling {
close() async {
await finishSessions();
finishSessions();
_socket?.close();
}
@ -129,6 +132,12 @@ class Signaling {
'from': session.local_user.id,
'session_id': session.id,
});
_send('patient_call_accepted', {
'to': session.remote_user?.id,
'from': session.local_user.id,
'session_id': session.id,
});
}
void offer(String media, bool useScreen) async {
@ -139,17 +148,26 @@ class Signaling {
_createDataChannel(session);
}
_createOffer(session, media);
onCallStateChange?.call(session, CallState.Calling);
}
void bye(SessionOneToOne session) {
void bye(SessionOneToOne session, {bool callRejected = false}) {
_send('bye', {
'session_id': session.id,
'from': session.local_user.id,
// 'call_rejected' : callRejected
});
_closeSession(session);
}
void callDisconnected(SessionOneToOne session, {bool callRejected = false}) {
_send('patient_call_rejected', {
'session_id': session.id,
'to': session.remote_user.id,
'from': session.local_user.id,
});
_closeSession(session);
}
void onMessage(message) async {
Map<String, dynamic> mapData = message;
var data = mapData['data'];
@ -157,7 +175,7 @@ class Signaling {
switch (mapData['type']) {
case 'call_accepted':
{
onRemoteConnected?.call(data);
onCallAccepted?.call(data);
}
break;
@ -171,8 +189,6 @@ class Signaling {
case 'offer':
{
var peerId = data['from'];
var description = data['description'];
var media = data['media'];
@ -186,12 +202,10 @@ class Signaling {
});
session.remoteCandidates.clear();
}
onCallStateChange?.call(session, CallState.Calling);
}
break;
case 'answer':
{
var description = data['description'];
var sessionId = data['session_id'];
session.pc?.setRemoteDescription(
@ -200,8 +214,6 @@ class Signaling {
break;
case 'candidate':
{
var peerId = data['from'];
var candidateMap = data['candidate'];
var sessionId = data['session_id'];
RTCIceCandidate candidate = RTCIceCandidate(candidateMap['candidate'],
@ -219,21 +231,11 @@ class Signaling {
}
}
break;
case 'leave':
{
var peerId = data as String;
_closeSessionById(peerId);
}
break;
case 'bye':
{
var sessionId = data['session_id'];
print('bye: ' + sessionId);
if (session != null) {
if(session.local_user.id != data["from"])
onCallStateChange?.call(session, CallState.Bye);
_closeSession(session);
}
}
break;
case 'keepalive':
@ -269,11 +271,15 @@ class Signaling {
},
]
};
} catch (e) {}
} catch (e) {
print("jsjhs" + e.toString());
}
}
_socket?.onOpen = () {
print('onOpen');
state = SignalingState.Open;
onSignalingStateChange?.call(SignalingState.Open);
_send('connect', session.local_user.toJson());
};
@ -284,10 +290,13 @@ class Signaling {
};
_socket?.onClose = (int code, String reason) {
state = SignalingState.Closed;
print('Closed by server [$code => $reason]!');
onSignalingStateChange?.call(SignalingState.Closed);
};
await _socket?.connect();
}
@ -403,7 +412,7 @@ class Signaling {
'to': session.remote_user?.id,
'from': session.local_user.id,
'candidate': {
'sdpMLineIndex': candidate.sdpMlineIndex, // sdpMlineIndex or sdpMLineIndex
'sdpMLineIndex': candidate.sdpMLineIndex, // sdpMlineIndex or sdpMLineIndex
'sdpMid': candidate.sdpMid,
'candidate': candidate.candidate,
},
@ -486,14 +495,7 @@ class Signaling {
}
Future<void> finishSessions() async {
_closeSessionById(session.id);
}
void _closeSessionById(String sessionId) {
if (session != null && session.id == sessionId) {
_closeSession(session);
onCallStateChange?.call(session, CallState.Bye);
}
}
Future<void> _closeSession(SessionOneToOne session) async {
@ -502,7 +504,6 @@ class Signaling {
});
await localStream?.dispose();
localStream = null;
await session.pc?.close();
await session.dc?.close();
}

@ -12,33 +12,22 @@ import 'package:flutter_webrtc/flutter_webrtc.dart';
class StartVideoCall extends StatefulWidget {
static String tag = 'webrtc';
final String host;
SessionOneToOne session;
Signaling signaling;
String caller;
String receiver;
bool iAmCaller;
StartVideoCall({@required this.caller, @required this.receiver, this.iAmCaller = false, @required this.host});
StartVideoCall({@required this.signaling, @required this.session});
@override
StartVideoCallState createState() => StartVideoCallState(receiverId: receiver, callerId: caller, iAmCaller: iAmCaller);
StartVideoCallState createState() => StartVideoCallState(session: session, signaling: signaling);
}
class StartVideoCallState extends State<StartVideoCall> {
Signaling _signaling;
SessionOneToOne _session;
StartVideoCallState({@required String callerId, @required String receiverId, @required bool iAmCaller}){
final self_role = iAmCaller ? "Caller" : "Receiver";
final self_id = iAmCaller ? callerId : receiverId;
final self_user = SocketUser(id: self_id, name: "$self_role-$self_id", userAgent: DeviceInfo.userAgent, moreInfo: {});
final remote_role = !iAmCaller ? "Caller" : "Receiver";
final remote_id = !iAmCaller ? callerId : receiverId;
final remote_user = SocketUser(id: remote_id, name: "$remote_role-$remote_id", userAgent: DeviceInfo.userAgent, moreInfo: {});
final session_id = "$callerId-$receiverId";
_session = SessionOneToOne(id: session_id, local_user: self_user, remote_user: remote_user);
StartVideoCallState({@required SessionOneToOne session, @required Signaling signaling}) {
this._session = session;
this._signaling = signaling;
}
bool showNoise = true;
@ -51,13 +40,14 @@ class StartVideoCallState extends State<StartVideoCall> {
final RTCVideoRenderer _remoteRenderer = RTCVideoRenderer();
MediaStream get localMediaStream => _signaling.localStream;
MediaStream get remoteMediaStream => _signaling.remoteStreams.first;
@override
initState() {
super.initState();
initRenderers();
_connect();
_setupEventListeners();
}
initRenderers() async {
@ -76,19 +66,6 @@ class StartVideoCallState extends State<StartVideoCall> {
@override
Widget build(BuildContext context) {
return Scaffold(
// appBar: AppBar(
// title: Text('P2P Call Sample' + (_session?.local_user != null ? ' [Your ID (${_session?.local_user?.id})] ' : '')),
// actions: <Widget>[
// IconButton(
// icon: const Icon(Icons.settings),
// onPressed: (){
// setState(() {
// });
// },
// tooltip: 'setup',
// ),
// ],
// ),
body: videoCanvasWidgets(),
);
}
@ -124,13 +101,12 @@ class StartVideoCallState extends State<StartVideoCall> {
);
}
void _setupEventListeners() async {
if (_session == null) return;
void _connect() async {
if(_session == null)
return;
_signaling ??= Signaling(widget.host, session: _session)..connect();
// _signaling ??= Signaling(widget.host, session: _session)..connect();
_signaling?.callAccepted(_session);
_signaling?.onSignalingStateChange = (SignalingState state) {
switch (state) {
case SignalingState.Closed:
@ -142,19 +118,9 @@ class StartVideoCallState extends State<StartVideoCall> {
_signaling?.onCallStateChange = (SessionOneToOne session, CallState state) {
switch (state) {
case CallState.Calling:
setState(() {});
break;
case CallState.Bye:
setState(() {
_localRenderer.srcObject = null;
_remoteRenderer.srcObject = null;
_session = null;
});
_onHangup(byRemote: true);
break;
case CallState.Invite:
case CallState.Connected:
case CallState.Ringing:
}
};
@ -162,14 +128,11 @@ class StartVideoCallState extends State<StartVideoCall> {
_signaling?.callAccepted(_session);
});
_signaling?.onRemoteConnected = ((event) {
});
_signaling?.onCallAccepted = ((event) {});
_signaling?.onLocalStream = ((stream) {
_localRenderer.srcObject = stream;
setState(() {
});
setState(() {});
});
_signaling?.onAddRemoteStream = ((_, stream) {
@ -184,28 +147,26 @@ class StartVideoCallState extends State<StartVideoCall> {
});
}
_hangUp() async{
if (_session != null) {
_signaling?.bye(_session);
}
}
_switchCamera() {
_signaling?.switchCamera();
}
_muteMic() {
_signaling?.muteMic();
}
// _switchCamera() {
// _signaling?.switchCamera();
// }
//
// _muteMic() {
// _signaling?.muteMic();
// }
Function _onAudioEnable() {
print("================= Audio Event Triggered ===================");
final audioTrack = localMediaStream.getAudioTracks()[0];
final mute = audioTrack.muted;
Helper.setMicrophoneMute(!mute, audioTrack);
_audioButton.add(mute);
final micEnabled = audioTrack.enabled;
localMediaStream.getAudioTracks()[0].enabled = !micEnabled;
_audioButton.add(!micEnabled);
// _audioButton.add(!mute);
// Helper.setMicrophoneMute(!mute, audioTrack);
}
Function _onVideoEnabled() {
print("================= Video Event Triggered ===================");
final videoTrack = localMediaStream.getVideoTracks()[0];
bool videoEnabled = videoTrack.enabled;
localMediaStream.getVideoTracks()[0].enabled = !videoEnabled;
@ -213,12 +174,12 @@ class StartVideoCallState extends State<StartVideoCall> {
}
Function _onSwitchCamera() {
print("================= Camera Switch Event Triggered ===================");
Helper.switchCamera(localMediaStream.getVideoTracks()[0]);
}
void _onShowBar() {
setState(() {
});
setState(() {});
_onButtonBarVisibleStreamController.add(true);
}
@ -233,9 +194,13 @@ class StartVideoCallState extends State<StartVideoCall> {
_onButtonBarVisibleStreamController.add(false);
}
Future<void> _onHangup() async {
_signaling?.finishSessions();
print('onHangup');
Future<void> _onHangup({bool byRemote = false}) async {
if (byRemote) {
Navigator.of(context).pop();
} else {
_signaling.bye(_session);
Navigator.of(context).pop();
}
}
}

@ -9,12 +9,8 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter_hms_gms_availability/flutter_hms_gms_availability.dart';
import 'package:geolocator/geolocator.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:huawei_location/location/fused_location_provider_client.dart';
import 'package:huawei_location/location/location.dart';
import 'package:huawei_location/location/location_callback.dart';
import 'package:huawei_location/location/location_request.dart';
import 'package:huawei_location/location/location_settings_request.dart';
import 'package:huawei_location/permission/permission_handler.dart';
import 'package:huawei_location/huawei_location.dart';
import 'package:permission_handler/permission_handler.dart';
class LocationUtils {
@ -77,7 +73,8 @@ class LocationUtils {
LocationCallback _locationCallback;
_getHMSCurrentLocation(Function(LatLng) callBack) async {
PermissionHandler permissionHandler = PermissionHandler();
// PermissionHandler permissionHandler = PermissionHandler();
Permission permissionHandler;
int _locationUpdateCbId = 0;
doIt() {
@ -106,7 +103,8 @@ class LocationUtils {
});
}
if (await permissionHandler.hasLocationPermission()) {
// if (await permissionHandler.hasLocationPermission()) {
if (await permissionHandler.status.isGranted) {
doIt();
} else {
bool has = await requestPermissions();

@ -93,7 +93,7 @@ callPage(String sessionID, String token, String isWebrtc, String callerIdString)
String caller = callerIdString.split("*")[3];
String receiver = callerIdString.split("*")[4];
String host = callerIdString.split("*")[5];
return StartVideoCall(caller: caller, receiver: receiver, iAmCaller: false, host: host);
// return StartVideoCall(caller: caller, receiver: receiver, iAmCaller: false, host: host);
}else{
await NavigationService.navigateToPage(OpenTokConnectCallPage(apiKey: OPENTOK_API_KEY, sessionId: sessionID, token: token));
}

@ -35,13 +35,13 @@ class MyInAppBrowser extends InAppBrowser {
// static String APPLE_PAY_PAYFORT_URL = 'https://hmgwebservices.com/PayFortWebLive/PayFortApi/MakeApplePayRequest'; // Payfort Payment Gateway URL LIVE
static String APPLE_PAY_PAYFORT_URL = 'https://hmgwebservices.com/PayFortWebLive/PayFortApi/MakeApplePayRequest'; // Payfort Payment Gateway URL UAT
// static String SERVICE_URL = 'https://hmgwebservices.com/PayFortWeb/pages/SendPayFortRequest.aspx'; // Payfort Payment Gateway URL UAT
static String SERVICE_URL = 'https://hmgwebservices.com/PayFortWeb/pages/SendPayFortRequest.aspx'; // Payfort Payment Gateway URL UAT
static String SERVICE_URL = 'https://hmgwebservices.com/PayFortWebLive/pages/SendPayFortRequest.aspx'; //Payfort Payment Gateway URL LIVE
// static String SERVICE_URL = 'https://hmgwebservices.com/PayFortWebLive/pages/SendPayFortRequest.aspx'; //Payfort Payment Gateway URL LIVE
// static String PREAUTH_SERVICE_URL = 'https://hmgwebservices.com/PayFortWeb/pages/SendPayFortRequest.aspx'; // Payfort PreAuth Payment Gateway URL UAT
static String PREAUTH_SERVICE_URL = 'https://hmgwebservices.com/PayFortWeb/pages/SendPayFortRequest.aspx'; // Payfort PreAuth Payment Gateway URL UAT
static String PREAUTH_SERVICE_URL = 'https://hmgwebservices.com/PayFortWebLive/pages/SendPayFortRequest.aspx'; //Payfort PreAuth Payment Gateway URL Live Store
// static String PREAUTH_SERVICE_URL = 'https://hmgwebservices.com/PayFortWebLive/pages/SendPayFortRequest.aspx'; //Payfort PreAuth Payment Gateway URL Live Store
// static String PRESCRIPTION_PAYMENT_WITH_ORDERID =
// 'https://uat.hmgwebservices.com/epharmacy/checkout/OpcCompleteRedirectionPaymentClientbyOrder?orderID=';

@ -146,7 +146,7 @@ dependencies:
jiffy: ^4.1.0
#Flutter WebRTC
flutter_webrtc: ^0.8.0
flutter_webrtc: ^0.9.8
screen_brightness: ^0.1.2

@ -1,11 +1,11 @@
arguments=
auto.sync=false
build.scans.enabled=false
connection.gradle.distribution=GRADLE_DISTRIBUTION(VERSION(5.6.1))
connection.gradle.distribution=GRADLE_DISTRIBUTION(VERSION(7.4.2))
connection.project.dir=
eclipse.preferences.version=1
gradle.user.home=
java.home=
java.home=/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home
jvm.arguments=
offline.mode=false
override.workspace.settings=true

Loading…
Cancel
Save