Merge branch 'development' into 'master'

Development

See merge request Cloud_Solution/doctor_app_flutter!632
merge-requests/644/merge
Mohammad Aljammal 5 years ago
commit 368d94168b

@ -322,4 +322,4 @@ SPEC CHECKSUMS:
PODFILE CHECKSUM: 649616dc336b3659ac6b2b25159d8e488e042b69 PODFILE CHECKSUM: 649616dc336b3659ac6b2b25159d8e488e042b69
COCOAPODS: 1.10.1 COCOAPODS: 1.10.0.rc.1

@ -147,7 +147,7 @@ class BaseAppClient {
: SETUP_ID; : SETUP_ID;
} }
body['VersionID'] = 5.8; body['VersionID'] = VERSION_ID;
body['Channel'] = CHANNEL; body['Channel'] = CHANNEL;
body['LanguageID'] = languageID == 'ar' ? 1 : 2; body['LanguageID'] = languageID == 'ar' ? 1 : 2;

@ -280,7 +280,8 @@ const GET_INSURANCE_IN_PATIENT =
"Services/DoctorApplication.svc/REST/GetApprovalStatusForInpatient"; "Services/DoctorApplication.svc/REST/GetApprovalStatusForInpatient";
const GET_SICK_LEAVE_PATIENT = "Services/Patients.svc/REST/GetPatientSickLeave"; const GET_SICK_LEAVE_PATIENT = "Services/Patients.svc/REST/GetPatientSickLeave";
const GET_MY_OUT_PATIENT = "Services/DoctorApplication.svc/REST/GetMyOutPatient"; const GET_MY_OUT_PATIENT =
"Services/DoctorApplication.svc/REST/GetMyOutPatient";
var selectedPatientType = 1; var selectedPatientType = 1;
@ -336,7 +337,7 @@ const TRANSACTION_NO = 0;
const LANGUAGE_ID = 2; const LANGUAGE_ID = 2;
const STAMP = '2020-04-27T12:17:17.721Z'; const STAMP = '2020-04-27T12:17:17.721Z';
const IP_ADDRESS = '9.9.9.9'; const IP_ADDRESS = '9.9.9.9';
const VERSION_ID = 5.8; const VERSION_ID = 5.9;
const CHANNEL = 9; const CHANNEL = 9;
const SESSION_ID = 'BlUSkYymTt'; const SESSION_ID = 'BlUSkYymTt';
const IS_LOGIN_FOR_DOCTOR_APP = true; const IS_LOGIN_FOR_DOCTOR_APP = true;

