Merge branch 'soap-objective-feature-re-design' into 'development'

Soap objective feature re design

See merge request Cloud_Solution/doctor_app_flutter!454
merge-requests/457/merge
Mohammad Aljammal 5 years ago
commit f6432d5f5d

@ -837,5 +837,10 @@ const Map<String, Map<String, String>> localizedValues = {
"enter_credentials": { "enter_credentials": {
"en": "Enter the user credentials below", "en": "Enter the user credentials below",
"ar": "أدخل بيانات اعتماد المستخدم أدناه" "ar": "أدخل بيانات اعتماد المستخدم أدناه"
},
"step": {
"en": "Step",
"ar": "خطوة"
}, },
}; };

@ -161,9 +161,12 @@ class AdmissionRequestService extends LookupService {
); );
} }
Future getDietTypesList() async { Future getDietTypesList(int patientMrn) async {
hasError = false; hasError = false;
Map<String, dynamic> body = Map();
body['patientMRN'] = patientMrn;
await baseAppClient.post( await baseAppClient.post(
GET_DIET_TYPES, GET_DIET_TYPES,
onSuccess: (dynamic response, int statusCode) { onSuccess: (dynamic response, int statusCode) {
@ -180,7 +183,7 @@ class AdmissionRequestService extends LookupService {
hasError = true; hasError = true;
super.error = error; super.error = error;
}, },
body: Map(), body: body,
); );
} }

@ -101,12 +101,14 @@ class PatientReferralService extends LookupService {
); );
} }
Future getDoctorsList(String clinicId) async { Future getDoctorsList(String clinicId, int branchId) async {
hasError = false; hasError = false;
DoctorsByClinicIdRequest _doctorsByClinicIdRequest = DoctorsByClinicIdRequest _doctorsByClinicIdRequest =
DoctorsByClinicIdRequest(); DoctorsByClinicIdRequest();
_doctorsByClinicIdRequest.projectID = branchId;
_doctorsByClinicIdRequest.clinicID = clinicId; _doctorsByClinicIdRequest.clinicID = clinicId;
await baseAppClient.post( await baseAppClient.post(
PATIENT_GET_DOCTOR_BY_CLINIC_URL, PATIENT_GET_DOCTOR_BY_CLINIC_URL,
onSuccess: (dynamic response, int statusCode) { onSuccess: (dynamic response, int statusCode) {

@ -114,9 +114,9 @@ class AdmissionRequestViewModel extends BaseViewModel{
} }
} }
Future getDietTypes() async { Future getDietTypes(int patientMrn) async {
setState(ViewState.BusyLocal); setState(ViewState.BusyLocal);
await _admissionRequestService.getDietTypesList(); await _admissionRequestService.getDietTypesList(patientMrn);
if (_admissionRequestService.hasError) { if (_admissionRequestService.hasError) {
error = _admissionRequestService.error; error = _admissionRequestService.error;
setState(ViewState.ErrorLocal); setState(ViewState.ErrorLocal);

@ -82,9 +82,9 @@ class PatientReferralViewModel extends BaseViewModel {
setState(ViewState.Idle); setState(ViewState.Idle);
} }
Future getClinicDoctors(String clinicId) async { Future getClinicDoctors(String clinicId, int branchId) async {
setState(ViewState.BusyLocal); setState(ViewState.BusyLocal);
await _referralPatientService.getDoctorsList(clinicId); await _referralPatientService.getDoctorsList(clinicId, branchId);
if (_referralPatientService.hasError) { if (_referralPatientService.hasError) {
error = _referralPatientService.error; error = _referralPatientService.error;
setState(ViewState.ErrorLocal); setState(ViewState.ErrorLocal);

@ -32,6 +32,9 @@ class _UcafDetailScreenState extends State<UcafDetailScreen> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
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 patientType = routeArgs['patientType'];
String arrivalType = routeArgs['arrivalType'];
final screenSize = MediaQuery.of(context).size; final screenSize = MediaQuery.of(context).size;
return BaseView<UcafViewModel>( return BaseView<UcafViewModel>(

@ -3,9 +3,12 @@ import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/viewModel/patient-ucaf-viewmodel.dart'; import 'package:doctor_app_flutter/core/viewModel/patient-ucaf-viewmodel.dart';
import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart'; import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart'; import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/screens/patients/profile/UCAF/page-stepper-widget.dart';
import 'package:doctor_app_flutter/util/helpers.dart'; import 'package:doctor_app_flutter/util/helpers.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/patients/profile/PatientHeaderWidgetNoAvatar.dart'; import 'package:doctor_app_flutter/widgets/patients/profile/PatientHeaderWidgetNoAvatar.dart';
import 'package:doctor_app_flutter/widgets/patients/profile/patient-profile-header-new-design-app-bar.dart';
import 'package:doctor_app_flutter/widgets/shared/app-textfield-custom.dart';
import 'package:doctor_app_flutter/widgets/shared/app_buttons_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_buttons_widget.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/app_texts_widget.dart';
@ -53,337 +56,385 @@ class _UCAFInputScreenState extends State<UCAFInputScreen> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
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 patientType = routeArgs['patientType'];
String arrivalType = routeArgs['arrivalType'];
final screenSize = MediaQuery.of(context).size; final screenSize = MediaQuery.of(context).size;
return BaseView<UcafViewModel>( return BaseView<UcafViewModel>(
onModelReady: (model) => model.getUCAFData(patient), onModelReady: (model) => model.getUCAFData(patient),
builder: (_, model, w) => AppScaffold( builder: (_, model, w) => AppScaffold(
baseViewModel: model, baseViewModel: model,
isShowAppBar: true,
appBar: PatientProfileHeaderNewDesignAppBar(
patient, patientType, arrivalType),
appBarTitle: TranslationBase.of(context).ucaf, appBarTitle: TranslationBase.of(context).ucaf,
body: model.patientVitalSigns != null && body: model.patientVitalSigns != null &&
model.patientChiefComplaintList != null && model.patientChiefComplaintList != null &&
model.patientChiefComplaintList.length > 0 model.patientChiefComplaintList.length > 0
? SingleChildScrollView( ? Column(
child: Column( children: [
children: [ Expanded(
PatientHeaderWidgetNoAvatar(patient), child: SingleChildScrollView(
Container(
margin:
EdgeInsets.symmetric(vertical: 16, horizontal: 16),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
CheckboxListTile( // PatientHeaderWidgetNoAvatar(patient),
title: AppText( Container(
TranslationBase.of(context).inPatient, margin: EdgeInsets.all(16.0),
fontWeight: FontWeight.bold, child: Column(
fontSize: SizeConfig.textMultiplier * 2.1, crossAxisAlignment: CrossAxisAlignment.start,
children: [
AppText(
"${TranslationBase.of(context).patient}",
fontFamily: 'Poppins',
fontSize: SizeConfig.textMultiplier * 1.6,
fontWeight: FontWeight.w600,
),
AppText(
"${TranslationBase.of(context).ucaf}",
fontFamily: 'Poppins',
fontSize: SizeConfig.textMultiplier * 3,
fontWeight: FontWeight.bold,
)
],
), ),
value: _inPatient,
onChanged: (newValue) {
setState(() {
_inPatient = newValue;
});
},
controlAffinity: ListTileControlAffinity.leading,
contentPadding: EdgeInsets.all(0),
), ),
CheckboxListTile( PageStepperWidget(
title: AppText( stepsCount: 2,
TranslationBase.of(context).emergencyCase, currentStepIndex: 1,
fontWeight: FontWeight.bold, screenSize: screenSize,
fontSize: SizeConfig.textMultiplier * 2.1,
),
value: _emergencyCase,
onChanged: (newValue) {
setState(() {
_emergencyCase = newValue;
});
},
controlAffinity: ListTileControlAffinity.leading,
contentPadding: EdgeInsets.all(0),
), ),
Container( Container(
height: screenSize.height * 0.070, margin: EdgeInsets.symmetric(
child: TextField( vertical: 0, horizontal: 16),
decoration: Helpers.textFieldSelectorDecoration( child: Column(
TranslationBase.of(context) crossAxisAlignment: CrossAxisAlignment.start,
.durationOfIllness, children: [
null, CheckboxListTile(
false), title: AppText(
enabled: true, TranslationBase.of(context).inPatient,
controller: _durationOfIllnessController, fontWeight: FontWeight.normal,
inputFormatters: [ fontSize: SizeConfig.textMultiplier * 2.1,
FilteringTextInputFormatter.allow(
RegExp(ONLY_NUMBERS))
],
keyboardType: TextInputType.number,
)),
SizedBox(
height: 10,
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Row(
children: [
AppText(
"BP (H/L)",
fontSize: SizeConfig.textMultiplier * 1.8,
color: Colors.black,
fontWeight: FontWeight.w700,
),
SizedBox(
width: 8,
), ),
AppText( value: _inPatient,
"${model.patientVitalSigns.bloodPressureHigher}/${model.patientVitalSigns.bloodPressureLower}", onChanged: (newValue) {
fontSize: SizeConfig.textMultiplier * 2, setState(() {
color: Colors.grey.shade800, _inPatient = newValue;
});
},
controlAffinity:
ListTileControlAffinity.leading,
contentPadding: EdgeInsets.all(0),
),
CheckboxListTile(
title: AppText(
TranslationBase.of(context).emergencyCase,
fontWeight: FontWeight.normal, fontWeight: FontWeight.normal,
fontSize: SizeConfig.textMultiplier * 2.1,
), ),
], value: _emergencyCase,
), onChanged: (newValue) {
SizedBox( setState(() {
width: 4, _emergencyCase = newValue;
), });
Expanded( },
child: Row( controlAffinity:
ListTileControlAffinity.leading,
contentPadding: EdgeInsets.all(0),
),
AppTextFieldCustom(
height: screenSize.height * 0.075,
hintText:
TranslationBase.of(context).durationOfIllness,
dropDownText: "3",
inputType: TextInputType.number,
inputFormatters: [
FilteringTextInputFormatter.allow(
RegExp(ONLY_NUMBERS))
],
),
SizedBox(
height: 16,
),
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [ children: [
AppText( Row(
"${TranslationBase.of(context).temperature}", children: [
fontSize: SizeConfig.textMultiplier * 1.8, AppText(
color: Colors.black, "BP (H/L)",
fontWeight: FontWeight.w700, fontSize:
SizeConfig.textMultiplier * 1.8,
color: Colors.black,
fontWeight: FontWeight.normal,
),
SizedBox(
width: 8,
),
AppText(
"${model.patientVitalSigns.bloodPressureHigher}/${model.patientVitalSigns.bloodPressureLower}",
fontSize:
SizeConfig.textMultiplier * 2,
color: Colors.grey.shade800,
fontWeight: FontWeight.w700,
),
],
), ),
SizedBox( SizedBox(
width: 8, width: 4,
), ),
Expanded( Expanded(
child: AppText( child: Row(
"${model.patientVitalSigns.temperatureCelcius}(C), ${(model.patientVitalSigns.temperatureCelcius * (9 / 5) + 32).toStringAsFixed(2)}(F)", children: [
fontSize: SizeConfig.textMultiplier * 2, AppText(
color: Colors.grey.shade800, "${TranslationBase.of(context).temperature}",
fontWeight: FontWeight.normal, fontSize:
SizeConfig.textMultiplier * 1.8,
color: Colors.black,
fontWeight: FontWeight.normal,
),
SizedBox(
width: 8,
),
Expanded(
child: AppText(
"${model.patientVitalSigns.temperatureCelcius}(C), ${(model.patientVitalSigns.temperatureCelcius * (9 / 5) + 32).toStringAsFixed(2)}(F)",
fontSize:
SizeConfig.textMultiplier * 2,
color: Colors.grey.shade800,
fontWeight: FontWeight.w700,
),
),
],
), ),
), ),
], ],
), ),
), SizedBox(
], height: 4,
), ),
SizedBox( Row(
height: 4, mainAxisAlignment:
), MainAxisAlignment.spaceBetween,
Row( children: [
mainAxisAlignment: MainAxisAlignment.spaceBetween, Row(
children: [ children: [
Row( AppText(
children: [ "${TranslationBase.of(context).pulseBeats} :",
AppText( fontSize:
"${TranslationBase.of(context).pulseBeats} :", SizeConfig.textMultiplier * 1.8,
fontSize: SizeConfig.textMultiplier * 1.8, color: Colors.black,
color: Colors.black, fontWeight: FontWeight.normal,
fontWeight: FontWeight.w700, ),
), SizedBox(
SizedBox( width: 8,
width: 8, ),
), AppText(
AppText( "${model.patientVitalSigns.pulseBeatPerMinute}",
"${model.patientVitalSigns.pulseBeatPerMinute}", fontSize:
fontSize: SizeConfig.textMultiplier * 2, SizeConfig.textMultiplier * 2,
color: Colors.grey.shade800, color: Colors.grey.shade800,
fontWeight: FontWeight.normal, fontWeight: FontWeight.w700,
), ),
], ],
),
],
),
SizedBox(
height: 16,
),
AppText(
TranslationBase.of(context)
.chiefComplaintsAndSymptoms,
fontWeight: FontWeight.bold,
fontSize: SizeConfig.textMultiplier * 2.5,
),
SizedBox(
height: 8,
),
AppText(
TranslationBase.of(context)
.patientFeelsPainInHisBackAndCough,
fontWeight: FontWeight.normal,
fontSize: SizeConfig.textMultiplier * 2.0,
),
SizedBox(
height: 8,
),
Container(
child: TextField(
decoration: Helpers.textFieldSelectorDecoration(
TranslationBase.of(context)
.additionalTextComplaints,
helpers.parseHtmlString(model
.patientChiefComplaintList[0]
.chiefComplaint),
false),
enabled: false,
controller: _additionalComplaintsController,
keyboardType: TextInputType.multiline,
minLines: 1,
maxLines: 20,
)),
SizedBox(
height: 16,
),
AppText(
TranslationBase.of(context).otherConditions,
fontWeight: FontWeight.bold,
fontSize: SizeConfig.textMultiplier * 2.0,
),
...List.generate(
conditionsData.length,
(index) => CheckboxListTile(
title: AppText(
conditionsData[index]['name'],
fontWeight: FontWeight.bold,
fontSize: SizeConfig.textMultiplier * 2.1,
), ),
value: conditionsData[index]['isChecked'], ],
onChanged: (newValue) { ),
setState(() { SizedBox(
conditionsData[index]['isChecked'] = height: 16,
newValue; ),
}); AppText(
}, TranslationBase.of(context).chiefComplaintsAndSymptoms,
controlAffinity: fontFamily: 'Poppins',
ListTileControlAffinity.leading, fontSize: SizeConfig.textMultiplier * 2.1,
contentPadding: EdgeInsets.all(0), fontWeight: FontWeight.w700,
)), ),
SizedBox( SizedBox(
height: 8, height: 4,
), ),
Container( AppText(
height: screenSize.height * 0.070, TranslationBase.of(context)
child: TextField( .patientFeelsPainInHisBackAndCough,
decoration: Helpers.textFieldSelectorDecoration( fontFamily: 'Poppins',
TranslationBase.of(context).other, fontWeight: FontWeight.normal,
null, fontSize: SizeConfig.textMultiplier * 1.8,
false), ),
enabled: true, SizedBox(
controller: _otherController, height: 8,
keyboardType: TextInputType.text, ),
)), AppTextFieldCustom(
SizedBox( hintText: TranslationBase.of(context).instruction,
height: 8, dropDownText: helpers.parseHtmlString(model
), .patientChiefComplaintList[0]
Container( .chiefComplaint),
height: screenSize.height * 0.070, controller: _additionalComplaintsController,
child: TextField( inputType: TextInputType.multiline,
decoration: Helpers.textFieldSelectorDecoration( enabled: false,
TranslationBase.of(context).how, minLines: 1,
null, maxLines: 20,
false), ),
enabled: true, SizedBox(
controller: _howController, height: 16,
keyboardType: TextInputType.text, ),
)), AppText(
SizedBox( TranslationBase.of(context).otherConditions,
height: 8, fontWeight: FontWeight.bold,
), fontSize: SizeConfig.textMultiplier * 2.0,
Row( ),
children: [ ...List.generate(
Expanded( conditionsData.length,
child: Container( (index) => CheckboxListTile(
title: AppText(
conditionsData[index]['name'],
fontWeight: FontWeight.bold,
fontSize:
SizeConfig.textMultiplier * 2.1,
),
value: conditionsData[index]
['isChecked'],
onChanged: (newValue) {
setState(() {
conditionsData[index]
['isChecked'] = newValue;
});
},
controlAffinity:
ListTileControlAffinity.leading,
contentPadding: EdgeInsets.all(0),
)),
SizedBox(
height: 8,
),
Container(
height: screenSize.height * 0.070, height: screenSize.height * 0.070,
child: TextField( child: TextField(
decoration: decoration:
Helpers.textFieldSelectorDecoration( Helpers.textFieldSelectorDecoration(
TranslationBase.of(context).when, TranslationBase.of(context).other,
null, null,
false), false),
enabled: true, enabled: true,
controller: _whenController, controller: _otherController,
keyboardType: TextInputType.text, keyboardType: TextInputType.text,
)), )),
), SizedBox(
SizedBox( height: 8,
width: 4, ),
), Container(
Expanded(
child: Container(
height: screenSize.height * 0.070, height: screenSize.height * 0.070,
child: TextField( child: TextField(
decoration: decoration:
Helpers.textFieldSelectorDecoration( Helpers.textFieldSelectorDecoration(
TranslationBase.of(context).where, TranslationBase.of(context).how,
null, null,
false), false),
enabled: true, enabled: true,
controller: _whereController, controller: _howController,
keyboardType: TextInputType.text, keyboardType: TextInputType.text,
)), )),
), SizedBox(
], height: 8,
), ),
SizedBox( Row(
height: 8, children: [
), Expanded(
Container( child: Container(
child: TextField( height: screenSize.height * 0.070,
decoration: Helpers.textFieldSelectorDecoration( child: TextField(
TranslationBase.of(context) decoration: Helpers
.specifyPossibleLineManagement, .textFieldSelectorDecoration(
null, TranslationBase.of(context)
false), .when,
enabled: true, null,
controller: _managementsLineController, false),
keyboardType: TextInputType.text, enabled: true,
minLines: 4, controller: _whenController,
maxLines: 6, keyboardType: TextInputType.text,
)), )),
SizedBox( ),
height: 16, SizedBox(
), width: 4,
AppText( ),
TranslationBase.of(context).significantSigns, Expanded(
fontWeight: FontWeight.bold, child: Container(
fontSize: SizeConfig.textMultiplier * 2.0, height: screenSize.height * 0.070,
), child: TextField(
SizedBox( decoration: Helpers
height: 8, .textFieldSelectorDecoration(
), TranslationBase.of(context)
Container( .where,
child: TextField( null,
decoration: Helpers.textFieldSelectorDecoration( false),
TranslationBase.of(context).backAbdomen, enabled: true,
null, controller: _whereController,
false), keyboardType: TextInputType.text,
enabled: true, )),
controller: _signsController, ),
keyboardType: TextInputType.multiline, ],
minLines: null, ),
maxLines: null, SizedBox(
)), height: 8,
SizedBox( ),
height: 16, Container(
), child: TextField(
AppButton( decoration:
title: TranslationBase.of(context).next, Helpers.textFieldSelectorDecoration(
color: HexColor("#B8382B"), TranslationBase.of(context)
onPressed: () { .specifyPossibleLineManagement,
Navigator.of(context).pushNamed( null,
PATIENT_UCAF_DETAIL, false),
arguments: {'patient': patient}); enabled: true,
}, controller: _managementsLineController,
keyboardType: TextInputType.text,
minLines: 4,
maxLines: 6,
)),
SizedBox(
height: 16,
),
AppText(
TranslationBase.of(context).significantSigns,
fontWeight: FontWeight.bold,
fontSize: SizeConfig.textMultiplier * 2.0,
),
SizedBox(
height: 8,
),
Container(
child: TextField(
decoration:
Helpers.textFieldSelectorDecoration(
TranslationBase.of(context)
.backAbdomen,
null,
false),
enabled: true,
controller: _signsController,
keyboardType: TextInputType.multiline,
minLines: null,
maxLines: null,
)),
],
),
), ),
], ],
), ),
), ),
], ),
), Container(
margin: EdgeInsets.symmetric(horizontal: 16, vertical: 8),
child: AppButton(
title: TranslationBase.of(context).next,
color: HexColor("#D02127"),
onPressed: () {
Navigator.of(context).pushNamed(PATIENT_UCAF_DETAIL,
arguments: {'patient': patient});
},
),
),
],
) )
: Container( : Container(
child: Center( child: Center(

@ -0,0 +1,145 @@
import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart';
class PageStepperWidget extends StatelessWidget {
final int stepsCount;
final int currentStepIndex;
final Size screenSize;
PageStepperWidget({this.stepsCount, this.currentStepIndex, this.screenSize});
@override
Widget build(BuildContext context) {
double dividerWidth = (screenSize.width / stepsCount) - (10 * stepsCount);
return Container(
margin: EdgeInsets.symmetric(vertical: 16.0, horizontal: 16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
for (int i = 1; i <= stepsCount; i++)
if (i == currentStepIndex)
StepWidget(i, true, i == stepsCount, i < currentStepIndex,
dividerWidth)
else
StepWidget(i, false, i == stepsCount, i < currentStepIndex,
dividerWidth)
],
)
],
),
);
}
}
class StepWidget extends StatelessWidget {
final int index;
final bool isInProgress;
final bool isFinalStep;
final bool isStepFinish;
final double dividerWidth;
StepWidget(this.index, this.isInProgress, this.isFinalStep, this.isStepFinish,
this.dividerWidth);
@override
Widget build(BuildContext context) {
StepStatus status;
if (isInProgress) {
status = StepStatus.InProgress;
} else {
if(isStepFinish){
status = StepStatus.Completed;
}else {
status = StepStatus.Locked;
}
}
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
Container(
padding: EdgeInsets.all(0.0),
margin: EdgeInsets.symmetric(horizontal: 1),
width: 25,
height: 25,
decoration: BoxDecoration(
color: isInProgress ? Color(0xFFCC9B14) : Color(0xFFC9C9C9),
shape: BoxShape.circle,
border: Border.all(
color: isInProgress ? Color(0xFFCC9B14) : Color(0xFFC9C9C9),
width: 1),
),
child: Center(
child: Icon(
Icons.check,
size: 20,
color: status == StepStatus.InProgress ? Colors.white : status == StepStatus.Locked ? Colors.grey.shade800 : Color(0xFF359846),
)),
),
if (!isFinalStep)
Container(
width: dividerWidth,
height: 2,
color: Colors.grey,
),
],
),
SizedBox(
height: 8,
),
AppText(
"${TranslationBase.of(context).step} $index",
fontWeight: FontWeight.bold,
color: status == StepStatus.InProgress ? Colors.black : status == StepStatus.Locked ? Colors.grey : Color(0xFF359846),
fontFamily: 'Poppins',
fontSize: SizeConfig.textMultiplier * 1.6,
),
Container(
margin: EdgeInsets.symmetric(vertical: 4),
padding: EdgeInsets.symmetric(horizontal: 4, vertical: 2),
decoration: BoxDecoration(
color: status == StepStatus.InProgress
? Color(0xFFF1E9D3)
: status == StepStatus.Locked
? Color(0xFFD8E8DB)
: Color(0xFFCCCCCC),
borderRadius: BorderRadius.all(
Radius.circular(8.0),
),
border: Border.all(color: HexColor('#707070'), width: 0.30),
),
child: AppText(
status == StepStatus.InProgress
? "inProgress"
: status == StepStatus.Locked
? "Locked"
: "Completed",
fontWeight: FontWeight.bold,
textAlign: TextAlign.center,
fontFamily: 'Poppins',
fontSize: SizeConfig.textMultiplier * 1.4,
color: status == StepStatus.InProgress
? Color(0xFFCC9B14)
: status == StepStatus.Locked
? Color(0xFF969696)
: Color(0xFF359846),
),
)
],
);
}
}
enum StepStatus {
InProgress,
Locked,
Completed,
}

@ -9,6 +9,7 @@ import 'package:doctor_app_flutter/util/dr_app_toast_msg.dart';
import 'package:doctor_app_flutter/util/helpers.dart'; import 'package:doctor_app_flutter/util/helpers.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/patients/profile/patient-page-header-widget.dart'; import 'package:doctor_app_flutter/widgets/patients/profile/patient-page-header-widget.dart';
import 'package:doctor_app_flutter/widgets/patients/profile/patient-profile-header-new-design-app-bar.dart';
import 'package:doctor_app_flutter/widgets/patients/profile/patient-profile-header-new-design.dart'; import 'package:doctor_app_flutter/widgets/patients/profile/patient-profile-header-new-design.dart';
import 'package:doctor_app_flutter/widgets/shared/app-textfield-custom.dart'; import 'package:doctor_app_flutter/widgets/shared/app-textfield-custom.dart';
import 'package:doctor_app_flutter/widgets/shared/app_buttons_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_buttons_widget.dart';
@ -55,7 +56,9 @@ class _AdmissionRequestThirdScreenState
return BaseView<AdmissionRequestViewModel>( return BaseView<AdmissionRequestViewModel>(
builder: (_, model, w) => AppScaffold( builder: (_, model, w) => AppScaffold(
baseViewModel: model, baseViewModel: model,
isShowAppBar: false, isShowAppBar: true,
appBar: PatientProfileHeaderNewDesignAppBar(
patient, patientType, arrivalType),
appBarTitle: TranslationBase.of(context).admissionRequest, appBarTitle: TranslationBase.of(context).admissionRequest,
body: GestureDetector( body: GestureDetector(
onTap: () { onTap: () {
@ -72,9 +75,8 @@ class _AdmissionRequestThirdScreenState
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
// PatientPageHeaderWidget(patient), // PatientProfileHeaderNewDesign(
PatientProfileHeaderNewDesign( // patient, patientType, arrivalType),
patient, patientType, arrivalType),
Container( Container(
margin: EdgeInsets.all(16.0), margin: EdgeInsets.all(16.0),
child: Column( child: Column(
@ -220,23 +222,24 @@ class _AdmissionRequestThirdScreenState
SizedBox( SizedBox(
height: 10, height: 10,
), ),
CheckboxListTile( if(patient.gender != 1)
title: AppText( CheckboxListTile(
TranslationBase.of(context).patientPregnant, title: AppText(
fontWeight: FontWeight.normal, TranslationBase.of(context).patientPregnant,
fontFamily: 'Poppins', fontWeight: FontWeight.normal,
fontSize: SizeConfig.textMultiplier * 2.0, fontFamily: 'Poppins',
fontSize: SizeConfig.textMultiplier * 2.0,
),
value: _patientPregnant,
activeColor: HexColor("#D02127"),
onChanged: (newValue) {
setState(() {
_patientPregnant = newValue;
});
},
controlAffinity: ListTileControlAffinity.leading,
contentPadding: EdgeInsets.all(0),
), ),
value: _patientPregnant,
activeColor: HexColor("#D02127"),
onChanged: (newValue) {
setState(() {
_patientPregnant = newValue;
});
},
controlAffinity: ListTileControlAffinity.leading,
contentPadding: EdgeInsets.all(0),
),
CheckboxListTile( CheckboxListTile(
title: AppText( title: AppText(
TranslationBase.of(context).isSickLeaveRequired, TranslationBase.of(context).isSickLeaveRequired,
@ -287,7 +290,7 @@ class _AdmissionRequestThirdScreenState
: () async { : () async {
GifLoaderDialogUtils.showMyDialog( GifLoaderDialogUtils.showMyDialog(
context); context);
await model.getDietTypes().then((_) => await model.getDietTypes(patient.patientId).then((_) =>
GifLoaderDialogUtils.hideDialog( GifLoaderDialogUtils.hideDialog(
context)); context));
if (model.state == ViewState.Idle && if (model.state == ViewState.Idle &&

@ -11,6 +11,7 @@ import 'package:doctor_app_flutter/util/dr_app_toast_msg.dart';
import 'package:doctor_app_flutter/util/helpers.dart'; import 'package:doctor_app_flutter/util/helpers.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/patients/profile/patient-page-header-widget.dart'; import 'package:doctor_app_flutter/widgets/patients/profile/patient-page-header-widget.dart';
import 'package:doctor_app_flutter/widgets/patients/profile/patient-profile-header-new-design-app-bar.dart';
import 'package:doctor_app_flutter/widgets/patients/profile/patient-profile-header-new-design.dart'; import 'package:doctor_app_flutter/widgets/patients/profile/patient-profile-header-new-design.dart';
import 'package:doctor_app_flutter/widgets/shared/app-textfield-custom.dart'; import 'package:doctor_app_flutter/widgets/shared/app-textfield-custom.dart';
import 'package:doctor_app_flutter/widgets/shared/app_buttons_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_buttons_widget.dart';
@ -51,7 +52,9 @@ class _AdmissionRequestThirdScreenState
return BaseView<AdmissionRequestViewModel>( return BaseView<AdmissionRequestViewModel>(
builder: (_, model, w) => AppScaffold( builder: (_, model, w) => AppScaffold(
baseViewModel: model, baseViewModel: model,
isShowAppBar: false, isShowAppBar: true,
appBar: PatientProfileHeaderNewDesignAppBar(
patient, patientType, arrivalType),
appBarTitle: TranslationBase.of(context).admissionRequest, appBarTitle: TranslationBase.of(context).admissionRequest,
body: GestureDetector( body: GestureDetector(
onTap: () { onTap: () {
@ -67,8 +70,6 @@ class _AdmissionRequestThirdScreenState
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
PatientProfileHeaderNewDesign(
patient, patientType, arrivalType),
Container( Container(
margin: EdgeInsets.all(16.0), margin: EdgeInsets.all(16.0),
child: Column( child: Column(

@ -12,6 +12,7 @@ import 'package:doctor_app_flutter/util/dr_app_toast_msg.dart';
import 'package:doctor_app_flutter/util/helpers.dart'; import 'package:doctor_app_flutter/util/helpers.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/patients/profile/patient-page-header-widget.dart'; import 'package:doctor_app_flutter/widgets/patients/profile/patient-page-header-widget.dart';
import 'package:doctor_app_flutter/widgets/patients/profile/patient-profile-header-new-design-app-bar.dart';
import 'package:doctor_app_flutter/widgets/patients/profile/patient-profile-header-new-design.dart'; import 'package:doctor_app_flutter/widgets/patients/profile/patient-profile-header-new-design.dart';
import 'package:doctor_app_flutter/widgets/shared/app-textfield-custom.dart'; import 'package:doctor_app_flutter/widgets/shared/app-textfield-custom.dart';
import 'package:doctor_app_flutter/widgets/shared/app_buttons_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_buttons_widget.dart';
@ -63,7 +64,9 @@ class _AdmissionRequestSecondScreenState
return BaseView<AdmissionRequestViewModel>( return BaseView<AdmissionRequestViewModel>(
builder: (_, model, w) => AppScaffold( builder: (_, model, w) => AppScaffold(
baseViewModel: model, baseViewModel: model,
isShowAppBar: false, isShowAppBar: true,
appBar: PatientProfileHeaderNewDesignAppBar(
patient, patientType, arrivalType),
appBarTitle: TranslationBase.of(context).admissionRequest, appBarTitle: TranslationBase.of(context).admissionRequest,
body: GestureDetector( body: GestureDetector(
onTap: () { onTap: () {
@ -79,8 +82,8 @@ class _AdmissionRequestSecondScreenState
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
PatientProfileHeaderNewDesign( // PatientProfileHeaderNewDesign(
patient, patientType, arrivalType), // patient, patientType, arrivalType),
Container( Container(
margin: EdgeInsets.all(16.0), margin: EdgeInsets.all(16.0),
child: Column( child: Column(

@ -303,7 +303,7 @@ class _PatientMakeReferralScreenState extends State<PatientMakeReferralScreen> {
GifLoaderDialogUtils.showMyDialog(context); GifLoaderDialogUtils.showMyDialog(context);
await model await model
.getClinicDoctors( .getClinicDoctors(
_selectedClinic['ClinicID'].toString()) _selectedClinic['ClinicID'].toString(), _selectedBranch['facilityId'])
.then((_) => .then((_) =>
GifLoaderDialogUtils.hideDialog(context)); GifLoaderDialogUtils.hideDialog(context));
if (model.state == ViewState.ErrorLocal) { if (model.state == ViewState.ErrorLocal) {

@ -1209,6 +1209,9 @@ class TranslationBase {
localizedValues['typeHereToReply'][locale.languageCode]; localizedValues['typeHereToReply'][locale.languageCode];
String get searchHere => localizedValues['searchHere'][locale.languageCode]; String get searchHere => localizedValues['searchHere'][locale.languageCode];
String get remove => localizedValues['remove'][locale.languageCode]; String get remove => localizedValues['remove'][locale.languageCode];
String get step => localizedValues['step'][locale.languageCode];
String get noSickLeave => localizedValues['no-sickleve'][locale.languageCode]; String get noSickLeave => localizedValues['no-sickleve'][locale.languageCode];
String get changeOfSchedule => String get changeOfSchedule =>
localizedValues['changeOfSchedule'][locale.languageCode]; localizedValues['changeOfSchedule'][locale.languageCode];

@ -15,9 +15,10 @@ class PatientProfileHeaderNewDesignAppBar extends StatelessWidget
final PatiantInformtion patient; final PatiantInformtion patient;
final String patientType; final String patientType;
final String arrivalType; final String arrivalType;
final double height;
PatientProfileHeaderNewDesignAppBar( PatientProfileHeaderNewDesignAppBar(
this.patient, this.patientType, this.arrivalType); this.patient, this.patientType, this.arrivalType, {this.height = 0.0});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -36,7 +37,7 @@ class PatientProfileHeaderNewDesignAppBar extends StatelessWidget
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: Colors.white,
), ),
height: 200, height: height == 0 ? 200 : height,
child: Container( child: Container(
padding: EdgeInsets.only(left: 10, right: 10, bottom: 10), padding: EdgeInsets.only(left: 10, right: 10, bottom: 10),
margin: EdgeInsets.only(top: 50), margin: EdgeInsets.only(top: 50),

@ -27,6 +27,7 @@ class PatientProfileHeaderWhitAppointmentAppBar extends StatelessWidget with Pre
final String invoiceNO; final String invoiceNO;
final String orderNo; final String orderNo;
final bool isPrescriptions; final bool isPrescriptions;
final String clinic; final String clinic;
PatientProfileHeaderWhitAppointmentAppBar( PatientProfileHeaderWhitAppointmentAppBar(
{this.patient, {this.patient,

@ -151,7 +151,7 @@ class ProfileMedicalInfoWidget extends StatelessWidget {
arrivalType: arrivalType, arrivalType: arrivalType,
route: REFER_PATIENT_TO_DOCTOR, route: REFER_PATIENT_TO_DOCTOR,
isDisable: patient.patientStatusType != 43 ? true : false, isDisable: patient.patientStatusType != 43 ? true : false,
nameLine1: TranslationBase.of(context).myReferral, nameLine1: TranslationBase.of(context).referral,
nameLine2: TranslationBase.of(context).patient, nameLine2: TranslationBase.of(context).patient,
icon: 'patient/refer_patient.png'), icon: 'patient/refer_patient.png'),
if (int.parse(patientType) == 7 || int.parse(patientType) == 6) if (int.parse(patientType) == 7 || int.parse(patientType) == 6)

Loading…
Cancel
Save