live care done.

flutter_3.16.0_zoom
sultan khan 1 year ago
parent cc0450a188
commit f7e378ba4a

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 412 B

@ -0,0 +1,22 @@
export const icons = {
chatSend: require('./chat-send.png'),
defaultAvatar: require('./default-avatar.png'),
locked: require('./locked.png'),
more: require('./more.png'),
mute: require('./mute.png'),
muted: require('./muted.png'),
shareOn: require('./share-on.png'),
shareOff: require('./share-off.png'),
speakerOn: require('./speaker-on.png'),
speakerOff: require('./speaker-off.png'),
switchCamera: require('./switch-camera.png'),
hamburger: require('./hamburger.png'),
questionBalloon: require('./question-ballon.png'),
talking: require('./talking.png'),
unmute: require('./unmute.png'),
unlocked: require('./unlocked.png'),
videoOn: require('./video-on.png'),
videoOff: require('./video-off.png'),
};
export type IconTypes = keyof typeof icons;

Binary file not shown.

After

Width:  |  Height:  |  Size: 376 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 567 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 877 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 384 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 634 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

@ -6,10 +6,11 @@ const ONLY_LETTERS = "[a-zA-Z &'\"]";
const ONLY_DATE = "[0-9/]"; const ONLY_DATE = "[0-9/]";
// const BASE_URL_LIVE_CARE = 'https://livecare.hmg.com/'; // const BASE_URL_LIVE_CARE = 'https://livecare.hmg.com/';
const DOCTOR_ROTATION = 'https://doctorrota.hmg.com/'; const DOCTOR_ROTATION = 'https://doctorrota.hmg.com/';
const BASE_URL_LIVE_CARE = 'https://livecareuat.hmg.com/'; // const BASE_URL_LIVE_CARE = 'https://livecareuat.hmg.com/';
const BASE_URL = 'https://hmgwebservices.com/'; const BASE_URL_LIVE_CARE = 'https://uat.hmgwebservices.com/';
// const BASE_URL = 'https://hmgwebservices.com/';
// const BASE_URL = 'http://10.20.200.111:1010/'; // const BASE_URL = 'http://10.20.200.111:1010/';
// const BASE_URL = 'https://uat.hmgwebservices.com/'; const BASE_URL = 'https://uat.hmgwebservices.com/';
// const BASE_URL = 'https://webservices.hmg.com/'; // const BASE_URL = 'https://webservices.hmg.com/';

@ -40,7 +40,7 @@ class LiveCarePatientServices extends BaseService {
GET_PENDING_PATIENT_ER_FOR_DOCTOR_APP, GET_PENDING_PATIENT_ER_FOR_DOCTOR_APP,
onSuccess: (dynamic response, int statusCode) { onSuccess: (dynamic response, int statusCode) {
List<PatiantInformtion> localPatientList = []; List<PatiantInformtion> localPatientList = [];
_patientList =[];
response['List_PendingPatientList'].forEach((v) { response['List_PendingPatientList'].forEach((v) {
localPatientList.add(PatiantInformtion.fromJson(v)); localPatientList.add(PatiantInformtion.fromJson(v));
}); });

@ -269,4 +269,7 @@ class LiveCarePatientViewModel extends BaseViewModel {
setState(ViewState.Idle); setState(ViewState.Idle);
} }
} }
} }