@ -47,9 +47,9 @@ const Map<String, Map<String, String>> localizedValues = {
'radiology': {'en': 'Radiology', 'ar': 'الأشعة'}, 'radiology': {'en': 'Radiology', 'ar': 'الأشعة'},
'service': {'en': 'Service', 'ar': 'خدمة'}, 'service': {'en': 'Service', 'ar': 'خدمة'},
'referral': {'en': 'Referral', 'ar': 'الإحالة'}, 'referral': {'en': 'Referral', 'ar': 'الإحالة'},
'inPatient': {'en': 'My InPatients', 'ar': 'المريض الداخلي'}, 'inPatient': {'en': 'My Patients', 'ar': 'مرضاي'},
'inPatientLabel': {'en': 'InPatients', 'ar': 'المريض الداخلي'}, 'inPatientLabel': {'en': 'InPatients', 'ar': 'المريض الداخلي'},
'inPatientAll': {'en': 'All InPatients', 'ar': 'كل المرضى الداخليين'}, 'inPatientAll': {'en': 'All Patients', 'ar': 'كل المرضى'},
'operations': {'en': 'Operations', 'ar': 'عمليات'}, 'operations': {'en': 'Operations', 'ar': 'عمليات'},
'patientServices': {'en': 'Patient Services', 'ar': 'خدمات المرضى'}, 'patientServices': {'en': 'Patient Services', 'ar': 'خدمات المرضى'},
'searchMedicine': {'en': 'Search Medicines', 'ar': 'بحث عن الدواء'}, 'searchMedicine': {'en': 'Search Medicines', 'ar': 'بحث عن الدواء'},
@ -276,8 +276,8 @@ const Map<String, Map<String, String>> localizedValues = {
'age2': {'en': 'Age: ', 'ar': 'العمر: '}, 'age2': {'en': 'Age: ', 'ar': 'العمر: '},
'replySuccessfully': {'en': 'Reply Successfully', 'ar': 'تم الرد بنجاح'}, 'replySuccessfully': {'en': 'Reply Successfully', 'ar': 'تم الرد بنجاح'},
"sick-leaves": {"en": "Patient Sick Leave", "ar": "الاجازات المرضية"}, "sick-leaves": {"en": "Patient Sick Leave", "ar": "الاجازات المرضية"},
"patient-sick": {"en": "Patient Sick", "ar": "المرضية"}, "patient-sick": {"en": "Patient Sick", "ar": "مرضية"},
"leave": {"en": "Leave", "ar": "غادر"}, "leave": {"en": "Leave", "ar": "مغادره"},
"submit": {"en": "Submit", "ar": "ارسال"}, "submit": {"en": "Submit", "ar": "ارسال"},
"doc-name": {"en": "Doctor Name", "ar": "اسم الطبيب"}, "doc-name": {"en": "Doctor Name", "ar": "اسم الطبيب"},
"clinicname": {"en": "Clinic Name", "ar": "اسم العيادة"}, "clinicname": {"en": "Clinic Name", "ar": "اسم العيادة"},
@ -654,8 +654,8 @@ const Map<String, Map<String, String>> localizedValues = {
}, },
'progressNoteSOAP': {'en': "Progress Note", 'ar': "ملاحظة التقدم"}, 'progressNoteSOAP': {'en': "Progress Note", 'ar': "ملاحظة التقدم"},
'addProgressNote': {'en': "Add Progress Note", 'ar': "أضف ملاحظة التقدم"}, 'addProgressNote': {'en': "Add Progress Note", 'ar': "أضف ملاحظة التقدم"},
'createdBy': {'en': "Created By :", 'ar': "أضيفت : "}, 'createdBy': {'en': "Created By :", 'ar': "أضيفت من قبل : "},
'editedBy': {'en': "Edited By :", 'ar': "عدلت : "}, 'editedBy': {'en': "Edited By :", 'ar': "عدلت من قبل : "},
'currentMedications': {'en': "Current Medications", 'ar': "الأدوية الحالية"}, 'currentMedications': {'en': "Current Medications", 'ar': "الأدوية الحالية"},
'noItem': { 'noItem': {
'en': "No items exists in this list", 'en': "No items exists in this list",
@ -783,7 +783,7 @@ const Map<String, Map<String, String>> localizedValues = {
"open-rad": {"en": "Open Radiology Image", "ar": "فتح صور الاشعة"}, "open-rad": {"en": "Open Radiology Image", "ar": "فتح صور الاشعة"},
'fileNumber': {'en': "File Number: ", 'ar': " :رقم الملف"}, 'fileNumber': {'en': "File Number: ", 'ar': "رقم الملف : "},
'searchPatient-name': { 'searchPatient-name': {
'en': 'Search Name, Medical File, Phone Number', 'en': 'Search Name, Medical File, Phone Number',
'ar': "اسم البحث ، الملف الطبي ، رقم الهاتف" 'ar': "اسم البحث ، الملف الطبي ، رقم الهاتف"
@ -819,7 +819,7 @@ const Map<String, Map<String, String>> localizedValues = {
"add-reschedule": {"en": "Add reschedule", "ar": "أضف إعادة الجدولة"}, "add-reschedule": {"en": "Add reschedule", "ar": "أضف إعادة الجدولة"},
"update-reschedule": {"en": "Update reschedule", "ar": "تحديث إعادة الجدولة"}, "update-reschedule": {"en": "Update reschedule", "ar": "تحديث إعادة الجدولة"},
"sick_leave": {"en": "Sick Leave", "ar": "أجازة مرضية"}, "sick_leave": {"en": "Sick Leave", "ar": "إجازة مرضية"},
"addSickLeaveRequest": { "addSickLeaveRequest": {
"en": "Add Sick Leave Request", "en": "Add Sick Leave Request",
"ar": "إضافة طلب إجازة مرضية" "ar": "إضافة طلب إجازة مرضية"
@ -847,7 +847,7 @@ const Map<String, Map<String, String>> localizedValues = {
"en": "Apply Reschedule Leave", "en": "Apply Reschedule Leave",
"ar": "التقدم بطلب أو إعادة جدولة الإجازة" "ar": "التقدم بطلب أو إعادة جدولة الإجازة"
}, },
"myQRCode": {"en": "My QR Code", "ar": "My QR Code"}, "myQRCode": {"en": "My QR Code", "ar": " كود QR "},
"patientIDMobilenational": { "patientIDMobilenational": {
"en": "Patient ID, National ID, Mobile Number", "en": "Patient ID, National ID, Mobile Number",
"ar": "هوية المريض ، الهوية الوطنية ، رقم الهاتف المحمول" "ar": "هوية المريض ، الهوية الوطنية ، رقم الهاتف المحمول"
@ -928,8 +928,8 @@ const Map<String, Map<String, String>> localizedValues = {
"newRadiologyOrder": {"en": "New Radiology Order", "ar": "طلب الأشعة الجديد"}, "newRadiologyOrder": {"en": "New Radiology Order", "ar": "طلب الأشعة الجديد"},
"orderDate": {"en": "Order Date", "ar": "تاريخ الطلب"}, "orderDate": {"en": "Order Date", "ar": "تاريخ الطلب"},
"examType": {"en": "Exam Type", "ar": "نوع الفحص"}, "examType": {"en": "Exam Type", "ar": "نوع الفحص"},
"health": {"en": "Health", "ar": "التقرير"}, "health": {"en": "Health", "ar": "الصحي"},
"summary": {"en": "Summary", "ar": "الصحي"}, "summary": {"en": "Summary", "ar": "التقرير"},
"applyForNewPrescriptionsOrder": { "applyForNewPrescriptionsOrder": {
"en": "Apply for New Prescriptions Order", "en": "Apply for New Prescriptions Order",
"ar": "التقدم بطلب للحصول على وصفات طبية جديدة " "ar": "التقدم بطلب للحصول على وصفات طبية جديدة "
@ -946,4 +946,20 @@ const Map<String, Map<String, String>> localizedValues = {
"approvals22": {"en": "Approvals", "ar": "التامين"}, "approvals22": {"en": "Approvals", "ar": "التامين"},
"severe": {"en": "Severe", "ar": "الشدة"}, "severe": {"en": "Severe", "ar": "الشدة"},
"graphDetails": {"en": "Graph Details", "ar": "تفاصيل الرسم البياني"}, "graphDetails": {"en": "Graph Details", "ar": "تفاصيل الرسم البياني"},
"addNewOrderSheet": {"en": "Add a New Order Sheet", "ar": "أضف ورقة طلب جديدة"},
"addNewProgressNote": {"en": "Add a New Progress Note", "ar": "أضف ملاحظة تقدم جديدة"},
"notePending": {"en": "Pending", "ar": "قيد الانتظار"},
"noteCanceled": {"en": "Canceled", "ar": "ألغيت"},
"noteVerified": {"en": "Verified", "ar": "تم التحقق"},
'noteVerify': {'en': 'Verify', 'ar': 'تحقق'},
'noteConfirm': {'en': 'Confirm', 'ar': 'تاكيد'},
'noteAdd': {'en': 'Add ', 'ar': 'اضف '},
'noteUpdateْْ': {'en': 'Update ', 'ar': 'تحديت'},
'orderSheet': {'en': 'Order Sheet', 'ar': 'ورقة الطلب'},
'order': {'en': 'Order', 'ar': 'الطلب'},
'sheet': {'en': 'Sheet', 'ar': 'ورقة'},
'medical': {'en': 'Medical', 'ar': 'الطبي'},
'report': {'en': 'Report', 'ar': 'التقرير'},
'discharge': {'en': 'Discharge', 'ar': 'discharge'},
"discharged": {"en": "Discharged", "ar": "المصرف"},
}; };

@ -5,6 +5,7 @@ import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart';
class PatientInPatientService extends BaseService { class PatientInPatientService extends BaseService {
List<PatiantInformtion> inPatientList = List(); List<PatiantInformtion> inPatientList = List();
List<PatiantInformtion> myInPatientList = List();
Future getInPatientList( Future getInPatientList(
PatientSearchRequestModel requestModel, bool isMyInpatient) async { PatientSearchRequestModel requestModel, bool isMyInpatient) async {
@ -21,9 +22,14 @@ class PatientInPatientService extends BaseService {
GET_PATIENT_IN_PATIENT_LIST, GET_PATIENT_IN_PATIENT_LIST,
onSuccess: (dynamic response, int statusCode) { onSuccess: (dynamic response, int statusCode) {
inPatientList.clear(); inPatientList.clear();
myInPatientList.clear();
response['List_MyInPatient'].forEach((v) { response['List_MyInPatient'].forEach((v) {
inPatientList.add(PatiantInformtion.fromJson(v)); PatiantInformtion patient = PatiantInformtion.fromJson(v);
inPatientList.add(patient);
if(patient.doctorId == doctorProfile.doctorID){
myInPatientList.add(patient);
}
}); });
}, },
onFailure: (String error, int statusCode) { onFailure: (String error, int statusCode) {

@ -9,7 +9,7 @@ import 'package:doctor_app_flutter/util/date-utils.dart';
import '../../locator.dart'; import '../../locator.dart';
import 'base_view_model.dart'; import 'base_view_model.dart';
class PatientSearchViewModel extends BaseViewModel{ class PatientSearchViewModel extends BaseViewModel {
OutPatientService _outPatientService = locator<OutPatientService>(); OutPatientService _outPatientService = locator<OutPatientService>();
List<PatiantInformtion> get patientList => _outPatientService.patientList; List<PatiantInformtion> get patientList => _outPatientService.patientList;
@ -24,10 +24,14 @@ class PatientSearchViewModel extends BaseViewModel{
if (strExist) { if (strExist) {
filterData = []; filterData = [];
for (var i = 0; i < _outPatientService.patientList.length; i++) { for (var i = 0; i < _outPatientService.patientList.length; i++) {
String firstName = _outPatientService.patientList[i].firstName.toUpperCase(); String firstName =
String lastName = _outPatientService.patientList[i].lastName.toUpperCase(); _outPatientService.patientList[i].firstName.toUpperCase();
String mobile = _outPatientService.patientList[i].mobileNumber.toUpperCase(); String lastName =
String patientID = _outPatientService.patientList[i].patientId.toString(); _outPatientService.patientList[i].lastName.toUpperCase();
String mobile =
_outPatientService.patientList[i].mobileNumber.toUpperCase();
String patientID =
_outPatientService.patientList[i].patientId.toString();
if (firstName.contains(str.toUpperCase()) || if (firstName.contains(str.toUpperCase()) ||
lastName.contains(str.toUpperCase()) || lastName.contains(str.toUpperCase()) ||
@ -43,19 +47,19 @@ class PatientSearchViewModel extends BaseViewModel{
} }
} }
getOutPatient(PatientSearchRequestModel patientSearchRequestModel , {bool isLocalBusy = false}) async { getOutPatient(PatientSearchRequestModel patientSearchRequestModel,
if(isLocalBusy) { {bool isLocalBusy = false}) async {
if (isLocalBusy) {
setState(ViewState.BusyLocal); setState(ViewState.BusyLocal);
} else { } else {
setState(ViewState.Busy); setState(ViewState.Busy);
} }
await getDoctorProfile(isGetProfile: true); await getDoctorProfile(isGetProfile: true);
patientSearchRequestModel.doctorID = doctorProfile.doctorID; patientSearchRequestModel.doctorID = doctorProfile.doctorID;
await _outPatientService.getOutPatient( await _outPatientService.getOutPatient(patientSearchRequestModel);
patientSearchRequestModel);
if (_outPatientService.hasError) { if (_outPatientService.hasError) {
error = _outPatientService.error; error = _outPatientService.error;
if(isLocalBusy) { if (isLocalBusy) {
setState(ViewState.ErrorLocal); setState(ViewState.ErrorLocal);
} else { } else {
setState(ViewState.Error); setState(ViewState.Error);
@ -66,10 +70,11 @@ class PatientSearchViewModel extends BaseViewModel{
} }
} }
getPatientFileInformation(PatientSearchRequestModel patientSearchRequestModel, {bool isLocalBusy = false}) async { getPatientFileInformation(PatientSearchRequestModel patientSearchRequestModel,
{bool isLocalBusy = false}) async {
setState(ViewState.Busy); setState(ViewState.Busy);
await _outPatientService.getPatientFileInformation( await _outPatientService
patientSearchRequestModel); .getPatientFileInformation(patientSearchRequestModel);
if (_outPatientService.hasError) { if (_outPatientService.hasError) {
error = _outPatientService.error; error = _outPatientService.error;
setState(ViewState.Error); setState(ViewState.Error);
@ -79,30 +84,22 @@ class PatientSearchViewModel extends BaseViewModel{
} }
} }
getPatientBasedOnDate(
{item,
getPatientBasedOnDate ( PatientSearchRequestModel patientSearchRequestModel,
{item, PatientSearchRequestModel patientSearchRequestModel, PatientType selectedPatientType, PatientType selectedPatientType,
bool isSearchWithKeyInfo })async { bool isSearchWithKeyInfo}) async {
String dateTo; String dateTo;
String dateFrom; String dateFrom;
// TODO Fix this in Arabic
if (item == 'Previous') { if (item == 'Previous') {
selectedFromDate = DateTime(
selectedFromDate = DateTime(DateTime.now().year, DateTime.now().month-1, DateTime.now().year, DateTime.now().month - 1, DateTime.now().day);
DateTime.now().day); selectedToDate = DateTime(
selectedToDate = DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().year, DateTime.now().month, DateTime.now().day - 1);
DateTime.now().day-1); dateTo = DateUtils.convertDateToFormat(selectedToDate, 'yyyy-MM-dd');
dateTo = DateUtils.convertDateToFormat( dateFrom = DateUtils.convertDateToFormat(selectedFromDate, 'yyyy-MM-dd');
selectedToDate,
'yyyy-MM-dd');
dateFrom = DateUtils.convertDateToFormat(
selectedFromDate,
'yyyy-MM-dd');
} else if (item == 'Next Week') { } else if (item == 'Next Week') {
dateTo = DateUtils.convertDateToFormat( dateTo = DateUtils.convertDateToFormat(
DateTime(DateTime.now().year, DateTime.now().month, DateTime(DateTime.now().year, DateTime.now().month,
DateTime.now().day + 6), DateTime.now().day + 6),
@ -117,7 +114,7 @@ class PatientSearchViewModel extends BaseViewModel{
DateTime( DateTime(
DateTime.now().year, DateTime.now().month, DateTime.now().day), DateTime.now().year, DateTime.now().month, DateTime.now().day),
'yyyy-MM-dd'); 'yyyy-MM-dd');
dateTo= DateUtils.convertDateToFormat( dateTo = DateUtils.convertDateToFormat(
DateTime( DateTime(
DateTime.now().year, DateTime.now().month, DateTime.now().day), DateTime.now().year, DateTime.now().month, DateTime.now().day),
'yyyy-MM-dd'); 'yyyy-MM-dd');
@ -132,61 +129,70 @@ class PatientSearchViewModel extends BaseViewModel{
currentModel.to = dateTo; currentModel.to = dateTo;
await getOutPatient(currentModel, isLocalBusy: true); await getOutPatient(currentModel, isLocalBusy: true);
filterData = _outPatientService.patientList; filterData = _outPatientService.patientList;
} }
PatientInPatientService _inPatientService = PatientInPatientService _inPatientService =
locator<PatientInPatientService>(); locator<PatientInPatientService>();
List<PatiantInformtion> get _inPatientList => _inPatientService.inPatientList; List<PatiantInformtion> get inPatientList => _inPatientService.inPatientList;
List<PatiantInformtion> get myIinPatientList =>
_inPatientService.myInPatientList;
List<PatiantInformtion> filteredInPatientItems = List(); List<PatiantInformtion> filteredInPatientItems = List();
Future getInPatientList(PatientSearchRequestModel requestModel, Future getInPatientList(PatientSearchRequestModel requestModel,
{bool isMyInpatient = false, bool isFirstTime = true}) async { {bool isMyInpatient = false}) async {
await getDoctorProfile(); await getDoctorProfile();
if (isFirstTime)
setState(ViewState.Busy); setState(ViewState.Busy);
else
setState(ViewState.BusyLocal); if (inPatientList.length == 0)
await _inPatientService.getInPatientList(requestModel, false); await _inPatientService.getInPatientList(requestModel, false);
if (_inPatientService.hasError) { if (_inPatientService.hasError) {
error = _inPatientService.error; error = _inPatientService.error;
setState(ViewState.Error); setState(ViewState.Error);
} else { } else {
// setDefaultInPatientList();
setState(ViewState.Idle);
}
}
Future setDefaultInPatientList() async {
setState(ViewState.BusyLocal);
await getDoctorProfile();
filteredInPatientItems.clear(); filteredInPatientItems.clear();
if (_inPatientList.length > 0) if (inPatientList.length > 0)
filteredInPatientItems.addAll(_inPatientList); filteredInPatientItems.addAll(inPatientList);
setState(ViewState.Idle); setState(ViewState.Idle);
} }
void clearPatientList(){
_inPatientService.inPatientList = [];
_inPatientService.myInPatientList = [];
} }
void filterSearchResults(String query) { void filterSearchResults(String query) {
var strExist = query.length > 0 ? true : false; var strExist = query.length > 0 ? true : false;
if (strExist) { if (strExist) {
filteredInPatientItems = []; filteredInPatientItems = [];
for (var i = 0; i < _inPatientList.length; i++) { for (var i = 0; i < inPatientList.length; i++) {
String firstName = _inPatientList[i].firstName.toUpperCase(); String firstName = inPatientList[i].firstName.toUpperCase();
String lastName = _inPatientList[i].lastName.toUpperCase(); String lastName = inPatientList[i].lastName.toUpperCase();
String mobile = _inPatientList[i].mobileNumber.toUpperCase(); String mobile = inPatientList[i].mobileNumber.toUpperCase();
String patientID = _inPatientList[i].patientId.toString(); String patientID = inPatientList[i].patientId.toString();
if (firstName.contains(query.toUpperCase()) || if (firstName.contains(query.toUpperCase()) ||
lastName.contains(query.toUpperCase()) || lastName.contains(query.toUpperCase()) ||
mobile.contains(query) || mobile.contains(query) ||
patientID.contains(query)) { patientID.contains(query)) {
filteredInPatientItems.add(_inPatientList[i]); filteredInPatientItems.add(inPatientList[i]);
} }
} }
notifyListeners(); notifyListeners();
} else { } else {
if (_inPatientList.length > 0) if (inPatientList.length > 0) filteredInPatientItems.clear();
filteredInPatientItems.clear(); filteredInPatientItems.addAll(inPatientList);
filteredInPatientItems.addAll(_inPatientList);
notifyListeners(); notifyListeners();
} }
} }
} }

@ -90,7 +90,7 @@ class _LandingPageState extends State<LandingPage> {
case 2: case 2:
return TranslationBase.of(context).qr; return TranslationBase.of(context).qr;
case 3: case 3:
return TranslationBase.of(context).replay; return TranslationBase.of(context).replay2;
} }
} }
} }

@ -1,5 +1,5 @@
import 'package:doctor_app_flutter/root_page.dart'; import 'package:doctor_app_flutter/root_page.dart';
import 'package:doctor_app_flutter/screens/medical-file/medical_file_page.dart'; import 'package:doctor_app_flutter/screens/medical-file/health_summary_page.dart';
import 'package:doctor_app_flutter/screens/patients/ECGPage.dart'; import 'package:doctor_app_flutter/screens/patients/ECGPage.dart';
import 'package:doctor_app_flutter/screens/patients/insurance_approval_screen_patient.dart'; import 'package:doctor_app_flutter/screens/patients/insurance_approval_screen_patient.dart';
import 'package:doctor_app_flutter/screens/patients/profile/UCAF/UCAF-detail-screen.dart'; import 'package:doctor_app_flutter/screens/patients/profile/UCAF/UCAF-detail-screen.dart';
@ -37,7 +37,7 @@ const String PATIENTS = 'patients/patients';
const String PATIENTS_PROFILE = 'patients/patients-profile'; const String PATIENTS_PROFILE = 'patients/patients-profile';
const String IN_PATIENTS_PROFILE = 'inpatients/patients-profile'; const String IN_PATIENTS_PROFILE = 'inpatients/patients-profile';
const String LAB_RESULT = 'patients/lab_result'; const String LAB_RESULT = 'patients/lab_result';
const String MEDICAL_FILE = 'patients/radiology'; const String HEALTH_SUMMARY = 'patients/health-summary';
const String PROGRESS_NOTE = 'patients/progress-note'; const String PROGRESS_NOTE = 'patients/progress-note';
const String ORDER_NOTE = 'patients/order-note'; const String ORDER_NOTE = 'patients/order-note';
@ -70,7 +70,7 @@ var routes = {
VERIFICATION_METHODS: (_) => VerificationMethodsScreen(), VERIFICATION_METHODS: (_) => VerificationMethodsScreen(),
PATIENTS_PROFILE: (_) => PatientProfileScreen(), PATIENTS_PROFILE: (_) => PatientProfileScreen(),
LAB_RESULT: (_) => LabsHomePage(), LAB_RESULT: (_) => LabsHomePage(),
MEDICAL_FILE: (_) => MedicalFilePage(), HEALTH_SUMMARY: (_) => HealthSummaryPage(),
PROGRESS_NOTE: (_) => ProgressNoteScreen(visitType: 5,), PROGRESS_NOTE: (_) => ProgressNoteScreen(visitType: 5,),
ORDER_NOTE: (_) => ProgressNoteScreen(visitType: 3,), ORDER_NOTE: (_) => ProgressNoteScreen(visitType: 3,),
REFER_PATIENT_TO_DOCTOR: (_) => PatientMakeReferralScreen(), REFER_PATIENT_TO_DOCTOR: (_) => PatientMakeReferralScreen(),

@ -28,7 +28,7 @@ class HomePageCard extends StatelessWidget {
return InkWell( return InkWell(
onTap: onTap, onTap: onTap,
child: Container( child: Container(
width: width != null ? width : MediaQuery.of(context).size.width * 0.29, width: width != null ? width : MediaQuery.of(context).size.width * 0.28,
height: height != null height: height != null
? height ? height
: MediaQuery.of(context).orientation == Orientation.portrait : MediaQuery.of(context).orientation == Orientation.portrait
@ -41,7 +41,7 @@ class HomePageCard extends StatelessWidget {
? color ? color
: HexColor('#050705').withOpacity(opacity) : HexColor('#050705').withOpacity(opacity)
: Colors.white, : Colors.white,
borderRadius: BorderRadius.circular(15.0), borderRadius: BorderRadius.circular(17.0),
border: hasBorder border: hasBorder
? Border.all(width: 1.0, color: const Color(0xffcccccc)) ? Border.all(width: 1.0, color: const Color(0xffcccccc))
: Border.all(width: 0.0, color: Colors.transparent), : Border.all(width: 0.0, color: Colors.transparent),

@ -222,7 +222,7 @@ class _HomeScreenState extends State<HomeScreen> {
return DropdownMenuItem( return DropdownMenuItem(
child: AppText( child: AppText(
item.clinicName, item.clinicName,
textAlign: TextAlign.right, textAlign: TextAlign.left,
), ),
value: item.clinicID, value: item.clinicID,
); );
@ -470,7 +470,7 @@ class _HomeScreenState extends State<HomeScreen> {
scrollDirection: Axis.horizontal, scrollDirection: Axis.horizontal,
children: [ children: [
HomePageCard( HomePageCard(
color: Colors.red[800], color: Color(0xffD02127),
margin: EdgeInsets.all(5), margin: EdgeInsets.all(5),
child: Column( child: Column(
mainAxisAlignment: mainAxisAlignment:
@ -481,10 +481,25 @@ class _HomeScreenState extends State<HomeScreen> {
Padding( Padding(
padding: EdgeInsets.only( padding: EdgeInsets.only(
top: 10, left: 10, right: 0), top: 10, left: 10, right: 0),
child: Stack(
children: [
Positioned(
bottom: 0.1,
right: 0.5,
width: 23.0,
height: 25.0,
child: Icon( child: Icon(
DoctorApp.inpatient,
size: 65,
color: Colors.white12,
),
),
Icon(
DoctorApp.inpatient, DoctorApp.inpatient,
size: 32, size: 32,
color: Colors.white, color: Colors.white,
),
],
)), )),
Container( Container(
padding: EdgeInsets.all(10), padding: EdgeInsets.all(10),
@ -528,10 +543,26 @@ class _HomeScreenState extends State<HomeScreen> {
Padding( Padding(
padding: EdgeInsets.only( padding: EdgeInsets.only(
top: 10, left: 10, right: 0), top: 10, left: 10, right: 0),
child: Stack(
children: [
Positioned(
bottom: 0.1,
right: 0.5,
width: 23.0,
height: 25.0,
child: Icon( child: Icon(
DoctorApp
.arrival_patients,
size: 65,
color: Colors.white38,
),
),
Icon(
DoctorApp.arrival_patients, DoctorApp.arrival_patients,
size: 35, size: 35,
color: Colors.black, color: Colors.black,
),
],
)), )),
Container( Container(
padding: EdgeInsets.all(10), padding: EdgeInsets.all(10),
@ -546,25 +577,30 @@ class _HomeScreenState extends State<HomeScreen> {
), ),
hasBorder: false, hasBorder: false,
onTap: () { onTap: () {
String date =
String date = DateUtils.convertDateToFormat( DateUtils.convertDateToFormat(
DateTime(DateTime.now().year, DateTime.now().month, DateTime(
DateTime.now().day ), DateTime.now().year,
DateTime.now().month,
DateTime.now().day),
'yyyy-MM-dd'); 'yyyy-MM-dd');
Navigator.push( Navigator.push(
context, context,
MaterialPageRoute( MaterialPageRoute(
builder: (context) => builder: (context) => OutPatientsScreen(
OutPatientsScreen(
patientSearchRequestModel: patientSearchRequestModel:
PatientSearchRequestModel(from: date, to: date,doctorID: authProvider.doctorProfile.doctorID) PatientSearchRequestModel(
), from: date,
to: date,
doctorID: authProvider
.doctorProfile
.doctorID)),
)); ));
}, },
), ),
HomePageCard( HomePageCard(
color: Colors.black, color: Color(0xff2B353E),
margin: EdgeInsets.all(5), margin: EdgeInsets.all(5),
child: Column( child: Column(
mainAxisAlignment: mainAxisAlignment:
@ -575,10 +611,26 @@ class _HomeScreenState extends State<HomeScreen> {
Padding( Padding(
padding: EdgeInsets.only( padding: EdgeInsets.only(
top: 10, left: 10, right: 0), top: 10, left: 10, right: 0),
child: Stack(
children: [
Positioned(
bottom: 0.1,
right: 0.5,
width: 23.0,
height: 25.0,
child: Icon( child: Icon(
DoctorApp.referral_1,
size: 65,
color: Colors.white10
.withOpacity(0.1),
),
),
Icon(
DoctorApp.referral_1, DoctorApp.referral_1,
size: 35, size: 35,
color: Colors.white, color: Colors.white,
),
],
)), )),
Container( Container(
padding: EdgeInsets.all(10), padding: EdgeInsets.all(10),
@ -604,46 +656,7 @@ class _HomeScreenState extends State<HomeScreen> {
}, },
), ),
HomePageCard( HomePageCard(
color: Colors.red[800], color: Color(0xffD02127),
margin: EdgeInsets.all(5),
child: Column(
mainAxisAlignment:
MainAxisAlignment.center,
crossAxisAlignment:
CrossAxisAlignment.start,
children: <Widget>[
Padding(
padding: EdgeInsets.only(
top: 10, left: 10, right: 0),
child: Icon(
DoctorApp.discharge_patients,
size: 35,
color: Colors.white,
)),
Container(
padding: EdgeInsets.all(10),
child: AppText(
'Discharged Patients',
color: Colors.white,
textAlign: TextAlign.start,
fontSize: 15,
))
],
),
hasBorder: false,
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
DischargedPatient(),
// MyReferredPatient(),
),
);
},
),
HomePageCard(
color: Colors.grey[300],
margin: EdgeInsets.all(5), margin: EdgeInsets.all(5),
child: Column( child: Column(
mainAxisAlignment: mainAxisAlignment:
@ -654,49 +667,25 @@ class _HomeScreenState extends State<HomeScreen> {
Padding( Padding(
padding: EdgeInsets.only( padding: EdgeInsets.only(
top: 10, left: 10, right: 0), top: 10, left: 10, right: 0),
child: Stack(
children: [
Positioned(
bottom: 0.1,
right: 0.5,
width: 23.0,
height: 25.0,
child: Icon( child: Icon(
DoctorApp.referral_discharge, DoctorApp.search,
size: 35, size: 65,
color: Colors.black, color: Colors.white10,
)),
Container(
padding: EdgeInsets.all(10),
child: AppText(
'Referral Discharged',
color: Colors.black,
textAlign: TextAlign.start,
fontSize: 15,
))
],
),
hasBorder: false,
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
ReferralDischargedPatientPage(),
// MyReferredPatient(),
), ),
);
},
), ),
HomePageCard( Icon(
color: Colors.black,
margin: EdgeInsets.all(5),
child: Column(
mainAxisAlignment:
MainAxisAlignment.center,
crossAxisAlignment:
CrossAxisAlignment.start,
children: <Widget>[
Padding(
padding: EdgeInsets.only(
top: 10, left: 10, right: 0),
child: Icon(
DoctorApp.search, DoctorApp.search,
size: 32, size: 35,
color: Colors.white, color: Colors.white,
),
],
)), )),
Container( Container(
padding: EdgeInsets.all(10), padding: EdgeInsets.all(10),
@ -720,7 +709,7 @@ class _HomeScreenState extends State<HomeScreen> {
}, },
), ),
HomePageCard( HomePageCard(
color: Colors.red[800], color: Color(0xffC9C9C9),
margin: EdgeInsets.all(5), margin: EdgeInsets.all(5),
child: Column( child: Column(
mainAxisAlignment: mainAxisAlignment:
@ -731,17 +720,33 @@ class _HomeScreenState extends State<HomeScreen> {
Padding( Padding(
padding: EdgeInsets.only( padding: EdgeInsets.only(
top: 10, left: 10, right: 0), top: 10, left: 10, right: 0),
child: Stack(
children: [
Positioned(
bottom: 0.1,
right: 0.5,
width: 23.0,
height: 25.0,
child: Icon( child: Icon(
DoctorApp
.search_medicines,
color: Colors.black12,
size: 65,
),
),
Icon(
DoctorApp.search_medicines, DoctorApp.search_medicines,
size: 32, size: 40,
color: Colors.white, color: Color(0xff2B353E),
),
],
)), )),
Container( Container(
padding: EdgeInsets.all(10), padding: EdgeInsets.all(10),
child: AppText( child: AppText(
TranslationBase.of(context) TranslationBase.of(context)
.searchMedicine, .searchMedicine,
color: Colors.white, color: Color(0xff2B353E),
textAlign: TextAlign.start, textAlign: TextAlign.start,
fontSize: 13, fontSize: 13,
)) ))

@ -11,12 +11,12 @@ import 'package:doctor_app_flutter/widgets/shared/doctor_card.dart';
import 'package:doctor_app_flutter/widgets/shared/network_base_view.dart'; import 'package:doctor_app_flutter/widgets/shared/network_base_view.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class MedicalFilePage extends StatefulWidget { class HealthSummaryPage extends StatefulWidget {
@override @override
_MedicalFilePageState createState() => _MedicalFilePageState(); _HealthSummaryPageState createState() => _HealthSummaryPageState();
} }
class _MedicalFilePageState extends State<MedicalFilePage> { class _HealthSummaryPageState extends State<HealthSummaryPage> {
PatiantInformtion patient; PatiantInformtion patient;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {

@ -26,15 +26,18 @@ class _DischargedPatientState extends State<DischargedPatient> {
return BaseView<DischargedPatientViewModel>( return BaseView<DischargedPatientViewModel>(
onModelReady: (model) => model.getDischargedPatient(), onModelReady: (model) => model.getDischargedPatient(),
builder: (_, model, w) => AppScaffold( builder: (_, model, w) => AppScaffold(
appBarTitle: 'Discharged Patient', //appBarTitle: 'Discharged Patient',
subtitle: "Last Three Months", //subtitle: "Last Three Months",
backgroundColor: Colors.grey[200], backgroundColor: Colors.grey[200],
isShowAppBar: true, isShowAppBar: false,
baseViewModel: model, baseViewModel: model,
body: model.myDischargedPatient.isEmpty?Center( body: model.myDischargedPatient.isEmpty? Center(
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
Container(
height: MediaQuery.of(context).size.height * 0.070,
),
SizedBox( SizedBox(
height: 100, height: 100,
), ),
@ -53,6 +56,9 @@ class _DischargedPatientState extends State<DischargedPatient> {
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
Container(
height: MediaQuery.of(context).size.height * 0.070,
),
SizedBox(height: 12,), SizedBox(height: 12,),
Container( Container(
width: double.maxFinite, width: double.maxFinite,
@ -97,10 +103,10 @@ class _DischargedPatientState extends State<DischargedPatient> {
}), }),
])), ])),
SizedBox(height: 5,), SizedBox(height: 5,),
Expanded( Expanded(child: SingleChildScrollView(
child: ListView.builder( child: Column(
itemCount: model.filterData.length, children: [
itemBuilder: (context,index)=>InkWell( ...List.generate(model.filterData.length, (index) => InkWell(
onTap: () { onTap: () {
Navigator.of(context) Navigator.of(context)
.pushNamed( .pushNamed(
@ -324,8 +330,9 @@ class _DischargedPatientState extends State<DischargedPatient> {
), ),
), ),
)), )),
],
), ),
))
], ],
), ),
), ),

@ -0,0 +1,164 @@
import 'package:doctor_app_flutter/core/viewModel/PatientSearchViewModel.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/widgets/patients/PatientCard.dart';
import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/errors/error_message.dart';
import 'package:doctor_app_flutter/widgets/shared/loader/gif_loader_dialog_utils.dart';
import 'package:doctor_app_flutter/widgets/shared/text_fields/app-textfield-custom.dart';
import 'package:flutter/material.dart';
import '../../routes.dart';
class InPatientPage extends StatefulWidget {
final bool isMyInPatient;
InPatientPage(this.isMyInPatient);
@override
_InPatientPageState createState() => _InPatientPageState();
}
class _InPatientPageState extends State<InPatientPage> {
TextEditingController _searchController = TextEditingController();
@override
void dispose() {
_searchController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return BaseView<PatientSearchViewModel>(
onModelReady: (model) async {
await model.setDefaultInPatientList();
},
builder: (_, model, w) => AppScaffold(
baseViewModel: model,
isShowAppBar: false,
body: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
height: MediaQuery.of(context).size.height * 0.070,
),
Container(
margin: EdgeInsets.all(16.0),
child: AppTextFieldCustom(
hintText: TranslationBase.of(context).searchPatientName,
isTextFieldHasSuffix: true,
suffixIcon: IconButton(
icon: Icon(
Icons.search,
color: Colors.black,
),
onPressed: () {},
),
controller: _searchController,
onChanged: (value) {
model.filterSearchResults(value);
}),
),
model.filteredInPatientItems.length > 0
? Expanded(
child: Container(
margin: EdgeInsets.symmetric(horizontal: 16.0),
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
...List.generate(
model.filteredInPatientItems.length, (index) {
if (!widget.isMyInPatient)
return PatientCard(
patientInfo:
model.filteredInPatientItems[index],
patientType: "1",
arrivalType: "1",
isInpatient: true,
isMyPatient: model
.filteredInPatientItems[index]
.doctorId ==
model.doctorProfile.doctorID,
onTap: () {
FocusScopeNode currentFocus =
FocusScope.of(context);
if (!currentFocus.hasPrimaryFocus) {
currentFocus.unfocus();
}
Navigator.of(context).pushNamed(
PATIENTS_PROFILE,
arguments: {
"patient": model
.filteredInPatientItems[index],
"patientType": "1",
"from": "0",
"to": "0",
"isSearch": false,
"isInpatient": true,
"arrivalType": "1",
});
},
);
else if (model.filteredInPatientItems[index]
.doctorId ==
model.doctorProfile.doctorID &&
widget.isMyInPatient)
return PatientCard(
patientInfo:
model.filteredInPatientItems[index],
patientType: "1",
arrivalType: "1",
isInpatient: true,
isMyPatient: model
.filteredInPatientItems[index]
.doctorId ==
model.doctorProfile.doctorID,
onTap: () {
FocusScopeNode currentFocus =
FocusScope.of(context);
if (!currentFocus.hasPrimaryFocus) {
currentFocus.unfocus();
}
Navigator.of(context).pushNamed(
PATIENTS_PROFILE,
arguments: {
"patient": model
.filteredInPatientItems[index],
"patientType": "1",
"from": "0",
"to": "0",
"isSearch": false,
"isInpatient": true,
"arrivalType": "1",
});
},
);
else
return SizedBox();
}),
SizedBox(
height: 15,
)
],
),
),
),
)
: Expanded(
child: SingleChildScrollView(
child: Container(
child: ErrorMessage(
error:
TranslationBase.of(context).noDataAvailable)),
),
),
],
),
),
);
}
}

@ -1,44 +1,55 @@
import 'package:doctor_app_flutter/config/size_config.dart'; import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/model/PatientSearchRequestModel.dart'; import 'package:doctor_app_flutter/core/model/PatientSearchRequestModel.dart';
import 'package:doctor_app_flutter/core/viewModel/PatientSearchViewModel.dart'; import 'package:doctor_app_flutter/core/viewModel/PatientSearchViewModel.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/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/PatientCard.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/shared/errors/error_message.dart';
import 'package:doctor_app_flutter/widgets/shared/loader/gif_loader_dialog_utils.dart';
import 'package:doctor_app_flutter/widgets/shared/text_fields/app-textfield-custom.dart';
import 'package:doctor_app_flutter/widgets/shared/text_fields/text_fields_utils.dart'; import 'package:doctor_app_flutter/widgets/shared/text_fields/text_fields_utils.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import '../../routes.dart'; import 'DischargedPatientPage.dart';
import 'InPatientPage.dart';
class PatientInPatientScreen extends StatefulWidget { class PatientInPatientScreen extends StatefulWidget {
@override @override
_PatientInPatientScreenState createState() => _PatientInPatientScreenState(); _PatientInPatientScreenState createState() => _PatientInPatientScreenState();
} }
class _PatientInPatientScreenState extends State<PatientInPatientScreen> { class _PatientInPatientScreenState extends State<PatientInPatientScreen> with SingleTickerProviderStateMixin{
PatientSearchRequestModel requestModel = PatientSearchRequestModel();
TabController _tabController;
int _activeTab = 0; int _activeTab = 0;
TextEditingController _searchController = TextEditingController(); @override
void initState() {
super.initState();
_tabController = TabController(length: 3, vsync: this);
_tabController.addListener(_handleTabSelection);
}
@override @override
void dispose() { void dispose() {
_searchController.dispose();
super.dispose(); super.dispose();
_tabController.dispose();
}
_handleTabSelection() {
setState(() {
_activeTab = _tabController.index;
});
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final screenSize = MediaQuery.of(context).size; final screenSize = MediaQuery.of(context).size;
PatientSearchRequestModel requestModel = PatientSearchRequestModel();
return BaseView<PatientSearchViewModel>( return BaseView<PatientSearchViewModel>(
onModelReady: (model) => model.getInPatientList(requestModel), onModelReady: (model) async {
model.clearPatientList();
model.getInPatientList(requestModel);
},
builder: (_, model, w) => AppScaffold( builder: (_, model, w) => AppScaffold(
baseViewModel: model, baseViewModel: model,
isShowAppBar: false, isShowAppBar: false,
@ -71,100 +82,54 @@ class _PatientInPatientScreenState extends State<PatientInPatientScreen> {
]), ]),
), ),
), ),
tabsBar(context, screenSize, model), Expanded(
Container( child: Scaffold(
margin: EdgeInsets.all(16.0), extendBodyBehindAppBar: true,
child: AppTextFieldCustom( appBar: PreferredSize(
hintText: TranslationBase.of(context) preferredSize: Size.fromHeight(MediaQuery.of(context).size.height * 0.070),
.searchPatientName,
isTextFieldHasSuffix: true,
suffixIcon: IconButton(
icon: Icon(
Icons.search,
color: Colors.black,
),
onPressed: () {},
),
controller: _searchController,
onChanged: (value) {
model.filterSearchResults(value);
}),
),
model.filteredInPatientItems.length > 0
? Expanded(
child: Container( child: Container(
margin: EdgeInsets.symmetric(horizontal: 16.0), height: MediaQuery.of(context).size.height * 0.070,
child: SingleChildScrollView( decoration: BoxDecoration(
child: Column( border: Border(
crossAxisAlignment: CrossAxisAlignment.start, bottom: BorderSide(
color: Theme.of(context).dividerColor,
width: 0.5), //width: 0.7
),
color: Colors.white),
child: Center(
child: TabBar(
isScrollable: false,
controller: _tabController,
indicatorColor: Colors.transparent,
indicatorWeight: 1.0,
indicatorSize: TabBarIndicatorSize.tab,
labelColor: Theme.of(context).primaryColor,
labelPadding: EdgeInsets.only(top: 0, left:0, right: 0,bottom: 0),
unselectedLabelColor: Colors.grey[800],
tabs: [
tabWidget(screenSize, _activeTab == 0, TranslationBase.of(context).inPatientAll, counter: model.inPatientList.length),
tabWidget(screenSize, _activeTab == 1, TranslationBase.of(context).inPatient, counter: model.myIinPatientList.length),
tabWidget(screenSize, _activeTab == 2, TranslationBase.of(context).discharged),
],
),
),
),
),
body: Column(
children: [ children: [
// const SizedBox( Expanded(
// height: 16, child: TabBarView(
// ), physics: BouncingScrollPhysics(),
...List.generate(model.filteredInPatientItems.length, (index) { controller: _tabController,
if(_activeTab == 0) children: [
return PatientCard( InPatientPage(false),
patientInfo: model.filteredInPatientItems[index], InPatientPage(true),
patientType: "1", DischargedPatient(),
arrivalType: "1",
isInpatient: true,
isMyPatient: model.filteredInPatientItems[index].doctorId==model.doctorProfile.doctorID,
onTap: () {
FocusScopeNode currentFocus = FocusScope.of(context);
if (!currentFocus.hasPrimaryFocus) {
currentFocus.unfocus();
}
Navigator.of(context)
.pushNamed(PATIENTS_PROFILE, arguments: {
"patient": model.filteredInPatientItems[index],
"patientType": "1",
"from": "0",
"to": "0",
"isSearch": false,
"isInpatient": true,
"arrivalType": "1",
});
},
);
else if(model.filteredInPatientItems[index].doctorId==model.doctorProfile.doctorID && _activeTab==1)
return PatientCard(
patientInfo: model.filteredInPatientItems[index],
patientType: "1",
arrivalType: "1",
isInpatient: true,
isMyPatient: model.filteredInPatientItems[index].doctorId==model.doctorProfile.doctorID,
onTap: () {
FocusScopeNode currentFocus = FocusScope.of(context);
if (!currentFocus.hasPrimaryFocus) {
currentFocus.unfocus();
}
Navigator.of(context)
.pushNamed(PATIENTS_PROFILE, arguments: {
"patient": model.filteredInPatientItems[index],
"patientType": "1",
"from": "0",
"to": "0",
"isSearch": false,
"isInpatient": true,
"arrivalType": "1",
});
},
);
else return SizedBox();
}),
SizedBox(height: 15,)
], ],
), ),
), ),
],
), ),
)
: Expanded(
child: SingleChildScrollView(
child: Container(
child: ErrorMessage(
error: TranslationBase.of(context).noDataAvailable)),
), ),
), ),
], ],
@ -173,66 +138,51 @@ class _PatientInPatientScreenState extends State<PatientInPatientScreen> {
); );
} }
Widget tabsBar( Widget tabWidget(Size screenSize, bool isActive, String title, {int counter = -1}){
BuildContext context, Size screenSize, PatientSearchViewModel model) {
List<String> _tabs = [
TranslationBase.of(context).inPatientAll.toUpperCase(),
TranslationBase.of(context).inPatient.toUpperCase(),
];
return Container( return Center(
height: screenSize.height * 0.070,
decoration: TextFieldsUtils.containerBorderDecoration(
Color(0Xffffffff), Color(0xFFCCCCCC),
borderRadius: 4, borderWidth: 0),
child: Row(
mainAxisSize: MainAxisSize.max,
crossAxisAlignment: CrossAxisAlignment.center,
children: _tabs.map((item) {
bool _isActive = _tabs[_activeTab] == item ? true : false;
return Expanded(
child: InkWell(
onTap: () async {
setState(() {
_activeTab = _tabs.indexOf(item);
});
FocusScopeNode currentFocus = FocusScope.of(context);
if (!currentFocus.hasPrimaryFocus) {
currentFocus.unfocus();
}
if (_activeTab==0) {
GifLoaderDialogUtils.showMyDialog(
context);
await model.getInPatientList(requestModel,
isMyInpatient: _activeTab == 1, isFirstTime: false);
GifLoaderDialogUtils.hideDialog(
context);
}
},
child: Center(
child: Container( child: Container(
height: screenSize.height * 0.070, height: screenSize.height * 0.070,
decoration: TextFieldsUtils.containerBorderDecoration( decoration: TextFieldsUtils.containerBorderDecoration(
_isActive isActive
? Color(0xFFD02127 /*B8382B*/) ? Color(0xFFD02127 /*B8382B*/)
: Color(0xFFEAEAEA), : Color(0xFFEAEAEA),
_isActive ? Color(0xFFD02127) : Color(0xFFEAEAEA), isActive ? Color(0xFFD02127) : Color(0xFFEAEAEA),
borderRadius: 4, borderRadius: 4,
borderWidth: 0), borderWidth: 0),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
AppText(
title,
fontSize: SizeConfig.textMultiplier * 1.6,
color: isActive ? Colors.white : Color(0xFF2B353E),
fontWeight: FontWeight.w700,
),
if (counter != -1)
Container(
margin: EdgeInsets.all(4),
width: 15,
height: 15,
decoration: BoxDecoration(
color: isActive
? Colors.white
: Color(0xFFD02127),
shape: BoxShape.circle,
),
child: Center( child: Center(
child: FittedBox(
child: AppText( child: AppText(
item, "$counter",
fontSize: SizeConfig.textMultiplier * 1.8, fontSize: SizeConfig.textMultiplier * 1.5,
color: _isActive ? Colors.white : Color(0xFF2B353E), color: !isActive ? Colors.white : Color(0xFFD02127),
fontWeight: FontWeight.w700, fontWeight: FontWeight.w700,
), ),
), ),
), ),
), ),
],
), ),
);
}).toList(),
), ),
); );
} }

@ -25,7 +25,7 @@ class _ReferralDischargedPatientPageState extends State<ReferralDischargedPatien
builder: (_, model, w) => AppScaffold( builder: (_, model, w) => AppScaffold(
appBarTitle: 'Referral Discharged ', appBarTitle: 'Referral Discharged ',
backgroundColor: Colors.grey[200], backgroundColor: Colors.grey[200],
isShowAppBar: true, isShowAppBar: false,
baseViewModel: model, baseViewModel: model,
body: model.myDischargeReferralPatient.isEmpty?Center( body: model.myDischargeReferralPatient.isEmpty?Center(
child: Column( child: Column(

@ -1,6 +1,7 @@
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/filter_type.dart'; import 'package:doctor_app_flutter/core/enum/filter_type.dart';
import 'package:doctor_app_flutter/core/enum/patient_type.dart'; import 'package:doctor_app_flutter/core/enum/patient_type.dart';
import 'package:doctor_app_flutter/core/enum/viewstate.dart';
import 'package:doctor_app_flutter/core/model/PatientSearchRequestModel.dart'; import 'package:doctor_app_flutter/core/model/PatientSearchRequestModel.dart';
import 'package:doctor_app_flutter/core/viewModel/PatientSearchViewModel.dart'; import 'package:doctor_app_flutter/core/viewModel/PatientSearchViewModel.dart';
import 'package:doctor_app_flutter/core/viewModel/auth_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/auth_view_model.dart';
@ -155,12 +156,41 @@ class _OutPatientsScreenState extends State<OutPatientsScreen> {
borderRadius: 4, borderRadius: 4,
borderWidth: 0), borderWidth: 0),
child: Center( child: Center(
child: AppText( child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
AppText(
item, item,
fontSize: SizeConfig.textMultiplier * 1.8, fontSize: SizeConfig.textMultiplier * 1.8,
color: _isActive ? Colors.white : Color(0xFF2B353E), color: _isActive ? Colors.white : Color(0xFF2B353E),
fontWeight: FontWeight.w700, fontWeight: FontWeight.w700,
), ),
_isActive&&_activeLocation!=0&&model.state == ViewState.Idle ?Container(
padding: EdgeInsets.all(2),
margin: EdgeInsets.symmetric(horizontal: 5),
decoration:
new BoxDecoration(
color: Colors.white,
borderRadius:
BorderRadius.circular(
50),
),
constraints: BoxConstraints(
minWidth: 20,
minHeight: 20,
),
child: new Text(
model.filterData.length.toString(),
style: new TextStyle(
color: Colors.red,
fontSize: 10
),
textAlign:
TextAlign.center,
),
):Container(),
],
),
), ),
), ),
), ),
@ -169,7 +199,6 @@ class _OutPatientsScreenState extends State<OutPatientsScreen> {
}).toList(), }).toList(),
), ),
), ),
SizedBox(height: 18.5), SizedBox(height: 18.5),
Container( Container(
width: SizeConfig.screenWidth * 0.9, width: SizeConfig.screenWidth * 0.9,

@ -141,7 +141,7 @@ class _InPatientProfileScreenState extends State<InPatientProfileScreen>with Sin
patient: patient, patient: patient,
patientType: patientType, patientType: patientType,
arrivalType: arrivalType, arrivalType: arrivalType,
route: MEDICAL_FILE, route: HEALTH_SUMMARY,
nameLine1: "Health", nameLine1: "Health",
//TranslationBase.of(context).medicalReport, //TranslationBase.of(context).medicalReport,
nameLine2: "Summary", nameLine2: "Summary",
@ -152,7 +152,7 @@ class _InPatientProfileScreenState extends State<InPatientProfileScreen>with Sin
patientType: patientType, patientType: patientType,
arrivalType: arrivalType, arrivalType: arrivalType,
isDisable: true, isDisable: true,
route: MEDICAL_FILE, route: HEALTH_SUMMARY,
nameLine1: "Medical", //Health nameLine1: "Medical", //Health
//TranslationBase.of(context).medicalReport, //TranslationBase.of(context).medicalReport,
nameLine2: "Report", //Report nameLine2: "Report", //Report

@ -2,6 +2,7 @@ import 'package:doctor_app_flutter/core/model/note/note_model.dart';
import 'package:doctor_app_flutter/core/model/note/update_note_model.dart'; import 'package:doctor_app_flutter/core/model/note/update_note_model.dart';
import 'package:doctor_app_flutter/core/viewModel/auth_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/auth_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/patient_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/patient_view_model.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/icons_app/doctor_app_icons.dart';
import 'package:doctor_app_flutter/models/patient/progress_note_request.dart'; import 'package:doctor_app_flutter/models/patient/progress_note_request.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart'; import 'package:doctor_app_flutter/screens/base/base_view.dart';
@ -42,9 +43,10 @@ class _ProgressNoteState extends State<ProgressNoteScreen> {
var _isInit = true; var _isInit = true;
bool isDischargedPatient = false; bool isDischargedPatient = false;
AuthViewModel authProvider; AuthViewModel authProvider;
ProjectViewModel projectViewModel;
getProgressNoteList(BuildContext context, PatientViewModel model,
getProgressNoteList(BuildContext context, PatientViewModel model, {bool isLocalBusy = false}) async { {bool isLocalBusy = false}) async {
final routeArgs = ModalRoute.of(context).settings.arguments as Map; final routeArgs = ModalRoute.of(context).settings.arguments as Map;
PatiantInformtion patient = routeArgs['patient']; PatiantInformtion patient = routeArgs['patient'];
String token = await sharedPref.getString(TOKEN); String token = await sharedPref.getString(TOKEN);
@ -59,7 +61,10 @@ class _ProgressNoteState extends State<ProgressNoteScreen> {
tokenID: token, tokenID: token,
patientTypeID: patient.patientType, patientTypeID: patient.patientType,
languageID: 2); languageID: 2);
model.getPatientProgressNote(progressNoteRequest.toJson(), isLocalBusy: isLocalBusy).then((c) { model
.getPatientProgressNote(progressNoteRequest.toJson(),
isLocalBusy: isLocalBusy)
.then((c) {
notesList = model.patientProgressNoteList; notesList = model.patientProgressNoteList;
}); });
} }
@ -67,42 +72,65 @@ class _ProgressNoteState extends State<ProgressNoteScreen> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
authProvider = Provider.of(context); authProvider = Provider.of(context);
final routeArgs = ModalRoute.of(context).settings.arguments as Map; projectViewModel = Provider.of(context);
final routeArgs = ModalRoute
.of(context)
.settings
.arguments as Map;
PatiantInformtion patient = routeArgs['patient']; PatiantInformtion patient = routeArgs['patient'];
String arrivalType = routeArgs['arrivalType']; String arrivalType = routeArgs['arrivalType'];
if(routeArgs.containsKey('isDischargedPatient')) if (routeArgs.containsKey('isDischargedPatient'))
isDischargedPatient = routeArgs['isDischargedPatient']; isDischargedPatient = routeArgs['isDischargedPatient'];
return BaseView<PatientViewModel>( return BaseView<PatientViewModel>(
onModelReady: (model) => getProgressNoteList(context, model), onModelReady: (model) => getProgressNoteList(context, model),
builder: (_, model, w) => AppScaffold( builder: (_, model, w) =>
AppScaffold(
baseViewModel: model, baseViewModel: model,
backgroundColor: Theme.of(context).scaffoldBackgroundColor, backgroundColor: Theme
.of(context)
.scaffoldBackgroundColor,
// appBarTitle: TranslationBase.of(context).progressNote, // appBarTitle: TranslationBase.of(context).progressNote,
appBar: PatientProfileHeaderNewDesignAppBar( appBar: PatientProfileHeaderNewDesignAppBar(
patient, patient.patientType.toString() ?? '0', arrivalType,isInpatient: true,), patient,
body: model.patientProgressNoteList == null || model.patientProgressNoteList.length == 0 patient.patientType.toString() ?? '0',
arrivalType,
isInpatient: true,
),
body: model.patientProgressNoteList == null ||
model.patientProgressNoteList.length == 0
? DrAppEmbeddedError( ? DrAppEmbeddedError(
error: TranslationBase.of(context).errorNoProgressNote) error: TranslationBase
.of(context)
.errorNoProgressNote)
: Container( : Container(
color: Colors.grey[200], color: Colors.grey[200],
child: Column( child: Column(
children: <Widget>[ children: <Widget>[
if(!isDischargedPatient) if (!isDischargedPatient)
AddNewOrder( onTap: () { AddNewOrder(
onTap: () {
Navigator.push( Navigator.push(
context, context,
MaterialPageRoute( MaterialPageRoute(
builder: (context) => UpdateNoteOrder( builder: (context) =>
UpdateNoteOrder(
patientModel: model, patientModel: model,
patient: patient, patient: patient,
visitType: widget.visitType, visitType: widget.visitType,
isUpdate: false, isUpdate: false,
)), )),
); );
},label: widget.visitType ==3?'Add a New Order Sheet':'Create a New Progress Note',), },
label: widget.visitType == 3
? TranslationBase
.of(context)
.addNewOrderSheet
: TranslationBase
.of(context)
.addProgressNote,
),
Expanded( Expanded(
child: Container( child: Container(
child: ListView.builder( child: ListView.builder(
itemCount: model.patientProgressNoteList.length, itemCount: model.patientProgressNoteList.length,
itemBuilder: (BuildContext ctxt, int index) { itemBuilder: (BuildContext ctxt, int index) {
@ -118,16 +146,16 @@ class _ProgressNoteState extends State<ProgressNoteScreen> {
.patientProgressNoteList[ .patientProgressNoteList[
index] index]
.createdBy .createdBy
? Color(0xFFCC9B14):model ? Color(0xFFCC9B14)
.patientProgressNoteList[ : model.patientProgressNoteList[index]
index]
.status == .status ==
4?Colors.red.shade700 4
: model ? Colors.red.shade700
.patientProgressNoteList[ : model.patientProgressNoteList[index]
index]
.status == .status ==
2?Colors.green[600]:Color(0xFFCC9B14), 2
? Colors.green[600]
: Color(0xFFCC9B14),
widget: Column( widget: Column(
children: [ children: [
Column( Column(
@ -146,7 +174,9 @@ class _ProgressNoteState extends State<ProgressNoteScreen> {
index] index]
.createdBy) .createdBy)
AppText( AppText(
'Pending', TranslationBase
.of(context)
.notePending,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
color: Color(0xFFCC9B14), color: Color(0xFFCC9B14),
fontSize: 12, fontSize: 12,
@ -157,7 +187,9 @@ class _ProgressNoteState extends State<ProgressNoteScreen> {
.status == .status ==
4) 4)
AppText( AppText(
'Canceled', TranslationBase
.of(context)
.noteCanceled,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
color: Colors.red.shade700, color: Colors.red.shade700,
fontSize: 12, fontSize: 12,
@ -168,7 +200,9 @@ class _ProgressNoteState extends State<ProgressNoteScreen> {
.status == .status ==
2) 2)
AppText( AppText(
'Verified', TranslationBase
.of(context)
.noteVerified,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
color: Colors.green[600], color: Colors.green[600],
fontSize: 12, fontSize: 12,
@ -229,7 +263,10 @@ class _ProgressNoteState extends State<ProgressNoteScreen> {
width: 2, width: 2,
), ),
AppText( AppText(
'Update', TranslationBase
.of(
context)
.update,
fontSize: 10, fontSize: 10,
color: Colors.white, color: Colors.white,
), ),
@ -309,7 +346,10 @@ class _ProgressNoteState extends State<ProgressNoteScreen> {
width: 2, width: 2,
), ),
AppText( AppText(
'Verify', TranslationBase
.of(
context)
.noteVerify,
fontSize: 10, fontSize: 10,
color: Colors.white, color: Colors.white,
), ),
@ -325,7 +365,11 @@ class _ProgressNoteState extends State<ProgressNoteScreen> {
onTap: () async { onTap: () async {
showMyDialog( showMyDialog(
context: context, context: context,
actionName: "cancel", actionName:
TranslationBase
.of(
context)
.cancel,
confirmFun: () async { confirmFun: () async {
GifLoaderDialogUtils GifLoaderDialogUtils
.showMyDialog( .showMyDialog(
@ -398,7 +442,6 @@ class _ProgressNoteState extends State<ProgressNoteScreen> {
padding: EdgeInsets.all(6), padding: EdgeInsets.all(6),
), ),
), ),
SizedBox( SizedBox(
width: 10, width: 10,
) )
@ -428,7 +471,10 @@ class _ProgressNoteState extends State<ProgressNoteScreen> {
.start, .start,
children: [ children: [
AppText( AppText(
'Created By: ', TranslationBase
.of(
context)
.createdBy,
fontSize: 10, fontSize: 10,
), ),
Expanded( Expanded(
@ -456,15 +502,23 @@ class _ProgressNoteState extends State<ProgressNoteScreen> {
index] index]
.createdOn != .createdOn !=
null null
? DateUtils.getDayMonthYearDateFormatted( ? DateUtils
DateUtils.getDateTimeFromServerFormat( .getDayMonthYearDateFormatted(
DateUtils
.getDateTimeFromServerFormat(
model model
.patientProgressNoteList[ .patientProgressNoteList[
index] index]
.createdOn)) .createdOn),
isArabic:
projectViewModel
.isArabic)
: DateUtils : DateUtils
.getDayMonthYearDateFormatted( .getDayMonthYearDateFormatted(
DateTime.now()), DateTime.now(),
isArabic:
projectViewModel
.isArabic),
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
fontSize: 14, fontSize: 14,
), ),
@ -541,38 +595,49 @@ class _ProgressNoteState extends State<ProgressNoteScreen> {
isShowAppBar: false, isShowAppBar: false,
body: Container( body: Container(
color: Colors.white, color: Colors.white,
child: Center( child: Center(
child: Column( child: Column(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
// SizedBox(height: 20,), // SizedBox(height: 20,),
SizedBox(height: 10,), SizedBox(
height: 10,
),
Row( Row(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
AppText( AppText(
"Confirm", fontWeight: FontWeight.w600, TranslationBase
.of(context)
.noteConfirm,
fontWeight: FontWeight.w600,
color: Colors.black, color: Colors.black,
fontSize: 16,), fontSize: 16,
),
], ],
), ),
SizedBox(height: 10,), SizedBox(
height: 10,
),
DividerWithSpacesAround(), DividerWithSpacesAround(),
SizedBox(height: 12,), SizedBox(
height: 12,
),
Container( Container(
padding: EdgeInsets.all(20), padding: EdgeInsets.all(20),
color: Colors.white, color: Colors.white,
child: AppText( child: AppText(
'Are you sure you want $actionName this order?', projectViewModel.isArabic?"هل أنت متأكد أنك تريد تنفيذ $actionName هذا الأمر؟":'Are you sure you want $actionName this order?',
fontSize: 15, fontSize: 15,
textAlign: TextAlign.center, textAlign: TextAlign.center,
), ),
), ),
SizedBox(height: 8,), SizedBox(
height: 8,
),
DividerWithSpacesAround(), DividerWithSpacesAround(),
FractionallySizedBox( FractionallySizedBox(
widthFactor: 0.75, widthFactor: 0.75,
@ -581,22 +646,29 @@ class _ProgressNoteState extends State<ProgressNoteScreen> {
children: [ children: [
FlatButton( FlatButton(
child: AppText( child: AppText(
"Cancel", fontWeight: FontWeight.w600, TranslationBase
.of(context)
.cancel,
fontWeight: FontWeight.w600,
color: Colors.black, color: Colors.black,
fontSize: 16,),//Text("Cancel"), fontSize: 16,
), //Text("Cancel"),
onPressed: () { onPressed: () {
Navigator.of(context).pop(); Navigator.of(context).pop();
}), }),
FlatButton( FlatButton(
child: AppText( child: AppText(
"Confirm", fontWeight: FontWeight.w600, TranslationBase
.of(context)
.noteConfirm,
fontWeight: FontWeight.w600,
color: Colors.red.shade700, color: Colors.red.shade700,
fontSize: 16,), //Text("Confirm", ), fontSize: 16,
), //Text("Confirm", ),
onPressed: () async { onPressed: () async {
await confirmFun(); await confirmFun();
Navigator.of(context).pop(); Navigator.of(context).pop();
}) })
], ],
), ),
) )
@ -608,8 +680,4 @@ class _ProgressNoteState extends State<ProgressNoteScreen> {
), ),
)); ));
} }
} }

@ -7,6 +7,7 @@ import 'package:doctor_app_flutter/core/model/note/note_model.dart';
import 'package:doctor_app_flutter/core/model/note/update_note_model.dart'; import 'package:doctor_app_flutter/core/model/note/update_note_model.dart';
import 'package:doctor_app_flutter/core/provider/robot_provider.dart'; import 'package:doctor_app_flutter/core/provider/robot_provider.dart';
import 'package:doctor_app_flutter/core/viewModel/patient_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/patient_view_model.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/icons_app/doctor_app_icons.dart';
import 'package:doctor_app_flutter/models/doctor/doctor_profile_model.dart'; import 'package:doctor_app_flutter/models/doctor/doctor_profile_model.dart';
import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart'; import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart';
@ -22,6 +23,7 @@ import 'package:doctor_app_flutter/widgets/shared/speech-text-popup.dart';
import 'package:doctor_app_flutter/widgets/shared/text_fields/app-textfield-custom.dart'; import 'package:doctor_app_flutter/widgets/shared/text_fields/app-textfield-custom.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart'; import 'package:permission_handler/permission_handler.dart';
import 'package:provider/provider.dart';
import 'package:speech_to_text/speech_recognition_error.dart'; import 'package:speech_to_text/speech_recognition_error.dart';
import 'package:speech_to_text/speech_to_text.dart' as stt; import 'package:speech_to_text/speech_to_text.dart' as stt;
@ -51,6 +53,8 @@ class _UpdateNoteOrderState extends State<UpdateNoteOrder> {
stt.SpeechToText speech = stt.SpeechToText(); stt.SpeechToText speech = stt.SpeechToText();
var reconizedWord; var reconizedWord;
var event = RobotProvider(); var event = RobotProvider();
ProjectViewModel projectViewModel;
TextEditingController progressNoteController = TextEditingController(); TextEditingController progressNoteController = TextEditingController();
setSelectedType(int val) { setSelectedType(int val) {
@ -74,6 +78,8 @@ class _UpdateNoteOrderState extends State<UpdateNoteOrder> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
projectViewModel = Provider.of(context);
if (widget.note != null) { if (widget.note != null) {
progressNoteController.text = widget.note.notes; progressNoteController.text = widget.note.notes;
} }
@ -91,8 +97,10 @@ class _UpdateNoteOrderState extends State<UpdateNoteOrder> {
children: [ children: [
BottomSheetTitle( BottomSheetTitle(
title: widget.visitType == 3 title: widget.visitType == 3
? (widget.isUpdate ? 'Update' : 'Add') + ' Order Sheet' ? (widget.isUpdate ? TranslationBase.of(context).noteUpdate : TranslationBase.of(context).noteAdd) +
: (widget.isUpdate ? 'Update' : 'Add') + ' Progress Note', TranslationBase.of(context).orderSheet
: (widget.isUpdate ? TranslationBase.of(context).noteUpdate : TranslationBase.of(context).noteAdd) +
TranslationBase.of(context).progressNote,
), ),
SizedBox( SizedBox(
height: 10.0, height: 10.0,
@ -106,10 +114,10 @@ class _UpdateNoteOrderState extends State<UpdateNoteOrder> {
children: [ children: [
AppTextFieldCustom( AppTextFieldCustom(
hintText: widget.visitType == 3 hintText: widget.visitType == 3
? (widget.isUpdate ? 'Update' : 'Add') + ? (widget.isUpdate ? TranslationBase.of(context).noteUpdate : TranslationBase.of(context).noteAdd) +
' Order Sheet' TranslationBase.of(context).orderSheet
: (widget.isUpdate ? 'Update' : 'Add') + : (widget.isUpdate ? TranslationBase.of(context).noteUpdate : TranslationBase.of(context).noteAdd) +
' Progress Note', TranslationBase.of(context).progressNote,
//TranslationBase.of(context).addProgressNote, //TranslationBase.of(context).addProgressNote,
controller: progressNoteController, controller: progressNoteController,
maxLines: 35, maxLines: 35,
@ -124,8 +132,8 @@ class _UpdateNoteOrderState extends State<UpdateNoteOrder> {
: null, : null,
), ),
Positioned( Positioned(
top: 0, //MediaQuery.of(context).size.height * 0, top: -2, //MediaQuery.of(context).size.height * 0,
right: 15, right: projectViewModel.isArabic? MediaQuery.of(context).size.width * 0.75 : 15,
child: IconButton( child: IconButton(
icon: Icon( icon: Icon(
DoctorApp.speechtotext, DoctorApp.speechtotext,
@ -155,8 +163,10 @@ class _UpdateNoteOrderState extends State<UpdateNoteOrder> {
children: <Widget>[ children: <Widget>[
AppButton( AppButton(
title: widget.visitType == 3 title: widget.visitType == 3
? (widget.isUpdate ? 'Update' : 'Add') + ' Order Sheet' ? (widget.isUpdate ? TranslationBase.of(context).noteUpdate : TranslationBase.of(context).noteAdd) +
: (widget.isUpdate ? 'Update' : 'Add') + ' Progress Note', TranslationBase.of(context).orderSheet
: (widget.isUpdate ? TranslationBase.of(context).noteUpdate : TranslationBase.of(context).noteAdd) +
TranslationBase.of(context).progressNote,
color: Color(0xff359846), color: Color(0xff359846),
// disabled: progressNoteController.text.isEmpty, // disabled: progressNoteController.text.isEmpty,
fontWeight: FontWeight.w700, fontWeight: FontWeight.w700,

@ -0,0 +1,25 @@
class PatientProfileCardModel {
final String nameLine1;
final String nameLine2;
final dynamic route;
final String icon;
final bool isInPatient;
final bool isDisable;
final bool isLoading;
final Function onTap;
final bool isDischargedPatient;
final bool isSelectInpatient;
PatientProfileCardModel(
this.nameLine1,
this.nameLine2,
this.route,
this.icon, {
this.isInPatient = false,
this.isDisable = false,
this.isLoading = false,
this.onTap,
this.isDischargedPatient = false,
this.isSelectInpatient = false,
});
}

@ -1,7 +1,9 @@
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/patients/profile/profile_screen/PatientProfileCardModel.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/PatientProfileButton.dart'; import 'package:doctor_app_flutter/widgets/patients/profile/PatientProfileButton.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
import '../../../../routes.dart'; import '../../../../routes.dart';
@ -23,252 +25,129 @@ class ProfileGridForInPatient extends StatelessWidget {
this.patientType, this.patientType,
this.arrivalType, this.arrivalType,
this.height, this.height,
this.isInpatient, this.from,this.to, this.isDischargedPatient, this.isFromSearch}) this.isInpatient,
this.from,
this.to,
this.isDischargedPatient,
this.isFromSearch})
: super(key: key); : super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Padding( final List<PatientProfileCardModel> cardsList = [
padding: PatientProfileCardModel(
const EdgeInsets.symmetric( TranslationBase.of(context).vital,
vertical: 15.0, TranslationBase.of(context).signs,
horizontal: 15), VITAL_SIGN_DETAILS,
child: GridView.count( 'patient/vital_signs.png',
shrinkWrap: true, isInPatient: isInpatient),
physics: PatientProfileCardModel(
NeverScrollableScrollPhysics(), TranslationBase.of(context).lab,
crossAxisSpacing: 10, TranslationBase.of(context).result,
mainAxisSpacing: 10, LAB_RESULT,
childAspectRatio: 1 / 1.0, 'patient/lab_results.png',
crossAxisCount: 3, isInPatient: isInpatient),
children: [ PatientProfileCardModel(
PatientProfileButton( TranslationBase.of(context).radiology,
patient: patient, TranslationBase.of(context).result,
patientType: patientType, RADIOLOGY_PATIENT,
arrivalType: arrivalType, 'patient/health_summary.png',
from: from, isInPatient: isInpatient),
to: to, PatientProfileCardModel(
nameLine1: TranslationBase.of(context).patient,
TranslationBase TranslationBase.of(context).prescription,
.of(
context)
.vital,
nameLine2:
TranslationBase
.of(
context)
.signs,
route: VITAL_SIGN_DETAILS,
isInPatient: true,
icon:
'patient/vital_signs.png'),
PatientProfileButton(
patient: patient,
patientType: patientType,
arrivalType: arrivalType,
route: LAB_RESULT,
isInPatient: true,
nameLine1:
TranslationBase
.of(
context)
.lab,
nameLine2:
TranslationBase
.of(
context)
.result,
icon:
'patient/lab_results.png'),
PatientProfileButton(
patient: patient,
patientType: patientType,
arrivalType: arrivalType,
isInPatient: isInpatient,
route: RADIOLOGY_PATIENT,
nameLine1:
TranslationBase
.of(
context)
.radiology,
nameLine2:
TranslationBase
.of(
context)
.result,
icon:
'patient/health_summary.png'),
PatientProfileButton(
patient: patient,
isInPatient: isInpatient,
patientType: patientType,
arrivalType: arrivalType,
route:
ORDER_PRESCRIPTION_NEW, ORDER_PRESCRIPTION_NEW,
isSelectInpatient: true, 'patient/order_prescription.png',
nameLine1: isInPatient: isInpatient),
TranslationBase PatientProfileCardModel(
.of( TranslationBase.of(context).progress,
context) TranslationBase.of(context).note,
.patient, PROGRESS_NOTE,
nameLine2: 'patient/Progress_notes.png',
TranslationBase
.of(
context)
.prescription,
icon:
'patient/order_prescription.png'),
PatientProfileButton(
patient: patient,
patientType: patientType,
arrivalType: arrivalType,
route: PROGRESS_NOTE,
isInPatient: isInpatient, isInPatient: isInpatient,
isDischargedPatient: isDischargedPatient: isDischargedPatient),
isDischargedPatient, PatientProfileCardModel(
nameLine1: TranslationBase.of(context).order,
TranslationBase TranslationBase.of(context).sheet,
.of( ORDER_NOTE,
context) 'patient/Progress_notes.png',
.progress,
nameLine2:
TranslationBase
.of(
context)
.note,
icon:
'patient/Progress_notes.png'),
PatientProfileButton(
patient: patient,
isInPatient: isInpatient, isInPatient: isInpatient,
patientType: patientType, isDischargedPatient: isDischargedPatient),
arrivalType: arrivalType, PatientProfileCardModel(
route: ORDER_NOTE, TranslationBase.of(context).orders,
isDischargedPatient: TranslationBase.of(context).procedures,
isDischargedPatient, ORDER_PROCEDURE,
nameLine1: 'patient/Order_Procedures.png',
"Order", isInPatient: isInpatient),
//"Text", PatientProfileCardModel(
nameLine2: TranslationBase.of(context).health,
"Sheet", TranslationBase.of(context).summary,
//TranslationBase.of(context).orders, HEALTH_SUMMARY,
icon: 'patient/health_summary.png',
'patient/Progress_notes.png'), isInPatient: isInpatient),
PatientProfileButton( PatientProfileCardModel(
patient: patient, TranslationBase.of(context).medical,
patientType: patientType, TranslationBase.of(context).report,
arrivalType: arrivalType, HEALTH_SUMMARY,
route: ORDER_PROCEDURE, 'patient/health_summary.png',
isInPatient: isInpatient, isInPatient: isInpatient,
nameLine1: isDisable: true),
TranslationBase PatientProfileCardModel(
.of( TranslationBase.of(context).referral,
context) TranslationBase.of(context).patient,
.orders,
nameLine2:
TranslationBase
.of(
context)
.procedures,
icon:
'patient/Order_Procedures.png'),
PatientProfileButton(
patient: patient,
patientType: patientType,
arrivalType: arrivalType,
route: MEDICAL_FILE,
nameLine1: "Health",
isInPatient: isInpatient,
nameLine2: "Summary",
//TranslationBase.of(context).summaryReport,
icon:
'patient/health_summary.png'),
PatientProfileButton(
patient: patient,
patientType: patientType,
arrivalType: arrivalType,
isDisable: true,
route: MEDICAL_FILE,
nameLine1:
"Medical",
//Health
isInPatient: isInpatient,
nameLine2:
"Report",
//Report
//TranslationBase.of(context).summaryReport,
icon:
'patient/health_summary.png'),
PatientProfileButton(
patient: patient,
patientType: patientType,
arrivalType: arrivalType,
route:
REFER_IN_PATIENT_TO_DOCTOR, REFER_IN_PATIENT_TO_DOCTOR,
isInPatient: true, 'patient/refer_patient.png',
isDisable: isInPatient: isInpatient,
isDischargedPatient || isDisable: isDischargedPatient || isFromSearch,
isFromSearch, ),
nameLine1: PatientProfileCardModel(
TranslationBase TranslationBase.of(context).insurance,
.of( TranslationBase.of(context).approvals,
context)
.referral,
nameLine2:
TranslationBase
.of(
context)
.patient,
icon:
'patient/refer_patient.png'),
PatientProfileButton(
patient: patient,
patientType: patientType,
arrivalType: arrivalType,
route:
PATIENT_INSURANCE_APPROVALS_NEW, PATIENT_INSURANCE_APPROVALS_NEW,
nameLine1: 'patient/vital_signs.png',
TranslationBase isInPatient: isInpatient),
.of( PatientProfileCardModel(
context) TranslationBase.of(context).discharge,
.insurance, TranslationBase.of(context).report,
nameLine2: null,
TranslationBase 'patient/patient_sick_leave.png',
.of(
context)
.approvals,
icon:
'patient/vital_signs.png'),
PatientProfileButton(
isInPatient: isInpatient, isInPatient: isInpatient,
patient: patient, isDisable: true),
patientType: patientType, PatientProfileCardModel(
arrivalType: arrivalType, TranslationBase.of(context).patientSick,
isDisable: true, TranslationBase.of(context).leave,
route: null, ADD_SICKLEAVE,
nameLine1: "Discharge", 'patient/patient_sick_leave.png',
nameLine2: "Summery",
icon:
'patient/patient_sick_leave.png'),
PatientProfileButton(
isInPatient: isInpatient, isInPatient: isInpatient,
),
];
return Padding(
padding: const EdgeInsets.symmetric(vertical: 15.0, horizontal: 15),
child: StaggeredGridView.countBuilder(
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
crossAxisSpacing: 10,
mainAxisSpacing: 10,
crossAxisCount: 3,
itemCount: cardsList.length,
staggeredTileBuilder: (int index) => StaggeredTile.fit(1),
itemBuilder: (BuildContext context, int index) => PatientProfileButton(
patient: patient, patient: patient,
patientType: patientType, patientType: patientType,
arrivalType: arrivalType, arrivalType: arrivalType,
route: ADD_SICKLEAVE, from: from,
nameLine1: to: to,
TranslationBase nameLine1: cardsList[index].nameLine1,
.of( nameLine2: cardsList[index].nameLine2,
context) route: cardsList[index].route,
.patientSick, icon: cardsList[index].icon,
nameLine2: isInPatient: cardsList[index].isInPatient,
TranslationBase isDischargedPatient: cardsList[index].isDischargedPatient,
.of( isDisable: cardsList[index].isDisable,
context) onTap: cardsList[index].onTap,
.leave, isLoading: cardsList[index].isLoading,
icon: ),
'patient/patient_sick_leave.png'),
],
), ),
); );
} }

@ -131,11 +131,9 @@ class ProfileGridForOther extends StatelessWidget {
patientType, patientType,
arrivalType: arrivalType:
arrivalType, arrivalType,
route: MEDICAL_FILE, route: HEALTH_SUMMARY,
nameLine1: "Health", nameLine1: TranslationBase.of(context).health,
//TranslationBase.of(context).medicalReport, nameLine2: TranslationBase.of(context).summary,
nameLine2: "Summary",
//TranslationBase.of(context).summaryReport,
icon: icon:
'patient/health_summary.png'), 'patient/health_summary.png'),
PatientProfileButton( PatientProfileButton(

@ -80,11 +80,9 @@ class ProfileGridForSearch extends StatelessWidget {
patient: patient, patient: patient,
patientType: patientType, patientType: patientType,
arrivalType: arrivalType, arrivalType: arrivalType,
route: MEDICAL_FILE, route: HEALTH_SUMMARY,
nameLine1: "Health", nameLine1: TranslationBase.of(context).health,
//TranslationBase.of(context).medicalReport, nameLine2: TranslationBase.of(context).summary,
nameLine2: "Summary",
//TranslationBase.of(context).summaryReport,
icon: 'patient/health_summary.png'), icon: 'patient/health_summary.png'),
PatientProfileButton( PatientProfileButton(
isInPatient: isInpatient, isInPatient: isInpatient,

@ -9,6 +9,7 @@ import 'package:doctor_app_flutter/widgets/shared/text_fields/text_fields_utils.
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import '../../ReferralDischargedPatientPage.dart';
import 'my-referral-inpatient-screen.dart'; import 'my-referral-inpatient-screen.dart';
class PatientReferralScreen extends StatefulWidget { class PatientReferralScreen extends StatefulWidget {
@ -24,7 +25,7 @@ class _PatientReferralScreen extends State<PatientReferralScreen> with SingleTic
@override @override
void initState() { void initState() {
super.initState(); super.initState();
_tabController = TabController(length: 2, vsync: this); _tabController = TabController(length: 3, vsync: this);
_tabController.addListener(_handleTabSelection); _tabController.addListener(_handleTabSelection);
} }
@ -74,7 +75,7 @@ class _PatientReferralScreen extends State<PatientReferralScreen> with SingleTic
unselectedLabelColor: Colors.grey[800], unselectedLabelColor: Colors.grey[800],
tabs: [ tabs: [
Container( Container(
width: MediaQuery.of(context).size.width * 0.50, width: MediaQuery.of(context).size.width * 0.33,
height: MediaQuery.of(context).size.height * 0.070, height: MediaQuery.of(context).size.height * 0.070,
decoration: TextFieldsUtils.containerBorderDecoration( decoration: TextFieldsUtils.containerBorderDecoration(
Color(0Xffffffff), Color(0xFFCCCCCC), Color(0Xffffffff), Color(0xFFCCCCCC),
@ -101,7 +102,7 @@ class _PatientReferralScreen extends State<PatientReferralScreen> with SingleTic
), ),
), ),
Container( Container(
width: MediaQuery.of(context).size.width * 0.50, width: MediaQuery.of(context).size.width * 0.34,
height: MediaQuery.of(context).size.height * 0.070, height: MediaQuery.of(context).size.height * 0.070,
decoration: TextFieldsUtils.containerBorderDecoration( decoration: TextFieldsUtils.containerBorderDecoration(
Color(0Xffffffff), Color(0xFFCCCCCC), Color(0Xffffffff), Color(0xFFCCCCCC),
@ -127,6 +128,33 @@ class _PatientReferralScreen extends State<PatientReferralScreen> with SingleTic
), ),
), ),
), ),
Container(
width: MediaQuery.of(context).size.width * 0.33,
height: MediaQuery.of(context).size.height * 0.070,
decoration: TextFieldsUtils.containerBorderDecoration(
Color(0Xffffffff), Color(0xFFCCCCCC),
borderRadius: 4, borderWidth: 0),
child: Center(
child: Container(
height: MediaQuery.of(context).size.height * 0.070,
decoration: TextFieldsUtils.containerBorderDecoration(
index == 2
? Color(0xFFD02127 )
: Color(0xFFEAEAEA),
index == 2 ? Color(0xFFD02127) : Color(0xFFEAEAEA),
borderRadius: 4,
borderWidth: 0),
child: Center(
child: AppText(
'Discharged',
fontSize: SizeConfig.textMultiplier * 1.8,
color: index == 2 ? Colors.white : Color(0xFF2B353E),
fontWeight: FontWeight.w700,
),
),
),
),
),
], ],
), ),
@ -143,6 +171,7 @@ class _PatientReferralScreen extends State<PatientReferralScreen> with SingleTic
children: <Widget>[ children: <Widget>[
ReferredPatientScreen(), ReferredPatientScreen(),
MyReferralInPatientScreen(), MyReferralInPatientScreen(),
ReferralDischargedPatientPage()
// MyReferredPatient(), // MyReferredPatient(),
], ],
), ),

@ -351,6 +351,7 @@ class _AddAssessmentDetailsState extends State<AddAssessmentDetails> {
hintText: TranslationBase.of(context).remarks, hintText: TranslationBase.of(context).remarks,
maxLines: 18, maxLines: 18,
minLines: 5, minLines: 5,
inputType: TextInputType.multiline,
controller: remarkController, controller: remarkController,
onChanged: (value) { onChanged: (value) {
widget.mySelectedAssessment.remark = widget.mySelectedAssessment.remark =

@ -40,8 +40,10 @@ class UpdateChiefComplaints extends StatelessWidget {
maxLines: 25, maxLines: 25,
minLines: 7, minLines: 7,
hasBorder: true, hasBorder: true,
validationError:complaintsControllerError !=''?complaintsControllerError:null , inputType: TextInputType.multiline,
validationError: complaintsControllerError != ''
? complaintsControllerError
: null,
), ),
SizedBox( SizedBox(
height: 20, height: 20,
@ -52,10 +54,14 @@ class UpdateChiefComplaints extends StatelessWidget {
.of(context) .of(context)
.historyOfPresentIllness, .historyOfPresentIllness,
controller: illnessController, controller: illnessController,
inputType: TextInputType.multiline,
maxLines: 25, maxLines: 25,
minLines: 7, minLines: 7,
hasBorder: true, hasBorder: true,
validationError:illnessControllerError !=''?illnessControllerError:null , validationError: illnessControllerError != ''
? illnessControllerError
: null,
), ),
SizedBox( SizedBox(
height: 10, height: 10,
@ -74,7 +80,11 @@ class UpdateChiefComplaints extends StatelessWidget {
maxLines: 25, maxLines: 25,
minLines: 7, minLines: 7,
hasBorder: true, hasBorder: true,
validationError:medicationControllerError !=''?medicationControllerError:null , inputType: TextInputType.multiline,
validationError: medicationControllerError != ''
? medicationControllerError
: null,
), ),
SizedBox( SizedBox(

@ -564,7 +564,14 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
TranslationBase.of( TranslationBase.of(
context) context)
.unit, .unit,
units != null model.itemMedicineListUnit
.length ==
1
? model.itemMedicineListUnit[
0][
'description']
: units !=
null
? units[ ? units[
'description'] 'description']
: null, : null,
@ -1368,7 +1375,9 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
// .toList() // .toList()
// .join(' '), // .join(' '),
dose: strengthController.text, dose: strengthController.text,
doseUnit: units['parameterCode'].toString(), doseUnit: model.itemMedicineListUnit.length == 1
? model.itemMedicineListUnit[0]['parameterCode']
: units['parameterCode'].toString(),
patient: widget.patient, patient: widget.patient,
doseTimeIn: doseTime['id'].toString(), doseTimeIn: doseTime['id'].toString(),
model: widget.model, model: widget.model,

@ -1,5 +1,6 @@
import 'package:doctor_app_flutter/config/size_config.dart'; import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/model/sick_leave_patient_model.dart'; import 'package:doctor_app_flutter/core/model/sick_leave_patient_model.dart';
import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/sick_leave_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/sick_leave_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/models/sickleave/get_all_sickleave_response.dart'; import 'package:doctor_app_flutter/models/sickleave/get_all_sickleave_response.dart';
@ -14,11 +15,15 @@ import 'package:doctor_app_flutter/widgets/shared/rounded_container_widget.dart'
import 'package:doctor_app_flutter/widgets/transitions/fade_page.dart'; import 'package:doctor_app_flutter/widgets/transitions/fade_page.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart'; import 'package:hexcolor/hexcolor.dart';
import 'package:provider/provider.dart';
// ignore: must_be_immutable
class AddSickLeavScreen extends StatelessWidget { class AddSickLeavScreen extends StatelessWidget {
PatiantInformtion patient; PatiantInformtion patient;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
ProjectViewModel projectsProvider = Provider.of<ProjectViewModel>(context);
final routeArgs = ModalRoute.of(context).settings.arguments as Map; final routeArgs = ModalRoute.of(context).settings.arguments as Map;
patient = routeArgs['patient']; patient = routeArgs['patient'];
bool isInpatient = routeArgs['isInpatient']; bool isInpatient = routeArgs['isInpatient'];
@ -37,8 +42,6 @@ class AddSickLeavScreen extends StatelessWidget {
), ),
body: SingleChildScrollView( body: SingleChildScrollView(
child: Column(children: [ child: Column(children: [
// PatientProfileHeaderNewDesign(
// patient, routeArgs['patientType'], routeArgs['arrivalType']),
patient.patientStatusType == 43 patient.patientStatusType == 43
? Column( ? Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
@ -48,6 +51,7 @@ class AddSickLeavScreen extends StatelessWidget {
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
if(!projectsProvider.isArabic)
AppText( AppText(
TranslationBase.of(context).patient, TranslationBase.of(context).patient,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,

@ -1301,8 +1301,40 @@ class TranslationBase {
String get insurance22 => localizedValues["insurance22"][locale.languageCode]; String get insurance22 => localizedValues["insurance22"][locale.languageCode];
String get approvals22 => localizedValues["approvals22"][locale.languageCode]; String get approvals22 => localizedValues["approvals22"][locale.languageCode];
String get severe => localizedValues["severe"][locale.languageCode]; String get severe => localizedValues["severe"][locale.languageCode];
String get graphDetails => String get graphDetails => localizedValues["graphDetails"][locale.languageCode];
localizedValues["graphDetails"][locale.languageCode]; String get discharged => localizedValues["discharged"][locale.languageCode];
String get addNewOrderSheet =>
localizedValues["addNewOrderSheet"][locale.languageCode];
String get addNewProgressNote =>
localizedValues["addNewProgressNote"][locale.languageCode];
String get notePending =>
localizedValues["notePending"][locale.languageCode];
String get noteCanceled =>
localizedValues["noteCanceled"][locale.languageCode];
String get noteVerified =>
localizedValues["noteVerified"][locale.languageCode];
String get noteVerify =>
localizedValues["noteVerify"][locale.languageCode];
String get noteConfirm =>
localizedValues["noteConfirm"][locale.languageCode];
String get noteAdd =>
localizedValues["noteAdd"][locale.languageCode];
String get noteUpdate =>
localizedValues["noteUpdate"][locale.languageCode];
String get orderSheet =>
localizedValues["orderSheet"][locale.languageCode];
String get order =>
localizedValues["order"][locale.languageCode];
String get sheet =>
localizedValues["sheet"][locale.languageCode];
String get medical =>
localizedValues["medical"][locale.languageCode];
String get report =>
localizedValues["report"][locale.languageCode];
String get discharge =>
localizedValues["discharge"][locale.languageCode];
} }
class TranslationBaseDelegate extends LocalizationsDelegate<TranslationBase> { class TranslationBaseDelegate extends LocalizationsDelegate<TranslationBase> {

@ -93,7 +93,7 @@ class _VerifyAccountState extends State<VerifyAccount> {
return Form( return Form(
key: verifyAccountForm, key: verifyAccountForm,
child: Container( child: Container(
width: SizeConfig.realScreenWidth * 0.90, width: SizeConfig.realScreenWidth * 0.95,
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[ children: <Widget>[

@ -6,6 +6,7 @@ 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/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:intl/intl.dart'; import 'package:intl/intl.dart';
@ -32,36 +33,22 @@ class PatientCard extends StatelessWidget {
return Container( return Container(
width: SizeConfig.screenWidth * 0.9, width: SizeConfig.screenWidth * 0.9,
margin: EdgeInsets.all(6), margin: EdgeInsets.all(6),
padding: EdgeInsets.only(left: 0, right: 5, bottom: 5, top: 5), padding: EdgeInsets.only(left: 0, right: 5, bottom: 0, top: 0),
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.circular(15), borderRadius: BorderRadius.circular(10),
color: Colors.white, color: Colors.white,
), ),
child: Stack(children: [ child: CardWithBgWidget(
if (!isInpatient&& !isMyPatient && !isFromSearch) padding: 0,
Container( marginLeft: (!isMyPatient && isInpatient)?0:10,
height: 160, marginSymmetric:isFromSearch ? 10 : 0.0,
width: 5, hasBorder: false,
decoration: BoxDecoration( bgColor:(isMyPatient && !isFromSearch)?Colors.green[500]: patientInfo.patientStatusType == 43
borderRadius: BorderRadius.only(
topLeft: Radius.circular(10),
bottomLeft: Radius.circular(10)),
color: patientInfo.patientStatusType == 43
? Colors.green[500] ? Colors.green[500]
: Colors.red[800], :isMyPatient? Colors.green[500]:isInpatient?Colors.white:!isFromSearch?Colors.red[800]:Colors.white,
)), widget: Container(
if(isMyPatient && !isFromSearch) color: Colors.white,
Container( // padding: EdgeInsets.only(left: 10, right: 0, bottom: 0),
height: 180,
width: 5,
decoration: BoxDecoration(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(10),
bottomLeft: Radius.circular(10)),
color: Colors.green[500]
)),
Container(
padding: EdgeInsets.only(left: 10, right: 0, bottom: 0),
child: InkWell( child: InkWell(
child: Column( child: Column(
children: [ children: [
@ -82,7 +69,7 @@ class PatientCard extends StatelessWidget {
color: Colors.green, color: Colors.green,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
fontFamily: 'Poppins', fontFamily: 'Poppins',
fontSize: 12, fontSize: 10,
), ),
SizedBox(width: 8,), SizedBox(width: 8,),
SizedBox(height: 12,width: 1.5,child: Container(color: Colors.grey,),), SizedBox(height: 12,width: 1.5,child: Container(color: Colors.grey,),),
@ -92,7 +79,7 @@ class PatientCard extends StatelessWidget {
color: patientInfo.status==2? Colors.green:Colors.grey , color: patientInfo.status==2? Colors.green:Colors.grey ,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
fontFamily: 'Poppins', fontFamily: 'Poppins',
fontSize: 12, fontSize: 10,
), ),
], ],
) )
@ -103,7 +90,7 @@ class PatientCard extends StatelessWidget {
color: Colors.red[800], color: Colors.red[800],
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
fontFamily: 'Poppins', fontFamily: 'Poppins',
fontSize: 12, fontSize: 10,
), ),
SizedBox(width: 8,), SizedBox(width: 8,),
SizedBox(height: 12,width: 1.5,child: Container(color: Colors.grey,),), SizedBox(height: 12,width: 1.5,child: Container(color: Colors.grey,),),
@ -113,7 +100,7 @@ class PatientCard extends StatelessWidget {
color: patientInfo.status==2? Colors.green:Colors.grey , color: patientInfo.status==2? Colors.green:Colors.grey ,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
fontFamily: 'Poppins', fontFamily: 'Poppins',
fontSize: 12, fontSize: 10,
), ),
], ],
): !isFromSearch && patientInfo.patientStatusType==null ? Row( ): !isFromSearch && patientInfo.patientStatusType==null ? Row(
@ -151,14 +138,15 @@ class PatientCard extends StatelessWidget {
)+" "+ "${DateUtils.getStartTime(patientInfo.startTime)}", )+" "+ "${DateUtils.getStartTime(patientInfo.startTime)}",
fontFamily: 'Poppins', fontFamily: 'Poppins',
fontWeight: FontWeight.w400, fontWeight: FontWeight.w400,
fontSize: 15,
) )
: (patientInfo.appointmentDate != null && patientInfo.appointmentDate.isNotEmpty)? : (patientInfo.appointmentDate != null && patientInfo.appointmentDate.isNotEmpty)?
AppText( AppText(
//
// )+" "+ DateUtils.getTimeHHMMA(DateUtils.convertStringToDate(patientInfo.appointmentDate,)), "${DateUtils.getDayMonthYearDate(DateUtils.convertStringToDate(patientInfo.appointmentDate,))} ${DateUtils.getStartTime(patientInfo.startTime)}",
" ${DateUtils.getDayMonthYearDate(DateUtils.convertStringToDate(patientInfo.appointmentDate,))} ${DateUtils.getStartTime(patientInfo.startTime)}",
fontFamily: 'Poppins', fontFamily: 'Poppins',
fontWeight: FontWeight.w400, fontWeight: FontWeight.w400,
fontSize: 15,
):SizedBox() ):SizedBox()
], ],
)) ))
@ -181,29 +169,31 @@ class PatientCard extends StatelessWidget {
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
Row(children: [ Expanded(
Container( child: Row(children: [
width: 170, Expanded(
// width: MediaQuery.of(context).size.width*0.51,
child: AppText( child: AppText(
(Helpers.capitalize(patientInfo.firstName) + (Helpers.capitalize(patientInfo.firstName) +
" " + " " +
Helpers.capitalize(patientInfo.lastName)), Helpers.capitalize(patientInfo.lastName)),
fontSize: 16, fontSize: 16,
fontWeight: FontWeight.bold, color: Color(0xff2e303a),
fontWeight: FontWeight.w700,
fontFamily: 'Poppins', fontFamily: 'Poppins',
textOverflow: TextOverflow.ellipsis, textOverflow: TextOverflow.ellipsis,
), ),
), ),
patientInfo.gender == 1 if (patientInfo.gender == 1)
? Icon( Icon(
DoctorApp.male_2, DoctorApp.male_2,
color: Colors.blue, color: Colors.blue,
) ) else Icon(
: Icon(
DoctorApp.female_1, DoctorApp.female_1,
color: Colors.pink, color: Colors.pink,
), ),
]), ]),
),
Row( Row(
children: [ children: [
AppText( AppText(
@ -280,14 +270,14 @@ class PatientCard extends StatelessWidget {
text: TranslationBase.of(context) text: TranslationBase.of(context)
.fileNumber, .fileNumber,
style: TextStyle( style: TextStyle(
fontSize: 14, fontSize: 12,
fontFamily: 'Poppins')), fontFamily: 'Poppins')),
new TextSpan( new TextSpan(
text: patientInfo.patientId.toString(), text: patientInfo.patientId.toString(),
style: TextStyle( style: TextStyle(
fontWeight: FontWeight.w700, fontWeight: FontWeight.w700,
fontFamily: 'Poppins', fontFamily: 'Poppins',
fontSize: 15)), fontSize: 13)),
], ],
), ),
), ),
@ -306,13 +296,13 @@ class PatientCard extends StatelessWidget {
text: text:
TranslationBase.of(context).age + TranslationBase.of(context).age +
" : ", " : ",
style: TextStyle(fontSize: 14)), style: TextStyle(fontSize: 12)),
new TextSpan( new TextSpan(
text: text:
"${DateUtils.getAgeByBirthday(patientInfo.dateofBirth, context)}", "${DateUtils.getAgeByBirthday(patientInfo.dateofBirth, context)}",
style: TextStyle( style: TextStyle(
fontWeight: FontWeight.w700, fontWeight: FontWeight.w700,
fontSize: 15)), fontSize: 13)),
], ],
), ),
), ),
@ -334,28 +324,35 @@ class PatientCard extends StatelessWidget {
: TranslationBase.of(context) : TranslationBase.of(context)
.admissionDate + .admissionDate +
" : ", " : ",
style: TextStyle(fontSize: 14)), style: TextStyle(fontSize: 12)),
new TextSpan( new TextSpan(
text: patientInfo.admissionDate == null text: patientInfo.admissionDate == null
? "" ? ""
: "${DateUtils.convertDateFromServerFormat(patientInfo.admissionDate.toString(), 'yyyy-MM-dd')}", : "${DateUtils.convertDateFromServerFormat(patientInfo.admissionDate.toString(), 'yyyy-MM-dd')}",
style: TextStyle( style: TextStyle(
fontWeight: FontWeight.w700, fontWeight: FontWeight.w700,
fontSize: 15)), fontSize: 13)),
]))), ]))),
if (patientInfo.admissionDate != null) if (patientInfo.admissionDate != null)
Row( Container(
children: [ child: RichText(
AppText( text: new TextSpan(
"${TranslationBase.of(context).numOfDays}: ", style: new TextStyle(
fontSize: 15, fontSize:
), 2.0 * SizeConfig.textMultiplier,
AppText( color: Colors.black,
"${DateTime.now().difference(DateUtils.getDateTimeFromServerFormat(patientInfo.admissionDate)).inDays + 1}", fontFamily: 'Poppins',
fontSize: 15,
fontWeight: FontWeight.w700),
],
), ),
children: <TextSpan>[
new TextSpan(
text: TranslationBase.of(context).numOfDays + " : ",
style: TextStyle(fontSize: 12)),
new TextSpan(
text: "${DateTime.now().difference(DateUtils.getDateTimeFromServerFormat(patientInfo.admissionDate)).inDays + 1}",
style: TextStyle(
fontWeight: FontWeight.w700,
fontSize: 13)),
]))),
])) ]))
]), ]),
@ -395,7 +392,7 @@ class PatientCard extends StatelessWidget {
), ),
onTap: onTap, onTap: onTap,
)), )),
])); ));
} }

@ -24,8 +24,9 @@ class PatientProfileButton extends StatelessWidget {
final Function onTap; final Function onTap;
final bool isDischargedPatient; final bool isDischargedPatient;
final bool isSelectInpatient; final bool isSelectInpatient;
PatientProfileButton(
{Key key, PatientProfileButton({
Key key,
this.patient, this.patient,
this.patientType, this.patientType,
this.arrivalType, this.arrivalType,
@ -38,17 +39,18 @@ class PatientProfileButton extends StatelessWidget {
this.isLoading = false, this.isLoading = false,
this.from, this.from,
this.to, this.to,
this.isInPatient = false, this.isDischargedPatient=false, this.isSelectInpatient = false, this.isInPatient = false,
}) this.isDischargedPatient = false,
: super(key: key); this.isSelectInpatient = false,
}) : super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
ProjectViewModel projectsProvider = Provider.of<ProjectViewModel>(context); ProjectViewModel projectsProvider = Provider.of<ProjectViewModel>(context);
return new Container( return Container(
margin: new EdgeInsets.symmetric(horizontal: 4.0), margin: EdgeInsets.symmetric(horizontal: 0.0),
padding: EdgeInsets.fromLTRB(10, 10, 10, 5), padding: EdgeInsets.symmetric(horizontal: 8, vertical: 16),
child: InkWell( child: InkWell(
onTap: isDisable onTap: isDisable
? null ? null
@ -59,25 +61,30 @@ class PatientProfileButton extends StatelessWidget {
}, },
child: Column(children: <Widget>[ child: Column(children: <Widget>[
Container( Container(
padding: EdgeInsets.fromLTRB(8, 0, 8, 8),
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[ children: <Widget>[
Container( Container(
child: new Image.asset( child: new Image.asset(
url + icon, url + icon,
width: 50, width: 30,
height: 50, height: 30,
),) fit: BoxFit.contain,
),
)
], ],
)), )),
Container( Container(
alignment: projectsProvider.isArabic ? Alignment.topRight : Alignment.topLeft, alignment: projectsProvider.isArabic
padding: EdgeInsets.all(5), ? Alignment.topRight
: Alignment.topLeft,
padding: EdgeInsets.symmetric(horizontal: 8),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
AppText( AppText(
this.nameLine1, !projectsProvider.isArabic ? this.nameLine1 : nameLine2,
color: Colors.black, color: Colors.black,
/*Color(0xFFB9382C),*/ /*Color(0xFFB9382C),*/
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
@ -85,7 +92,7 @@ class PatientProfileButton extends StatelessWidget {
fontSize: SizeConfig.textMultiplier * 1.5, fontSize: SizeConfig.textMultiplier * 1.5,
), ),
AppText( AppText(
this.nameLine2, !projectsProvider.isArabic ? this.nameLine2 : nameLine1,
color: Colors.black, color: Colors.black,
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
textAlign: TextAlign.left, textAlign: TextAlign.left,
@ -118,8 +125,7 @@ class PatientProfileButton extends StatelessWidget {
} }
void navigator(BuildContext context, route) { void navigator(BuildContext context, route) {
if(route == null) if (route == null) return;
return;
if (from == null) { if (from == null) {
from = DateUtils.convertDateToFormat(DateTime.now(), 'yyyy-MM-dd'); from = DateUtils.convertDateToFormat(DateTime.now(), 'yyyy-MM-dd');
@ -127,7 +133,7 @@ class PatientProfileButton extends StatelessWidget {
if (to == null) { if (to == null) {
to = DateUtils.convertDateToFormat(DateTime.now(), 'yyyy-MM-dd'); to = DateUtils.convertDateToFormat(DateTime.now(), 'yyyy-MM-dd');
} }
if(arrivalType == null){ if (arrivalType == null) {
arrivalType = "0"; arrivalType = "0";
} }
Navigator.of(context).pushNamed(route, arguments: { Navigator.of(context).pushNamed(route, arguments: {

@ -52,7 +52,7 @@ class ProfileMedicalInfoWidget extends StatelessWidget {
patient: patient, patient: patient,
patientType: patientType, patientType: patientType,
arrivalType: arrivalType, arrivalType: arrivalType,
route: MEDICAL_FILE, route: HEALTH_SUMMARY,
nameLine1: "Health" ,//TranslationBase.of(context).medicalReport, nameLine1: "Health" ,//TranslationBase.of(context).medicalReport,
nameLine2: "Summary",//TranslationBase.of(context).summaryReport, nameLine2: "Summary",//TranslationBase.of(context).summaryReport,
icon: 'patient/health_summary.png'), icon: 'patient/health_summary.png'),

@ -113,7 +113,7 @@ class ProfileMedicalInfoWidgetInPatient extends StatelessWidget {
patient: patient, patient: patient,
patientType: patientType, patientType: patientType,
arrivalType: arrivalType, arrivalType: arrivalType,
route: MEDICAL_FILE, route: HEALTH_SUMMARY,
nameLine1: "Health", nameLine1: "Health",
//TranslationBase.of(context).medicalReport, //TranslationBase.of(context).medicalReport,
nameLine2: "Summary", nameLine2: "Summary",
@ -125,7 +125,7 @@ class ProfileMedicalInfoWidgetInPatient extends StatelessWidget {
patientType: patientType, patientType: patientType,
arrivalType: arrivalType, arrivalType: arrivalType,
isDisable: true, isDisable: true,
route: MEDICAL_FILE, route: HEALTH_SUMMARY,
nameLine1: "Medical", //Health nameLine1: "Medical", //Health
//TranslationBase.of(context).medicalReport, //TranslationBase.of(context).medicalReport,
nameLine2: "Report", //Report nameLine2: "Report", //Report

@ -173,7 +173,7 @@ class ProfileMedicalInfoWidgetSearch extends StatelessWidget {
patient: patient, patient: patient,
patientType: patientType, patientType: patientType,
arrivalType: arrivalType, arrivalType: arrivalType,
route: MEDICAL_FILE, route: HEALTH_SUMMARY,
nameLine1: "Health", nameLine1: "Health",
//TranslationBase.of(context).medicalReport, //TranslationBase.of(context).medicalReport,
nameLine2: "Summary", nameLine2: "Summary",
@ -185,7 +185,7 @@ class ProfileMedicalInfoWidgetSearch extends StatelessWidget {
patientType: patientType, patientType: patientType,
arrivalType: arrivalType, arrivalType: arrivalType,
isDisable: true, isDisable: true,
route: MEDICAL_FILE, route: HEALTH_SUMMARY,
nameLine1: "Medical", //Health nameLine1: "Medical", //Health
//TranslationBase.of(context).medicalReport, //TranslationBase.of(context).medicalReport,
nameLine2: "Report", //Report nameLine2: "Report", //Report
@ -256,7 +256,7 @@ class ProfileMedicalInfoWidgetSearch extends StatelessWidget {
patient: patient, patient: patient,
patientType: patientType, patientType: patientType,
arrivalType: arrivalType, arrivalType: arrivalType,
route: MEDICAL_FILE, route: HEALTH_SUMMARY,
nameLine1: nameLine1:
"Health", //TranslationBase.of(context).medicalReport, "Health", //TranslationBase.of(context).medicalReport,
nameLine2: nameLine2:

@ -16,9 +16,6 @@ import 'app_texts_widget.dart';
DrAppSharedPreferances sharedPref = new DrAppSharedPreferances(); DrAppSharedPreferances sharedPref = new DrAppSharedPreferances();
// OWNER : Ibrahim albitar
// DATE : 06-04-2020
// DESCRIPTION : Custom App Drawer for app.
class AppDrawer extends StatefulWidget { class AppDrawer extends StatefulWidget {
@override @override
@ -26,7 +23,6 @@ class AppDrawer extends StatefulWidget {
} }
class _AppDrawerState extends State<AppDrawer> { class _AppDrawerState extends State<AppDrawer> {
bool _isInit = true;
Helpers helpers = new Helpers(); Helpers helpers = new Helpers();
ProjectViewModel projectsProvider; ProjectViewModel projectsProvider;

@ -49,7 +49,7 @@ class _AppButtonState extends State<AppButton> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Container( return Container(
// height: 60,//MediaQuery.of(context).size.height * 0.075, // height: MediaQuery.of(context).size.height * 0.075,
child: IgnorePointer( child: IgnorePointer(
ignoring: widget.loading ||widget.disabled, ignoring: widget.loading ||widget.disabled,
child: RawMaterialButton( child: RawMaterialButton(

@ -3,27 +3,23 @@ import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart'; import 'package:hexcolor/hexcolor.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
/*
*@author: Mohammad Aljammal
*@Date:27/4/2020
*@param: Widget
*@return:
*@desc: Card With Bg Widget
*/
class CardWithBgWidget extends StatelessWidget { class CardWithBgWidget extends StatelessWidget {
final Widget widget; final Widget widget;
final Color bgColor; final Color bgColor;
final bool hasBorder; final bool hasBorder;
final double padding;
final double marginLeft;
final double marginSymmetric;
CardWithBgWidget( CardWithBgWidget(
{@required this.widget, this.bgColor, this.hasBorder = true}); {@required this.widget, this.bgColor, this.hasBorder = true, this.padding = 15.0, this.marginLeft = 10.0, this.marginSymmetric=10.0});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
ProjectViewModel projectProvider = Provider.of(context); ProjectViewModel projectProvider = Provider.of(context);
return Container( return Container(
margin: EdgeInsets.symmetric(vertical: 10.0), margin: EdgeInsets.symmetric(vertical: marginSymmetric),
// width: double.infinity, // width: double.infinity,
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.all( borderRadius: BorderRadius.all(
@ -61,15 +57,15 @@ class CardWithBgWidget extends StatelessWidget {
borderRadius: BorderRadius.only( borderRadius: BorderRadius.only(
topLeft: Radius.circular(10), topLeft: Radius.circular(10),
bottomLeft: Radius.circular(10),),), bottomLeft: Radius.circular(10),),),
width: 10, width: 7,
), ),
bottom: 1, bottom: 1,
top: 1, top: 1,
left: 1, left: 1,
), ),
Container( Container(
padding: EdgeInsets.all(15.0), padding: EdgeInsets.all(padding),
margin: EdgeInsets.only(left: 10), margin: EdgeInsets.only(left: marginLeft),
child: widget) child: widget)
], ],
), ),

@ -5,10 +5,6 @@ import 'package:flutter/material.dart';
import '../shared/app_texts_widget.dart'; import '../shared/app_texts_widget.dart';
// OWNER : Ibrahim albitar
// DATE : 08-04-2020
// DESCRIPTION : Custom Drawer item for app.
class DrawerItem extends StatefulWidget { class DrawerItem extends StatefulWidget {
final String title; final String title;
final String subTitle; final String subTitle;

@ -37,7 +37,7 @@ class AppTextFieldCustom extends StatefulWidget {
this.suffixIcon, this.suffixIcon,
this.dropDownColor, this.dropDownColor,
this.enabled = true, this.enabled = true,
this.inputType = TextInputType.text, this.inputType,
this.minLines = 1, this.minLines = 1,
this.maxLines = 1, this.maxLines = 1,
this.inputFormatters, this.inputFormatters,
@ -106,7 +106,7 @@ class _AppTextFieldCustomState extends State<AppTextFieldCustom> {
color: Color(0xFF575757), color: Color(0xFF575757),
), ),
controller: widget.controller, controller: widget.controller,
keyboardType: widget.inputType, keyboardType: widget.inputType?? (widget.maxLines == 1 ? TextInputType.text : TextInputType.multiline),
enabled: widget.enabled, enabled: widget.enabled,
minLines: widget.minLines, minLines: widget.minLines,
maxLines: widget.maxLines, maxLines: widget.maxLines,

@ -445,6 +445,13 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.0.11" version: "1.0.11"
flutter_staggered_grid_view:
dependency: "direct main"
description:
name: flutter_staggered_grid_view
url: "https://pub.dartlang.org"
source: hosted
version: "0.3.4"
flutter_svg: flutter_svg:
dependency: transitive dependency: transitive
description: description:
@ -566,7 +573,7 @@ packages:
name: js name: js
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.6.3-nullsafety.1" version: "0.6.2"
json_annotation: json_annotation:
dependency: transitive dependency: transitive
description: description:
@ -608,7 +615,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 +907,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"
sticky_headers: sticky_headers:
dependency: "direct main" dependency: "direct main"
description: description:
@ -1091,5 +1098,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"

@ -41,6 +41,7 @@ dependencies:
eva_icons_flutter: ^2.0.0 eva_icons_flutter: ^2.0.0
font_awesome_flutter: ^8.11.0 font_awesome_flutter: ^8.11.0
dropdown_search: ^0.4.8 dropdown_search: ^0.4.8
flutter_staggered_grid_view: ^0.3.2
expandable: ^4.1.4 expandable: ^4.1.4

Loading…
Cancel
Save