merge-requests/393/head
Sultan Khan 4 years ago
commit c3f19d5ccf

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: 733 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 940 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 417 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 995 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 854 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 399 B

@ -4,8 +4,8 @@ const MAX_SMALL_SCREEN = 660;
const ONLY_NUMBERS = "[0-9]"; const ONLY_NUMBERS = "[0-9]";
const ONLY_LETTERS = "[a-zA-Z &'\"]"; const ONLY_LETTERS = "[a-zA-Z &'\"]";
const ONLY_DATE = "[0-9/]"; const ONLY_DATE = "[0-9/]";
//const BASE_URL = 'https://hmgwebservices.com/'; const BASE_URL = 'https://hmgwebservices.com/';
const BASE_URL = 'https://uat.hmgwebservices.com/'; // const BASE_URL = 'https://uat.hmgwebservices.com/';
const PHARMACY_ITEMS_URL = "Services/Lists.svc/REST/GetPharmcyItems_Region_enh"; const PHARMACY_ITEMS_URL = "Services/Lists.svc/REST/GetPharmcyItems_Region_enh";
const PHARMACY_LIST_URL = "Services/Patients.svc/REST/GetPharmcyList"; const PHARMACY_LIST_URL = "Services/Patients.svc/REST/GetPharmcyList";
const PATIENT_PROGRESS_NOTE_URL = const PATIENT_PROGRESS_NOTE_URL =

