import 'dart:async'; import 'package:doctor_app_flutter/models/livecare/get_pending_res_list.dart'; import 'package:doctor_app_flutter/models/livecare/session_status_model.dart'; import 'package:doctor_app_flutter/models/livecare/start_call_res.dart'; import 'package:doctor_app_flutter/core/viewModel/livecare_view_model.dart'; import 'package:doctor_app_flutter/screens/live_care/panding_list.dart'; import 'package:doctor_app_flutter/util/VideoChannel.dart'; import 'package:doctor_app_flutter/util/dr_app_shared_pref.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:flutter/material.dart'; import 'package:doctor_app_flutter/config/shared_pref_kay.dart'; import 'package:provider/provider.dart'; import 'package:doctor_app_flutter/util/dr_app_toast_msg.dart'; import 'package:doctor_app_flutter/util/helpers.dart'; import '../../routes.dart'; class VideoCallPage extends StatefulWidget { final LiveCarePendingListResponse patientData; final listContext; VideoCallPage(this.patientData, this.listContext); @override _VideoCallPageState createState() => _VideoCallPageState(); } DrAppSharedPreferances sharedPref = DrAppSharedPreferances(); class _VideoCallPageState extends State { Timer _timmerInstance; int _start = 0; String _timmer = ''; LiveCareViewModel _liveCareProvider; bool _isInit = true; var _tokenData; bool isTransfer = false; String image_url = 'https://hmgwebservices.com/Images/MobileImages/DUBAI/'; //bool _isOutOfStuck = false; Helpers helpers = new Helpers(); var doctorprofile = {}; var notes; @override void didChangeDependencies() { super.didChangeDependencies(); if (_isInit) { _liveCareProvider = Provider.of(context); startCall(false); } _isInit = false; } void connectOpenTok(StartCallRes tokenData) async { _tokenData = tokenData; //var profile = await sharedPref.getObj(DOCTOR_PROFILE); var token = await sharedPref.getString(TOKEN); doctorprofile = await sharedPref.getObj(DOCTOR_PROFILE); /* opentok functionalites need to be written */ await VideoChannel.openVideoCallScreen( kToken: tokenData.openTokenID, //'T1==cGFydG5lcl9pZD00NjgwMzIyNCZzaWc9NWRhNmExMzU4ZDViZGU3OTA5NDY4ODRhNzI4ZGUxZTRmMjZmNzcwMjpzZXNzaW9uX2lkPTFfTVg0ME5qZ3dNekl5Tkg1LU1UVTVNelk0TXpZek9EWXdNMzV1Y0V4V1lWUlZTbTVIY3k5dVdHWm1NMWxPYTNjelpIVi1mZyZjcmVhdGVfdGltZT0xNTkzNjgzNjYyJm5vbmNlPTAuODAxMzMzMzUxMDQwNzE5NSZyb2xlPXB1Ymxpc2hlciZleHBpcmVfdGltZT0xNTk2Mjc1NjYyJmluaXRpYWxfbGF5b3V0X2NsYXNzX2xpc3Q9', kSessionId: tokenData.openSessionID, //'1_MX40NjgwMzIyNH5-MTU5MzY4MzYzODYwM35ucExWYVRVSm5Hcy9uWGZmM1lOa3czZHV-fg', kApiKey: '46209962', vcId: widget.patientData.vCID, tokenID: token, //"hfkjshdf347r8743", generalId: "Cs2020@2016\$2958", doctorId: doctorprofile['DoctorID'], onFailure: (String error) { //TODO handling Failure //changeRoute(context); }, onCallEnd: () { //TODO handling onCallEnd WidgetsBinding.instance.addPostFrameCallback((_) { changeRoute(context); }); }, onCallNotRespond: (SessionStatusModel sessionStatusModel) { //TODO handling onCalcallNotRespondlEnd WidgetsBinding.instance.addPostFrameCallback((_) { changeRoute(context); }); }); } startCall(bool isRecall) async { //patientData = await sharedPref.getObj(LIVE_CARE_PATIENT); _liveCareProvider.startCall(widget.patientData, isRecall).then((result) { // //startTimmer(); setState(() { _start = 1; }); connectOpenTok(result); }).catchError((error) => {helpers.showErrorToast(error), Navigator.of(context).pop()}); } @override void dispose() { super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( body: Container( height: MediaQuery.of(context).size.height, width: MediaQuery.of(context).size.width, decoration: BoxDecoration( color: Colors.white, ), padding: EdgeInsets.all(50.0), child: Column( mainAxisAlignment: MainAxisAlignment.start, mainAxisSize: MainAxisSize.max, crossAxisAlignment: CrossAxisAlignment.center, children: [ SizedBox( height: 10.0, ), Text( _start == 0 ? 'Dailing' : 'Connected', style: TextStyle( color: Colors.deepPurpleAccent, fontWeight: FontWeight.w300, fontSize: 15), ), SizedBox( height: MediaQuery.of(context).size.height * 0.02, ), Text( widget.patientData.patientName, style: TextStyle( color: Colors.deepPurpleAccent, fontWeight: FontWeight.w900, fontSize: 20), ), SizedBox( height: MediaQuery.of(context).size.height * 0.02, ), Container( child: Text( _start == 0 ? 'Connecting...' : _timmer.toString(), style: TextStyle( color: Colors.deepPurpleAccent, fontWeight: FontWeight.w300, fontSize: 15), )), SizedBox( height: MediaQuery.of(context).size.height * 0.02, ), ClipRRect( borderRadius: BorderRadius.circular(200.0), child: Image.network( image_url + 'unkown.png', height: 200.0, width: 200.0, ), ), SizedBox( height: MediaQuery.of(context).size.height * .2, ), Container( width: 70.0, height: 70.0, child: FloatingActionButton( onPressed: () { Navigator.of(context).pop(); }, elevation: 30.0, shape: CircleBorder(side: BorderSide(color: Colors.red)), mini: false, child: Icon( Icons.call_end, color: Colors.red, size: 35, ), backgroundColor: Colors.red[100], )) ], ), )); } changeRoute(con) async { // await Future.delayed(Duration(seconds: 1), () { _showAlert(con); //}); } _showAlert(BuildContext context) async { await showDialog( context: context, builder: (dialogContex) => AlertDialog(content: StatefulBuilder( builder: (BuildContext context, StateSetter setState) { return Container( height: MediaQuery.of(context).size.height * 0.7, width: MediaQuery.of(context).size.width * .9, child: Stack( fit: StackFit.loose, overflow: Overflow.visible, children: [ Positioned( right: -40.0, top: -40.0, child: InkResponse( onTap: () { Navigator.of(context, rootNavigator: true) .pop('dialog'); Navigator.of(context).pop(); }, child: CircleAvatar( child: Icon(Icons.close), backgroundColor: Colors.red, ), ), ), Center( child: Column( crossAxisAlignment: CrossAxisAlignment.center, mainAxisSize: MainAxisSize.min, children: [ Padding( padding: EdgeInsets.all(8.0), child: RaisedButton( onPressed: () => {endCall()}, child: Text(TranslationBase.of(context).endcall), color: Colors.red, textColor: Colors.white, )), Padding( padding: EdgeInsets.all(8.0), child: RaisedButton( onPressed: () => {resumeCall()}, child: Text(TranslationBase.of(context).resumecall), color: Colors.green[900], textColor: Colors.white, ), ), Padding( padding: EdgeInsets.all(8.0), child: RaisedButton( onPressed: () => {endCallWithCharge()}, child: Text(TranslationBase.of(context) .endcallwithcharge), textColor: Colors.white, ), ), Padding( padding: EdgeInsets.all(8.0), child: RaisedButton( onPressed: () => { setState(() => {isTransfer = true}) }, child: Text( TranslationBase.of(context).transfertoadmin), color: Colors.yellow[900], ), ), isTransfer == true ? Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text('Notes'), Padding( padding: EdgeInsets.all(5.0), child: TextField( maxLines: 3, controller: notes, decoration: InputDecoration.collapsed( hintText: "Enter your notes here"), )), Center( child: RaisedButton( onPressed: () => {this.transferToAdmin(notes)}, child: Text('Transfer'), color: Colors.yellow[900], )) ], ) : SizedBox() ], )) ], )); }))); Navigator.pop(context); } resumeCall() { closeRoute(); startCall(true); } transferToAdmin(notes) { closeRoute(); _liveCareProvider .transfterToAdmin(widget.patientData, notes) .then((result) { connectOpenTok(result); }).catchError((error) => {helpers.showErrorToast(error), Navigator.of(context).pop()}); } endCall() { closeRoute(); _liveCareProvider .endCall(widget.patientData, false, doctorprofile['DoctorID']) .then((result) { print(result); }).catchError((error) => {helpers.showErrorToast(error), Navigator.of(context).pop()}); } endCallWithCharge() { _liveCareProvider .endCallWithCharge(widget.patientData.vCID, doctorprofile['DoctorID']) .then((result) { closeRoute(); print('end callwith charge'); print(result); }).catchError((error) => {helpers.showErrorToast(error), Navigator.of(context).pop()}); } closeRoute() { Navigator.of(context).pop(); } }