import 'dart:convert'; import 'dart:io' show Platform; import 'package:doctor_app_flutter/config/config.dart'; import 'package:doctor_app_flutter/models/livecare/session_status_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; class VideoChannel { /// channel name static const _channel = const MethodChannel("Dr.cloudSolution/videoCall"); static openVideoCallScreen( {kApiKey, kSessionId, kToken, callDuration, warningDuration, int vcId, String tokenID, String generalId, int doctorId, String patientName, bool isRecording = false, Function() onCallEnd, Function(SessionStatusModel sessionStatusModel) onCallNotRespond, Function(String error) onFailure, VoidCallback onCallConnected, VoidCallback onCallDisconnected}) async { onCallConnected = onCallConnected ?? () {}; onCallDisconnected = onCallDisconnected ?? () {}; var result; try { _channel.setMethodCallHandler((call) { if (call.method == 'onCallConnected') { onCallConnected(); } if (call.method == 'onCallDisconnected') { onCallDisconnected(); } return true as dynamic; }); result = await _channel.invokeMethod( 'openVideoCall', { "kApiKey": kApiKey, "kSessionId": kSessionId, "kToken": kToken, "appLang": "en", "baseUrl": BASE_URL_LIVE_CARE, "VC_ID": vcId, "TokenID": tokenID, "generalId": generalId, "DoctorId": doctorId, "patientName": patientName, "isRecording": isRecording, }, ); if (result['callResponse'] == 'CallEnd') { onCallEnd(); } else { SessionStatusModel sessionStatusModel = SessionStatusModel.fromJson( Platform.isIOS ? result['sessionStatus'] : json.decode(result['sessionStatus'])); onCallNotRespond(sessionStatusModel); } } catch (e) { onFailure(e.toString()); } } }