@ -84,7 +84,7 @@ const Map<String, Map<String, String>> localizedValues = {
'speciality': {'en': 'Speciality', 'ar': 'التخصص'}, 'speciality': {'en': 'Speciality', 'ar': 'التخصص'},
'errorMessage': {'en': 'Something went wrong', 'ar': 'حدث خطأ ما'}, 'errorMessage': {'en': 'Something went wrong', 'ar': 'حدث خطأ ما'},
'patientProfile': {'en': 'Patient Profile', 'ar': 'ملف المريض'}, 'patientProfile': {'en': 'Patient Profile', 'ar': 'ملف المريض'},
'vitalSign': {'en': 'Vital Sign', 'ar': 'المؤشرات الحيوية'}, 'vitalSign': {'en': 'Vital Signs', 'ar': 'المؤشرات الحيوية'},
'vital': {'en': 'Vital', 'ar': 'الحيوية'}, 'vital': {'en': 'Vital', 'ar': 'الحيوية'},
'signs': {'en': 'Signs', 'ar': 'المؤشرات'}, 'signs': {'en': 'Signs', 'ar': 'المؤشرات'},
'labOrder': {'en': 'Lab Order', 'ar': 'نتائج التحاليل'}, 'labOrder': {'en': 'Lab Order', 'ar': 'نتائج التحاليل'},
@ -124,10 +124,10 @@ const Map<String, Map<String, String>> localizedValues = {
'ar': 'ليس لديك اي ملاحظة تقدم ' 'ar': 'ليس لديك اي ملاحظة تقدم '
}, },
'invoiceNo:': {'en': 'Invoice No :', 'ar': 'رقم الفاتورة'}, 'invoiceNo:': {'en': 'Invoice No :', 'ar': 'رقم الفاتورة'},
'generalResult': {'en': 'General Result :', 'ar': 'النتيجة العامة'}, 'generalResult': {'en': 'General Result ', 'ar': 'النتيجة العامة'},
'description': {'en': 'Description', 'ar': 'الوصف'}, 'description': {'en': 'Description', 'ar': 'الوصف'},
'value': {'en': 'Value', 'ar': 'القيمة'}, 'value': {'en': 'Value', 'ar': 'القيمة'},
'range': {'en': 'range', 'ar': 'النطاق'}, 'range': {'en': 'Range', 'ar': 'النطاق'},
'enterId': {'en': 'Enter ID', 'ar': 'الهوية'}, 'enterId': {'en': 'Enter ID', 'ar': 'الهوية'},
'pleaseEnterYourID': { 'pleaseEnterYourID': {
'en': 'Please enter your ID', 'en': 'Please enter your ID',
@ -377,6 +377,11 @@ const Map<String, Map<String, String>> localizedValues = {
'headCircum': {'en': "Head Circum", 'ar': 'محيط الرأس'}, 'headCircum': {'en': "Head Circum", 'ar': 'محيط الرأس'},
'leanBodyWeight': {'en': "Lean Body Weight", 'ar': 'وزن الجسم الهزيل'}, 'leanBodyWeight': {'en': "Lean Body Weight", 'ar': 'وزن الجسم الهزيل'},
'bodyMassIndex': {'en': "Body Mass Index", 'ar': 'مؤشر كتلة الجسم'}, 'bodyMassIndex': {'en': "Body Mass Index", 'ar': 'مؤشر كتلة الجسم'},
'yourBodyMassIndex': {'en': "Your Body Mass Index is", 'ar': 'مؤشر كتلة جسمك هو'},
'bmiUnderWeight': {'en': "UnderWeight", 'ar': 'تحت الوزن'},
'bmiHealthy': {'en': "Healthy", 'ar': 'صحي'},
'bmiOverWeight': {'en': "OverWeight", 'ar': 'فوق الوزن'},
'bmiObese': {'en': "Obese", 'ar': 'سمين'},
'method': {'en': "Method", 'ar': 'الطريقة'}, 'method': {'en': "Method", 'ar': 'الطريقة'},
'pulseBeats': {'en': 'Pulse(beats/minute)', 'ar': ' (دقة/دقيقة)النبض'}, 'pulseBeats': {'en': 'Pulse(beats/minute)', 'ar': ' (دقة/دقيقة)النبض'},
'rhythm': {'en': "Rhythm", 'ar': 'الإيقاع'}, 'rhythm': {'en': "Rhythm", 'ar': 'الإيقاع'},
@ -608,7 +613,7 @@ const Map<String, Map<String, String>> localizedValues = {
"sys-dias": {"en": "SBP/DBP", "ar": "إنقباض/إنبساط"}, "sys-dias": {"en": "SBP/DBP", "ar": "إنقباض/إنبساط"},
"body": {"en": "Body \n Mass", "ar": "كتلة\nالجسم"}, "body": {"en": "Body \n Mass", "ar": "كتلة\nالجسم"},
'respirationRate': {'en': 'Respiration Rate', 'ar': 'معدل التنفس'}, 'respirationRate': {'en': 'Respiration Rate', 'ar': 'معدل التنفس'},
'heart': {'en': 'Heart', 'ar': 'قلب'}, 'heart': {'en': 'Heart rate', 'ar': 'معدل ضربات القلب'},
'medicalReport': {'en': "medical Report", 'ar': "تقرير طبي"}, 'medicalReport': {'en': "medical Report", 'ar': "تقرير طبي"},
'visitDate': {'en': "Visit Date", 'ar': "تاريخ الزيارة"}, 'visitDate': {'en': "Visit Date", 'ar': "تاريخ الزيارة"},
'test': {'en': "Procedures/Test", 'ar': "عمليات/تحاليل"}, 'test': {'en': "Procedures/Test", 'ar': "عمليات/تحاليل"},

@ -88,6 +88,11 @@ class LabsViewModel extends BaseViewModel {
List<LabResultList> labResultLists = List(); List<LabResultList> labResultLists = List();
List<LabResultList> get labResultListsCoustom {
return labResultLists;
}
getLaboratoryResult( getLaboratoryResult(
{String projectID, {String projectID,
int clinicID, int clinicID,

@ -99,6 +99,19 @@ class VitalSignsViewModel extends BaseViewModel {
} }
} }
int getBMIStatus() {
var bodyMassIndex = double.parse(bodyMax);
if (bodyMassIndex <= 18.5) {
return 1;
} else if (bodyMassIndex <= 25.0) {
return 2;
} else if (bodyMassIndex <= 30) {
return 3;
} else {
return 4;
}
}
String getTempratureMethod(int temperatureCelciusMethod) { String getTempratureMethod(int temperatureCelciusMethod) {
// temperatureCelciusMethod ( vital sign response field )- master 2005 // temperatureCelciusMethod ( vital sign response field )- master 2005
if (temperatureCelciusMethod == 1) { if (temperatureCelciusMethod == 1) {

@ -1,4 +1,9 @@
import 'package:doctor_app_flutter/core/enum/filter_type.dart';
import 'package:doctor_app_flutter/core/enum/viewstate.dart'; import 'package:doctor_app_flutter/core/enum/viewstate.dart';
import 'package:doctor_app_flutter/core/model/labs/LabOrderResult.dart';
import 'package:doctor_app_flutter/core/model/labs/lab_result.dart';
import 'package:doctor_app_flutter/core/model/labs/patient_lab_orders.dart';
import 'package:doctor_app_flutter/core/model/labs/patient_lab_special_result.dart';
import 'package:doctor_app_flutter/core/model/procedure/categories_procedure.dart'; import 'package:doctor_app_flutter/core/model/procedure/categories_procedure.dart';
import 'package:doctor_app_flutter/core/model/procedure/get_ordered_procedure_model.dart'; import 'package:doctor_app_flutter/core/model/procedure/get_ordered_procedure_model.dart';
import 'package:doctor_app_flutter/core/model/procedure/get_procedure_model.dart'; import 'package:doctor_app_flutter/core/model/procedure/get_procedure_model.dart';
@ -6,11 +11,18 @@ import 'package:doctor_app_flutter/core/model/procedure/post_procedure_req_model
import 'package:doctor_app_flutter/core/model/procedure/procedure_valadate_model.dart'; import 'package:doctor_app_flutter/core/model/procedure/procedure_valadate_model.dart';
import 'package:doctor_app_flutter/core/model/procedure/procedure_valadate_request_model.dart'; import 'package:doctor_app_flutter/core/model/procedure/procedure_valadate_request_model.dart';
import 'package:doctor_app_flutter/core/model/procedure/update_procedure_request_model.dart'; import 'package:doctor_app_flutter/core/model/procedure/update_procedure_request_model.dart';
import 'package:doctor_app_flutter/core/model/radiology/final_radiology.dart';
import 'package:doctor_app_flutter/core/service/labs_service.dart';
import 'package:doctor_app_flutter/core/service/procedure_service.dart'; import 'package:doctor_app_flutter/core/service/procedure_service.dart';
import 'package:doctor_app_flutter/core/service/radiology_service.dart';
import 'package:doctor_app_flutter/core/viewModel/base_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/base_view_model.dart';
import 'package:doctor_app_flutter/locator.dart'; import 'package:doctor_app_flutter/locator.dart';
import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart';
import 'package:doctor_app_flutter/util/dr_app_toast_msg.dart';
import 'package:flutter/cupertino.dart';
class ProcedureViewModel extends BaseViewModel { class ProcedureViewModel extends BaseViewModel {
FilterType filterType = FilterType.Clinic;
bool hasError = false; bool hasError = false;
ProcedureService _procedureService = locator<ProcedureService>(); ProcedureService _procedureService = locator<ProcedureService>();
List<GetOrderedProcedureModel> get procedureList => List<GetOrderedProcedureModel> get procedureList =>
@ -20,6 +32,24 @@ class ProcedureViewModel extends BaseViewModel {
List<CategoriseProcedureModel> get categoriesList => List<CategoriseProcedureModel> get categoriesList =>
_procedureService.categoriesList; _procedureService.categoriesList;
List<dynamic> get categoryList => _procedureService.categoryList; List<dynamic> get categoryList => _procedureService.categoryList;
RadiologyService _radiologyService = locator<RadiologyService>();
LabsService _labsService = locator<LabsService>();
List<FinalRadiologyList> _finalRadiologyListClinic = List();
List<FinalRadiologyList> _finalRadiologyListHospital = List();
List<FinalRadiologyList> get finalRadiologyList =>
filterType == FilterType.Clinic
? _finalRadiologyListClinic
: _finalRadiologyListHospital;
List<LabOrderResult> get labOrdersResultsList =>
_labsService.labOrdersResultsList;
List<PatientLabOrdersList> _patientLabOrdersListClinic = List();
List<PatientLabOrdersList> _patientLabOrdersListHospital = List();
List<PatientLabOrdersList> get patientLabOrdersList =>
filterType == FilterType.Clinic
? _patientLabOrdersListClinic
: _patientLabOrdersListHospital;
Future getProcedure({int mrn}) async { Future getProcedure({int mrn}) async {
hasError = false; hasError = false;
@ -101,4 +131,229 @@ class ProcedureViewModel extends BaseViewModel {
setState(ViewState.Idle); setState(ViewState.Idle);
//await getProcedure(mrn: mrn); //await getProcedure(mrn: mrn);
} }
void getPatientRadOrders(PatiantInformtion patient) async {
setState(ViewState.Busy);
await _radiologyService.getPatientRadOrders(patient);
if (_radiologyService.hasError) {
error = _radiologyService.error;
setState(ViewState.Error);
} else {
_radiologyService.finalRadiologyList.forEach((element) {
List<FinalRadiologyList> finalRadiologyListClinic =
_finalRadiologyListClinic
.where((elementClinic) =>
elementClinic.filterName == element.clinicDescription)
.toList();
if (finalRadiologyListClinic.length != 0) {
_finalRadiologyListClinic[
finalRadiologyListClinic.indexOf(finalRadiologyListClinic[0])]
.finalRadiologyList
.add(element);
} else {
_finalRadiologyListClinic.add(FinalRadiologyList(
filterName: element.clinicDescription, finalRadiology: element));
}
// FinalRadiologyList list sort via project
List<FinalRadiologyList> finalRadiologyListHospital =
_finalRadiologyListHospital
.where(
(elementClinic) =>
elementClinic.filterName == element.projectName,
)
.toList();
if (finalRadiologyListHospital.length != 0) {
_finalRadiologyListHospital[finalRadiologyListHospital
.indexOf(finalRadiologyListHospital[0])]
.finalRadiologyList
.add(element);
} else {
_finalRadiologyListHospital.add(FinalRadiologyList(
filterName: element.projectName, finalRadiology: element));
}
});
setState(ViewState.Idle);
}
}
String get radImageURL => _radiologyService.url;
getRadImageURL(
{int invoiceNo,
int lineItem,
int projectId,
@required PatiantInformtion patient}) async {
setState(ViewState.Busy);
await _radiologyService.getRadImageURL(
invoiceNo: invoiceNo,
lineItem: lineItem,
projectId: projectId,
patient: patient);
if (_radiologyService.hasError) {
error = _radiologyService.error;
setState(ViewState.Error);
} else
setState(ViewState.Idle);
}
setFilterType(FilterType filterType) {
this.filterType = filterType;
notifyListeners();
}
List<PatientLabSpecialResult> get patientLabSpecialResult =>
_labsService.patientLabSpecialResult;
List<LabResult> get labResultList => _labsService.labResultList;
List<LabResultList> labResultLists = List();
List<LabResultList> get labResultListsCoustom {
return labResultLists;
}
void getLabs(PatiantInformtion patient) async {
setState(ViewState.Busy);
await _labsService.getPatientLabOrdersList(patient);
if (_labsService.hasError) {
error = _labsService.error;
setState(ViewState.Error);
} else {
_labsService.patientLabOrdersList.forEach((element) {
List<PatientLabOrdersList> patientLabOrdersClinic =
_patientLabOrdersListClinic
.where((elementClinic) =>
elementClinic.filterName == element.clinicDescription)
.toList();
if (patientLabOrdersClinic.length != 0) {
_patientLabOrdersListClinic[_patientLabOrdersListClinic
.indexOf(patientLabOrdersClinic[0])]
.patientLabOrdersList
.add(element);
} else {
_patientLabOrdersListClinic.add(PatientLabOrdersList(
filterName: element.clinicDescription,
patientDoctorAppointment: element));
}
// doctor list sort via project
List<PatientLabOrdersList> patientLabOrdersHospital =
_patientLabOrdersListHospital
.where(
(elementClinic) =>
elementClinic.filterName == element.projectName,
)
.toList();
if (patientLabOrdersHospital.length != 0) {
_patientLabOrdersListHospital[_patientLabOrdersListHospital
.indexOf(patientLabOrdersHospital[0])]
.patientLabOrdersList
.add(element);
} else {
_patientLabOrdersListHospital.add(PatientLabOrdersList(
filterName: element.projectName,
patientDoctorAppointment: element));
}
});
setState(ViewState.Idle);
}
}
getLaboratoryResult(
{String projectID,
int clinicID,
String invoiceNo,
String orderNo,
PatiantInformtion patient}) async {
setState(ViewState.Busy);
await _labsService.getLaboratoryResult(
invoiceNo: invoiceNo,
orderNo: orderNo,
projectID: projectID,
clinicID: clinicID,
patient: patient);
if (_labsService.hasError) {
error = _labsService.error;
setState(ViewState.Error);
} else {
setState(ViewState.Idle);
}
}
getPatientLabResult(
{PatientLabOrders patientLabOrder, PatiantInformtion patient}) async {
setState(ViewState.Busy);
await _labsService.getPatientLabResult(
patientLabOrder: patientLabOrder, patient: patient);
if (_labsService.hasError) {
error = _labsService.error;
setState(ViewState.Error);
} else {
_labsService.labResultList.forEach((element) {
List<LabResultList> patientLabOrdersClinic = labResultLists
.where(
(elementClinic) => elementClinic.filterName == element.testCode)
.toList();
if (patientLabOrdersClinic.length != 0) {
var value =
labResultLists[labResultLists.indexOf(patientLabOrdersClinic[0])]
.patientLabResultList
.where((e) =>
e.sampleCollectedOn == element.sampleCollectedOn &&
e.resultValue == element.resultValue)
.toList();
if (value.isEmpty)
labResultLists[labResultLists.indexOf(patientLabOrdersClinic[0])]
.patientLabResultList
.add(element);
} else {
labResultLists
.add(LabResultList(filterName: element.testCode, lab: element));
}
});
setState(ViewState.Idle);
}
}
getPatientLabOrdersResults(
{PatientLabOrders patientLabOrder,
String procedure,
PatiantInformtion patient}) async {
setState(ViewState.Busy);
await _labsService.getPatientLabOrdersResults(
patientLabOrder: patientLabOrder,
procedure: procedure,
patient: patient);
if (_labsService.hasError) {
error = _labsService.error;
setState(ViewState.Error);
} else {
bool isShouldClear = false;
if (_labsService.labOrdersResultsList.length == 1) {
labOrdersResultsList.forEach((element) {
if (element.resultValue.contains('/') ||
element.resultValue.contains('*') ||
element.resultValue.isEmpty) isShouldClear = true;
});
}
if (isShouldClear) _labsService.labOrdersResultsList.clear();
setState(ViewState.Idle);
}
}
sendLabReportEmail({PatientLabOrders patientLabOrder, String mes}) async {
await _labsService.sendLabReportEmail(patientLabOrder: patientLabOrder);
if (_labsService.hasError) {
error = _labsService.error;
} else
DrAppToastMsg.showSuccesToast(mes);
}
} }

@ -70,10 +70,17 @@ class RadiologyViewModel extends BaseViewModel {
String get radImageURL => _radiologyService.url; String get radImageURL => _radiologyService.url;
getRadImageURL({int invoiceNo, int lineItem, int projectId,@required PatiantInformtion patient}) async { getRadImageURL(
{int invoiceNo,
int lineItem,
int projectId,
@required PatiantInformtion patient}) async {
setState(ViewState.Busy); setState(ViewState.Busy);
await _radiologyService.getRadImageURL( await _radiologyService.getRadImageURL(
invoiceNo: invoiceNo, lineItem: lineItem, projectId: projectId,patient: patient); invoiceNo: invoiceNo,
lineItem: lineItem,
projectId: projectId,
patient: patient);
if (_radiologyService.hasError) { if (_radiologyService.hasError) {
error = _radiologyService.error; error = _radiologyService.error;
setState(ViewState.Error); setState(ViewState.Error);

@ -1,11 +1,16 @@
import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/viewModel/PatientMuseViewModel.dart'; import 'package:doctor_app_flutter/core/viewModel/PatientMuseViewModel.dart';
import 'package:doctor_app_flutter/core/viewModel/project_view_model.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/util/date-utils.dart'; import 'package:doctor_app_flutter/util/date-utils.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/patients/profile/patient-profile-header-new-design.dart';
import 'package:doctor_app_flutter/widgets/shared/Text.dart'; import 'package:doctor_app_flutter/widgets/shared/Text.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:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:url_launcher/url_launcher.dart'; import 'package:url_launcher/url_launcher.dart';
class ECGPage extends StatelessWidget { class ECGPage extends StatelessWidget {
@ -13,7 +18,9 @@ class ECGPage extends StatelessWidget {
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['patient-type'];
String arrivalType = routeArgs['arrival-type'];
ProjectViewModel projectViewModel = Provider.of(context);
return BaseView<PatientMuseViewModel>( return BaseView<PatientMuseViewModel>(
onModelReady: (model) => model.getECGPatient( onModelReady: (model) => model.getECGPatient(
patientType: patient.patientType, patientType: patient.patientType,
@ -21,28 +28,97 @@ class ECGPage extends StatelessWidget {
patientID: patient.patientId), patientID: patient.patientId),
builder: (_, model, w) => AppScaffold( builder: (_, model, w) => AppScaffold(
baseViewModel: model, baseViewModel: model,
isShowAppBar: true, isShowAppBar: false,
appBarTitle: 'ECG', backgroundColor: Color(0xffF8F8F8),
body: ListView.builder( body: SingleChildScrollView(
itemCount: model.patientMuseResultsModelList.length, child: Padding(
itemBuilder: (context, index) => InkWell( padding: const EdgeInsets.all(8.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
PatientProfileHeaderNewDesign(patient,arrivalType??'0',patientType),
SizedBox(height: 12,),
Texts('Service',style: "caption2",color: Colors.black,),
Texts('ECG',bold: true,fontSize: 22,),
SizedBox(height: 12,),
...List.generate(model.patientMuseResultsModelList.length, (index) => InkWell(
onTap: () async { onTap: () async {
await launch( await launch(
model.patientMuseResultsModelList[index].imageURL); model.patientMuseResultsModelList[index].imageURL);
}, },
child: Container( child: Container(
width: double.infinity, width: double.infinity,
margin: EdgeInsets.all(5), height: 110,
margin: EdgeInsets.only(top: 5,bottom: 5),
padding: EdgeInsets.all(10), padding: EdgeInsets.all(10),
decoration: BoxDecoration( decoration: BoxDecoration(
border: Border.all(color: Colors.grey,width: 2) border: Border.all(color: Colors.white,width: 2),
color: Colors.white,
borderRadius: BorderRadius.circular(8)
),
child: Column(
children: [
Row(
// mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Texts('ECG Report',fontWeight: FontWeight.w700,fontSize: 17,),
SizedBox(height:3),
RichText(
text: TextSpan(
style: TextStyle(
fontSize: 1.6 *
SizeConfig.textMultiplier,
color: Colors.black),
children: <TextSpan>[
new TextSpan(
text:
TranslationBase.of(context).orderNo,
style: TextStyle(
fontSize: 12,
fontFamily:
'Poppins')),
new TextSpan(
text: '${/*model.patientMuseResultsModelList[index].orderNo?? */'3455'}',
style: TextStyle(
fontWeight: FontWeight.w600,
fontFamily:
'Poppins',
fontSize: 14)),
],
),
)
],
),
),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Texts('${DateUtils.getDayMonthYearDateFormatted(model.patientMuseResultsModelList[index].createdOnDateTime,isArabic: projectViewModel.isArabic)}',color: Colors.black,fontWeight: FontWeight.w600,fontSize: 14,),
Texts('${DateUtils.getHour(model.patientMuseResultsModelList[index].createdOnDateTime)}',fontWeight: FontWeight.w600,color: Colors.grey[700],fontSize: 14,),
],
),
), ),
child: Center( ],
child: Texts( ),
"${model.patientMuseResultsModelList[index].createdOnDateTime}"), SizedBox(height: 15,),
Align(
alignment: Alignment.topRight,
child: Icon(Icons.arrow_circle_up_rounded),
)
],
), ),
), ),
)), )),
],
),
),
),
), ),
); );
} }

@ -1,4 +1,3 @@
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/viewstate.dart'; import 'package:doctor_app_flutter/core/enum/viewstate.dart';
import 'package:doctor_app_flutter/core/model/admissionRequest/admission-request.dart'; import 'package:doctor_app_flutter/core/model/admissionRequest/admission-request.dart';
@ -6,11 +5,12 @@ import 'package:doctor_app_flutter/core/viewModel/patient-admission-request-view
import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/project_view_model.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/util/date-utils.dart';
import 'package:doctor_app_flutter/util/dr_app_toast_msg.dart'; 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.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';
@ -47,12 +47,15 @@ class _AdmissionRequestThirdScreenState
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;
ProjectViewModel projectViewModel = Provider.of(context); ProjectViewModel projectViewModel = Provider.of(context);
return BaseView<AdmissionRequestViewModel>( return BaseView<AdmissionRequestViewModel>(
builder: (_, model, w) => AppScaffold( builder: (_, model, w) => AppScaffold(
baseViewModel: model, baseViewModel: model,
isShowAppBar: false,
appBarTitle: TranslationBase.of(context).admissionRequest, appBarTitle: TranslationBase.of(context).admissionRequest,
body: GestureDetector( body: GestureDetector(
onTap: (){ onTap: (){
@ -62,27 +65,57 @@ class _AdmissionRequestThirdScreenState
} }
}, },
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Expanded( Expanded(
child: SingleChildScrollView( child: SingleChildScrollView(
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
PatientPageHeaderWidget(patient), // PatientPageHeaderWidget(patient),
PatientProfileHeaderNewDesign(
patient, patientType, arrivalType),
Container( Container(
margin: EdgeInsets.symmetric( margin: EdgeInsets.all(16.0),
vertical: 16, horizontal: 16),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
SizedBox( AppText(
height: 16, "${TranslationBase.of(context).admission}",
fontFamily: 'Poppins',
fontSize: SizeConfig.textMultiplier * 1.6,
fontWeight: FontWeight.w600,
), ),
AppText(
"${TranslationBase.of(context).request}",
fontFamily: 'Poppins',
fontSize: SizeConfig.textMultiplier * 3,
fontWeight: FontWeight.bold,
)
],
),
),
Container(
margin: EdgeInsets.symmetric(
vertical: 0, horizontal: 16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
AppText( AppText(
TranslationBase.of(context) TranslationBase.of(context)
.specialityAndDoctorDetail, .specialityAndDoctorDetail,
fontWeight: FontWeight.bold, fontFamily: 'Poppins',
fontSize: SizeConfig.textMultiplier * 2.5, fontSize: SizeConfig.textMultiplier * 1.8,
fontWeight: FontWeight.w700,
),
SizedBox(
height: 10,
),
AppTextFieldCustom(
height: screenSize.height * 0.070,
hintText: "test field",
isDropDown: true,
controller: _sickLeaveCommentsController,
), ),
SizedBox( SizedBox(
height: 10, height: 10,

@ -13,11 +13,10 @@ import 'package:provider/provider.dart';
class LabResultWidget extends StatelessWidget { class LabResultWidget extends StatelessWidget {
final String filterName ;
final List<LabResult> patientLabResultList; final List<LabResult> patientLabResultList;
final PatientLabOrders patientLabOrder; final PatientLabOrders patientLabOrder;
final PatiantInformtion patient; final PatiantInformtion patient;
LabResultWidget({Key key, this.filterName, this.patientLabResultList, this.patientLabOrder, this.patient}) : super(key: key); LabResultWidget({Key key, this.patientLabResultList, this.patientLabOrder, this.patient}) : super(key: key);
ProjectViewModel projectViewModel; ProjectViewModel projectViewModel;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -29,38 +28,88 @@ class LabResultWidget extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[ children: <Widget>[
Row( Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [ children: [
Texts(filterName), Expanded(
InkWell( child: Container(
onTap: () { child: Center(
Navigator.push( child: Texts(
context, TranslationBase.of(context).description,
FadePage( color: Colors.black,bold: true,
page: FlowChartPage(
filterName: filterName,
patientLabOrder: patientLabOrder,
patient: patient,
), ),
), ),
);
},
child: Texts(
TranslationBase.of(context).showMoreBtn,
textDecoration: TextDecoration.underline,
color: Colors.blue,
), ),
), ),
Expanded(
child: Container(
child: Center(
child: Texts(TranslationBase.of(context).value, color: Colors.black,bold: true,),
),
),
),
Expanded(
child: Container(
child: Center(
child: Texts(TranslationBase.of(context).range, color: Colors.black,bold: true,),
),
),
)
], ],
), ),
Table( SizedBox(height: 7,),
border: TableBorder.symmetric( Divider(color: Colors.black,thickness: 1,),
inside: BorderSide( SizedBox(height: 12,),
width: 2.0, color: Colors.grey[300]), ...List.generate(patientLabResultList.length, (index) => Column(
children: [
Row(
children: [
Expanded(
child: Container(
padding: EdgeInsets.all(10),
color: Colors.white,
child: Center(
child: Texts(
'${patientLabResultList[index].testCode}\n'+
patientLabResultList[index].description,
textAlign: TextAlign.center,
),
),
),
),
Expanded(
child: Container(
padding: EdgeInsets.all(10),
color: Colors.white,
child: Center(
child: Texts(
patientLabResultList[index].resultValue+" "+patientLabResultList[index].uOM,
textAlign: TextAlign.center,
),
),
),
),
Expanded(
child: Container(
padding: EdgeInsets.all(10),
color: Colors.white,
child: Center(
child: Texts(
patientLabResultList[index].referanceRange,
textAlign: TextAlign.center,
), ),
children: fullData(patientLabResultList,context),
), ),
),
)
],
),
Divider(),
],
))
// Table(
// border: TableBorder.symmetric(
// inside: BorderSide(width: 2.0, color: Colors.grey[300],style: BorderStyle.solid),
// ),
// children: fullData(patientLabResultList,context),
// ),
], ],
), ),
); );
@ -71,54 +120,22 @@ class LabResultWidget extends StatelessWidget {
TableRow( TableRow(
children: [ children: [
Container( Container(
child: Container(
decoration: BoxDecoration(
color: Theme.of(context).primaryColor,
borderRadius: BorderRadius.only(
topLeft: projectViewModel.isArabic
? Radius.circular(0.0)
: Radius.circular(10.0),
topRight: projectViewModel.isArabic
? Radius.circular(10.0)
: Radius.circular(0.0),
),
),
child: Center( child: Center(
child: Texts( child: Texts(
TranslationBase.of(context).description, TranslationBase.of(context).description,
color: Colors.white, color: Colors.black,bold: true,
),
), ),
height: 60,
), ),
), ),
Container( Container(
child: Container(
decoration: BoxDecoration(
color: Theme.of(context).primaryColor,
),
child: Center( child: Center(
child: Texts(TranslationBase.of(context).value, color: Colors.white), child: Texts(TranslationBase.of(context).value, color: Colors.black,bold: true,),
), ),
height: 60),
), ),
Container( Container(
child: Container(
decoration: BoxDecoration(
color: Theme.of(context).primaryColor,
borderRadius: BorderRadius.only(
topLeft: projectViewModel.isArabic
? Radius.circular(10.0)
: Radius.circular(0.0),
topRight: projectViewModel.isArabic
? Radius.circular(0.0)
: Radius.circular(10.0),
),
),
child: Center( child: Center(
child: Texts(TranslationBase.of(context).range, color: Colors.white), child: Texts(TranslationBase.of(context).range, color: Colors.black,bold: true,),
), ),
height: 60),
), ),
], ],
), ),

@ -3,18 +3,21 @@ import 'package:doctor_app_flutter/core/viewModel/labs_view_model.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/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/patients/profile/patient_profile_header_with_appointment_card.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/loader/gif_loader_dialog_utils.dart'; import 'package:doctor_app_flutter/widgets/shared/loader/gif_loader_dialog_utils.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'laboratory_result_widget.dart'; import 'laboratory_result_widget.dart';
import 'package:doctor_app_flutter/widgets/patients/profile/patient-profile-header-new-design.dart';
class LaboratoryResultPage extends StatefulWidget { class LaboratoryResultPage extends StatefulWidget {
final PatientLabOrders patientLabOrders; final PatientLabOrders patientLabOrders;
final PatiantInformtion patient; final PatiantInformtion patient;
final String patientType;
LaboratoryResultPage({Key key, this.patientLabOrders, this.patient}); final String arrivalType;
LaboratoryResultPage({Key key, this.patientLabOrders, this.patient, this.patientType, this.arrivalType});
@override @override
_LaboratoryResultPageState createState() => _LaboratoryResultPageState(); _LaboratoryResultPageState createState() => _LaboratoryResultPageState();
@ -31,12 +34,23 @@ class _LaboratoryResultPageState extends State<LaboratoryResultPage> {
orderNo: widget.patientLabOrders.orderNo, orderNo: widget.patientLabOrders.orderNo,
patient: widget.patient), patient: widget.patient),
builder: (_, model, w) => AppScaffold( builder: (_, model, w) => AppScaffold(
isShowAppBar: true, isShowAppBar: false,
appBarTitle: TranslationBase.of(context).labResults, // appBarTitle: TranslationBase.of(context).labResults,
baseViewModel: model, baseViewModel: model,
body: Scaffold( body: Scaffold(
body: ListView.builder( body: SingleChildScrollView(
itemBuilder: (context, index) => LaboratoryResultWidget( child: Column(
children: [
PatientProfileHeaderWhitAppointment(patient: widget.patient,
patientType: widget.patientType??"0",
arrivalType: widget.arrivalType??"0",
orderNo: widget.patientLabOrders.orderNo,
appointmentDate:widget.patientLabOrders.orderDate,
doctorName: widget.patientLabOrders.doctorName,
profileUrl: widget.patientLabOrders.doctorImageURL,
invoiceNO: widget.patientLabOrders.invoiceNo,
),
...List.generate(model.patientLabSpecialResult.length, (index) => LaboratoryResultWidget(
onTap: () async { onTap: () async {
}, },
@ -45,8 +59,10 @@ class _LaboratoryResultPageState extends State<LaboratoryResultPage> {
orderNo: widget.patientLabOrders.orderNo, orderNo: widget.patientLabOrders.orderNo,
patientLabOrder: widget.patientLabOrders, patientLabOrder: widget.patientLabOrders,
patient: widget.patient, patient: widget.patient,
)),
],
), ),
itemCount: model.patientLabSpecialResult.length,
), ),
), ),
), ),

@ -34,7 +34,6 @@ class LaboratoryResultWidget extends StatefulWidget {
} }
class _LaboratoryResultWidgetState extends State<LaboratoryResultWidget> { class _LaboratoryResultWidgetState extends State<LaboratoryResultWidget> {
bool _isShowMore = true;
bool _isShowMoreGeneral = true; bool _isShowMoreGeneral = true;
ProjectViewModel projectViewModel; ProjectViewModel projectViewModel;
@ -42,8 +41,7 @@ class _LaboratoryResultWidgetState extends State<LaboratoryResultWidget> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
projectViewModel = Provider.of(context); projectViewModel = Provider.of(context);
return BaseView<LabsViewModel>( return BaseView<LabsViewModel>(
onModelReady: (model) => onModelReady: (model) => model.getPatientLabResult(patientLabOrder: widget.patientLabOrder,patient: widget.patient),
model.getPatientLabResult(patientLabOrder: widget.patientLabOrder,patient: widget.patient),
builder: (_, model, w) => NetworkBaseView( builder: (_, model, w) => NetworkBaseView(
baseViewModel: model, baseViewModel: model,
child: Container( child: Container(
@ -53,33 +51,6 @@ class _LaboratoryResultWidgetState extends State<LaboratoryResultWidget> {
Column( Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[ children: <Widget>[
Container(
margin: EdgeInsets.all(8),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Expanded(
child: Container(
decoration: BoxDecoration(
shape: BoxShape.rectangle,
color: Colors.white,
borderRadius: BorderRadius.all(
Radius.circular(5.0),
)),
padding: EdgeInsets.all(10.0),
margin: EdgeInsets.only(left: 5, right: 5),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Texts(TranslationBase.of(context).invoiceNo),
Texts(widget.billNo),
],
),
),
),
],
),
),
SizedBox( SizedBox(
height: 12, height: 12,
), ),
@ -106,20 +77,17 @@ class _LaboratoryResultWidgetState extends State<LaboratoryResultWidget> {
)), )),
child: Row( child: Row(
children: <Widget>[ children: <Widget>[
Expanded( Expanded(child: Container(
child: Texts(TranslationBase.of(context) margin: EdgeInsets.only(left: 10, right: 10),
.generalResult)), child: Texts(TranslationBase.of(context).generalResult,bold: true,))),
Container( Container(
width: 25, width: 25,
height: 25, height: 25,
decoration: BoxDecoration(
shape: BoxShape.circle,
color: Theme.of(context).primaryColor),
child: Icon( child: Icon(
_isShowMoreGeneral _isShowMoreGeneral
? Icons.keyboard_arrow_up ? Icons.keyboard_arrow_up
: Icons.keyboard_arrow_down, : Icons.keyboard_arrow_down,
color: Colors.white, color: Colors.grey[800],
size: 22, size: 22,
), ),
) )
@ -142,23 +110,11 @@ class _LaboratoryResultWidgetState extends State<LaboratoryResultWidget> {
duration: Duration(milliseconds: 7000), duration: Duration(milliseconds: 7000),
child: Container( child: Container(
width: double.infinity, width: double.infinity,
child: Column( child: LabResultWidget(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
...List.generate(
model.labResultLists.length,
(index) => LabResultWidget(
patientLabOrder: widget.patientLabOrder, patientLabOrder: widget.patientLabOrder,
filterName: model patientLabResultList: model.labResultList,
.labResultLists[index].filterName,
patientLabResultList: model
.labResultLists[index]
.patientLabResultList,
patient:widget.patient, patient:widget.patient,
), ),
)
],
),
), ),
), ),
], ],
@ -167,63 +123,7 @@ class _LaboratoryResultWidgetState extends State<LaboratoryResultWidget> {
SizedBox( SizedBox(
height: 10, height: 10,
), ),
InkWell(
onTap: () {
setState(() {
_isShowMore = !_isShowMore;
});
},
child: Container(
padding: EdgeInsets.all(10.0),
margin: EdgeInsets.only(left: 5, right: 5),
decoration: BoxDecoration(
shape: BoxShape.rectangle,
color: Colors.white,
borderRadius: BorderRadius.all(
Radius.circular(5.0),
)),
child: Row(
children: <Widget>[
Expanded(
child: Texts(
TranslationBase.of(context).specialResult)),
Container(
width: 25,
height: 25,
decoration: BoxDecoration(
shape: BoxShape.circle,
color: Theme.of(context).primaryColor),
child: Icon(
_isShowMore
? Icons.keyboard_arrow_up
: Icons.keyboard_arrow_down,
color: Colors.white,
size: 22,
),
)
],
),
),
),
if (_isShowMore)
AnimatedContainer(
padding: EdgeInsets.all(10.0),
margin: EdgeInsets.only(left: 5, right: 5),
decoration: BoxDecoration(
shape: BoxShape.rectangle,
color: Colors.white,
borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(5.0),
bottomRight: Radius.circular(5.0),
)),
duration: Duration(milliseconds: 7000),
child: Container(
width: double.infinity,
child: Html(
data: widget.details ??
TranslationBase.of(context).noDataAvailable,
)),
),
], ],
), ),
], ],

@ -1,10 +1,14 @@
import 'package:doctor_app_flutter/core/enum/filter_type.dart'; import 'package:doctor_app_flutter/core/enum/filter_type.dart';
import 'package:doctor_app_flutter/core/viewModel/labs_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/labs_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/procedure_View_model.dart';
import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/project_view_model.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/lab_result/laboratory_result_page.dart'; import 'package:doctor_app_flutter/screens/patients/profile/lab_result/laboratory_result_page.dart';
import 'package:doctor_app_flutter/screens/procedures/add_lab_orders.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-profile-header-new-design.dart';
import 'package:doctor_app_flutter/widgets/shared/Text.dart';
import 'package:doctor_app_flutter/widgets/shared/app_expandable_notifier_new.dart'; import 'package:doctor_app_flutter/widgets/shared/app_expandable_notifier_new.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/doctor_card.dart'; import 'package:doctor_app_flutter/widgets/shared/doctor_card.dart';
@ -16,64 +20,101 @@ import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
class LabsHomePage extends StatelessWidget { class LabsHomePage extends StatelessWidget {
String patientType;
String arrivalType;
@override @override
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'];
ProjectViewModel projectViewModel = Provider.of(context); patientType = routeArgs['patientType'];
return BaseView<LabsViewModel>( arrivalType = routeArgs['arrivalType'];
print(arrivalType);
return BaseView<ProcedureViewModel>(
onModelReady: (model) => model.getLabs(patient), onModelReady: (model) => model.getLabs(patient),
builder: (context, LabsViewModel model, widget) => AppScaffold( builder: (context, ProcedureViewModel model, widget) => AppScaffold(
baseViewModel: model, baseViewModel: model,
isShowAppBar: true, isShowAppBar: false,
appBarTitle: TranslationBase.of(context).labOrders,
body: SingleChildScrollView( body: SingleChildScrollView(
physics: BouncingScrollPhysics(), physics: BouncingScrollPhysics(),
child: FractionallySizedBox( child: FractionallySizedBox(
widthFactor: 1.0, widthFactor: 1.0,
child: Center(
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[ children: <Widget>[
Row( PatientProfileHeaderNewDesign(patient,
children: <Widget>[ patient.patientType.toString() ?? '0', patientType),
Expanded( SizedBox(
flex: 1, height: 12,
child: InkWell(
onTap: () => model.setFilterType(FilterType.Clinic),
child: ListTile(
title: Text(TranslationBase.of(context).clinic),
leading: Radio(
value: FilterType.Clinic,
groupValue: model.filterType,
onChanged: (FilterType value) {
model.setFilterType(value);
},
), ),
Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Texts(
'Lab',
style: "caption2",
color: Colors.black,
fontSize: 13,
),
Texts(
'Result',
bold: true,
fontSize: 22,
), ),
],
), ),
), ),
Expanded( if (patientType != null && patientType == '7')
flex: 1, InkWell(
child: InkWell( onTap: () {
onTap: () => model.setFilterType(FilterType.Hospital), addSelectedLabOrder(context, model, patient);
child: ListTile( },
title: Text(TranslationBase.of(context).hospital), child: Container(
leading: Radio( width: double.maxFinite,
value: FilterType.Hospital, height: 140,
groupValue: model.filterType, margin: EdgeInsets.all(10),
onChanged: (FilterType value) => decoration: BoxDecoration(
model.setFilterType(value), color: Colors.grey[300],
borderRadius: BorderRadius.circular(10),
),
child: Center(
child: Container(
height: 90,
child: Column(
children: [
Container(
height: 40,
width: 40,
decoration: BoxDecoration(
color: Colors.grey[600],
borderRadius: BorderRadius.circular(10),
),
child: Center(
child: Icon(
Icons.add,
color: Colors.white,
), ),
), ),
), ),
SizedBox(
height: 10,
),
Texts(
'Apply for New Lab Order',
color: Colors.grey[600],
fontWeight: FontWeight.w600,
) )
], ],
), ),
),
),
),
),
...List.generate( ...List.generate(
model.patientLabOrdersList.length, model.patientLabOrdersList.length,
(index) => AppExpandableNotifier( (index) => Column(
title: model.patientLabOrdersList[index].filterName,
bodyWidget: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: model children: model
@ -86,32 +127,26 @@ class LabsHomePage extends StatelessWidget {
page: LaboratoryResultPage( page: LaboratoryResultPage(
patientLabOrders: labOrder, patientLabOrders: labOrder,
patient: patient, patient: patient,
arrivalType: arrivalType,
patientType: patientType,
), ),
), ),
), ),
isInOutPatient: labOrder.isInOutPatient, doctorName: labOrder.doctorName,
name: labOrder.doctorName, invoiceNO: ' ${labOrder.invoiceNo}',
billNo: ' ${labOrder.invoiceNo}',
profileUrl: labOrder.doctorImageURL, profileUrl: labOrder.doctorImageURL,
subName: labOrder.projectName, branch: labOrder.projectName,
isLiveCareAppointment: appointmentDate: labOrder.orderDate,
labOrder.isLiveCareAppointment, orderNo: labOrder.orderNo,
date: projectViewModel.isArabic
? DateUtils.getMonthDayYearDateFormattedAr(
labOrder.orderDate)
: DateUtils.getMonthDayYearDateFormatted(
labOrder.orderDate),
); );
}).toList(), }).toList(),
), ),
),
) )
], ],
), ),
), ),
), ),
), ),
),
); );
} }
} }

@ -96,7 +96,7 @@ class PatientProfileScreen extends StatelessWidget {
if (int.parse(patientType) == 7 || if (int.parse(patientType) == 7 ||
int.parse(patientType) == 6) int.parse(patientType) == 6)
Positioned( Positioned(
top: 195, top: 175,
left: 20, left: 20,
right: 20, right: 20,
child: Row( child: Row(

@ -5,6 +5,7 @@ import 'package:doctor_app_flutter/core/viewModel/radiology_view_model.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/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/patients/profile/patient_profile_header_with_appointment_card.dart';
import 'package:doctor_app_flutter/widgets/shared/Text.dart'; import 'package:doctor_app_flutter/widgets/shared/Text.dart';
import 'package:doctor_app_flutter/widgets/shared/app_button.dart'; import 'package:doctor_app_flutter/widgets/shared/app_button.dart';
import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
@ -15,8 +16,9 @@ import 'package:url_launcher/url_launcher.dart';
class RadiologyDetailsPage extends StatelessWidget { class RadiologyDetailsPage extends StatelessWidget {
final FinalRadiology finalRadiology; final FinalRadiology finalRadiology;
final PatiantInformtion patient; final PatiantInformtion patient;
final String patientType;
RadiologyDetailsPage({Key key, this.finalRadiology, this.patient}); final String arrivalType;
RadiologyDetailsPage({Key key, this.finalRadiology, this.patient, this.patientType, this.arrivalType});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -27,45 +29,48 @@ class RadiologyDetailsPage extends StatelessWidget {
lineItem: finalRadiology.invoiceLineItemNo, lineItem: finalRadiology.invoiceLineItemNo,
invoiceNo: finalRadiology.invoiceNo), invoiceNo: finalRadiology.invoiceNo),
builder: (_, model, widget) => AppScaffold( builder: (_, model, widget) => AppScaffold(
appBarTitle: TranslationBase.of(context).radiologyReport,
isShowAppBar: true, isShowAppBar: false,
baseViewModel: model, baseViewModel: model,
body: SingleChildScrollView( body: SingleChildScrollView(
child: Column( child: Column(
mainAxisSize: MainAxisSize.max, mainAxisSize: MainAxisSize.max,
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[ children: <Widget>[
Texts( PatientProfileHeaderWhitAppointment(patient: patient,
'${finalRadiology.reportData}', patientType: patientType??"0",
textAlign: TextAlign.center, arrivalType: arrivalType??"0",
), orderNo: finalRadiology.orderNo.toString(),
Padding( appointmentDate:finalRadiology.orderDate,
padding: const EdgeInsets.all(8.0), doctorName: finalRadiology.doctorName,
child: Texts( profileUrl: finalRadiology.doctorImageURL,
'${finalRadiology.reportData}', invoiceNO: finalRadiology.invoiceNo.toString(),
textAlign: TextAlign.start,
fontSize: 17,
),
), ),
SizedBox( SizedBox(
height: MediaQuery.of(context).size.height * 0.2, height: MediaQuery.of(context).size.height * 0.2,
)
],
), ),
Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(12),
), ),
bottomSheet: Container(
width: double.infinity,
height: MediaQuery.of(context).size.height * 0.14,
// color: Colors.grey[100],
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[ children: [
Divider(), SizedBox(height: 5,),
if (model.radImageURL.isNotEmpty) Texts(TranslationBase.of(context).generalResult),
SizedBox(height: 5,),
Texts(
'${finalRadiology.reportData}',
textAlign: TextAlign.start,
fontSize: 17,
color: Colors.grey,
),
SizedBox(height: 25,),
Container( Container(
width: MediaQuery.of(context).size.width * 0.8, width: MediaQuery.of(context).size.width * 0.8,
child: Button( child: Button(
color: Colors.red,
onTap: () { onTap: () {
launch(model.radImageURL); launch(model.radImageURL);
}, },
@ -74,7 +79,11 @@ class RadiologyDetailsPage extends StatelessWidget {
), ),
], ],
), ),
)), ),
],
),
),
),
); );
} }
} }

@ -1,11 +1,15 @@
import 'package:doctor_app_flutter/core/enum/filter_type.dart'; import 'package:doctor_app_flutter/core/enum/filter_type.dart';
import 'package:doctor_app_flutter/core/viewModel/procedure_View_model.dart';
import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/radiology_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/radiology_view_model.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/radiology/radiology_details_page.dart'; import 'package:doctor_app_flutter/screens/patients/profile/radiology/radiology_details_page.dart';
import 'package:doctor_app_flutter/screens/procedures/add_radiology_order.dart';
import 'package:doctor_app_flutter/util/date-utils.dart'; import 'package:doctor_app_flutter/util/date-utils.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-profile-header-new-design.dart';
import 'package:doctor_app_flutter/widgets/shared/Text.dart';
import 'package:doctor_app_flutter/widgets/shared/app_expandable_notifier_new.dart'; import 'package:doctor_app_flutter/widgets/shared/app_expandable_notifier_new.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/doctor_card.dart'; import 'package:doctor_app_flutter/widgets/shared/doctor_card.dart';
@ -20,53 +24,90 @@ class RadiologyHomePage extends StatelessWidget {
ProjectViewModel projectViewModel = Provider.of(context); ProjectViewModel projectViewModel = Provider.of(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'];
return BaseView<RadiologyViewModel>( String patientType = routeArgs['patientType'];
String arrivalType = routeArgs['arrivalType'];
ProcedureViewModel model2 = ProcedureViewModel();
return BaseView<ProcedureViewModel>(
onModelReady: (model) => model.getPatientRadOrders(patient), onModelReady: (model) => model.getPatientRadOrders(patient),
builder: (_, model, widget) => AppScaffold( builder: (_, model, widget) => AppScaffold(
isShowAppBar: true, isShowAppBar: false,
appBarTitle: TranslationBase.of(context).radiology, // appBarTitle: TranslationBase.of(context).radiology,
baseViewModel: model, baseViewModel: model,
body: FractionallySizedBox( body: FractionallySizedBox(
widthFactor: 1.0, widthFactor: 1.0,
child: ListView( child: ListView(
physics: BouncingScrollPhysics(), physics: BouncingScrollPhysics(),
children: <Widget>[ children: <Widget>[
Row( PatientProfileHeaderNewDesign(
children: <Widget>[ patient, patient.patientType.toString() ?? '0', patientType),
Expanded( SizedBox(
flex: 1, height: 12,
child: InkWell( ),
onTap: () => model.setFilterType(FilterType.Clinic), Padding(
child: ListTile( padding: const EdgeInsets.all(8.0),
title: Text(TranslationBase.of(context).clinic), child: Column(
leading: Radio( crossAxisAlignment: CrossAxisAlignment.start,
value: FilterType.Clinic, children: [
groupValue: model.filterType, Texts(
onChanged: (FilterType value) { 'Radiology',
model.setFilterType(value); style: "caption2",
}, color: Colors.black,
fontSize: 13,
), ),
Texts(
'Result',
bold: true,
fontSize: 22,
), ),
],
), ),
), ),
Expanded( if (patientType != null && patientType == '7')
flex: 1, InkWell(
child: InkWell( onTap: () {
onTap: () => model.setFilterType(FilterType.Hospital), addSelectedRadiologyOrder(context, model, patient);
child: ListTile(
title: Text(TranslationBase.of(context).hospital),
leading: Radio(
value: FilterType.Hospital,
groupValue: model.filterType,
onChanged: (FilterType value) {
model.setFilterType(value);
}, },
child: Container(
width: double.maxFinite,
height: 140,
margin: EdgeInsets.all(10),
decoration: BoxDecoration(
color: Colors.grey[300],
borderRadius: BorderRadius.circular(10),
),
child: Center(
child: Container(
height: 90,
child: Column(
children: [
Container(
height: 40,
width: 40,
decoration: BoxDecoration(
color: Colors.grey[600],
borderRadius: BorderRadius.circular(10),
), ),
child: Center(
child: Icon(
Icons.add,
color: Colors.white,
), ),
), ),
),
SizedBox(
height: 10,
),
Texts(
'Apply for Radiology Order',
color: Colors.grey[600],
fontWeight: FontWeight.w600,
) )
], ],
), ),
),
),
),
),
...List.generate( ...List.generate(
model.finalRadiologyList.length, model.finalRadiologyList.length,
(index) => AppExpandableNotifier( (index) => AppExpandableNotifier(
@ -88,18 +129,12 @@ class RadiologyHomePage extends StatelessWidget {
), ),
), ),
child: DoctorCard( child: DoctorCard(
isInOutPatient: radiology.isInOutPatient, doctorName: radiology.doctorName,
isLiveCareAppointment:
radiology.isLiveCareAppointment,
name: radiology.doctorName,
profileUrl: radiology.doctorImageURL, profileUrl: radiology.doctorImageURL,
billNo: '${radiology.invoiceNo}', invoiceNO: '${radiology.invoiceNo}',
subName: '${radiology.projectName}', branch: '${radiology.projectName}',
date: projectViewModel.isArabic appointmentDate: radiology.orderDate,
? DateUtils.getMonthDayYearDateFormattedAr( orderNo: radiology.orderNo.toString(),
radiology.orderDate)
: DateUtils.getMonthDayYearDateFormatted(
radiology.orderDate),
), ),
); );
}).toList(), }).toList(),

@ -33,7 +33,7 @@ class MyReferralPatientScreen extends StatelessWidget {
) )
: SingleChildScrollView( : SingleChildScrollView(
child: Container( child: Container(
margin: EdgeInsets.only(top: 50), margin: EdgeInsets.only(top: 70),
// color: Colors.white, // color: Colors.white,
// height: MediaQuery.of(context).size.height, // height: MediaQuery.of(context).size.height,
child: Column( child: Column(

@ -6,6 +6,7 @@ import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/screens/patients/profile/vital_sign/vital_sign_item.dart'; import 'package:doctor_app_flutter/screens/patients/profile/vital_sign/vital_sign_item.dart';
import 'package:doctor_app_flutter/screens/patients/profile/vital_sign/vital_sign_item_details_screen.dart'; import 'package:doctor_app_flutter/screens/patients/profile/vital_sign/vital_sign_item_details_screen.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-profile-header-new-design.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';
import 'package:doctor_app_flutter/widgets/transitions/fade_page.dart'; import 'package:doctor_app_flutter/widgets/transitions/fade_page.dart';
@ -29,20 +30,219 @@ class VitalSignDetailsScreen extends StatelessWidget {
String from = routeArgs['from']; String from = routeArgs['from'];
String to = routeArgs['to']; String to = routeArgs['to'];
String imageBasePath = 'assets/images/'; String imageBasePath = 'assets/images/';
String assetBasePath = "${imageBasePath}patient/vital_signs/";
return BaseView<VitalSignsViewModel>( return BaseView<VitalSignsViewModel>(
onModelReady: (model) => onModelReady: (model) =>
model.getPatientVitalSignHistory(patient, from, to), model.getPatientVitalSignHistory(patient, from, to),
builder: (_, mode, widget) => AppScaffold( builder: (_, mode, widget) => AppScaffold(
isShowAppBar: true, isShowAppBar: false,
baseViewModel: mode, baseViewModel: mode,
appBarTitle: TranslationBase.of(context).vitalSign, appBarTitle: TranslationBase.of(context).vitalSign,
body: mode.patientVitalSignsHistory.length > 0 body: mode.patientVitalSignsHistory.length > 0
? Container( ? Column(
child: ListView( crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[ children: [
PatientProfileHeaderNewDesign(
patient, patientType, arrivalType),
Container(
margin: EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
AppText(
"${patient.firstName ?? patient.patientDetails.firstName}'s",
fontFamily: 'Poppins',
fontSize: SizeConfig.textMultiplier * 1.6,
fontWeight: FontWeight.w600,
),
AppText(
TranslationBase.of(context).vitalSign,
fontFamily: 'Poppins',
fontSize: SizeConfig.textMultiplier * 3,
fontWeight: FontWeight.bold,
)
],
),
),
Container(
height: MediaQuery.of(context).size.height * 0.21,
width: double.infinity,
padding: EdgeInsets.all(12.0),
margin: EdgeInsets.symmetric(horizontal: 16.0),
decoration: BoxDecoration(
shape: BoxShape.rectangle,
color: Colors.white,
borderRadius: BorderRadius.circular(16),
border: Border.fromBorderSide(BorderSide(
color: Colors.grey.shade400,
width: 0.4,
)),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
AppText(
"${TranslationBase.of(context).yourBodyMassIndex} ${mode.bodyMax}",
fontFamily: 'Poppins',
fontSize: SizeConfig.textMultiplier * 2.0,
fontWeight: FontWeight.w700,
),
Row( Row(
children: <Widget>[ mainAxisAlignment: MainAxisAlignment.center,
children: [
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Image.asset(
mode.getBMIStatus() != 1
? '${assetBasePath}underweight_BMI.png'
: '${assetBasePath}underweight_BMI-r.png',
height:
MediaQuery.of(context).size.height * 0.10,
),
const SizedBox(
height: 4,
),
AppText(
"${TranslationBase.of(context).bmiUnderWeight}",
fontFamily: 'Poppins',
fontSize: SizeConfig.textMultiplier * 1.4,
color: mode.getBMIStatus() == 1
? Color(0XFFD02127)
: null,
fontWeight: FontWeight.w700,
),
AppText(
"(1-10)",
fontFamily: 'Poppins',
fontSize: SizeConfig.textMultiplier * 1.4,
color: mode.getBMIStatus() == 1
? Color(0XFFD02127)
: null,
fontWeight: FontWeight.w700,
),
],
)),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Image.asset(
mode.getBMIStatus() != 2
? '${assetBasePath}health_BMI.png'
: '${assetBasePath}health_BMI-r.png',
height:
MediaQuery.of(context).size.height * 0.10,
),
const SizedBox(
height: 4,
),
AppText(
"${TranslationBase.of(context).bmiHealthy}",
fontFamily: 'Poppins',
fontSize: SizeConfig.textMultiplier * 1.4,
fontWeight: FontWeight.w700,
color: mode.getBMIStatus() == 2
? Color(0XFFD02127)
: null,
),
AppText(
"(11-20)",
fontFamily: 'Poppins',
fontSize: SizeConfig.textMultiplier * 1.4,
fontWeight: FontWeight.w700,
color: mode.getBMIStatus() == 2
? Color(0XFFD02127)
: null,
),
],
)),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Image.asset(
mode.getBMIStatus() != 3
? '${assetBasePath}ovrweight_BMI.png'
: '${assetBasePath}ovrweight_BMI-r.png',
height:
MediaQuery.of(context).size.height * 0.10,
),
const SizedBox(
height: 4,
),
AppText(
"${TranslationBase.of(context).bmiOverWeight}",
fontFamily: 'Poppins',
fontSize: SizeConfig.textMultiplier * 1.4,
fontWeight: FontWeight.w700,
color: mode.getBMIStatus() == 3
? Color(0XFFD02127)
: null,
),
AppText(
"(21-30)",
fontFamily: 'Poppins',
fontSize: SizeConfig.textMultiplier * 1.4,
fontWeight: FontWeight.w700,
color: mode.getBMIStatus() == 3
? Color(0XFFD02127)
: null,
),
],
)),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Image.asset(
mode.getBMIStatus() != 4
? '${assetBasePath}Obese_BMI.png'
: '${assetBasePath}Obese_BMI-r.png',
height:
MediaQuery.of(context).size.height * 0.10,
),
const SizedBox(
height: 4,
),
AppText(
"${TranslationBase.of(context).bmiObese}",
fontFamily: 'Poppins',
fontSize: SizeConfig.textMultiplier * 1.4,
fontWeight: FontWeight.w700,
color: mode.getBMIStatus() == 4
? Color(0XFFD02127)
: null,
),
AppText(
"(31-40>)",
fontFamily: 'Poppins',
fontSize: SizeConfig.textMultiplier * 1.4,
fontWeight: FontWeight.w700,
color: mode.getBMIStatus() == 4
? Color(0XFFD02127)
: null,
),
],
)),
],
)
],
),
),
Expanded(
child: Container(
margin: EdgeInsets.symmetric(horizontal: 8.0),
child : GridView.count(
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
crossAxisSpacing: 4,
mainAxisSpacing: 4,
childAspectRatio: 1 / 1.0,
crossAxisCount: 3,
children: [
InkWell( InkWell(
onTap: () => isNotOneAppointment onTap: () => isNotOneAppointment
? Navigator.push( ? Navigator.push(
@ -51,8 +251,10 @@ class VitalSignDetailsScreen extends StatelessWidget {
page: VitalSignItemDetailsScreen( page: VitalSignItemDetailsScreen(
pageKey: vitalSignDetails.Height, pageKey: vitalSignDetails.Height,
pageTitle: pageTitle:
TranslationBase.of(context).height, TranslationBase.of(context)
vitalList: mode.patientVitalSignsHistory, .height,
vitalList:
mode.patientVitalSignsHistory,
), ),
), ),
) )
@ -60,7 +262,8 @@ class VitalSignDetailsScreen extends StatelessWidget {
child: Container( child: Container(
child: VitalSignItem( child: VitalSignItem(
des: TranslationBase.of(context).height, des: TranslationBase.of(context).height,
imagePath: "${imageBasePath}vital_height.png", imagePath:
"${assetBasePath}height.png",
lastVal: mode.heightCm, lastVal: mode.heightCm,
unit: TranslationBase.of(context).cm, unit: TranslationBase.of(context).cm,
), ),
@ -74,23 +277,21 @@ class VitalSignDetailsScreen extends StatelessWidget {
page: VitalSignItemDetailsScreen( page: VitalSignItemDetailsScreen(
pageKey: vitalSignDetails.Weight, pageKey: vitalSignDetails.Weight,
pageTitle: pageTitle:
TranslationBase.of(context).weight, TranslationBase.of(context)
vitalList: mode.patientVitalSignsHistory, .weight,
vitalList:
mode.patientVitalSignsHistory,
), ),
), ),
) )
: null, : null,
child: VitalSignItem( child: VitalSignItem(
des: TranslationBase.of(context).weight, des: TranslationBase.of(context).weight,
imagePath: "${imageBasePath}vital_weight.png", imagePath: "${assetBasePath}weight.png",
unit: TranslationBase.of(context).kg, unit: TranslationBase.of(context).kg,
lastVal: mode.weightKg, lastVal: mode.weightKg,
), ),
), ),
],
),
Row(
children: <Widget>[
InkWell( InkWell(
onTap: () => isNotOneAppointment onTap: () => isNotOneAppointment
? Navigator.push( ? Navigator.push(
@ -98,49 +299,27 @@ class VitalSignDetailsScreen extends StatelessWidget {
FadePage( FadePage(
page: VitalSignItemDetailsScreen( page: VitalSignItemDetailsScreen(
pageKey: pageKey:
vitalSignDetails.BodyMeasurements, vitalSignDetails.Temperature,
pageTitle: TranslationBase.of(context) pageTitle:
.bodyMeasurements, TranslationBase.of(context)
vitalList: mode.patientVitalSignsHistory,
),
),
)
: null,
child: VitalSignItem(
des: TranslationBase.of(context).body,
imagePath: "${imageBasePath}vital_body_mass.png",
lastVal: mode.bodyMax,
unit: TranslationBase.of(context).mass,
),
),
InkWell(
onTap: () => isNotOneAppointment
? Navigator.push(
context,
FadePage(
page: VitalSignItemDetailsScreen(
pageKey: vitalSignDetails.Temperature,
pageTitle: TranslationBase.of(context)
.temperature, .temperature,
vitalList: mode.patientVitalSignsHistory, vitalList:
mode.patientVitalSignsHistory,
), ),
), ),
) )
: null, : null,
child: Container( child: Container(
child: VitalSignItem( child: VitalSignItem(
des: TranslationBase.of(context).temperature, des:
TranslationBase.of(context).temperature,
imagePath: imagePath:
"${imageBasePath}vital_temperature.png", "${assetBasePath}temperature.png",
lastVal: mode.temperatureCelcius, lastVal: mode.temperatureCelcius,
unit: TranslationBase.of(context).tempC, unit: TranslationBase.of(context).tempC,
), ),
), ),
), ),
],
),
Row(
children: <Widget>[
InkWell( InkWell(
onTap: () => isNotOneAppointment onTap: () => isNotOneAppointment
? Navigator.push( ? Navigator.push(
@ -149,15 +328,18 @@ class VitalSignDetailsScreen extends StatelessWidget {
page: VitalSignItemDetailsScreen( page: VitalSignItemDetailsScreen(
pageKey: vitalSignDetails.heart, pageKey: vitalSignDetails.heart,
pageTitle: pageTitle:
TranslationBase.of(context).heart, TranslationBase.of(context)
vitalList: mode.patientVitalSignsHistory, .heart,
vitalList:
mode.patientVitalSignsHistory,
), ),
), ),
) )
: null, : null,
child: VitalSignItem( child: VitalSignItem(
des: TranslationBase.of(context).heart, des: TranslationBase.of(context).heart,
imagePath: "${imageBasePath}vital_heart_rate.png", imagePath:
"${assetBasePath}heart_rate.png",
lastVal: mode.hartRat, lastVal: mode.hartRat,
unit: TranslationBase.of(context).bpm, unit: TranslationBase.of(context).bpm,
), ),
@ -168,52 +350,58 @@ class VitalSignDetailsScreen extends StatelessWidget {
context, context,
FadePage( FadePage(
page: VitalSignItemDetailsScreen( page: VitalSignItemDetailsScreen(
pageKey: vitalSignDetails.Respiration, pageKey:
pageTitle: TranslationBase.of(context) vitalSignDetails.Respiration,
pageTitle:
TranslationBase.of(context)
.respirationRate, .respirationRate,
vitalList: mode.patientVitalSignsHistory, vitalList:
mode.patientVitalSignsHistory,
), ),
), ),
) )
: null, : null,
child: VitalSignItem( child: VitalSignItem(
des: TranslationBase.of(context).respirationRate, des: TranslationBase.of(context)
imagePath: "${imageBasePath}vital_respiration.png", .respirationRate,
imagePath:
"${assetBasePath}respiration_rate.png",
lastVal: mode.respirationBeatPerMinute, lastVal: mode.respirationBeatPerMinute,
unit: TranslationBase.of(context).respirationSigns, unit: TranslationBase.of(context)
), .respirationSigns,
), ),
],
), ),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
InkWell( InkWell(
onTap: () => isNotOneAppointment onTap: () => isNotOneAppointment
? Navigator.push( ? Navigator.push(
context, context,
FadePage( FadePage(
page: VitalSignItemDetailsScreen( page: VitalSignItemDetailsScreen(
pageKey: vitalSignDetails.BloodPressure, pageKey:
pageTitle: TranslationBase.of(context) vitalSignDetails.BloodPressure,
pageTitle:
TranslationBase.of(context)
.bloodPressure, .bloodPressure,
vitalList: mode.patientVitalSignsHistory, vitalList:
mode.patientVitalSignsHistory,
), ),
), ),
) )
: null, : null,
child: VitalSignItem( child: VitalSignItem(
des: TranslationBase.of(context).bloodPressure, des:
TranslationBase.of(context).bloodPressure,
imagePath: imagePath:
"${imageBasePath}vital_blood-pressure.png", "${assetBasePath}blood_pressure.png",
lastVal: mode.bloodPressure, lastVal: mode.bloodPressure,
unit: TranslationBase.of(context).sysDias, unit: TranslationBase.of(context).sysDias,
), ),
), ),
], ],
), ),
],
), ),
),
],
) )
: Center( : Center(
child: AppText( child: AppText(

@ -1,9 +1,17 @@
import 'package:doctor_app_flutter/config/size_config.dart'; import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/rounded_container_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/rounded_container_widget.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart'; import 'package:hexcolor/hexcolor.dart';
class VitalSignItem extends StatelessWidget { class VitalSignItem extends StatelessWidget {
final String des;
final String lastVal;
final String unit;
final String imagePath;
final double height;
final double width;
const VitalSignItem( const VitalSignItem(
{Key key, {Key key,
@required this.des, @required this.des,
@ -14,77 +22,71 @@ class VitalSignItem extends StatelessWidget {
@required this.imagePath}) @required this.imagePath})
: super(key: key); : super(key: key);
final String des;
final String lastVal;
final String unit;
final String imagePath;
final double height;
final double width;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return RoundedContainer( return RoundedContainer(
margin: 0.025 * SizeConfig.realScreenWidth, // margin: 0.025 * SizeConfig.realScreenWidth,
height: 0.15 * SizeConfig.realScreenHeight, // height: 0.15 * SizeConfig.realScreenHeight,
width: 0.45 * SizeConfig.realScreenWidth, // width: 0.45 * SizeConfig.realScreenWidth,
child: Container( child: Container(
padding: EdgeInsets.all(5), padding: EdgeInsets.all(5),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[ children: <Widget>[
Container( Expanded(
height: 0.10 * SizeConfig.realScreenHeight, child: Container(
padding: EdgeInsets.only(top: 8),
child: Row( child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[ children: <Widget>[
Expanded( Expanded(
flex: 2, child: Container(
child: Align( padding: EdgeInsets.only(left: 8, right: 8),
alignment: Alignment.topLeft, child: Column(
child: Padding( crossAxisAlignment: CrossAxisAlignment.start,
padding: const EdgeInsets.all(8.0), mainAxisAlignment: MainAxisAlignment.start,
child: Text( children: [
des, AppText(
style: TextStyle( "$lastVal",
fontSize: 1.7 * SizeConfig.textMultiplier, fontFamily: 'Poppins',
fontSize: SizeConfig.textMultiplier * 1.6,
fontWeight: FontWeight.w800,
margin: 0,
),
AppText(
"$unit",
fontFamily: 'Poppins',
fontSize: SizeConfig.textMultiplier * 1.3,
fontWeight: FontWeight.w700,
color: HexColor('#B8382C'), color: HexColor('#B8382C'),
fontWeight: FontWeight.bold, margin: 0,
),
), ),
],
), ),
), ),
), ),
Expanded( Container(
flex: 1,
child: Container(
child: Image.asset( child: Image.asset(
imagePath, imagePath,
width: 40, width: 40,
height: 40, height: 40,
)), ))
)
], ],
), ),
), ),
Expanded( ),
child: Container( Container(
width: double.infinity, width: double.infinity,
child: Align( child: Align(
alignment: Alignment.topRight, alignment: Alignment.topLeft,
child: Container( child: Container(
margin: EdgeInsets.only(left: 5, right: 5), margin: EdgeInsets.only(left: 5, right: 5),
child: RichText( child: AppText(
text: TextSpan( "$des",
style: TextStyle(color: Colors.black), fontFamily: 'Poppins',
children: [ fontSize: SizeConfig.textMultiplier * 1.5,
TextSpan(text: "$lastVal "), fontWeight: FontWeight.w600,
TextSpan(
text: unit,
style: TextStyle(
color: HexColor('#B8382C'),
),
),
]),
),
), ),
), ),
), ),

@ -225,16 +225,34 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
return SingleChildScrollView( return SingleChildScrollView(
child: Container( child: Container(
height: MediaQuery.of(context).size.height * 1.45, height: MediaQuery.of(context).size.height * 1.45,
color: Color(0xffF8F8F8),
child: Padding( child: Padding(
padding: EdgeInsets.symmetric( padding: EdgeInsets.symmetric(
horizontal: 12.0, vertical: 10.0), horizontal: 12.0, vertical: 10.0),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
//mainAxisAlignment: MainAxisAlignment.spaceEvenly, //mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Row(
children: [ children: [
AppText( AppText(
TranslationBase.of(context).medicines.toUpperCase(), 'New Prescription Order',
fontWeight: FontWeight.w900, fontWeight: FontWeight.w700,
fontSize: 20,
),
SizedBox(
width: MediaQuery.of(context).size.width * 0.32,
),
InkWell(
child: Icon(
Icons.close,
size: 23.0,
),
onTap: () {
Navigator.pop(context);
},
)
],
), ),
SizedBox( SizedBox(
height: spaceBetweenTextFileds, height: spaceBetweenTextFileds,
@ -248,6 +266,7 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
Container( Container(
height: MediaQuery.of(context).size.height * height: MediaQuery.of(context).size.height *
0.070, 0.070,
color: Colors.white,
child: InkWell( child: InkWell(
onTap: model.allMedicationList != null onTap: model.allMedicationList != null
? () { ? () {
@ -340,8 +359,7 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
itemID: _selectedMedication itemID: _selectedMedication
.itemId); .itemId);
}, },
decoration: decoration: textFieldSelectorDecoration(
textFieldSelectorDecoration(
TranslationBase.of(context) TranslationBase.of(context)
.searchMedicineNameHere, .searchMedicineNameHere,
_selectedMedication != null _selectedMedication != null
@ -349,8 +367,9 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
.description + .description +
('${_selectedMedication.genericName}') ('${_selectedMedication.genericName}')
: null, : null,
true, false,
), suffixIcon:
Icon(Icons.search)),
enabled: false, enabled: false,
), ),
), ),
@ -361,7 +380,10 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
Container( Container(
child: Row( child: Row(
children: [ children: [
AppText('Order Type'), AppText(
'Order Type',
fontWeight: FontWeight.w600,
),
Radio( Radio(
activeColor: Color(0xFFB9382C), activeColor: Color(0xFFB9382C),
value: 1, value: 1,
@ -445,6 +467,7 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
width: 10.0, width: 10.0,
), ),
Container( Container(
color: Colors.white,
width: MediaQuery.of(context) width: MediaQuery.of(context)
.size .size
.width * .width *
@ -489,7 +512,7 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
child: TextField( child: TextField(
decoration: decoration:
textFieldSelectorDecoration( textFieldSelectorDecoration(
'UNIT Type', 'UNIT',
units != null units != null
? units['description'] ? units['description']
: null, : null,
@ -504,6 +527,7 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
SizedBox(height: spaceBetweenTextFileds), SizedBox(height: spaceBetweenTextFileds),
Container( Container(
height: screenSize.height * 0.070, height: screenSize.height * 0.070,
color: Colors.white,
child: InkWell( child: InkWell(
onTap: model.itemMedicineListRoute != null onTap: model.itemMedicineListRoute != null
? () { ? () {
@ -553,6 +577,7 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
SizedBox(height: spaceBetweenTextFileds), SizedBox(height: spaceBetweenTextFileds),
Container( Container(
height: screenSize.height * 0.070, height: screenSize.height * 0.070,
color: Colors.white,
child: InkWell( child: InkWell(
onTap: model.itemMedicineList != null onTap: model.itemMedicineList != null
? () { ? () {
@ -620,6 +645,7 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
SizedBox(height: spaceBetweenTextFileds), SizedBox(height: spaceBetweenTextFileds),
Container( Container(
height: screenSize.height * 0.070, height: screenSize.height * 0.070,
color: Colors.white,
child: InkWell( child: InkWell(
onTap: model.medicationDoseTimeList != onTap: model.medicationDoseTimeList !=
null null
@ -667,6 +693,7 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
Container( Container(
height: screenSize.height * 0.070, height: screenSize.height * 0.070,
width: double.infinity, width: double.infinity,
color: Colors.white,
child: Row( child: Row(
children: [ children: [
Container( Container(
@ -692,7 +719,7 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
indication != null indication != null
? indication['name'] ? indication['name']
: null, : null,
true), false),
enabled: true, enabled: true,
readOnly: true, readOnly: true,
), ),
@ -703,6 +730,7 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
.size .size
.width * .width *
0.65, 0.65,
color: Colors.white,
child: InkWell( child: InkWell(
onTap: indicationList != null onTap: indicationList != null
? () { ? () {
@ -722,7 +750,7 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
indication != null indication != null
? indication['name'] ? indication['name']
: null, : null,
true), false),
enabled: true, enabled: true,
readOnly: true, readOnly: true,
), ),
@ -734,14 +762,13 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
SizedBox(height: spaceBetweenTextFileds), SizedBox(height: spaceBetweenTextFileds),
Container( Container(
height: screenSize.height * 0.070, height: screenSize.height * 0.070,
color: Colors.white,
child: InkWell( child: InkWell(
onTap: () => onTap: () =>
selectDate(context, widget.model), selectDate(context, widget.model),
child: TextField( child: TextField(
decoration: decoration: textFieldSelectorDecoration(
Helpers.textFieldSelectorDecoration( TranslationBase.of(context).date,
TranslationBase.of(context)
.date,
selectedDate != null selectedDate != null
? "${DateUtils.convertStringToDateFormat(selectedDate.toString(), "yyyy-MM-dd")}" ? "${DateUtils.convertStringToDateFormat(selectedDate.toString(), "yyyy-MM-dd")}"
: null, : null,
@ -757,6 +784,7 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
SizedBox(height: spaceBetweenTextFileds), SizedBox(height: spaceBetweenTextFileds),
Container( Container(
height: screenSize.height * 0.070, height: screenSize.height * 0.070,
color: Colors.white,
child: InkWell( child: InkWell(
onTap: model.medicationDurationList != onTap: model.medicationDurationList !=
null null
@ -825,6 +853,7 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
SizedBox(height: spaceBetweenTextFileds), SizedBox(height: spaceBetweenTextFileds),
Container( Container(
height: screenSize.height * 0.070, height: screenSize.height * 0.070,
color: Colors.white,
child: InkWell( child: InkWell(
onTap: model.allMedicationList != null onTap: model.allMedicationList != null
? () { ? () {
@ -857,7 +886,7 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
decoration: textFieldSelectorDecoration( decoration: textFieldSelectorDecoration(
"UOM", "UOM",
uom != null ? uom : null, uom != null ? uom : null,
true), false),
//enabled: false, //enabled: false,
readOnly: true, readOnly: true,
), ),
@ -866,6 +895,7 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
SizedBox(height: spaceBetweenTextFileds), SizedBox(height: spaceBetweenTextFileds),
Container( Container(
height: screenSize.height * 0.070, height: screenSize.height * 0.070,
color: Colors.white,
child: InkWell( child: InkWell(
onTap: model.allMedicationList != null onTap: model.allMedicationList != null
? () { ? () {
@ -901,7 +931,7 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
? "Box Quantity: " + ? "Box Quantity: " +
model.boxQuintity.toString() model.boxQuintity.toString()
: null, : null,
true), false),
//enabled: false, //enabled: false,
readOnly: true, readOnly: true,
), ),
@ -932,8 +962,10 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
alignment: WrapAlignment.center, alignment: WrapAlignment.center,
children: <Widget>[ children: <Widget>[
AppButton( AppButton(
color: Color(0xff359846),
title: TranslationBase.of(context) title: TranslationBase.of(context)
.addMedication, .addMedication,
fontWeight: FontWeight.w600,
onPressed: () { onPressed: () {
// formKey.currentState.save(); // formKey.currentState.save();
// Navigator.pop(context); // Navigator.pop(context);
@ -1093,11 +1125,11 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
borderRadius: BorderRadius.circular(8), borderRadius: BorderRadius.circular(8),
), ),
enabledBorder: OutlineInputBorder( enabledBorder: OutlineInputBorder(
borderSide: BorderSide(color: Color(0xFFCCCCCC), width: 2.0), borderSide: BorderSide(color: Color(0xFFEFEFEF), width: 2.0),
borderRadius: BorderRadius.circular(8), borderRadius: BorderRadius.circular(8),
), ),
disabledBorder: OutlineInputBorder( disabledBorder: OutlineInputBorder(
borderSide: BorderSide(color: Color(0xFFCCCCCC), width: 2.0), borderSide: BorderSide(color: Color(0xFFEFEFEF), width: 2.0),
borderRadius: BorderRadius.circular(8), borderRadius: BorderRadius.circular(8),
), ),
hintText: selectedText != null ? selectedText : hintText, hintText: selectedText != null ? selectedText : hintText,
@ -1105,13 +1137,22 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
? suffixIcon != null ? suffixIcon != null
? suffixIcon ? suffixIcon
: Icon( : Icon(
Icons.arrow_drop_down, Icons.keyboard_arrow_down_sharp,
color: Colors.black, color: Color(0xff2E303A),
) )
: null, : null,
hintStyle: TextStyle( hintStyle: TextStyle(
fontSize: 14, fontSize: 13,
color: Colors.grey.shade600, color: Color(0xff2E303A),
fontFamily: 'Poppins',
fontWeight: FontWeight.w600,
),
labelText: selectedText != null ? '$hintText\n$selectedText' : null,
labelStyle: TextStyle(
fontSize: 13,
color: Color(0xff2E303A),
fontFamily: 'Poppins',
fontWeight: FontWeight.w600,
), ),
); );
} }

@ -30,6 +30,50 @@ class PrescriptionItemsPage extends StatelessWidget {
child: Container( child: Container(
child: Column( child: Column(
children: [ children: [
Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(12),
color: Colors.white,
),
margin: EdgeInsets.all(12),
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
margin: EdgeInsets.only(left: 18,right: 18),
child: Texts('Name ',bold: true,)),
Row(
children: [
SizedBox(width: 18,),
Container(
decoration: BoxDecoration(
shape: BoxShape.circle,
border: Border.all(width: 0.5,color: Colors.grey)
),
height: 45,
width: 45,
),
SizedBox(width: 10,),
Expanded(child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Texts('Route: Monthly'),
Texts('Does: 2 Time a day with 1 hour gap'),
SizedBox(height: 12,),
Texts('Note: 2 Time a day with 1 hour gap'),
],
),)
],
)
],
),
),
),
if (!prescriptions.isInOutPatient) if (!prescriptions.isInOutPatient)
...List.generate( ...List.generate(
model.prescriptionReportList.length, model.prescriptionReportList.length,

@ -6,6 +6,8 @@ import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/screens/prescription/prescription_items_page.dart'; import 'package:doctor_app_flutter/screens/prescription/prescription_items_page.dart';
import 'package:doctor_app_flutter/util/date-utils.dart'; import 'package:doctor_app_flutter/util/date-utils.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-profile-header-new-design.dart';
import 'package:doctor_app_flutter/widgets/shared/Text.dart';
import 'package:doctor_app_flutter/widgets/shared/app_expandable_notifier_new.dart'; import 'package:doctor_app_flutter/widgets/shared/app_expandable_notifier_new.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/doctor_card.dart'; import 'package:doctor_app_flutter/widgets/shared/doctor_card.dart';
@ -20,101 +22,90 @@ class PrescriptionsPage extends StatelessWidget {
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'];
ProjectViewModel projectViewModel = Provider.of(context); ProjectViewModel projectViewModel = Provider.of(context);
return BaseView<PrescriptionsViewModel>( return BaseView<PrescriptionsViewModel>(
onModelReady: (model) => model.getPrescriptions(patient), onModelReady: (model) => model.getPrescriptions(patient),
builder: (_, model, w) => AppScaffold( builder: (_, model, w) => AppScaffold(
baseViewModel: model, baseViewModel: model,
isShowAppBar: true, isShowAppBar: false,
appBarTitle: TranslationBase.of(context).prescriptions,
body: FractionallySizedBox( body: FractionallySizedBox(
widthFactor: 1.0, widthFactor: 1.0,
child: ListView( child: ListView(
physics: BouncingScrollPhysics(), physics: BouncingScrollPhysics(),
children: <Widget>[ children: <Widget>[
Row( PatientProfileHeaderNewDesign(patient,arrivalType??'0',patientType),
children: <Widget>[ SizedBox(height: 12,),
Expanded( Padding(
flex: 1, padding: const EdgeInsets.all(8.0),
child: InkWell( child: Column(
onTap: () => model crossAxisAlignment: CrossAxisAlignment.start,
.setFilterType(FilterType.Clinic), children: [
child: ListTile( Texts('Order',style: "caption2",color: Colors.black,fontSize: 13,),
title: Text(TranslationBase.of(context).clinic), Texts('Prescriptions',bold: true,fontSize: 22,),
leading: Radio( ],
value: FilterType.Clinic, ),
groupValue: model.filterType, ),
onChanged: (FilterType value) { if(patientType!=null && patientType=='7')
model.setFilterType(value); InkWell(
onTap: (){
//TODO Hussam call the add page here
}, },
child: Container(
width: double.maxFinite,
height: 140,
margin: EdgeInsets.all(10),
decoration: BoxDecoration(
color: Colors.grey[300],
borderRadius: BorderRadius.circular(10),
), ),
child: Center(
child: Container(
height: 90,
child: Column(
children: [
Container(
height: 40,
width: 40,
decoration: BoxDecoration(
color: Colors.grey[600],
borderRadius: BorderRadius.circular(10),
), ),
child: Center(
child: Icon(Icons.add,color: Colors.white,),
), ),
), ),
Expanded( SizedBox(height: 10,),
flex: 1, Texts('Apply for New Prescriptions Order',color: Colors.grey[600],fontWeight: FontWeight.w600,)
child: InkWell( ],
onTap: () => model
.setFilterType(FilterType.Hospital),
child: ListTile(
title: Text(TranslationBase.of(context).hospital),
leading: Radio(
value: FilterType.Hospital,
groupValue: model.filterType,
onChanged: (FilterType value) {
model.setFilterType(value);
},
), ),
), ),
), ),
)
],
), ),
...List.generate( ),
model.prescriptionsOrderList.length, ...List.generate(model.prescriptionsList.length, (index) => InkWell(
(index) => AppExpandableNotifier(
title: model
.prescriptionsOrderList[index].filterName,
bodyWidget: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: model
.prescriptionsOrderList[index].prescriptionsList
.map((prescriptions) {
return InkWell(
onTap: () => Navigator.push( onTap: () => Navigator.push(
context, context,
FadePage( FadePage(
page: PrescriptionItemsPage( page: PrescriptionItemsPage(
prescriptions: prescriptions, prescriptions: model.prescriptionsList[index],
patient: patient, patient: patient,
), ),
), ),
), ),
child: DoctorCard( child: DoctorCard(
name: prescriptions.doctorName, doctorName: model.prescriptionsList[index].doctorName,
profileUrl: prescriptions.doctorImageURL, profileUrl: model.prescriptionsList[index].doctorImageURL,
rat: branch: model.prescriptionsList[index].name,
prescriptions.actualDoctorRate.toDouble(), appointmentDate: DateUtils.getDateTimeFromServerFormat(model.prescriptionsList[index].appointmentDate,),
subName: prescriptions.name, orderNo: model.prescriptionsList[index].appointmentNo.toString(),
isInOutPatient: prescriptions.isInOutPatient, invoiceNO:model.prescriptionsList[index].appointmentNo.toString(),
isLiveCareAppointment:
prescriptions.isLiveCareAppointment,
date: projectViewModel.isArabic
? DateUtils
.getMonthDayYearDateFormattedAr(
DateUtils.convertStringToDate(
prescriptions
.appointmentDate))
: DateUtils.getMonthDayYearDateFormatted(
DateUtils.convertStringToDate(
prescriptions.appointmentDate)),
),
);
}).toList(),
)),
) )
))
], ],
), ),
), ),

@ -0,0 +1,319 @@
import 'package:doctor_app_flutter/client/base_app_client.dart';
import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/enum/viewstate.dart';
import 'package:doctor_app_flutter/core/model/procedure/ControlsModel.dart';
import 'package:doctor_app_flutter/core/model/procedure/categories_procedure.dart';
import 'package:doctor_app_flutter/core/model/procedure/post_procedure_req_model.dart';
import 'package:doctor_app_flutter/core/model/procedure/procedure_valadate_request_model.dart';
import 'package:doctor_app_flutter/core/viewModel/procedure_View_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/util/dr_app_toast_msg.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/shared/TextFields.dart';
import 'package:doctor_app_flutter/widgets/shared/app_buttons_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/dialogs/dailog-list-select.dart';
import 'package:doctor_app_flutter/widgets/shared/network_base_view.dart';
import 'package:flutter/material.dart';
import 'entity_list_checkbox_search_widget.dart';
import 'entity_list_procedure_widget.dart';
valdateProcedure(ProcedureViewModel model, PatiantInformtion patient,
List<EntityList> entityList) async {
ProcedureValadteRequestModel procedureValadteRequestModel =
new ProcedureValadteRequestModel();
procedureValadteRequestModel.patientMRN = patient.appointmentNo;
procedureValadteRequestModel.episodeID = patient.episodeNo;
procedureValadteRequestModel.appointmentNo = patient.appointmentNo;
}
postProcedure(
{ProcedureViewModel model,
String remarks,
String orderType,
PatiantInformtion patient,
List<EntityList> entityList}) async {
PostProcedureReqModel postProcedureReqModel = new PostProcedureReqModel();
ProcedureValadteRequestModel procedureValadteRequestModel =
new ProcedureValadteRequestModel();
procedureValadteRequestModel.patientMRN = patient.patientMRN;
procedureValadteRequestModel.episodeID = patient.episodeNo;
procedureValadteRequestModel.appointmentNo = patient.appointmentNo;
List<Procedures> controlsProcedure = List();
postProcedureReqModel.appointmentNo = patient.appointmentNo;
postProcedureReqModel.episodeID = patient.episodeNo;
postProcedureReqModel.patientMRN = patient.patientMRN;
entityList.forEach((element) {
procedureValadteRequestModel.procedure = [element.procedureId];
List<Controls> controls = List();
controls.add(
Controls(
code: "remarks",
controlValue: element.remarks != null ? element.remarks : ""),
);
controls.add(
Controls(code: "ordertype", controlValue: "0"),
);
controlsProcedure.add(Procedures(
category: element.categoryID,
procedure: element.procedureId,
controls: controls));
});
postProcedureReqModel.procedures = controlsProcedure;
await model.valadteProcedure(procedureValadteRequestModel);
if (model.state == ViewState.Idle) {
if (model.valadteProcedureList[0].entityList.length == 0) {
await model.postProcedure(postProcedureReqModel, patient.patientMRN);
if (model.state == ViewState.ErrorLocal) {
helpers.showErrorToast(model.error);
model.getLabs(patient);
} else if (model.state == ViewState.Idle) {
DrAppToastMsg.showSuccesToast('procedure has been added');
}
} else {
if (model.state == ViewState.ErrorLocal) {
helpers.showErrorToast(model.error);
model.getLabs(patient);
} else if (model.state == ViewState.Idle) {
helpers.showErrorToast(
model.valadteProcedureList[0].entityList[0].warringMessages);
}
}
} else {
helpers.showErrorToast(model.error);
}
}
void addSelectedLabOrder(
context, ProcedureViewModel model, PatiantInformtion patient) {
showModalBottomSheet(
context: context,
isScrollControlled: true,
builder: (BuildContext bc) {
return AddSelectedLabOrder(
model: model,
patient: patient,
);
});
}
class AddSelectedLabOrder extends StatefulWidget {
final ProcedureViewModel model;
final PatiantInformtion patient;
const AddSelectedLabOrder({Key key, this.model, this.patient})
: super(key: key);
@override
_AddSelectedLabOrderState createState() =>
_AddSelectedLabOrderState(patient: patient, model: model);
}
class _AddSelectedLabOrderState extends State<AddSelectedLabOrder> {
int selectedType;
ProcedureViewModel model;
PatiantInformtion patient;
_AddSelectedLabOrderState({this.patient, this.model});
TextEditingController procedureController = TextEditingController();
TextEditingController remarksController = TextEditingController();
List<EntityList> entityList = List();
List<EntityList> entityListProcedure = List();
dynamic selectedCategory;
setSelectedType(int val) {
setState(() {
selectedType = val;
});
}
@override
Widget build(BuildContext context) {
final screenSize = MediaQuery.of(context).size;
return BaseView<ProcedureViewModel>(
onModelReady: (model) => model.getProcedureCategory(
categoryName: "Laboratory", categoryID: "02"),
builder: (BuildContext context, ProcedureViewModel model, Widget child) =>
NetworkBaseView(
baseViewModel: model,
child: DraggableScrollableSheet(
minChildSize: 0.90,
initialChildSize: 0.95,
maxChildSize: 1.0,
builder: (BuildContext context, ScrollController scrollController) {
return SingleChildScrollView(
child: Container(
height: MediaQuery.of(context).size.height * 1.20,
child: Padding(
padding: EdgeInsets.all(12.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
AppText(
'New Lab Order',
fontWeight: FontWeight.w900,
fontSize: 18.0,
),
SizedBox(
height: 10.0,
),
if (widget.model.categoriesList.length != 0)
NetworkBaseView(
baseViewModel: model,
child: EntityListCheckboxSearchWidget(
model: widget.model,
masterList:
widget.model.categoriesList[0].entityList,
removeHistory: (item) {
setState(() {
entityList.remove(item);
});
},
addHistory: (history) {
setState(() {
entityList.add(history);
});
},
addSelectedHistories: () {
//TODO build your fun herr
// widget.addSelectedHistories();
},
isEntityListSelected: (master) =>
isEntityListSelected(master),
)),
SizedBox(
height: 15.0,
),
Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
// Container(
// child: Row(
// children: [
// AppText(
// TranslationBase.of(context).orderType),
// Radio(
// activeColor: Color(0xFFB9382C),
// value: 1,
// groupValue: selectedType,
// onChanged: (value) {
// setSelectedType(value);
// },
// ),
// Text('routine'),
// Radio(
// activeColor: Color(0xFFB9382C),
// groupValue: selectedType,
// value: 0,
// onChanged: (value) {
// setSelectedType(value);
// },
// ),
// Text(TranslationBase.of(context).urgent),
// ],
// ),
// ),
// SizedBox(
// height: 15.0,
// ),
// TextFields(
// hintText: TranslationBase.of(context).remarks,
// controller: remarksController,
// minLines: 3,
// maxLines: 5,
// ),
SizedBox(
height: 100.0,
),
Container(
margin: EdgeInsets.all(
SizeConfig.widthMultiplier * 5),
child: Wrap(
alignment: WrapAlignment.center,
children: <Widget>[
AppButton(
title: TranslationBase.of(context)
.addSelectedProcedures,
color: Color(0xff359846),
onPressed: () {
//print(entityList.toString());
onPressed:
if (entityList.isEmpty == true) {
DrAppToastMsg.showErrorToast(
"Fill the mandatory procedure details");
return;
}
Navigator.pop(context);
postProcedure(
orderType: selectedType.toString(),
entityList: entityList,
patient: patient,
model: widget.model,
remarks: remarksController.text);
},
),
],
),
),
],
)
],
),
),
),
);
}),
),
);
}
bool isEntityListSelected(EntityList masterKey) {
Iterable<EntityList> history = entityList
.where((element) => masterKey.procedureId == element.procedureId);
if (history.length > 0) {
return true;
}
return false;
}
InputDecoration textFieldSelectorDecoration(
String hintText, String selectedText, bool isDropDown,
{Icon suffixIcon}) {
return InputDecoration(
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(color: Color(0xFFCCCCCC), width: 2.0),
borderRadius: BorderRadius.circular(8),
),
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(color: Color(0xFFCCCCCC), width: 2.0),
borderRadius: BorderRadius.circular(8),
),
disabledBorder: OutlineInputBorder(
borderSide: BorderSide(color: Color(0xFFCCCCCC), width: 2.0),
borderRadius: BorderRadius.circular(8),
),
hintText: selectedText != null ? selectedText : hintText,
suffixIcon: isDropDown
? suffixIcon != null
? suffixIcon
: Icon(
Icons.arrow_drop_down,
color: Colors.black,
)
: null,
hintStyle: TextStyle(
fontSize: 14,
color: Colors.grey.shade600,
),
);
}
}

@ -0,0 +1,319 @@
import 'package:doctor_app_flutter/client/base_app_client.dart';
import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/enum/viewstate.dart';
import 'package:doctor_app_flutter/core/model/procedure/ControlsModel.dart';
import 'package:doctor_app_flutter/core/model/procedure/categories_procedure.dart';
import 'package:doctor_app_flutter/core/model/procedure/post_procedure_req_model.dart';
import 'package:doctor_app_flutter/core/model/procedure/procedure_valadate_request_model.dart';
import 'package:doctor_app_flutter/core/viewModel/procedure_View_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/util/dr_app_toast_msg.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/shared/TextFields.dart';
import 'package:doctor_app_flutter/widgets/shared/app_buttons_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/dialogs/dailog-list-select.dart';
import 'package:doctor_app_flutter/widgets/shared/network_base_view.dart';
import 'package:flutter/material.dart';
import 'entity_list_checkbox_search_widget.dart';
import 'entity_list_procedure_widget.dart';
valdateProcedure(ProcedureViewModel model, PatiantInformtion patient,
List<EntityList> entityList) async {
ProcedureValadteRequestModel procedureValadteRequestModel =
new ProcedureValadteRequestModel();
procedureValadteRequestModel.patientMRN = patient.appointmentNo;
procedureValadteRequestModel.episodeID = patient.episodeNo;
procedureValadteRequestModel.appointmentNo = patient.appointmentNo;
}
postProcedure(
{ProcedureViewModel model,
String remarks,
String orderType,
PatiantInformtion patient,
List<EntityList> entityList}) async {
PostProcedureReqModel postProcedureReqModel = new PostProcedureReqModel();
ProcedureValadteRequestModel procedureValadteRequestModel =
new ProcedureValadteRequestModel();
procedureValadteRequestModel.patientMRN = patient.patientMRN;
procedureValadteRequestModel.episodeID = patient.episodeNo;
procedureValadteRequestModel.appointmentNo = patient.appointmentNo;
List<Procedures> controlsProcedure = List();
postProcedureReqModel.appointmentNo = patient.appointmentNo;
postProcedureReqModel.episodeID = patient.episodeNo;
postProcedureReqModel.patientMRN = patient.patientMRN;
entityList.forEach((element) {
procedureValadteRequestModel.procedure = [element.procedureId];
List<Controls> controls = List();
controls.add(
Controls(
code: "remarks",
controlValue: element.remarks != null ? element.remarks : ""),
);
controls.add(
Controls(code: "ordertype", controlValue: "0"),
);
controlsProcedure.add(Procedures(
category: element.categoryID,
procedure: element.procedureId,
controls: controls));
});
postProcedureReqModel.procedures = controlsProcedure;
await model.valadteProcedure(procedureValadteRequestModel);
if (model.state == ViewState.Idle) {
if (model.valadteProcedureList[0].entityList.length == 0) {
await model.postProcedure(postProcedureReqModel, patient.patientMRN);
if (model.state == ViewState.ErrorLocal) {
helpers.showErrorToast(model.error);
model.getPatientRadOrders(patient);
} else if (model.state == ViewState.Idle) {
DrAppToastMsg.showSuccesToast('procedure has been added');
}
} else {
if (model.state == ViewState.ErrorLocal) {
helpers.showErrorToast(model.error);
model.getPatientRadOrders(patient);
} else if (model.state == ViewState.Idle) {
helpers.showErrorToast(
model.valadteProcedureList[0].entityList[0].warringMessages);
}
}
} else {
helpers.showErrorToast(model.error);
}
}
void addSelectedRadiologyOrder(
context, ProcedureViewModel model, PatiantInformtion patient) {
showModalBottomSheet(
context: context,
isScrollControlled: true,
builder: (BuildContext bc) {
return AddSelectedRadiologyOrder(
model: model,
patient: patient,
);
});
}
class AddSelectedRadiologyOrder extends StatefulWidget {
final ProcedureViewModel model;
final PatiantInformtion patient;
const AddSelectedRadiologyOrder({Key key, this.model, this.patient})
: super(key: key);
@override
_AddSelectedRadiologyOrderState createState() =>
_AddSelectedRadiologyOrderState(patient: patient, model: model);
}
class _AddSelectedRadiologyOrderState extends State<AddSelectedRadiologyOrder> {
int selectedType;
ProcedureViewModel model;
PatiantInformtion patient;
_AddSelectedRadiologyOrderState({this.patient, this.model});
TextEditingController procedureController = TextEditingController();
TextEditingController remarksController = TextEditingController();
List<EntityList> entityList = List();
List<EntityList> entityListProcedure = List();
dynamic selectedCategory;
setSelectedType(int val) {
setState(() {
selectedType = val;
});
}
@override
Widget build(BuildContext context) {
final screenSize = MediaQuery.of(context).size;
return BaseView<ProcedureViewModel>(
onModelReady: (model) => model.getProcedureCategory(
categoryName: "Radiology", categoryID: "03"),
builder: (BuildContext context, ProcedureViewModel model, Widget child) =>
NetworkBaseView(
baseViewModel: model,
child: DraggableScrollableSheet(
minChildSize: 0.90,
initialChildSize: 0.95,
maxChildSize: 1.0,
builder: (BuildContext context, ScrollController scrollController) {
return SingleChildScrollView(
child: Container(
height: MediaQuery.of(context).size.height * 1.20,
child: Padding(
padding: EdgeInsets.all(12.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
AppText(
'New Radiology Order',
fontWeight: FontWeight.w900,
fontSize: 18.0,
),
SizedBox(
height: 10.0,
),
if (widget.model.categoriesList.length != 0)
NetworkBaseView(
baseViewModel: model,
child: EntityListCheckboxSearchWidget(
model: widget.model,
masterList:
widget.model.categoriesList[0].entityList,
removeHistory: (item) {
setState(() {
entityList.remove(item);
});
},
addHistory: (history) {
setState(() {
entityList.add(history);
});
},
addSelectedHistories: () {
//TODO build your fun herr
// widget.addSelectedHistories();
},
isEntityListSelected: (master) =>
isEntityListSelected(master),
)),
SizedBox(
height: 15.0,
),
Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
// Container(
// child: Row(
// children: [
// AppText(
// TranslationBase.of(context).orderType),
// Radio(
// activeColor: Color(0xFFB9382C),
// value: 1,
// groupValue: selectedType,
// onChanged: (value) {
// setSelectedType(value);
// },
// ),
// Text('routine'),
// Radio(
// activeColor: Color(0xFFB9382C),
// groupValue: selectedType,
// value: 0,
// onChanged: (value) {
// setSelectedType(value);
// },
// ),
// Text(TranslationBase.of(context).urgent),
// ],
// ),
// ),
// SizedBox(
// height: 15.0,
// ),
// TextFields(
// hintText: TranslationBase.of(context).remarks,
// controller: remarksController,
// minLines: 3,
// maxLines: 5,
// ),
SizedBox(
height: 100.0,
),
Container(
margin: EdgeInsets.all(
SizeConfig.widthMultiplier * 5),
child: Wrap(
alignment: WrapAlignment.center,
children: <Widget>[
AppButton(
title: TranslationBase.of(context)
.addSelectedProcedures,
color: Color(0xff359846),
onPressed: () {
//print(entityList.toString());
onPressed:
if (entityList.isEmpty == true) {
DrAppToastMsg.showErrorToast(
"Fill the mandatory procedure details");
return;
}
Navigator.pop(context);
postProcedure(
orderType: selectedType.toString(),
entityList: entityList,
patient: patient,
model: widget.model,
remarks: remarksController.text);
},
),
],
),
),
],
)
],
),
),
),
);
}),
),
);
}
bool isEntityListSelected(EntityList masterKey) {
Iterable<EntityList> history = entityList
.where((element) => masterKey.procedureId == element.procedureId);
if (history.length > 0) {
return true;
}
return false;
}
InputDecoration textFieldSelectorDecoration(
String hintText, String selectedText, bool isDropDown,
{Icon suffixIcon}) {
return InputDecoration(
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(color: Color(0xFFCCCCCC), width: 2.0),
borderRadius: BorderRadius.circular(8),
),
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(color: Color(0xFFCCCCCC), width: 2.0),
borderRadius: BorderRadius.circular(8),
),
disabledBorder: OutlineInputBorder(
borderSide: BorderSide(color: Color(0xFFCCCCCC), width: 2.0),
borderRadius: BorderRadius.circular(8),
),
hintText: selectedText != null ? selectedText : hintText,
suffixIcon: isDropDown
? suffixIcon != null
? suffixIcon
: Icon(
Icons.arrow_drop_down,
color: Colors.black,
)
: null,
hintStyle: TextStyle(
fontSize: 14,
color: Colors.grey.shade600,
),
);
}
}

@ -69,7 +69,7 @@ class _EntityListCheckboxSearchWidgetState
NetworkBaseView( NetworkBaseView(
baseViewModel: widget.model, baseViewModel: widget.model,
child: Container( child: Container(
height: MediaQuery.of(context).size.height * 0.45, height: MediaQuery.of(context).size.height * 0.55,
child: Center( child: Center(
child: Container( child: Container(
margin: EdgeInsets.only(top: 15), margin: EdgeInsets.only(top: 15),
@ -120,16 +120,20 @@ class _EntityListCheckboxSearchWidgetState
historyInfo.procedureName, historyInfo.procedureName,
variant: "bodyText", variant: "bodyText",
bold: true, bold: true,
color: Colors.black), color: Color(0xff575757)),
), ),
), ),
], ],
), ),
children: [ children: [
Container( Container(
child: Padding(
padding: EdgeInsets.symmetric(
horizontal: 12),
child: Row( child: Row(
children: [ children: [
AppText(TranslationBase.of(context) AppText(
TranslationBase.of(context)
.orderType), .orderType),
Radio( Radio(
activeColor: Color(0xFFB9382C), activeColor: Color(0xFFB9382C),
@ -163,12 +167,16 @@ class _EntityListCheckboxSearchWidgetState
], ],
), ),
), ),
),
SizedBox( SizedBox(
height: 15.0, height: 15.0,
), ),
TextFields( Padding(
hintText: padding: EdgeInsets.symmetric(
TranslationBase.of(context).remarks, horizontal: 12),
child: TextFields(
hintText: TranslationBase.of(context)
.remarks,
//controller: remarksController, //controller: remarksController,
onChanged: (value) { onChanged: (value) {
historyInfo.remarks = value; historyInfo.remarks = value;
@ -176,6 +184,7 @@ class _EntityListCheckboxSearchWidgetState
minLines: 3, minLines: 3,
maxLines: 5, maxLines: 5,
), ),
),
], ],
), ),
DividerWithSpacesAround(), DividerWithSpacesAround(),

@ -34,7 +34,7 @@ class _ProcedureScreenState extends State<ProcedureScreen> {
final routeArgs = ModalRoute.of(context).settings.arguments as Map; final routeArgs = ModalRoute.of(context).settings.arguments as Map;
patient = routeArgs['patient']; patient = routeArgs['patient'];
return BaseView<ProcedureViewModel>( return BaseView<ProcedureViewModel>(
onModelReady: (model) => model.getProcedure(mrn: 0), onModelReady: (model) => model.getProcedure(mrn: patient.patientId),
builder: (BuildContext context, ProcedureViewModel model, Widget child) => builder: (BuildContext context, ProcedureViewModel model, Widget child) =>
AppScaffold( AppScaffold(
isShowAppBar: true, isShowAppBar: true,

@ -256,9 +256,9 @@ class DateUtils {
/// get data formatted like Apr 26,2020 /// get data formatted like Apr 26,2020
/// [dateTime] convert DateTime to data formatted /// [dateTime] convert DateTime to data formatted
static String getMonthDayYearDateFormatted(DateTime dateTime) { static String getMonthDayYearDateFormatted(DateTime dateTime,{bool isArabic = false}) {
if (dateTime != null) if (dateTime != null)
return getMonth(dateTime.month) + return isArabic? getMonthArabic(dateTime.month): getMonth(dateTime.month) +
" " + " " +
dateTime.day.toString() + dateTime.day.toString() +
", " + ", " +
@ -267,6 +267,24 @@ class DateUtils {
return ""; return "";
} }
/// get data formatted like 26 Apr 2020
/// [dateTime] convert DateTime to data formatted
static String getDayMonthYearDateFormatted(DateTime dateTime,{bool isArabic = false}) {
if (dateTime != null)
return dateTime.day.toString()+" "+ "${isArabic? getMonthArabic(dateTime.month): getMonth(dateTime.month) }"+
" " +
dateTime.year.toString();
else
return "";
}
/// get data formatted like 10:45 PM
/// [dateTime] convert DateTime to data formatted
static String getHour(DateTime dateTime) {
return DateFormat('hh:mm a').format(dateTime);
}
static String getAgeByBirthday(dynamic birthday, BuildContext context) { static String getAgeByBirthday(dynamic birthday, BuildContext context) {
// https://leechy.dev/calculate-dates-diff-in-dart // https://leechy.dev/calculate-dates-diff-in-dart
DateTime birthDate = DateUtils.getDateTimeFromServerFormat(birthday); DateTime birthDate = DateUtils.getDateTimeFromServerFormat(birthday);

@ -648,8 +648,13 @@ class TranslationBase {
String get leanBodyWeight => String get leanBodyWeight =>
localizedValues['leanBodyWeight'][locale.languageCode]; localizedValues['leanBodyWeight'][locale.languageCode];
String get bodyMassIndex => String get bodyMassIndex => localizedValues['bodyMassIndex'][locale.languageCode];
localizedValues['bodyMassIndex'][locale.languageCode];
String get yourBodyMassIndex => localizedValues['yourBodyMassIndex'][locale.languageCode];
String get bmiUnderWeight => localizedValues['bmiUnderWeight'][locale.languageCode];
String get bmiHealthy => localizedValues['bmiHealthy'][locale.languageCode];
String get bmiOverWeight => localizedValues['bmiOverWeight'][locale.languageCode];
String get bmiObese => localizedValues['bmiObese'][locale.languageCode];
String get method => localizedValues['method'][locale.languageCode]; String get method => localizedValues['method'][locale.languageCode];

@ -1,13 +1,13 @@
import 'package:doctor_app_flutter/config/size_config.dart'; import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/models/doctor/list_gt_my_patients_question_model.dart';
import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart'; import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart';
import 'package:doctor_app_flutter/models/doctor/list_gt_my_patients_question_model.dart';
import 'package:doctor_app_flutter/util/date-utils.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/large_avatar.dart';
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/card_with_bg_widget.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart';
class DoctorReplyWidget extends StatefulWidget { class DoctorReplyWidget extends StatefulWidget {
final ListGtMyPatientsQuestions reply; final ListGtMyPatientsQuestions reply;
@ -22,224 +22,434 @@ class DoctorReplyWidget extends StatefulWidget {
class _DoctorReplyWidgetState extends State<DoctorReplyWidget> { class _DoctorReplyWidgetState extends State<DoctorReplyWidget> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Stack( return Container(
children: <Widget>[ child: CardWithBgWidget(
Container( bgColor:
margin: EdgeInsets.symmetric(vertical: 10.0), widget.reply.status == 1
width: double.infinity, ? Color(0xffc4aa54)
decoration: BoxDecoration( : Colors.red[700],
color: HexColor('#FFFFFF'), hasBorder: false,
borderRadius: BorderRadius.all( widget: Container(
Radius.circular(20.0), // padding: EdgeInsets.only(left: 20, right: 0, bottom: 0),
), child: InkWell(
),
child: Container(
margin: EdgeInsets.all(5),
child: Column(
children: <Widget>[
SizedBox(height: 18,),
Container(
margin: EdgeInsets.only(right: 15),
child: Row(
children: <Widget>[
SizedBox(width: 5,),
//LargeAvatar(icon: widget.reply.gender == 0 ? DoctorApp.male : DoctorApp.femaleicon ,),
Container(
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment(-1, -1),
end: Alignment(1, 1),
colors: [
Colors.grey[100],
Colors.grey[200],
]),
boxShadow: [
BoxShadow(
color: Color.fromRGBO(0, 0, 0, 0.08),
offset: Offset(0.0, 5.0),
blurRadius: 16.0)
],
borderRadius: BorderRadius.all(Radius.circular(50.0)),
),
width: 80,
height: 80,
child: Icon(widget.reply.gender == 1 ? DoctorApp.male : DoctorApp.female_icon,size: 80,)),
SizedBox(width: 15,),
Expanded(
child: Container(
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
AppText(
widget.reply.patientName,
fontSize: 1.5 * SizeConfig.textMultiplier,
fontWeight: FontWeight.bold,
),
SizedBox(
height: 5,
),
Row( Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
AppText( RichText(
TranslationBase.of(context).fileNo, text: new TextSpan(
fontSize: 1.7 * SizeConfig.textMultiplier, style: new TextStyle(
fontWeight: FontWeight.bold, fontSize: 2.0 * SizeConfig.textMultiplier,
), color: Colors.black),
Container( children: <TextSpan>[
margin: EdgeInsets.only(left: 5), new TextSpan(
child: AppText( text: widget.reply.infoStatus!=null ? widget.reply.infoStatus :'',
'${widget.reply.patientID}', style: TextStyle(
fontSize: 1.7 * SizeConfig.textMultiplier, color: widget.reply.status != null
fontWeight: FontWeight.bold, ? widget.reply.status == 1
? Color(0xffc4aa54)
: widget.reply.status == 2
? Colors.green[700]
: Colors.red[700]
: Colors.grey[500],
fontWeight: FontWeight.w700,
fontFamily: 'Poppins',
fontSize: 2.0 * SizeConfig.textMultiplier)),
],
), ),
), ),
AppText(
DateUtils.getDateTimeFromServerFormat(
widget.reply.createdOn)
.day
.toString() +
" " +
DateUtils.getMonth(
DateUtils.getDateTimeFromServerFormat(
widget.reply.createdOn)
.month)
.toString()
.substring(0, 3) +
' ' +
DateUtils.getDateTimeFromServerFormat(
widget.reply.createdOn)
.year
.toString(),
fontFamily: 'Poppins',
fontWeight: FontWeight.w600,
)
], ],
), ),
SizedBox(
height: 5,
),
Row( Row(
children: [ children: [
AppText( Expanded(
TranslationBase.of(context).mobileNo,
fontSize: 1.7 * SizeConfig.textMultiplier,
fontWeight: FontWeight.bold,
),
Container(
margin: EdgeInsets.only(left: 5),
child: AppText( child: AppText(
widget.reply.mobileNumber, Helpers.capitalize( widget.reply.patientName),
fontSize: 1.7 * SizeConfig.textMultiplier, fontSize: SizeConfig.textMultiplier * 2.5,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
backGroundcolor: Colors.white,
fontFamily: 'Poppins',
), ),
), ),
SizedBox(
width: 4,
),
widget.reply.gender == 1
? Icon(
DoctorApp.male_2,
color: Colors.blue,
)
: Icon(
DoctorApp.female_1,
color: Colors.pink,
),
], ],
), ),
SizedBox( SizedBox(
height: 5, height: 20,
), ),
Row( Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [ children: [
Column(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Container( Container(
width: 70, margin: EdgeInsets.only(top: 5),
height: 20, width: 60,
decoration: BoxDecoration( height: 60,
borderRadius: BorderRadius.all(Radius.circular(60.0)), child: Image.asset(
color: Colors.green[600] widget.reply.gender == 1
), ? 'assets/images/male_avatar.png'
child: Center( : 'assets/images/female_avatar.png',
child: AppText( fit: BoxFit.cover,
widget.reply.requestTime,
fontSize: 1.5 * SizeConfig.textMultiplier,
color: Colors.white,
), ),
), ),
),
Container(
child: AppText(
'${Helpers.getDate(widget.reply.requestDate)}',
fontSize: 1.7 * SizeConfig.textMultiplier,
fontWeight: FontWeight.bold,
color: Colors.black,
),
),
],
),
],
),
),
)
], ],
), ),
SizedBox(
width: 20,
), ),
Column(
!widget.isShowMore ? SizedBox(height: 18,) :
AnimatedContainer(
duration: Duration(milliseconds: 200),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[ children: [
Divider(color: Colors.grey), // SizedBox(height: 10,),
SizedBox(height: 5,),
Row( Row(
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
AppText( Column(
TranslationBase.of(context).remarks + " : ",
fontSize: 2.5 * SizeConfig.textMultiplier,
//fontWeight: FontWeight.bold,
),Expanded(
child: AppText(
widget.reply.remarks,
fontSize: 2.5 * SizeConfig.textMultiplier,
//fontWeight: FontWeight.bold,
),
),
],
),
SizedBox(height: 10,),
Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
AppText(
TranslationBase.of(context).doctorResponse + " : ", RichText(
fontSize: 2.5 * SizeConfig.textMultiplier, text: new TextSpan(
//fontWeight: FontWeight.bold, style: new TextStyle(
),Expanded( fontSize: 2.0 * SizeConfig.textMultiplier,
child: AppText( color: Colors.black),
widget.reply.doctorResponse, children: <TextSpan>[
fontSize: 2.5 * SizeConfig.textMultiplier, new TextSpan(
//fontWeight: FontWeight.bold, text: TranslationBase.of(context).fileNumber,
style: TextStyle(
fontSize: 14,color: Color(0xFF575757),fontWeight: FontWeight.bold, fontFamily: 'Poppins')),
new TextSpan(
text: widget.reply.patientID.toString(),
style: TextStyle(
fontWeight: FontWeight.w700,
fontFamily: 'Poppins',
fontSize: 15)),
],
), ),
), ),
Container(
width: MediaQuery.of(context).size.width*0.45,
child: RichText(
text: new TextSpan(
style: new TextStyle(
fontSize: 2.0 * SizeConfig.textMultiplier,
color: Colors.black,
fontFamily: 'Poppins',
),
children: <TextSpan>[
new TextSpan(
text: TranslationBase.of(context).age +
" : ",
style: TextStyle(fontSize: 14,color: Color(0xFF575757),fontWeight: FontWeight.bold)),
new TextSpan(
text:
"${DateUtils.getAgeByBirthday(widget.reply.dateofBirth, context)}",
style: TextStyle(
fontWeight: FontWeight.w700,
fontSize: 15)),
], ],
),SizedBox(height: 10,),
Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
AppText(
TranslationBase.of(context).infoStatus + " : ",
fontSize: 2.5 * SizeConfig.textMultiplier,
//fontWeight: FontWeight.bold,
),Expanded(
child: AppText(
widget.reply.infoStatus,
fontSize: 2.5 * SizeConfig.textMultiplier,
//fontWeight: FontWeight.bold,
), ),
), ),
],
) )
], ],
), ),
),
], ],
), ),
Container(
width: MediaQuery.of(context).size.width * 0.5,
child: RichText(
text: new TextSpan(
style: new TextStyle(
fontSize: 2.0 * SizeConfig.textMultiplier,
color: Colors.black),
children: <TextSpan>[
new TextSpan(
text: TranslationBase.of(context).doctorResponse + " : ",
style:
TextStyle(fontSize: 14, fontFamily: 'Poppins', color: Color(0xFF575757),fontWeight: FontWeight.bold)),
new TextSpan(
text: widget.reply.remarks,
style: TextStyle(
fontFamily: 'Poppins',
color: Color(0xFF575757),
fontSize: 15)),
],
), ),
), ),
Positioned( ),
right: 5, ],)
top: 20,
child: InkWell(
onTap: (){
setState(() {
widget.isShowMore = !widget.isShowMore;
});
},
child: Icon(widget.isShowMore? Icons.keyboard_arrow_up : Icons.keyboard_arrow_down)),
)
], ],
),
SizedBox(
height: 20,
),
],
),
// onTap: onTap,
)),
),
); );
// Stack(
// children: <Widget>[
// Container(
// margin: EdgeInsets.symmetric(vertical: 10.0),
// width: double.infinity,
// decoration: BoxDecoration(
// color: HexColor('#FFFFFF'),
// borderRadius: BorderRadius.all(
// Radius.circular(20.0),
// ),
// ),
// child: Container(
// margin: EdgeInsets.all(5),
// child: Column(
// children: <Widget>[
// SizedBox(height: 18,),
// Container(
// margin: EdgeInsets.only(right: 15),
// child: Row(
// children: <Widget>[
// SizedBox(width: 5,),
// //LargeAvatar(icon: widget.reply.gender == 0 ? DoctorApp.male : DoctorApp.femaleicon ,),
// Container(
// decoration: BoxDecoration(
// gradient: LinearGradient(
// begin: Alignment(-1, -1),
// end: Alignment(1, 1),
// colors: [
// Colors.grey[100],
// Colors.grey[200],
// ]),
// boxShadow: [
// BoxShadow(
// color: Color.fromRGBO(0, 0, 0, 0.08),
// offset: Offset(0.0, 5.0),
// blurRadius: 16.0)
// ],
// borderRadius: BorderRadius.all(Radius.circular(50.0)),
// ),
// width: 80,
// height: 80,
// child: Icon(widget.reply.gender == 1 ? DoctorApp.male : DoctorApp.female_icon,size: 80,)),
//
// SizedBox(width: 15,),
// Expanded(
// child: Container(
// child: Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// AppText(
// widget.reply.patientName,
// fontSize: 1.5 * SizeConfig.textMultiplier,
// fontWeight: FontWeight.bold,
// ),
// SizedBox(
// height: 5,
// ),
//
// Row(
// children: [
// AppText(
// TranslationBase.of(context).fileNo,
// fontSize: 1.7 * SizeConfig.textMultiplier,
// fontWeight: FontWeight.bold,
// ),
// Container(
// margin: EdgeInsets.only(left: 5),
// child: AppText(
// '${widget.reply.patientID}',
// fontSize: 1.7 * SizeConfig.textMultiplier,
// fontWeight: FontWeight.bold,
// ),
// ),
// ],
// ),
// SizedBox(
// height: 5,
// ),
// Row(
// children: [
// AppText(
// TranslationBase.of(context).mobileNo,
// fontSize: 1.7 * SizeConfig.textMultiplier,
// fontWeight: FontWeight.bold,
// ),
// Container(
// margin: EdgeInsets.only(left: 5),
// child: AppText(
// widget.reply.mobileNumber,
// fontSize: 1.7 * SizeConfig.textMultiplier,
// fontWeight: FontWeight.bold,
// ),
// ),
// ],
// ),
// SizedBox(
// height: 5,
// ),
// Row(
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
// children: [
// Container(
// width: 70,
// height: 20,
// decoration: BoxDecoration(
// borderRadius: BorderRadius.all(Radius.circular(60.0)),
// color: Colors.green[600]
// ),
// child: Center(
// child: AppText(
// widget.reply.requestTime,
// fontSize: 1.5 * SizeConfig.textMultiplier,
// color: Colors.white,
// ),
// ),
// ),
// Container(
//
// child: AppText(
// '${Helpers.getDate(widget.reply.requestDate)}',
// fontSize: 1.7 * SizeConfig.textMultiplier,
// fontWeight: FontWeight.bold,
// color: Colors.black,
// ),
// ),
// ],
// ),
//
// ],
// ),
// ),
// )
//
// ],
// ),
// ),
//
// !widget.isShowMore ? SizedBox(height: 18,) :
// AnimatedContainer(
// duration: Duration(milliseconds: 200),
// child: Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// children: <Widget>[
// Divider(color: Colors.grey),
// SizedBox(height: 5,),
// Row(
// mainAxisAlignment: MainAxisAlignment.start,
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// AppText(
// TranslationBase.of(context).remarks + " : ",
// fontSize: 2.5 * SizeConfig.textMultiplier,
// //fontWeight: FontWeight.bold,
// ),Expanded(
// child: AppText(
// widget.reply.remarks,
// fontSize: 2.5 * SizeConfig.textMultiplier,
// //fontWeight: FontWeight.bold,
// ),
// ),
// ],
// ),
// SizedBox(height: 10,),
// Row(
// mainAxisAlignment: MainAxisAlignment.start,
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// AppText(
// TranslationBase.of(context).doctorResponse + " : ",
// fontSize: 2.5 * SizeConfig.textMultiplier,
// //fontWeight: FontWeight.bold,
// ),Expanded(
// child: AppText(
// widget.reply.doctorResponse,
// fontSize: 2.5 * SizeConfig.textMultiplier,
// //fontWeight: FontWeight.bold,
// ),
// ),
// ],
// ),SizedBox(height: 10,),
// Row(
// mainAxisAlignment: MainAxisAlignment.start,
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// AppText(
// TranslationBase.of(context).infoStatus + " : ",
// fontSize: 2.5 * SizeConfig.textMultiplier,
// //fontWeight: FontWeight.bold,
// ),Expanded(
// child: AppText(
// widget.reply.infoStatus,
// fontSize: 2.5 * SizeConfig.textMultiplier,
// //fontWeight: FontWeight.bold,
// ),
// ),
// ],
// )
// ],
// ),
// ),
//
// ],
// ),
// ),
// ),
// Positioned(
// right: 5,
// top: 20,
// child: InkWell(
// onTap: (){
// setState(() {
// widget.isShowMore = !widget.isShowMore;
// });
// },
// child: Icon(widget.isShowMore? Icons.keyboard_arrow_up : Icons.keyboard_arrow_down)),
// )
// ],
//
// );
} }
} }

@ -313,13 +313,15 @@ class PatientReferralItemWidget extends StatelessWidget {
), ),
Row( Row(
children: [ children: [
AppText( Expanded(
child: AppText(
patientInfo.patientName, patientInfo.patientName,
fontSize: SizeConfig.textMultiplier * 2.5, fontSize: SizeConfig.textMultiplier * 2.5,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
backGroundcolor: Colors.white, backGroundcolor: Colors.white,
fontFamily: 'Poppins', fontFamily: 'Poppins',
), ),
),
SizedBox( SizedBox(
width: 4, width: 4,
), ),

@ -26,7 +26,7 @@ class PatientProfileHeaderNewDesign extends StatelessWidget {
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: Colors.white,
), ),
height: 220, height: 200,
child: Container( child: Container(
padding: EdgeInsets.only( padding: EdgeInsets.only(
left: 10, right: 10, bottom: 10), left: 10, right: 10, bottom: 10),

@ -0,0 +1,462 @@
import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart';
import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart';
import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart';
import 'package:doctor_app_flutter/util/date-utils.dart';
import 'package:doctor_app_flutter/util/helpers.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/shared/Text.dart';
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
import 'large_avatar.dart';
class PatientProfileHeaderWhitAppointment extends StatelessWidget {
final PatiantInformtion patient;
final String patientType;
final String arrivalType;
final String doctorName;
final String branch;
final DateTime appointmentDate;
final String profileUrl;
final String invoiceNO;
final String orderNo;
PatientProfileHeaderWhitAppointment(
{this.patient,
this.patientType,
this.arrivalType,
this.doctorName,
this.branch,
this.appointmentDate,
this.profileUrl,
this.invoiceNO,
this.orderNo});
@override
Widget build(BuildContext context) {
ProjectViewModel projectViewModel = Provider.of(context);
return Container(
padding: EdgeInsets.only(
left: 0, right: 5, bottom: 5, top: 5),
decoration: BoxDecoration(
color: Colors.white,
),
//height: 300,
child: Container(
padding: EdgeInsets.only(left: 10, right: 10, bottom: 10),
margin: EdgeInsets.only(top: 50),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
padding: EdgeInsets.only(left: 12.0),
child: Row(children: [
IconButton(
icon: Icon(Icons.arrow_back_ios),
color: Colors.black, //Colors.black,
onPressed: () => Navigator.pop(context),
),
AppText(
(Helpers.capitalize(patient.firstName) +
" " +
Helpers.capitalize(
patient.lastName)),
fontSize: SizeConfig.textMultiplier * 3,
fontWeight: FontWeight.bold,
backGroundcolor: Colors.white,
fontFamily: 'Poppins',
),
patient.gender == 1
? Icon(
DoctorApp.male_2,
color: Colors.blue,
)
: Icon(
DoctorApp.female_1,
color: Colors.pink,
),
]),
),
Row(children: [
Padding(
padding: EdgeInsets.only(left: 12.0),
child: Container(
width: 60,
height: 60,
child: Image.asset(
patient.gender == 1
? 'assets/images/male_avatar.png'
: 'assets/images/female_avatar.png',
fit: BoxFit.cover,
),
),
),
SizedBox(
width: 10,
),
Expanded(
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
SERVICES_PATIANT2[
int.parse(patientType)] ==
"patientArrivalList"
? Container(
child: Row(
mainAxisAlignment:
MainAxisAlignment
.spaceBetween,
children: [
patient.patientStatusType ==
43
? AppText(
TranslationBase.of(
context)
.arrivedP,
color: Colors.green,
fontWeight:
FontWeight.bold,
fontFamily:
'Poppins',
fontSize: 12,
)
: AppText(
TranslationBase.of(
context)
.notArrived,
color:
Colors.red[800],
fontWeight:
FontWeight.bold,
fontFamily:
'Poppins',
fontSize: 12,
),
arrivalType == '1'
? AppText(
patient.startTime !=
null
? patient
.startTime
: '',
fontFamily:
'Poppins',
fontWeight:
FontWeight.w600,
)
: AppText(
DateUtils.convertStringToDateFormat(
patient
.arrivedOn,
'MM-dd-yyyy HH:mm'),
fontFamily:
'Poppins',
fontWeight:
FontWeight.w600,
)
],
))
: SizedBox(),
if (SERVICES_PATIANT2[
int.parse(patientType)] ==
"List_MyOutPatient")
Container(
child: Row(
mainAxisAlignment:
MainAxisAlignment.start,
children: <Widget>[
AppText(
TranslationBase.of(context)
.appointmentDate +
" : ",
fontSize: 14,
),
patient.startTime != null
? Container(
height: 15,
width: 60,
decoration:
BoxDecoration(
borderRadius:
BorderRadius
.circular(
25),
color: HexColor(
"#20A169"),
),
child: AppText(
patient.startTime,
color: Colors.white,
fontSize: 1.5 *
SizeConfig
.textMultiplier,
textAlign: TextAlign
.center,
fontWeight:
FontWeight.bold,
),
)
: SizedBox(),
SizedBox(
width: 3.5,
),
Container(
child: AppText(
convertDateFormat2(patient
.appointmentDate
.toString()),
fontSize: 1.5 *
SizeConfig
.textMultiplier,
fontWeight:
FontWeight.bold,
),
),
SizedBox(
height: 0.5,
)
],
),
margin: EdgeInsets.only(
top: 8,
),
),
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
RichText(
text: TextSpan(
style: TextStyle(
fontSize: 1.6 *
SizeConfig
.textMultiplier,
color: Colors.black),
children: <TextSpan>[
new TextSpan(
text:
TranslationBase.of(
context)
.fileNumber,
style: TextStyle(
fontSize: 12,
fontFamily:
'Poppins')),
new TextSpan(
text: patient.patientId
.toString(),
style: TextStyle(
fontWeight:
FontWeight.w700,
fontFamily:
'Poppins',
fontSize: 14)),
],
),
),
Row(
children: [
AppText(
patient.nationalityName ??
patient.nationality,
fontWeight: FontWeight.bold,
fontSize: 12,
),
patient.nationality != null
? ClipRRect(
borderRadius:
BorderRadius
.circular(
20.0),
child: Image.network(
patient
.nationalityFlagURL,
height: 25,
width: 30,
errorBuilder:
(BuildContext
context,
Object
exception,
StackTrace
stackTrace) {
return Text(
'No Image');
},
))
: SizedBox()
],
)
],
),
Container(
child: RichText(
text: new TextSpan(
style: new TextStyle(
fontSize: 1.6 *
SizeConfig.textMultiplier,
color: Colors.black,
fontFamily: 'Poppins',
),
children: <TextSpan>[
new TextSpan(
text: TranslationBase.of(
context)
.age +
" : ",
style: TextStyle(
fontSize: 14)),
new TextSpan(
text:
"${DateUtils.getAgeByBirthday(patient.dateofBirth, context)}",
style: TextStyle(
fontWeight:
FontWeight.w700,
fontSize: 14)),
],
),
),
),
],
),
),
]),
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
width: 30,
height: 30,
margin: EdgeInsets.only(left: projectViewModel.isArabic?10:85, right: projectViewModel.isArabic?85:10,top: 5),
decoration: BoxDecoration(
shape: BoxShape.rectangle,
border: Border(
bottom:BorderSide(color: Colors.grey[400],width: 2.5),
left: BorderSide(color: Colors.grey[400],width: 2.5),
)
),
),
Expanded(
child: Container(
margin: EdgeInsets.only(top: 10),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Container(
child: LargeAvatar(
name: doctorName,
url: profileUrl,
),
width: 25,
height: 25,
margin: EdgeInsets.only(top: 10),
),
Expanded(
flex: 4,
child: Container(
margin: EdgeInsets.all(10),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Texts(
'${TranslationBase.of(context).dr}.$doctorName',
color: Colors.black,
fontWeight: FontWeight.w600,
fontSize: 14,
),
if (orderNo != null)
Row(
children: <Widget>[
Texts(
'Order No:',
color: Colors.grey[800],
),
Texts(
orderNo ?? '',
)
],
),
if (invoiceNO != null)
Row(
children: <Widget>[
Texts(
'Invoice:',
color: Colors.grey[800],
),
Texts(
invoiceNO,
)
],
),
Row(
children: <Widget>[
Texts(
'Result Date:',
color: Colors.grey[800],
),
Expanded(
child: Texts(
'${DateUtils.getDayMonthYearDateFormatted(appointmentDate, isArabic: projectViewModel.isArabic)}',
),
)
],
)
]),
),
),
],
),
),
),
],
)
],
),
),
);
}
convertDateFormat2(String str) {
String timeConvert;
const start = "/Date(";
const end = "+0300)";
final startIndex = str.indexOf(start);
final endIndex = str.indexOf(end, startIndex + start.length);
var date = new DateTime.fromMillisecondsSinceEpoch(
int.parse(str.substring(startIndex + start.length, endIndex)));
String newDate = date.year.toString() +
"/" +
date.month.toString().padLeft(2, '0') +
"/" +
date.day.toString().padLeft(2, '0');
return newDate.toString();
}
isToday(date) {
DateTime tempDate = new DateFormat("yyyy-MM-dd").parse(date);
return DateFormat("yyyy-MM-dd").format(tempDate) ==
DateFormat("yyyy-MM-dd").format(DateTime.now());
}
myBoxDecoration() {
return BoxDecoration(
border: Border(
top: BorderSide(
color: Colors.green,
width: 5,
),
),
borderRadius: BorderRadius.circular(10));
}
}

@ -216,7 +216,7 @@ class _TextsState extends State<Texts> {
fontSize:widget.fontSize?? _getFontSize(), fontSize:widget.fontSize?? _getFontSize(),
letterSpacing: letterSpacing:
widget.variant == "overline" ? 1.5 : null, widget.variant == "overline" ? 1.5 : null,
fontWeight: _getFontWeight(), fontWeight: widget.fontWeight ?? _getFontWeight(),
decoration: decoration:
widget.textDecoration //TextDecoration.lineThrough widget.textDecoration //TextDecoration.lineThrough
)), )),

@ -0,0 +1,140 @@
import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:flutter/material.dart';
import 'app_texts_widget.dart';
class AppTextFieldCustom extends StatefulWidget {
final double height;
final Function onClick;
final String hintText;
final TextEditingController controller;
final bool isDropDown;
final Icon suffixIcon;
final Color dropDownColor;
AppTextFieldCustom(
{this.height = 0,
this.onClick,
this.hintText,
this.controller,
this.isDropDown = false,
this.suffixIcon,
this.dropDownColor});
@override
_AppTextFieldCustomState createState() => _AppTextFieldCustomState();
}
class _AppTextFieldCustomState extends State<AppTextFieldCustom> {
@override
Widget build(BuildContext context) {
return Container(
height: widget.height != 0 ? widget.height : null,
decoration:
containerBorderDecoration(Color(0Xffffffff), Color(0xFFEFEFEF)),
padding: EdgeInsets.only(top: 4.0, bottom: 4.0, left: 8.0, right: 8.0),
child: InkWell(
onTap: widget.onClick ?? null,
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
if (widget.controller.text != "")
AppText(
widget.hintText,
fontFamily: 'Poppins',
fontSize: SizeConfig.textMultiplier * 1.4,
fontWeight: FontWeight.w600,
),
TextField(
textAlign: TextAlign.left,
decoration: textFieldSelectorDecoration(
widget.hintText, null, true),
style: TextStyle(
fontSize: 14,
color: Colors.grey.shade600,
),
controller: widget.controller,
),
],
),
),
widget.isDropDown
? widget.suffixIcon != null
? widget.suffixIcon
: Icon(
Icons.arrow_drop_down,
color: widget.dropDownColor != null
? widget.dropDownColor
: Colors.black,
)
: Container(),
],
),
),
);
}
BoxDecoration containerBorderDecoration(
Color containerColor, Color borderColor,
{double borderWidth = -1}) {
return BoxDecoration(
color: containerColor,
shape: BoxShape.rectangle,
borderRadius: BorderRadius.all(Radius.circular(8)),
border: Border.fromBorderSide(BorderSide(
color: borderColor,
width: borderWidth == -1 ? 2.0 : borderWidth,
)),
);
}
static InputDecoration textFieldSelectorDecoration(
String hintText, String selectedText, bool isDropDown,
{Icon suffixIcon, Color dropDownColor}) {
return InputDecoration(
isDense: true,
contentPadding: EdgeInsets.symmetric(horizontal: 0, vertical: 0),
enabledBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Color(0Xffffffff)),
),
focusedBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Color(0Xffffffff)),
),
border: UnderlineInputBorder(
borderSide: BorderSide(color: Color(0Xffffffff)),
),
/*focusedBorder: OutlineInputBorder(
borderSide: BorderSide(color: Color(0xFFCCCCCC), width: 2.0),
borderRadius: BorderRadius.circular(8),
),
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(color: Color(0xFFCCCCCC), width: 2.0),
borderRadius: BorderRadius.circular(8),
),
disabledBorder: OutlineInputBorder(
borderSide: BorderSide(color: Color(0xFFCCCCCC), width: 2.0),
borderRadius: BorderRadius.circular(8),
),*/
hintText: selectedText != null ? selectedText : hintText,
hintStyle: TextStyle(
fontSize: 14,
color: Colors.grey.shade600,
),
/*suffixIcon: isDropDown
? suffixIcon != null
? suffixIcon
: Icon(
Icons.arrow_drop_down,
color: dropDownColor != null ? dropDownColor : Colors.black,
)
: null,*/
// labelText:
// labelStyle:
);
}
}

@ -2,18 +2,22 @@ import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart'; import 'package:hexcolor/hexcolor.dart';
class Button extends StatefulWidget { class Button extends StatefulWidget {
final String title;
final Widget icon;
final VoidCallback onTap;
final bool loading;
final Color color;
Button({ Button({
Key key, Key key,
this.title: "", this.title = "",
this.icon, this.icon,
this.onTap, this.onTap,
this.loading: false, this.loading= false,
this.color,
}) : super(key: key); }) : super(key: key);
final String title;
final Widget icon;
final VoidCallback onTap;
final bool loading;
@override @override
_ButtonState createState() => _ButtonState(); _ButtonState createState() => _ButtonState();
@ -86,7 +90,8 @@ class _ButtonState extends State<Button> with TickerProviderStateMixin {
scale: _buttonSize, scale: _buttonSize,
child: AnimatedContainer( child: AnimatedContainer(
duration: Duration(milliseconds: 150), duration: Duration(milliseconds: 150),
margin: EdgeInsets.only(bottom: widget.title.isNotEmpty ? 14.0 : 0.0), margin:
EdgeInsets.only(bottom: widget.title.isNotEmpty ? 14.0 : 0.0),
padding: EdgeInsets.symmetric( padding: EdgeInsets.symmetric(
vertical: widget.title != null && widget.title.isNotEmpty vertical: widget.title != null && widget.title.isNotEmpty
? 12.0 ? 12.0
@ -95,7 +100,7 @@ class _ButtonState extends State<Button> with TickerProviderStateMixin {
? 22.0 ? 22.0
: 19), : 19),
decoration: BoxDecoration( decoration: BoxDecoration(
color: HexColor('#515b5d'), color: widget.color ?? HexColor('#515b5d'),
borderRadius: BorderRadius.all(Radius.circular(10.0)), borderRadius: BorderRadius.all(Radius.circular(10.0)),
boxShadow: [ boxShadow: [
BoxShadow( BoxShadow(

@ -15,6 +15,7 @@ class AppButton extends StatefulWidget {
final Color fontColor; final Color fontColor;
final bool loading; final bool loading;
final bool disabled; final bool disabled;
final FontWeight fontWeight;
AppButton( AppButton(
{@required this.onPressed, {@required this.onPressed,
@ -25,7 +26,8 @@ class AppButton extends StatefulWidget {
this.padding = 13, this.padding = 13,
this.loading = false, this.loading = false,
this.disabled = false, this.disabled = false,
this.fontColor = Colors.white}); this.fontColor = Colors.white,
this.fontWeight});
_AppButtonState createState() => _AppButtonState(); _AppButtonState createState() => _AppButtonState();
} }
@ -76,6 +78,7 @@ class _AppButtonState extends State<AppButton> {
widget.title.toUpperCase(), widget.title.toUpperCase(),
color: widget.fontColor, color: widget.fontColor,
fontSize: SizeConfig.textMultiplier * widget.fontSize, fontSize: SizeConfig.textMultiplier * widget.fontSize,
fontWeight: widget.fontWeight,
), ),
], ],
), ),

@ -47,6 +47,7 @@ class _AppExpandableNotifier extends State<AppExpandableNotifier> {
child: Padding( child: Padding(
padding: const EdgeInsets.only(left: 10, right: 10, top: 4), padding: const EdgeInsets.only(left: 10, right: 10, top: 4),
child: Card( child: Card(
color: Colors.grey[200],
clipBehavior: Clip.antiAlias, clipBehavior: Clip.antiAlias,
child: Column( child: Column(
children: <Widget>[ children: <Widget>[

@ -18,12 +18,13 @@ class AppScaffold extends StatelessWidget {
final bool isShowAppBar; final bool isShowAppBar;
final BaseViewModel baseViewModel; final BaseViewModel baseViewModel;
final Widget bottomSheet; final Widget bottomSheet;
final Color backgroundColor;
AppScaffold( AppScaffold(
{this.appBarTitle = '', {this.appBarTitle = '',
this.body, this.body,
this.isLoading = false, this.isLoading = false,
this.isShowAppBar = true, this.isShowAppBar = true,
this.baseViewModel, this.bottomSheet}); this.baseViewModel, this.bottomSheet, this.backgroundColor});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -34,7 +35,7 @@ class AppScaffold extends StatelessWidget {
FocusScope.of(context).requestFocus(new FocusNode()); FocusScope.of(context).requestFocus(new FocusNode());
}, },
child: Scaffold( child: Scaffold(
backgroundColor: Colors.white, backgroundColor: backgroundColor??Colors.white,
appBar: isShowAppBar appBar: isShowAppBar
? AppBar( ? AppBar(
elevation: 0, elevation: 0,
@ -59,7 +60,6 @@ class AppScaffold extends StatelessWidget {
], ],
) )
: null, : null,
bottomSheet: bottomSheet, bottomSheet: bottomSheet,
body: projectProvider.isInternetConnection body: projectProvider.isInternetConnection
? baseViewModel != null ? baseViewModel != null

@ -1,7 +1,8 @@
import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart';
import 'package:doctor_app_flutter/util/date-utils.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/large_avatar.dart'; import 'package:doctor_app_flutter/widgets/patients/profile/large_avatar.dart';
import 'package:eva_icons_flutter/eva_icons_flutter.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart';
@ -11,28 +12,22 @@ import 'StarRating.dart';
import 'Text.dart'; import 'Text.dart';
class DoctorCard extends StatelessWidget { class DoctorCard extends StatelessWidget {
final String name; final String doctorName;
final String subName; final String branch;
final double rat; final DateTime appointmentDate;
final String date;
final String profileUrl; final String profileUrl;
final String billNo; final String invoiceNO;
final String orderNo;
final Function onTap; final Function onTap;
final Function onEmailTap;
final bool isInOutPatient;
final bool isLiveCareAppointment;
DoctorCard( DoctorCard(
{this.name, {this.doctorName,
this.subName, this.branch,
this.rat,
this.date,
this.profileUrl, this.profileUrl,
this.billNo, this.invoiceNO,
this.onTap, this.onTap,
this.onEmailTap, this.appointmentDate,
this.isInOutPatient, this.orderNo});
this.isLiveCareAppointment = false});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -42,81 +37,57 @@ class DoctorCard extends StatelessWidget {
decoration: BoxDecoration( decoration: BoxDecoration(
border: Border.all( border: Border.all(
width: 0.5, width: 0.5,
color: Theme.of(context).primaryColor, color: Colors.white,
), ),
borderRadius: BorderRadius.all( borderRadius: BorderRadius.all(
Radius.circular(8.0), Radius.circular(15.0),
), ),
color: Colors.white), color: Colors.white),
child: Padding(
padding: const EdgeInsets.all(15.0),
child: InkWell( child: InkWell(
onTap: onTap, onTap: onTap,
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[ children: <Widget>[
Row( Row(
children: <Widget>[ children: [
Container( Expanded(
width: projectViewModel.isArabic ? 27 : 20, child: Texts(
height: date == null doctorName,
? projectViewModel.isArabic bold: true,
? 185
: 100
: 180,
decoration: BoxDecoration(
//Colors.red[900] Color(0xff404545)
color: isLiveCareAppointment
? Color(0xff404545)
: !isInOutPatient
? Colors.red[900]
: Theme.of(context).primaryColor,
borderRadius: BorderRadius.only(
topLeft: projectViewModel.isArabic
? Radius.circular(0)
: Radius.circular(8),
bottomLeft: projectViewModel.isArabic
? Radius.circular(0)
: Radius.circular(8),
topRight: projectViewModel.isArabic
? Radius.circular(8)
: Radius.circular(0),
bottomRight: projectViewModel.isArabic
? Radius.circular(8)
: Radius.circular(0),
),
),
child: RotatedBox(
quarterTurns: 3,
child: Center(
child: Text(
isLiveCareAppointment
? TranslationBase.of(context)
.liveCare
.toUpperCase()
: !isInOutPatient
? TranslationBase.of(context)
.inPatient
.toUpperCase()
: TranslationBase.of(context)
.outpatient
.toUpperCase(),
style: TextStyle(color: Colors.white),
),
)), )),
),
Expanded( Expanded(
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.end,
children: <Widget>[ children: [
Padding( Texts(
padding: const EdgeInsets.all(10.0), '${DateUtils.getDayMonthYearDateFormatted(appointmentDate, isArabic: projectViewModel.isArabic)}',
child: Row( color: Colors.black,
fontWeight: FontWeight.w600,
fontSize: 14,
),
Texts(
'${DateUtils.getHour(appointmentDate)}',
fontWeight: FontWeight.w600,
color: Colors.grey[700],
fontSize: 14,
),
],
),
),
],
),
Row(
crossAxisAlignment: CrossAxisAlignment.end,
children: <Widget>[ children: <Widget>[
Expanded( Container(
flex: 1,
child: LargeAvatar( child: LargeAvatar(
name: name, name: doctorName,
url: profileUrl, url: profileUrl,
), ),
width: 55,
height: 55,
), ),
Expanded( Expanded(
flex: 4, flex: 4,
@ -124,75 +95,54 @@ class DoctorCard extends StatelessWidget {
margin: EdgeInsets.all(10), margin: EdgeInsets.all(10),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
if (orderNo != null)
Row(
children: <Widget>[ children: <Widget>[
Texts( Texts(
TranslationBase.of(context).dr + 'order No:',
" " + color: Colors.grey[500],
name,
bold: true,
), ),
Texts( Texts(
subName, orderNo ?? '',
)
],
), ),
if (billNo != null) if (invoiceNO != null)
Row( Row(
children: <Widget>[ children: <Widget>[
Texts( Texts(
'${TranslationBase.of(context).billNo}: ', 'Invoice:',
color: Colors.grey[500],
), ),
Texts( Texts(
billNo, invoiceNO,
) )
], ],
), ),
if (rat != null)
StarRating(
totalAverage: rat, forceStars: true),
],
),
),
),
if (onEmailTap != null)
InkWell(
onTap: onEmailTap,
child: Icon(
Icons.email,
color: Theme.of(context).primaryColor,
),
),
],
),
),
if (date != null)
Divider(
height: 8,
color: Colors.grey[400],
),
if (date != null)
Row( Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[ children: <Widget>[
Icon( Texts(
Icons.calendar_today_outlined, 'Branch:',
size: 30, color: Colors.grey[500],
color: Colors.red,
),
Expanded(
child: Texts(
date,
variant: 'bodyText',
), ),
Texts(
branch,
) )
], ],
) )
], ]),
), ),
),
Icon(
EvaIcons.eye,
) )
], ],
), ),
], ],
), ),
), ),
),
); );
} }
} }

@ -608,7 +608,7 @@ packages:
name: meta name: meta
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.3.0-nullsafety.4" version: "1.3.0-nullsafety.3"
mime: mime:
dependency: transitive dependency: transitive
description: description:
@ -900,7 +900,7 @@ packages:
name: stack_trace name: stack_trace
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.10.0-nullsafety.2" version: "1.10.0-nullsafety.1"
stream_channel: stream_channel:
dependency: transitive dependency: transitive
description: description:
@ -1084,5 +1084,5 @@ packages:
source: hosted source: hosted
version: "2.2.1" version: "2.2.1"
sdks: sdks:
dart: ">=2.10.0 <=2.11.0-213.1.beta" dart: ">=2.10.0 <2.11.0"
flutter: ">=1.22.0 <2.0.0" flutter: ">=1.22.0 <2.0.0"

@ -107,6 +107,7 @@ flutter:
- assets/images/dashboard/ - assets/images/dashboard/
- assets/images/login/ - assets/images/login/
- assets/images/patient/ - assets/images/patient/
- assets/images/patient/vital_signs/
# An image asset can refer to one or more resolution-specific "variants", see # An image asset can refer to one or more resolution-specific "variants", see
# https://flutter.dev/assets-and-images/#resolution-aware. # https://flutter.dev/assets-and-images/#resolution-aware.

Loading…
Cancel
Save