@ -74,7 +74,7 @@ class _HomeScreenState extends State<HomeScreen> {
model.startHomeScreenServices(projectsProvider, authenticationViewModel).then((value) { model.startHomeScreenServices(projectsProvider, authenticationViewModel).then((value) {
if (model.radiologyCriticalFindingModel != null) { if (model.radiologyCriticalFindingModel != null) {
print("onModelReady radiologyCriticalFindingModel!!!"); print("onModelReady radiologyCriticalFindingModel!!!");
showRadiologyFindingDialog(model); // showRadiologyFindingDialog(model);
} else { } else {
print("onModelReady radiologyCriticalFindingModel EMPTYYYY!!!"); print("onModelReady radiologyCriticalFindingModel EMPTYYYY!!!");
} }
@ -107,22 +107,22 @@ class _HomeScreenState extends State<HomeScreen> {
Column(children: <Widget>[ Column(children: <Widget>[
//
InkWell(onTap: (){ // InkWell(onTap: (){
AppPermissionsUtils.requestVideoCallPermission( // AppPermissionsUtils.requestVideoCallPermission(
context: context, // context: context,
onTapGrant: () { // onTapGrant: () {
Navigator.pushNamed( // Navigator.pushNamed(
context, // context,
"zoom-call", // "zoom-call",
arguments: CallArguments("ZoomTestHMG", "123", "Doctor", "40", "0", true), // arguments: CallArguments("ZoomTestHMG", "123", "Doctor", "40", "0", true),
); // );
//
}); // });
//
}, // },
child: Text("Zoom Call"), // child: Text("Zoom Call"),
), // ),
ProfileWelcomeWidget( ProfileWelcomeWidget(
Row( Row(
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,

@ -34,9 +34,9 @@ class _ProgressNoteState extends State<DiagnosisScreen> {
{bool isLocalBusy = false}) async { {bool isLocalBusy = false}) async {
final routeArgs = ModalRoute.of(context)!.settings.arguments as Map; final routeArgs = ModalRoute.of(context)!.settings.arguments as Map;
PatiantInformtion patient = routeArgs['patient']; PatiantInformtion patient = routeArgs['patient'];
String type = await sharedPref.getString(SLECTED_PATIENT_TYPE); // String type = await sharedPref.getString(SLECTED_PATIENT_TYPE);
//
print(type); // print(type);
GetDiagnosisForInPatientRequestModel getDiagnosisForInPatientRequestModel = GetDiagnosisForInPatientRequestModel getDiagnosisForInPatientRequestModel =
GetDiagnosisForInPatientRequestModel( GetDiagnosisForInPatientRequestModel(
admissionNo: int.parse(patient.admissionNo!), admissionNo: int.parse(patient.admissionNo!),

@ -3,6 +3,7 @@ import 'dart:async';
import 'package:doctor_app_flutter/config/config.dart'; import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/config/size_config.dart'; import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/enum/view_state.dart'; import 'package:doctor_app_flutter/core/enum/view_state.dart';
import 'package:doctor_app_flutter/core/model/PatientRegistration/GetPatientInfoRequestModel.dart';
import 'package:doctor_app_flutter/core/model/SOAP/in_patient/post_episode_for_Inpatient_request_model.dart'; import 'package:doctor_app_flutter/core/model/SOAP/in_patient/post_episode_for_Inpatient_request_model.dart';
import 'package:doctor_app_flutter/core/model/SOAP/post_episode_req_model.dart'; import 'package:doctor_app_flutter/core/model/SOAP/post_episode_req_model.dart';
import 'package:doctor_app_flutter/core/model/patient/patiant_info_model.dart'; import 'package:doctor_app_flutter/core/model/patient/patiant_info_model.dart';
@ -21,8 +22,11 @@ import 'package:doctor_app_flutter/utils/translations_delegate_base_utils.dart';
import 'package:doctor_app_flutter/utils/utils.dart'; import 'package:doctor_app_flutter/utils/utils.dart';
import 'package:doctor_app_flutter/widgets/patients/profile/app_bar/patient-profile-header-new-design-app-bar.dart'; import 'package:doctor_app_flutter/widgets/patients/profile/app_bar/patient-profile-header-new-design-app-bar.dart';
import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/buttons/app_buttons_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/buttons/app_buttons_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/loader/gif_loader_dialog_utils.dart'; import 'package:doctor_app_flutter/widgets/shared/loader/gif_loader_dialog_utils.dart';
import 'package:doctor_app_flutter/widgets/shared/text_fields/app-textfield-custom.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import 'package:hexcolor/hexcolor.dart'; import 'package:hexcolor/hexcolor.dart';
@ -31,6 +35,7 @@ import 'package:quiver/async.dart';
import '../../../../locator.dart'; import '../../../../locator.dart';
import '../../../../routes.dart'; import '../../../../routes.dart';
import '../../../video_call_zoom/zoom_video_call.dart';
class PatientProfileScreen extends StatefulWidget { class PatientProfileScreen extends StatefulWidget {
@override @override
@ -59,7 +64,8 @@ class _PatientProfileScreenState extends State<PatientProfileScreen> with Single
late TabController _tabController; late TabController _tabController;
int index = 0; int index = 0;
int _activeTab = 0; int _activeTab = 0;
String noteValidation ="";
TextEditingController noteController = TextEditingController();
late StreamController<String> videoCallDurationStreamController; late StreamController<String> videoCallDurationStreamController;
late Stream<String> videoCallDurationStream; late Stream<String> videoCallDurationStream;
@ -356,18 +362,33 @@ class _PatientProfileScreenState extends State<PatientProfileScreen> with Single
Utils.showErrorToast(model.error); Utils.showErrorToast(model.error);
} else { } else {
await model.getDoctorProfile(); await model.getDoctorProfile();
patient.appointmentNo = int.parse(model.startCallRes!.appointmentNo.toString()); patient.appointmentNo = int.parse(model.startCallRes!.appointmentNo.toString());
patient.episodeNo = 0; patient.episodeNo = 0;
model.updateInCallPatient(patient: patient, appointmentNo: int.parse(model.startCallRes!.appointmentNo.toString())); model.updateInCallPatient(patient: patient, appointmentNo: int.parse(model.startCallRes!.appointmentNo.toString()));
setState(() { setState(() {
isCallStarted = true; isCallStarted = true;
}); });
GifLoaderDialogUtils.hideDialog(context); GifLoaderDialogUtils.hideDialog(context);
AppPermissionsUtils.requestVideoCallPermission( // AppPermissionsUtils.requestVideoCallPermission(
// context: context,
// onTapGrant: () {
// locator<VideoCallService>()
// .openVideo(model.startCallRes!, patient, model.startCallRes != null ? model.startCallRes!.isRecording! : true, callConnected, callDisconnected);
// });
// model.startCallRes!.openTokenID!
AppPermissionsUtils.requestVideoCallPermission(
context: context, context: context,
onTapGrant: () { onTapGrant: () {
locator<VideoCallService>() Navigator.pushNamed(
.openVideo(model.startCallRes!, patient, model.startCallRes != null ? model.startCallRes!.isRecording! : true, callConnected, callDisconnected); context,
"zoom-call",
arguments: CallArguments(model.startCallRes!.openSessionID!, "123", "doctor", "40", "0", true,1),
).then((completion) {
Future<void>.delayed(const Duration(seconds: 1))
.then((_) async {
_showEndCallPopup(context, model, patient, patient.vcId!);
});
});
}); });
} }
} }
@ -386,7 +407,65 @@ class _PatientProfileScreenState extends State<PatientProfileScreen> with Single
), ),
); );
} }
void _showEndCallPopup(BuildContext context,LiveCarePatientViewModel model, PatiantInformtion patient, int vcID) {
showDialog(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
return AlertDialog(
title: Text('Call Ended'),
content:SizedBox(
height: 150,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
AppTextFieldCustom(onChanged: (val){}, onFieldSubmitted: (){}, hintText: "Please enter Notes", height: 100, validationError: noteValidation, controller: noteController, ),
],)),
actions: [
AppButton(
onPressed: () {
_transferToAdmin(model, patient, vcID);
},
title: 'Transfer to Admin',
color: Colors.grey,
fontColor: Colors.white,
fontSize: 14,
),
SizedBox(height: 15,),
AppButton(
onPressed: () {
_endWithCharge(model, patient, vcID);
},
title: 'End with Charge',
color: Colors.red,
fontColor: Colors.white,
fontSize: 14,
)
],
);
},
);
}
_transferToAdmin(LiveCarePatientViewModel model, PatiantInformtion patient, int vcID){
if(noteController.text.isEmpty){
noteValidation ='Please Enter Notes';
setState(() {
});
}else {
model.transferToAdmin(vcID,noteController.text );
Navigator.of(context).pop();
}
}
_endWithCharge(LiveCarePatientViewModel model, PatiantInformtion patient, int vcID){
model.endCallWithCharge(vcID, true);
Navigator.of(context).pop();
}
createEpisode({required PatiantInformtion patient, required SOAPViewModel model}) async { createEpisode({required PatiantInformtion patient, required SOAPViewModel model}) async {
await locator<AnalyticsService>().logEvent( await locator<AnalyticsService>().logEvent(
eventCategory: "Patient Profile", eventCategory: "Patient Profile",

@ -28,7 +28,7 @@ class NewPrescriptionsPage extends StatelessWidget {
return BaseView<PrescriptionViewModel>( return BaseView<PrescriptionViewModel>(
onModelReady: (model) async { onModelReady: (model) async {
await model.getPrescriptionListNew( await model.getPrescriptionListNew(
mrn: patient.patientMRN, appNo: patient.appointmentNo); mrn: patient.patientMRN, appNo: patient.appointmentNo??0);
await model.isPrincipalCovered(patient: patient); await model.isPrincipalCovered(patient: patient);
}, },
builder: (_, model, w) => AppScaffold( builder: (_, model, w) => AppScaffold(

@ -182,7 +182,7 @@ class VideoView extends FlutterZoomView.ZoomView {
child: Image( child: Image(
height: 12, height: 12,
width: 12, width: 12,
image: isMuted.value ? const AssetImage("assets/imgaes/zoom/muted@2x.png") : const AssetImage("assets/imgaes/zoom/talking@2x.png"), image: isMuted.value ? const AssetImage("assets/images/zoom/muted@2x.png") : const AssetImage("assets/images/zoom/talking@2x.png"),
fit: BoxFit.cover, fit: BoxFit.cover,
), ),
) )
@ -213,7 +213,7 @@ class VideoView extends FlutterZoomView.ZoomView {
child: const Image( child: const Image(
height: 60, height: 60,
width: 60, width: 60,
image: AssetImage("assets/imgaes/zoom/default-avatar.png"), image: AssetImage("assets/images/zoom/default-avatar.png"),
)), )),
), ),
Align( Align(
@ -245,7 +245,7 @@ class VideoView extends FlutterZoomView.ZoomView {
child: Image( child: Image(
height: 12, height: 12,
width: 12, width: 12,
image: isMuted.value ? const AssetImage("assets/imgaes/zoom/muted@2x.png") : const AssetImage("assets/imgaes/zoom/talking@2x.png"), image: isMuted.value ? const AssetImage("assets/images/zoom/muted@2x.png") : const AssetImage("assets/images/zoom/talking@2x.png"),
fit: BoxFit.cover, fit: BoxFit.cover,
), ),
), ),

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save