diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart new file mode 100644 index 00000000..20393d92 --- /dev/null +++ b/lib/config/localized_values.dart @@ -0,0 +1,7 @@ +const Map> localizedValues = { + 'dashboardScreenToolbarTitle': {'ar': 'الرئيسة', 'en': 'Home'}, + 'settings': {'en': 'Settings', 'ar': 'الاعدادات'}, + 'language': {'en': 'App Language', 'ar': 'لغة التطبيق'}, + 'lanEnglish': {'en': 'English', 'ar': 'English'}, + 'lanArabic': {'en': 'العربية', 'ar': 'العربية'} +}; diff --git a/lib/config/shared_pref_kay.dart b/lib/config/shared_pref_kay.dart index 3fe1f22d..8a90edf6 100644 --- a/lib/config/shared_pref_kay.dart +++ b/lib/config/shared_pref_kay.dart @@ -1,3 +1,4 @@ final TOKEN = 'token'; final PROJECT_ID="projectID"; -final SLECTED_PATIENT_TYPE="slectedPatientType"; \ No newline at end of file +final SLECTED_PATIENT_TYPE="slectedPatientType"; +final APP_Language = "language"; \ No newline at end of file diff --git a/lib/i18n/ar.i18n.dart b/lib/i18n/ar.i18n.dart deleted file mode 100644 index 2b768d19..00000000 --- a/lib/i18n/ar.i18n.dart +++ /dev/null @@ -1,25 +0,0 @@ -// GENERATED FILE, do not edit! -import 'package:i18n/i18n.dart' as i18n; - -String get _languageCode => 'en'; -String get _localeName => 'en'; - -String _plural(int count, {String zero, String one, String two, String few, String many, String other}) => - i18n.plural(count, _languageCode, zero:zero, one:one, two:two, few:few, many:many, other:other); -String _ordinal(int count, {String zero, String one, String two, String few, String many, String other}) => - i18n.ordinal(count, _languageCode, zero:zero, one:one, two:two, few:few, many:many, other:other); -String _cardinal(int count, {String zero, String one, String two, String few, String many, String other}) => - i18n.cardinal(count, _languageCode, zero:zero, one:one, two:two, few:few, many:many, other:other); - -class Ar { - const Ar(); - ButtonAr get button => ButtonAr(this); -} - -class ButtonAr { - final Ar _parent; - const ButtonAr(this._parent); - String get save => "حفظ"; - String get load => "تحميل"; -} - diff --git a/lib/i18n/ar.i18n.yaml b/lib/i18n/ar.i18n.yaml deleted file mode 100644 index c59964df..00000000 --- a/lib/i18n/ar.i18n.yaml +++ /dev/null @@ -1,3 +0,0 @@ -button: - save: حفظ - load: تحميل \ No newline at end of file diff --git a/lib/i18n/en.i18n.dart b/lib/i18n/en.i18n.dart deleted file mode 100644 index 9f06a223..00000000 --- a/lib/i18n/en.i18n.dart +++ /dev/null @@ -1,25 +0,0 @@ -// GENERATED FILE, do not edit! -import 'package:i18n/i18n.dart' as i18n; - -String get _languageCode => 'en'; -String get _localeName => 'en'; - -String _plural(int count, {String zero, String one, String two, String few, String many, String other}) => - i18n.plural(count, _languageCode, zero:zero, one:one, two:two, few:few, many:many, other:other); -String _ordinal(int count, {String zero, String one, String two, String few, String many, String other}) => - i18n.ordinal(count, _languageCode, zero:zero, one:one, two:two, few:few, many:many, other:other); -String _cardinal(int count, {String zero, String one, String two, String few, String many, String other}) => - i18n.cardinal(count, _languageCode, zero:zero, one:one, two:two, few:few, many:many, other:other); - -class En { - const En(); - ButtonEn get button => ButtonEn(this); -} - -class ButtonEn { - final En _parent; - const ButtonEn(this._parent); - String get save => "Save"; - String get load => "Load"; -} - diff --git a/lib/i18n/en.i18n.yaml b/lib/i18n/en.i18n.yaml deleted file mode 100644 index a4c26572..00000000 --- a/lib/i18n/en.i18n.yaml +++ /dev/null @@ -1,4 +0,0 @@ -button: - save: Save - load: Load - diff --git a/lib/interceptor/http_interceptor.dart b/lib/interceptor/http_interceptor.dart index c27b3cb9..4d0f9c33 100644 --- a/lib/interceptor/http_interceptor.dart +++ b/lib/interceptor/http_interceptor.dart @@ -25,6 +25,7 @@ class HttpInterceptor extends InterceptorContract { Future interceptRequest({RequestData data}) async { print('RequestData ${data.body}'); + print('RequestData ${data.url}'); try { data.headers["Content-Type"] = "application/json"; data.headers["Accept"] = "application/json"; diff --git a/lib/main.dart b/lib/main.dart index a205b379..869d0b88 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,11 +1,14 @@ +import 'package:doctor_app_flutter/providers/project_provider.dart'; +import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:hexcolor/hexcolor.dart'; import 'package:provider/provider.dart'; import './config/size_config.dart'; import './providers/auth_provider.dart'; import './providers/patients_provider.dart'; -import './providers/projects_provider.dart'; +import './providers/hospital_provider.dart'; import './routes.dart'; void main() => runApp(MyApp()); @@ -22,20 +25,33 @@ class MyApp extends StatelessWidget { providers: [ ChangeNotifierProvider(create: (context) => PatientsProvider()), ChangeNotifierProvider(create: (context) => AuthProvider()), - ChangeNotifierProvider(create: (context) => ProjectsProvider()), + ChangeNotifierProvider(create: (context) => HospitalProvider()), + ChangeNotifierProvider(create: (context) => ProjectProvider(),) ], - child: MaterialApp( - showSemanticsDebugger: false, - title: 'Flutter Demo', - theme: ThemeData( - primarySwatch: Colors.blue, - primaryColor: Hexcolor('#B8382C'), - buttonColor: Hexcolor('#B8382C'), - fontFamily: 'WorkSans', - ), - initialRoute: INIT_ROUTE, - routes: routes, - debugShowCheckedModeBanner: false, + child: Consumer( + builder: (context,projectProvider,child) => MaterialApp( + showSemanticsDebugger: false, + title: 'Flutter Demo', + locale: projectProvider.appLocal, + localizationsDelegates: [ + TranslationBaseDelegate(), + GlobalMaterialLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + ], + supportedLocales: [ + const Locale('ar', ''), // Arabic + const Locale('en', ''), // English + ], + theme: ThemeData( + primarySwatch: Colors.blue, + primaryColor: Hexcolor('#B8382C'), + buttonColor: Hexcolor('#B8382C'), + fontFamily: 'WorkSans', + ), + initialRoute: INIT_ROUTE, + routes: routes, + debugShowCheckedModeBanner: false, + ) ), ); }); diff --git a/lib/models/patient/lab_orders_req_model.dart b/lib/models/patient/lab_orders_req_model.dart index dc0fb584..0295ce8d 100644 --- a/lib/models/patient/lab_orders_req_model.dart +++ b/lib/models/patient/lab_orders_req_model.dart @@ -1,3 +1,11 @@ + +/* + *@author: Elham Rababah + *@Date:6/5/2020 + *@param: + *@return:LabOrdersReqModel + *@desc: LabOrdersReqModel class + */ class LabOrdersReqModel { int patientID; int patientTypeID; diff --git a/lib/models/patient/lab_orders_res_model.dart b/lib/models/patient/lab_orders_res_model.dart index 41d41125..556f0474 100644 --- a/lib/models/patient/lab_orders_res_model.dart +++ b/lib/models/patient/lab_orders_res_model.dart @@ -1,3 +1,10 @@ +/* + *@author: Elham Rababah + *@Date:6/5/2020 + *@param: + *@return:LabOrdersResModel + *@desc: LabOrdersResModel class + */ class LabOrdersResModel { String setupID; int projectID; diff --git a/lib/models/patient/patiant_info_model.dart b/lib/models/patient/patiant_info_model.dart index 94a5c09d..c85edace 100644 --- a/lib/models/patient/patiant_info_model.dart +++ b/lib/models/patient/patiant_info_model.dart @@ -50,9 +50,10 @@ class PatiantInformtion { String age; String genderDescription; String nursingStationName; + String appointmentDate; PatiantInformtion({ - this.list, + this.list, this.projectId, this.clinicId, this.doctorId, @@ -85,6 +86,8 @@ class PatiantInformtion { this.age, this.genderDescription, this.nursingStationName, + this.appointmentDate, + }); factory PatiantInformtion.fromJson(Map json) => PatiantInformtion( @@ -120,6 +123,7 @@ class PatiantInformtion { age: json["Age"], genderDescription: json["GenderDescription"], nursingStationName: json["NursingStationName"], + appointmentDate: json["AppointmentDate"], ); diff --git a/lib/models/patient/patient_model.dart b/lib/models/patient/patient_model.dart index e49f64ea..93e77c18 100644 --- a/lib/models/patient/patient_model.dart +++ b/lib/models/patient/patient_model.dart @@ -1,8 +1,18 @@ + +/* + *@author:Modified by amjad add getter and setter Amjad Amireh + *@Date:11/5/2020 + *@param: + *@return:PatientsScreen Search textbox filter + + *@desc: + */ class PatientModel { int ProjectID; int ClinicID; int DoctorID; String FirstName; + String MiddleName; String LastName; String PatientMobileNumber; @@ -21,13 +31,87 @@ class PatientModel { bool PatientOutSA; - getFirstName() { - return this.FirstName; - } + int get getProjectID => ProjectID; + + set setProjectID(int ProjectID) => this.ProjectID = ProjectID; + + int get getClinicID => ClinicID; + + set setClinicID(int ClinicID) => this.ClinicID = ClinicID; + + int get getDoctorID => DoctorID; + + set setDoctorID(int DoctorID) => this.DoctorID = DoctorID; + String get getFirstName => FirstName; + + set setFirstName(String FirstName) => this.FirstName = FirstName; + + String get getMiddleName => MiddleName; + + set setMiddleName(String MiddleName) => this.MiddleName = MiddleName; + + String get getLastName => LastName; + + set setLastName(String LastName) => this.LastName = LastName; + + String get getPatientMobileNumber => PatientMobileNumber; + + set setPatientMobileNumber(String PatientMobileNumber) => this.PatientMobileNumber = PatientMobileNumber; + +// String get getPatientIdentificationID => PatientIdentificationID; + +// set setPatientIdentificationID(String PatientIdentificationID) => this.PatientIdentificationID = PatientIdentificationID; + + int get getPatientID => PatientID; + + set setPatientID(int PatientID) => this.PatientID = PatientID; + + String get getFrom => From; + + set setFrom(String From) => this.From = From; + + String get getTo => To; + + set setTo(String To) => this.To = To; + + int get getLanguageID => LanguageID; + + set setLanguageID(int LanguageID) => this.LanguageID = LanguageID; + + String get getStamp => stamp; + + set setStamp(String stamp) => this.stamp = stamp; + + String get getIPAdress => IPAdress; + + set setIPAdress(String IPAdress) => this.IPAdress = IPAdress; + + double get getVersionID => VersionID; + + set setVersionID(double VersionID) => this.VersionID = VersionID; + + int get getChannel => Channel; + + set setChannel(int Channel) => this.Channel = Channel; + + String get getTokenID => TokenID; + + set setTokenID(String TokenID) => this.TokenID = TokenID; + + String get getSessionID => SessionID; + + set setSessionID(String SessionID) => this.SessionID = SessionID; + + bool get getIsLoginForDoctorApp => IsLoginForDoctorApp; + + set setIsLoginForDoctorApp(bool IsLoginForDoctorApp) => this.IsLoginForDoctorApp = IsLoginForDoctorApp; + + bool get getPatientOutSA => PatientOutSA; + + set setPatientOutSA(bool PatientOutSA) => this.PatientOutSA = PatientOutSA; + + - setFirstName( FirstName) { - this.FirstName = FirstName; - } diff --git a/lib/models/patient/prescription_req_model.dart b/lib/models/patient/prescription_req_model.dart index a4bfe1b7..45ca2d74 100644 --- a/lib/models/patient/prescription_req_model.dart +++ b/lib/models/patient/prescription_req_model.dart @@ -1,3 +1,10 @@ +/* + *@author: Elham Rababah + *@Date:6/5/2020 + *@param: + *@return:PrescriptionReqModel + *@desc: PrescriptionReqModel class + */ class PrescriptionReqModel { int patientID; int setupID; diff --git a/lib/models/patient/prescription_res_model.dart b/lib/models/patient/prescription_res_model.dart index 5ff08e3e..7bb545ee 100644 --- a/lib/models/patient/prescription_res_model.dart +++ b/lib/models/patient/prescription_res_model.dart @@ -1,3 +1,10 @@ +/* + *@author: Elham Rababah + *@Date:6/5/2020 + *@param: + *@return:PrescriptionResModel + *@desc: PrescriptionResModel class + */ class PrescriptionResModel { String setupID; int projectID; diff --git a/lib/models/patient/radiology_req_model.dart b/lib/models/patient/radiology_req_model.dart index 35b398bf..b39fb393 100644 --- a/lib/models/patient/radiology_req_model.dart +++ b/lib/models/patient/radiology_req_model.dart @@ -1,3 +1,10 @@ +/* + *@author: Elham Rababah + *@Date:6/5/2020 + *@param: + *@return:RadiologyReqModel + *@desc: RadiologyReqModel class + */ class RadiologyReqModel { int patientID; int projectID; diff --git a/lib/models/patient/radiology_res_model.dart b/lib/models/patient/radiology_res_model.dart index 45161195..6c6509a9 100644 --- a/lib/models/patient/radiology_res_model.dart +++ b/lib/models/patient/radiology_res_model.dart @@ -1,3 +1,10 @@ +/* + *@author: Elham Rababah + *@Date:6/5/2020 + *@param: + *@return:RadiologyResModel + *@desc: RadiologyResModel class + */ class RadiologyResModel { String setupID; int projectID; diff --git a/lib/models/patient/vital_sign_res_model.dart b/lib/models/patient/vital_sign_res_model.dart index 70aa135b..6066e4b0 100644 --- a/lib/models/patient/vital_sign_res_model.dart +++ b/lib/models/patient/vital_sign_res_model.dart @@ -1,3 +1,10 @@ +/* + *@author: Elham Rababah + *@Date:6/5/2020 + *@param: + *@return:VitalSignResModel + *@desc: VitalSignResModel class + */ class VitalSignResModel { var transNo; var projectID; diff --git a/lib/models/RequestDoctorReply.dart b/lib/models/request_doctor_reply.dart similarity index 100% rename from lib/models/RequestDoctorReply.dart rename to lib/models/request_doctor_reply.dart diff --git a/lib/models/RequestSchedule.dart b/lib/models/request_schedule.dart similarity index 100% rename from lib/models/RequestSchedule.dart rename to lib/models/request_schedule.dart diff --git a/lib/providers/doctor_reply_provider.dart b/lib/providers/doctor_reply_provider.dart index 1c977185..b67cba47 100644 --- a/lib/providers/doctor_reply_provider.dart +++ b/lib/providers/doctor_reply_provider.dart @@ -1,7 +1,7 @@ import 'dart:convert'; import 'package:doctor_app_flutter/config/config.dart'; -import 'package:doctor_app_flutter/models/RequestDoctorReply.dart'; +import 'package:doctor_app_flutter/models/request_doctor_reply.dart'; import 'package:doctor_app_flutter/models/list_gt_my_pationents_question_model.dart'; import 'package:doctor_app_flutter/util/helpers.dart'; import 'package:flutter/cupertino.dart'; diff --git a/lib/providers/projects_provider.dart b/lib/providers/hospital_provider.dart similarity index 78% rename from lib/providers/projects_provider.dart rename to lib/providers/hospital_provider.dart index 62debed6..005a53ac 100644 --- a/lib/providers/projects_provider.dart +++ b/lib/providers/hospital_provider.dart @@ -1,18 +1,23 @@ import 'dart:convert'; import 'package:doctor_app_flutter/config/config.dart'; +import 'package:doctor_app_flutter/config/shared_pref_kay.dart'; +import 'package:doctor_app_flutter/util/dr_app_shared_pref.dart'; import '../interceptor/http_interceptor.dart'; import 'package:flutter/cupertino.dart'; import 'package:http/http.dart'; import 'package:http_interceptor/http_client_with_interceptor.dart'; -const GET_PROJECTS = - BASE_URL+'Lists.svc/REST/GetProjectForDoctorAPP'; +const GET_PROJECTS = BASE_URL + 'Lists.svc/REST/GetProjectForDoctorAPP'; + +class HospitalProvider with ChangeNotifier { + + -class ProjectsProvider with ChangeNotifier { Client client = HttpClientWithInterceptor.build(interceptors: [HttpInterceptor()]); + Future getProjectsList() async { const url = GET_PROJECTS; var info = { diff --git a/lib/providers/patients_provider.dart b/lib/providers/patients_provider.dart index f207ee15..afe24758 100644 --- a/lib/providers/patients_provider.dart +++ b/lib/providers/patients_provider.dart @@ -41,11 +41,12 @@ class PatientsProvider with ChangeNotifier { Future getPatientList(PatientModel patient, patientType) async { /* const url = BASE_URL+'DoctorApplication.svc/REST/GetMyInPatient';*/ - // var srvicePatiant = ["GetMyOutPatient", "GetMyInPatient", "GtMyDischargePatient","GtMyReferredPatient","GtMyDischargeReferralPatient","GtMyTomorrowPatient","GtMyReferralPatient"]; - // print("a=SERVICES_PATIANT[patientType]========='=======a"); + int val = int.parse(patientType); - final url = - BASE_URL + 'DoctorApplication.svc/REST/' + SERVICES_PATIANT[val]; + //**********Modify url by amjad amireh for patiant type********* + + + final url =BASE_URL+"DoctorApplication.svc/REST/"+ SERVICES_PATIANT[val]; // print("a===========$url=======a"); try { diff --git a/lib/providers/project_provider.dart b/lib/providers/project_provider.dart new file mode 100644 index 00000000..abf53ea3 --- /dev/null +++ b/lib/providers/project_provider.dart @@ -0,0 +1,43 @@ +import 'package:doctor_app_flutter/config/shared_pref_kay.dart'; +import 'package:doctor_app_flutter/util/dr_app_shared_pref.dart'; +import 'package:flutter/cupertino.dart'; + +class ProjectProvider with ChangeNotifier{ + + DrAppSharedPreferances sharedPref = DrAppSharedPreferances(); + Locale _appLocale; + String currentLanguage = 'ar'; + bool _isArabic = false; + + Locale get appLocal => _appLocale; + + bool get isArabic => _isArabic; + + ProjectProvider(){ + loadSharedPrefLanguage (); + } + void loadSharedPrefLanguage() async { + currentLanguage = await sharedPref.getString(APP_Language); + _appLocale = Locale(currentLanguage ?? 'ar'); + _isArabic = currentLanguage != null + ? currentLanguage == 'ar' ? true : false + : false; + notifyListeners(); + } + + void changeLanguage(String lan) { + if (lan != "en" && currentLanguage != lan) { + _appLocale = Locale("ar"); + _isArabic = true; + currentLanguage = 'ar'; + sharedPref.setString(APP_Language, 'ar'); + } else if (lan != "ar" && currentLanguage != lan) { + _appLocale = Locale("en"); + _isArabic = false; + currentLanguage = 'en'; + sharedPref.setString(APP_Language, 'en'); + } + notifyListeners(); + } + +} \ No newline at end of file diff --git a/lib/providers/schedule_provider.dart b/lib/providers/schedule_provider.dart index 14bc4571..edd880d2 100644 --- a/lib/providers/schedule_provider.dart +++ b/lib/providers/schedule_provider.dart @@ -8,7 +8,7 @@ import 'package:http_interceptor/http_client_with_interceptor.dart'; import '../interceptor/http_interceptor.dart'; import '../models/list_doctor_working_hours_table_model.dart'; -import '../models/RequestSchedule.dart'; +import '../models/request_schedule.dart'; class ScheduleProvider with ChangeNotifier { Client client = @@ -27,6 +27,7 @@ class ScheduleProvider with ChangeNotifier { getDoctorSchedule() async { const url = BASE_URL + 'Doctors.svc/REST/GetDoctorWorkingHoursTable'; try { + if (await Helpers.checkConnection()) { final response = await client.post(url, body: json.encode(requestSchedule.toJson())); final int statusCode = response.statusCode; diff --git a/lib/routes.dart b/lib/routes.dart index e58f3d4d..f2f5f6bb 100644 --- a/lib/routes.dart +++ b/lib/routes.dart @@ -1,3 +1,5 @@ +import './screens/patients/profile/vital_sign/body_measurements_screen.dart'; + import './screens/QR_reader_screen.dart'; import './screens/auth/change_password_screen.dart'; import './screens/auth/login_screen.dart'; @@ -16,6 +18,7 @@ import './screens/patients/profile/lab_result/lab_orders_screen.dart'; import './screens/patients/profile/patient_profile_screen.dart'; import './screens/patients/profile/prescriptions/prescriptions_screen.dart'; import './screens/patients/profile/radiology/radiology_screen.dart'; +import './screens/patients/profile/vital_sign/vital_sign_details_screen.dart'; import './screens/patients/profile/vital_sign/vital_sign_screen.dart'; import './screens/profile_screen.dart'; import './screens/settings/settings_screen.dart'; @@ -40,11 +43,12 @@ const String PHARMACIES_LIST = 'medicine/pharmacies-list'; const String MESSAGES = 'messages'; const String SERVICES = 'services'; const String SETTINGS = 'settings'; -const String VITAL_SIGN = 'vital-sign'; -const String LAB_ORDERS = 'lab_orders'; -const String PRESCRIPTIONS = 'Prescription'; -const String RADIOLOGY = 'Radiology'; - +const String VITAL_SIGN = 'patients/vital-sign'; +const String LAB_ORDERS = 'patients/lab_orders'; +const String PRESCRIPTIONS = 'patients/prescription'; +const String RADIOLOGY = 'patients/radiology'; +const String VITAL_SIGN_DETAILS = 'patients/vital-sign-details'; +const String BODY_MEASUREMENTS = 'patients/body-measurements'; var routes = { HOME: (_) => DashboardScreen(), @@ -60,13 +64,17 @@ var routes = { SETTINGS: (_) => SettingsScreen(), CHANGE_PASSWORD: (_) => ChangePasswordScreen(), VERIFY_ACCOUNT: (_) => VerifyAccountScreen(), - VERIFICATION_METHODS:(_)=> VerificationMethodsScreen(), - PATIENTS_PROFILE:(_)=> PatientProfileScreen(), - PHARMACIES_LIST: (_) => PharmaciesListScreen(itemID: null,), + VERIFICATION_METHODS: (_) => VerificationMethodsScreen(), + PATIENTS_PROFILE: (_) => PatientProfileScreen(), + PHARMACIES_LIST: (_) => PharmaciesListScreen( + itemID: null, + ), VITAL_SIGN: (_) => VitalSignScreen(), MESSAGES: (_) => MessagesScreen(), SERVICES: (_) => ServicesScreen(), - LAB_ORDERS:(_)=>LabOrdersScreen(), - PRESCRIPTIONS:(_)=>PrescriptionScreen(), - RADIOLOGY:(_)=>RadiologyScreen() + LAB_ORDERS: (_) => LabOrdersScreen(), + PRESCRIPTIONS: (_) => PrescriptionScreen(), + RADIOLOGY: (_) => RadiologyScreen(), + VITAL_SIGN_DETAILS: (_) => VitalSignDetailsScreen(), + BODY_MEASUREMENTS: (_) => BodyMeasurementsScreen() }; diff --git a/lib/screens/auth/login_screen.dart b/lib/screens/auth/login_screen.dart index c203dae9..d8c45a57 100644 --- a/lib/screens/auth/login_screen.dart +++ b/lib/screens/auth/login_screen.dart @@ -72,7 +72,7 @@ class _LoginsreenState extends State { return Text('Error: ${snapshot.error}'); } else { return Container( - margin: EdgeInsetsDirectional.fromSTEB(30, 0, 0, 30), + margin: EdgeInsetsDirectional.fromSTEB(30, 0, 30, 30), alignment: Alignment.topLeft, child: Column( crossAxisAlignment: CrossAxisAlignment.start, diff --git a/lib/screens/dashboard_screen.dart b/lib/screens/dashboard_screen.dart index aade7083..97e5158f 100644 --- a/lib/screens/dashboard_screen.dart +++ b/lib/screens/dashboard_screen.dart @@ -1,7 +1,9 @@ import 'package:doctor_app_flutter/config/size_config.dart'; import 'package:doctor_app_flutter/providers/doctor_reply_provider.dart'; import 'package:doctor_app_flutter/providers/medicine_provider.dart'; +import 'package:doctor_app_flutter/providers/hospital_provider.dart'; import 'package:doctor_app_flutter/screens/medicine/medicine_search_screen.dart'; +import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; import 'package:provider/provider.dart'; import '../routes.dart'; @@ -25,10 +27,13 @@ class DashboardScreen extends StatefulWidget { } class _DashboardScreenState extends State { + + HospitalProvider projectsProvider; @override Widget build(BuildContext context) { + projectsProvider = Provider.of(context); return AppScaffold( - appBarTitle: 'Home', + appBarTitle: TranslationBase.of(context).dashboardScreenToolbarTitle, current: 0, body: Container( child: Column( @@ -206,7 +211,7 @@ class _DashboardScreenState extends State { backgroundColor: Colors.green[200], ), onTap: () { - Navigator.of(context).pushNamed(PATIENT_SEARCH); + Navigator.of(context).pushNamed(PATIENT_SEARCH); }, ), ), diff --git a/lib/screens/patients/patient_search_screen.dart b/lib/screens/patients/patient_search_screen.dart index 97987ff0..4704b564 100644 --- a/lib/screens/patients/patient_search_screen.dart +++ b/lib/screens/patients/patient_search_screen.dart @@ -37,8 +37,8 @@ class _PatientSearchScreenState extends State { var _patientSearchFormValues = PatientModel( ProjectID: 15, - ClinicID: 14, - DoctorID: 243763, + ClinicID: 0, + DoctorID: 4709, FirstName: "0", MiddleName: "0", LastName: "0", @@ -62,15 +62,32 @@ class _PatientSearchScreenState extends State { // _patientSearchFormValues.TokenID = if (_formKey.currentState.validate()) { -// If all data are correct then save data to out variables - // _formKey.currentState.save(); - // sharedPref.setString(TOKEN,'@dm!n'); - sharedPref.setString(SLECTED_PATIENT_TYPE,_selectedType); +//*****If all data are correct then save data to out variables**** + if (_patientSearchFormValues.getFirstName == null || + _patientSearchFormValues.getMiddleName == null || + _patientSearchFormValues.getLastName == null || + _patientSearchFormValues.getPatientMobileNumber == null) { + _patientSearchFormValues.setFirstName = "0"; + _patientSearchFormValues.setLastName = "0"; + _patientSearchFormValues.setMiddleName = "0"; + _patientSearchFormValues.setPatientMobileNumber = "0"; + _patientSearchFormValues.setPatientID = 0; + _patientSearchFormValues.From = "0"; + _patientSearchFormValues.To = "0"; + + //_formKey.currentState.save(); + } else { + _formKey.currentState.save(); + } + // _formKey.currentState.save(); + //*********************************** */ + sharedPref.setString(TOKEN, '@dm!n'); + sharedPref.setString(SLECTED_PATIENT_TYPE, _selectedType); print('_selectedType${_selectedType}'); String token = await sharedPref.getString(TOKEN); int projectID = await sharedPref.getInt(PROJECT_ID); _patientSearchFormValues.TokenID = token; - _patientSearchFormValues.ProjectID = projectID; + _patientSearchFormValues.ProjectID = 15; //projectID; // print(_patientSearchFormValues.PatientMobileNumber+"dfdfdfddf"); Navigator.of(context).pushNamed(PATIENTS, arguments: { "patientSearchForm": _patientSearchFormValues, @@ -173,7 +190,8 @@ class _PatientSearchScreenState extends State { AppTextFormField( hintText: 'First Name', onSaved: (value) { - _patientSearchFormValues.FirstName = value; + // _patientSearchFormValues.FirstName = value; + _patientSearchFormValues.setFirstName = value; }, // validator: (value) { // return TextValidator().validateName(value); diff --git a/lib/screens/patients/patients_screen.dart b/lib/screens/patients/patients_screen.dart index 91c15022..676f9589 100644 --- a/lib/screens/patients/patients_screen.dart +++ b/lib/screens/patients/patients_screen.dart @@ -6,6 +6,7 @@ *@desc: */ + import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart'; import 'package:doctor_app_flutter/models/patient/patient_model.dart'; import 'package:doctor_app_flutter/models/patient/topten_users_res_model.dart'; @@ -13,7 +14,9 @@ import 'package:doctor_app_flutter/providers/patients_provider.dart'; import 'package:doctor_app_flutter/routes.dart'; import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/dr_app_circular_progress_Indeicator.dart'; import 'package:flutter/material.dart'; +import 'package:intl/intl.dart'; import 'package:provider/provider.dart'; //************* @@ -33,7 +36,7 @@ class PatientsScreen extends StatefulWidget { class _PatientsScreenState extends State { List litems; - // final List parsed; + // final List parsed; List parsed; //********** List date; @@ -42,10 +45,7 @@ class _PatientsScreenState extends State { List responseModelList; List responseModelList2; - - - - + // List _locations = ['Today', 'Old Date', 'YESTERDAY']; List _locations = ['Today', 'Tomorrow', 'Next Week']; int _activeLocation = 0; @@ -59,6 +59,7 @@ class _PatientsScreenState extends State { final _controller = TextEditingController(); //************** PatientModel patient; + PatientsProvider patientsProv; @override void didChangeDependencies() { @@ -71,148 +72,307 @@ class _PatientsScreenState extends State { patientType = routeArgs['selectedType']; patientTypetitle = SERVICES_PATIANT_HEADER[int.parse(patientType)]; - print(patientType); if (_isInit) { PatientsProvider patientsProv = Provider.of(context); patientsProv.getPatientList(patient, patientType).then((res) { - print('List_MyInPatient${(res['List_MyInPatient'])}'); setState(() { int val2 = int.parse(patientType); litems = res[SERVICES_PATIANT2[val2]]; - parsed = litems; + parsed = litems; responseModelList = new ModelResponse.fromJson(parsed).list; - responseModelList2=responseModelList; + responseModelList2 = responseModelList; //******************** _isLoading = false; + _hasError = res['ErrorEndUserMessage']; }); print(res); }).catchError((error) { + // patientsProv.isLoading=false; + // patientsProv.isError=true; + print("====================error================"); print(error); }); } + _isInit = false; + super.didChangeDependencies(); } + /* *@author: Amjad Amireh *@Date:2/5/2020 *@param: - *@return:PatientsScreen Search textbox + *@return:PatientsScreen Search textbox filter *@desc: */ - searchData(String str) { + + searchData(String str) { + this.responseModelList = this.responseModelList2; var strExist = str.length > 0 ? true : false; if (strExist) { - List filterData=[] ; + List filterData = []; + for (var i = 0; i < responseModelList2.length; i++) { - String firstName = responseModelList[i].firstName.toUpperCase(); String lastName = responseModelList[i].lastName.toUpperCase(); - if (firstName.contains(str.toUpperCase())||lastName.contains(str.toUpperCase())) { - print("==========data done==========="); + if (firstName.contains(str.toUpperCase()) || + lastName.contains(str.toUpperCase())) { filterData.add(responseModelList[i]); } } + setState(() { - print("==========data good==========="); this.responseModelList = filterData; }); } else { setState(() { - print("==========no data==========="); - - this.responseModelList =this.responseModelList2; + this.responseModelList = this.responseModelList2; + }); + } + } + +//***********DateFormat************** +/* + *@author: Amjad Amireh + *@Date:5/5/2020 + *@param: + *@return:Convert time from Milesecond to date with time + + *@desc: + */ + convertDate(String str) { + String timeConvert; + const start = "/Date("; + + const end = "+0300)"; + + final startIndex = str.indexOf(start); + + final endIndex = str.indexOf(end, startIndex + start.length); + + var date = new DateTime.fromMillisecondsSinceEpoch( + int.parse(str.substring(startIndex + start.length, endIndex))); + + String newDateformat = date.year.toString() + + "/" + + date.month.toString().padLeft(2, '0') + + "/" + + date.day.toString().padLeft(2, '0') + + " " + + "-" + + " " + + date.hour.toString().padLeft(2, '0') + + ":" + + date.minute.toString().toString().padLeft(2, '0'); + + return newDateformat.toString(); + } + +/* + *@author: Amjad Amireh + *@Date:5/5/2020 + *@param: + *@return:Convert time from Milesecond to date + + *@desc: + */ + convertDateFormat(String str) { + String timeConvert; + const start = "/Date("; + const end = "+0300)"; + + final startIndex = str.indexOf(start); + final endIndex = str.indexOf(end, startIndex + start.length); + + var date = new DateTime.fromMillisecondsSinceEpoch( + int.parse(str.substring(startIndex + start.length, endIndex))); + String newDate = date.year.toString() + + "-" + + date.month.toString().padLeft(2, '0') + + "-" + + date.day.toString().padLeft(2, '0'); + + return newDate.toString(); + } + + + filterBooking(String str) { + this.responseModelList = this.responseModelList2; + + var strExist = str.length > 0 ? true : false; + if (true) { + List filterDate = []; + + for (var i = 0; i < responseModelList2.length; i++) { + String patiantAppointment = + convertDateFormat(responseModelList[i].appointmentDate); + + String dateAppointment = checkDate(patiantAppointment); + + if (dateAppointment.contains(str)) { + filterDate.add(responseModelList[i]); + } + } + + setState(() { + this.responseModelList = filterDate; + }); + } else { + setState(() { + this.responseModelList = this.responseModelList2; }); } } + String checkDate(String dateString) { + String date; + DateTime checkedTime = DateTime.parse(dateString); + DateTime currentTime = DateTime.now(); + + if ((currentTime.year == checkedTime.year) && + (currentTime.month == checkedTime.month) && + (currentTime.day == checkedTime.day)) { + return "TODAY"; + } else if ((currentTime.year == checkedTime.year) && + (currentTime.month == checkedTime.month)) { + if ((currentTime.day - checkedTime.day) == 1) { + return "YESTERDAY"; + } else if ((currentTime.day - checkedTime.day) == -1) { + return "TOMORROW"; + } + if ((currentTime.day - checkedTime.day) <= -2) { + return "Next Week"; + } else { + return "Old Date"; + } + } + return "Old Date"; + } + +//************************* @override Widget build(BuildContext context) { PatientsProvider patientsProv = Provider.of(context); return AppScaffold( - appBarTitle: patientTypetitle, + appBarTitle: patientTypetitle, //***********Modify by amjad (create List view to insert all new data webservise in scroll )************* - body: Container( - // margin: EdgeInsets.all(20), - child: ListView(scrollDirection: Axis.vertical, children: [ - Container( - child: litems == null - ? Column() - : - Column( - children: [ - Padding( - padding: EdgeInsets.only( - top: MediaQuery.of(context).size.height * 0.03), - child: _locationBar(context), - ), - SizedBox(height: 10.0), - Container( - width: SizeConfig.screenWidth * 0.80, - child: TextField( - controller: _controller, - - onChanged: (String str){ - // print(str); - this.searchData(str); - - }, - decoration: - buildInputDecoration(context, 'Search patiant'), - ), - ), - Container( - margin: EdgeInsets.fromLTRB(15, 0, 15, 0), - child: Column( - - children: - responseModelList.map((PatiantInformtion item) { - return InkWell( - child: CardWithBgWidget( - - widget: Column( - - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - AppText( - item.firstName, - fontSize: 2.5 * SizeConfig.textMultiplier, - ), - SizedBox( - height: 8, - ), - AppText(item.lastName, - fontSize: - 2.5 * SizeConfig.textMultiplier), - SizedBox( - height: 8, - ), - AppText(item.middleName, - fontSize: - 2.5 * SizeConfig.textMultiplier), - ], + body: patientsProv.isLoading + ? DrAppCircularProgressIndeicator() + : patientsProv.isError + ? Center( + child: Text( + patientsProv.error, + style: TextStyle(color: Theme.of(context).errorColor), + ), + ) + : Container( + + child: ListView(scrollDirection: Axis.vertical, children: < + Widget>[ + Container( + child: litems == null + ? Column( + children: [ + Container( + child: Center( + child: + Padding( + padding: const EdgeInsets.fromLTRB(0, 250, 0, 0), + child: DrAppCircularProgressIndeicator(), + )), + ), + + ], + ) + : Column( + children: [ + Padding( + padding: EdgeInsets.only( + top: + MediaQuery.of(context).size.height * + 0.03), + child: SERVICES_PATIANT2[ + int.parse(patientType)] == + "List_MyOutPatient" + ? _locationBar(context) + : Container(), ), - ), - onTap: () { - Navigator.of(context).pushNamed( - PATIENTS_PROFILE, - arguments: {"patient": item}); - }, - ); - }).toList(), - ), - ), - ], - )) - ]))); + SizedBox(height: 10.0), + Container( + width: SizeConfig.screenWidth * 0.80, + child: TextField( + controller: _controller, + onChanged: (String str) { + + this.searchData(str); + }, + decoration: buildInputDecoration( + context, 'Search patiant'), + ), + ), + Container( + margin: EdgeInsets.fromLTRB(15, 0, 15, 0), + child: Column( + children: responseModelList + .map((PatiantInformtion item) { + return InkWell( + child: CardWithBgWidget( + widget: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + AppText( + item.firstName + + " " + + item.lastName + + "- " + + item.patientId.toString(), + fontSize: 2.5 * + SizeConfig.textMultiplier, + fontWeight: FontWeight.bold, + ), + SizedBox( + height: 8, + ), + SERVICES_PATIANT2[int.parse( + patientType)] == + "List_MyOutPatient" + ? AppText( + convertDate(item + .appointmentDate + .toString()), + fontSize: 2.5 * + SizeConfig + .textMultiplier) + : AppText( + item.nationalityName, + fontSize: 2.5 * + SizeConfig + .textMultiplier) + ], + ), + ), + onTap: () { + Navigator.of(context).pushNamed( + PATIENTS_PROFILE, + arguments: {"patient": item}); + }, + ); + }).toList(), + ), + ), + ], + )) + ]))); } //***********amjad update**buildInputDecoration ***to search box******** @@ -243,22 +403,27 @@ class _PatientsScreenState extends State { mainAxisAlignment: MainAxisAlignment.spaceEvenly, mainAxisSize: MainAxisSize.max, crossAxisAlignment: CrossAxisAlignment.center, - children: _locations.map((l) { - bool _isActive = _locations[_activeLocation] == l ? true : false; + children: _locations.map((item) { + bool _isActive = _locations[_activeLocation] == item ? true : false; return Column(mainAxisSize: MainAxisSize.min, children: [ InkWell( child: Text( - l, + item, style: TextStyle( fontSize: 15, color: Colors.white, fontWeight: FontWeight.bold), ), onTap: () { - print(l); - print(_locations.indexOf(l)); + + print(_locations.indexOf(item)); + + + filterBooking(item.toString()); + setState(() { - _activeLocation = _locations.indexOf(l); + _activeLocation = _locations.indexOf(item); + }); }), _isActive diff --git a/lib/screens/patients/profile/lab_result/lab_orders_screen.dart b/lib/screens/patients/profile/lab_result/lab_orders_screen.dart index c8364296..d26ab4c7 100644 --- a/lib/screens/patients/profile/lab_result/lab_orders_screen.dart +++ b/lib/screens/patients/profile/lab_result/lab_orders_screen.dart @@ -108,9 +108,11 @@ class _LabOrdersScreenState extends State { children: [ Row( children: [ - ProfileImageWidget(url:patientsProv - .patientLabResultOrdersList[index] - .doctorImageURL), + ProfileImageWidget( + url: patientsProv + .patientLabResultOrdersList[ + index] + .doctorImageURL), Expanded( child: Padding( padding: const EdgeInsets.fromLTRB( @@ -123,15 +125,18 @@ class _LabOrdersScreenState extends State { '${patientsProv.patientLabResultOrdersList[index].doctorName}', fontSize: 2.5 * SizeConfig.textMultiplier, + fontWeight: FontWeight.bold, ), SizedBox( height: 8, ), AppText( - ' ${patientsProv.patientLabResultOrdersList[index].clinicName}', - fontSize: 2.5 * - SizeConfig - .textMultiplier), + ' ${patientsProv.patientLabResultOrdersList[index].clinicName}', + fontSize: 2 * + SizeConfig.textMultiplier, + color: Theme.of(context) + .primaryColor, + ), SizedBox( height: 8, ), diff --git a/lib/screens/patients/profile/prescriptions/prescriptions_screen.dart b/lib/screens/patients/profile/prescriptions/prescriptions_screen.dart index 061bf648..47fff706 100644 --- a/lib/screens/patients/profile/prescriptions/prescriptions_screen.dart +++ b/lib/screens/patients/profile/prescriptions/prescriptions_screen.dart @@ -55,8 +55,7 @@ class _PrescriptionScreenState extends State { tokenID: token, patientTypeID: patient.patientType, languageID: 2, - setupID: 0 - ); + setupID: 0); patientsProv.getPatientPrescriptions(prescriptionReqModel.toJson()); } @@ -99,7 +98,8 @@ class _PrescriptionScreenState extends State { SizeConfig.realScreenWidth * 0.05, 0), child: ListView.builder( - itemCount: patientsProv.patientPrescriptionsList.length, + itemCount: + patientsProv.patientPrescriptionsList.length, itemBuilder: (BuildContext ctxt, int index) { return InkWell( child: CardWithBgWidget( @@ -108,9 +108,10 @@ class _PrescriptionScreenState extends State { children: [ Row( children: [ - ProfileImageWidget(url:patientsProv - .patientPrescriptionsList[index] - .doctorImageURL), + ProfileImageWidget( + url: patientsProv + .patientPrescriptionsList[index] + .doctorImageURL), Expanded( child: Padding( padding: const EdgeInsets.fromLTRB( @@ -123,15 +124,18 @@ class _PrescriptionScreenState extends State { '${patientsProv.patientPrescriptionsList[index].doctorName}', fontSize: 2.5 * SizeConfig.textMultiplier, + fontWeight: FontWeight.bold, ), SizedBox( height: 8, ), AppText( ' ${patientsProv.patientPrescriptionsList[index].clinicDescription}', - fontSize: 2.5 * + fontSize: 2 * SizeConfig - .textMultiplier), + .textMultiplier, + color: Theme.of(context) + .primaryColor), SizedBox( height: 8, ), diff --git a/lib/screens/patients/profile/radiology/radiology_screen.dart b/lib/screens/patients/profile/radiology/radiology_screen.dart index a55c2704..8b48e88c 100644 --- a/lib/screens/patients/profile/radiology/radiology_screen.dart +++ b/lib/screens/patients/profile/radiology/radiology_screen.dart @@ -123,23 +123,27 @@ class _RadiologyScreenState extends State { '${patientsProv.patientRadiologyList[index].doctorName}', fontSize: 2.5 * SizeConfig.textMultiplier, + fontWeight: FontWeight.bold ), SizedBox( height: 8, ), AppText( 'Invoice No:${patientsProv.patientRadiologyList[index].invoiceNo}', - fontSize: 2.5 * + fontSize: 2 * SizeConfig.textMultiplier, + ), SizedBox( height: 8, ), AppText( - ' ${patientsProv.patientRadiologyList[index].clinicName}', - fontSize: 2.5 * - SizeConfig - .textMultiplier), + ' ${patientsProv.patientRadiologyList[index].clinicName}', + fontSize: 2 * + SizeConfig.textMultiplier, + color: Theme.of(context) + .primaryColor, + ), SizedBox( height: 8, ), diff --git a/lib/screens/patients/profile/vital_sign/body_measurements_screen.dart b/lib/screens/patients/profile/vital_sign/body_measurements_screen.dart new file mode 100644 index 00000000..bf89edac --- /dev/null +++ b/lib/screens/patients/profile/vital_sign/body_measurements_screen.dart @@ -0,0 +1,143 @@ +import 'package:charts_flutter/flutter.dart' as charts; +import 'package:doctor_app_flutter/config/size_config.dart'; +import 'package:doctor_app_flutter/models/patient/vital_sign_res_model.dart'; +import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/rounded_container_widget.dart'; +import 'package:flutter/material.dart'; + +class BodyMeasurementsScreen extends StatelessWidget { + BodyMeasurementsScreen(); + List vitalList; + @override + Widget build(BuildContext context) { + _seriesData = List>(); + _seriesPieData = List>(); + _seriesLineData = List>(); + _generateData(); + return AppScaffold( + appBarTitle: 'Body Measurements', + body: RoundedContainer( + height: SizeConfig.realScreenHeight*0.4, + child: Padding( + padding: EdgeInsets.all(8.0), + child: Container( + child: Center( + child: Column( + children: [ + Text( + 'Body Mass Index', + style: TextStyle( + fontSize: 24.0, fontWeight: FontWeight.bold), + ), + Expanded( + child: charts.BarChart( + _seriesData, + animate: true, + barGroupingType: charts.BarGroupingType.grouped, + // behaviors: [new charts.SeriesLegend()], + // primaryMeasureAxis: , + animationDuration: Duration(seconds: 5), + ), + ), + ], + ), + ), + ), + ), + ), + ); + } + + List> _seriesData; + List> _seriesPieData; + List> _seriesLineData; + + _generateData() { + var data1 = [ + new Pollution(1980, 'USA', 40), + ]; + + + _seriesData.add( + charts.Series( + domainFn: (Pollution pollution, _) => '', + measureFn: (Pollution pollution, _) => pollution.quantity, + id: '2017', + data: data1, + fillPatternFn: (_, __) => charts.FillPatternType.solid, + fillColorFn: (Pollution pollution, _) => + charts.ColorUtil.fromDartColor(Color(0xff990099)), + ), + ); + _seriesData.add( + charts.Series( + domainFn: (Pollution pollution, _) => '', + measureFn: (Pollution pollution, _) => pollution.quantity, + id: '2017', + data: data1, + fillPatternFn: (_, __) => charts.FillPatternType.solid, + fillColorFn: (Pollution pollution, _) => + charts.ColorUtil.fromDartColor(Color(0xff990099)), + ), + ); + _seriesData.add( + charts.Series( + domainFn: (Pollution pollution, _) => '', + measureFn: (Pollution pollution, _) => pollution.quantity, + id: '2017', + data: data1, + fillPatternFn: (_, __) => charts.FillPatternType.solid, + fillColorFn: (Pollution pollution, _) => + charts.ColorUtil.fromDartColor(Color(0xff990099)), + ), + ); + _seriesData.add( + charts.Series( + domainFn: (Pollution pollution, _) => '', + measureFn: (Pollution pollution, _) => pollution.quantity, + id: '2017', + data: data1, + fillPatternFn: (_, __) => charts.FillPatternType.solid, + fillColorFn: (Pollution pollution, _) => + charts.ColorUtil.fromDartColor(Color(0xff990099)), + ), + ); + _seriesData.add( + charts.Series( + domainFn: (Pollution pollution, _) => '', + measureFn: (Pollution pollution, _) => pollution.quantity, + id: '2017', + data: data1, + fillPatternFn: (_, __) => charts.FillPatternType.solid, + fillColorFn: (Pollution pollution, _) => + charts.ColorUtil.fromDartColor(Color(0xff990099)), + ), + ); + + + + } +} + +class Pollution { + String place; + int year; + int quantity; + + Pollution(this.year, this.place, this.quantity); +} + +class Task { + String task; + double taskvalue; + Color colorval; + + Task(this.task, this.taskvalue, this.colorval); +} + +class Sales { + int yearval; + int salesval; + + Sales(this.yearval, this.salesval); +} diff --git a/lib/screens/patients/profile/vital_sign/vital_sign_details_screen.dart b/lib/screens/patients/profile/vital_sign/vital_sign_details_screen.dart new file mode 100644 index 00000000..a7155e01 --- /dev/null +++ b/lib/screens/patients/profile/vital_sign/vital_sign_details_screen.dart @@ -0,0 +1,76 @@ +import 'package:doctor_app_flutter/routes.dart'; +import 'package:flutter/material.dart'; + +import '../../../../config/size_config.dart'; +import '../../../../models/patient/vital_sign_res_model.dart'; +import '../../../../widgets/patients/profile/profile_medical_info_widget.dart'; +import '../../../../widgets/shared/app_scaffold_widget.dart'; +import '../../../../widgets/shared/rounded_container_widget.dart'; + +class VitalSignDetailsScreen extends StatelessWidget { + // VitalSignDetailsScreen({Key key, this.vitalSing}) : super(key: key); + VitalSignResModel vitalSing; + String url = "assets/images/"; + final double contWidth = SizeConfig.realScreenWidth * 0.70; + + @override + Widget build(BuildContext context) { + final routeArgs = ModalRoute.of(context).settings.arguments as Map; + vitalSing = routeArgs['vitalSing']; + return AppScaffold( + appBarTitle: "vital Sing ", + body: RoundedContainer( + height: SizeConfig.realScreenHeight * 0.7, + child: CustomScrollView( + primary: false, + slivers: [ + SliverPadding( + padding: const EdgeInsets.all(10), + sliver: SliverGrid.count( + childAspectRatio: 0.7, + crossAxisSpacing: 10, + mainAxisSpacing: 0, + crossAxisCount: 3, + children: [ + InkWell( + onTap: (){ + Navigator.of(context).pushNamed(BODY_MEASUREMENTS); + }, + child: CircleAvatarWidget( + des: 'Body Measurements', + url: url + 'heartbeat.png', + ), + ), + CircleAvatarWidget( + des: 'Temperature', + url: url + 'heartbeat.png', + ), + CircleAvatarWidget( + des: 'Pulse', + url: url + 'heartbeat.png', + ), + CircleAvatarWidget( + des: 'Respiration', + url: url + 'heartbeat.png', + ), + CircleAvatarWidget( + des: 'Blood Pressure', + url: url + 'heartbeat.png', + ), + CircleAvatarWidget( + des: 'Oxygenation', + url: url + 'heartbeat.png', + ), + CircleAvatarWidget( + des: 'Pain Scale', + url: url + 'heartbeat.png', + ), + ], + ), + ), + ], + ), + // height: 500, + )); + } +} diff --git a/lib/screens/patients/profile/vital_sign/vital_sign_screen.dart b/lib/screens/patients/profile/vital_sign/vital_sign_screen.dart index da604792..570a5aa1 100644 --- a/lib/screens/patients/profile/vital_sign/vital_sign_screen.dart +++ b/lib/screens/patients/profile/vital_sign/vital_sign_screen.dart @@ -1,3 +1,4 @@ +import 'package:doctor_app_flutter/routes.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -109,9 +110,10 @@ class _VitalSignScreenState extends State { children: [ Row( children: [ - ProfileImageWidget(url:patientsProv - .patientVitalSignList[index] - .doctorImageURL), + ProfileImageWidget( + url: patientsProv + .patientVitalSignList[index] + .doctorImageURL), Expanded( child: Padding( padding: const EdgeInsets.fromLTRB( @@ -124,15 +126,18 @@ class _VitalSignScreenState extends State { '${patientsProv.patientVitalSignList[index].doctorName}', fontSize: 2.5 * SizeConfig.textMultiplier, + fontWeight: FontWeight.bold, ), SizedBox( height: 8, ), AppText( - ' ${patientsProv.patientVitalSignList[index].clinicName}', - fontSize: 2.5 * - SizeConfig - .textMultiplier), + ' ${patientsProv.patientVitalSignList[index].clinicName}', + fontSize: 2 * + SizeConfig.textMultiplier, + color: Theme.of(context) + .primaryColor, + ), SizedBox( height: 8, ), @@ -145,7 +150,9 @@ class _VitalSignScreenState extends State { ], ), ), - onTap: () {}, + onTap: () { + Navigator.of(context).pushNamed(VITAL_SIGN_DETAILS,arguments: {'vitalSing':patientsProv.patientVitalSignList[index]}); + }, ); }), ), diff --git a/lib/screens/settings/settings_screen.dart b/lib/screens/settings/settings_screen.dart index ccb9b588..c205f49d 100644 --- a/lib/screens/settings/settings_screen.dart +++ b/lib/screens/settings/settings_screen.dart @@ -1,11 +1,65 @@ +import 'package:doctor_app_flutter/providers/project_provider.dart'; +import 'package:doctor_app_flutter/providers/hospital_provider.dart'; +import 'package:doctor_app_flutter/util/translations_delegate_base.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:flutter/material.dart'; +import 'package:hexcolor/hexcolor.dart'; +import 'package:provider/provider.dart'; class SettingsScreen extends StatelessWidget { + + ProjectProvider projectsProvider; @override Widget build(BuildContext context) { + projectsProvider = Provider.of(context); return AppScaffold( - appBarTitle: "SETTINS", - body: Container(), + appBarTitle: TranslationBase.of(context).settings.toUpperCase(), + body: ListView( + children: [ + AppText(TranslationBase.of(context).language.toUpperCase(),fontSize: 18,margin: 5,fontWeight: FontWeight.bold,), + Container( + margin: EdgeInsets.symmetric(horizontal: 10,vertical: 10), + height: 50, + decoration: BoxDecoration( + border: Border.all(color: Colors.grey[600],width: 2.0), + borderRadius: BorderRadius.circular(8.0) + ), + child: ClipRRect( + borderRadius: BorderRadius.circular(7.0), + child: Row( + children: [ + Expanded( + child: InkWell( + onTap: () { projectsProvider.changeLanguage('en'); }, + child: AnimatedContainer( + duration: Duration(milliseconds: 350), + decoration: BoxDecoration( + color: !projectsProvider.isArabic ? Hexcolor('#58434F') : Colors.transparent, + border: Border(right: BorderSide(color: Colors.grey[200], width: 2.0)) + ), + child: Center(child: AppText(TranslationBase.of(context).lanEnglish, color: !projectsProvider.isArabic ? Colors.white : Colors.grey[500])) + ), + ), + ), + Expanded( + child: InkWell( + onTap: (){projectsProvider.changeLanguage('ar');}, + child: AnimatedContainer( + duration: Duration(milliseconds: 350), + decoration: BoxDecoration( + color: projectsProvider.isArabic ? Hexcolor('#58434F') : Colors.transparent, + border: Border(right: BorderSide(color: Colors.grey[200], width: 2.0)) + ), + child: Center(child: AppText(TranslationBase.of(context).lanArabic, color: projectsProvider.isArabic ? Colors.white : Colors.grey[500],)) + ), + ), + ) + ], + ), + ), + ) + ], + ), ); } } \ No newline at end of file diff --git a/lib/util/translations_delegate_base.dart b/lib/util/translations_delegate_base.dart new file mode 100644 index 00000000..1af735a1 --- /dev/null +++ b/lib/util/translations_delegate_base.dart @@ -0,0 +1,43 @@ +import 'dart:async'; + +import 'package:doctor_app_flutter/config/localized_values.dart'; +import 'package:flutter/foundation.dart' show SynchronousFuture; +import 'package:flutter/material.dart'; + +class TranslationBase { + TranslationBase(this.locale); + + final Locale locale; + + static TranslationBase of(BuildContext context) { + return Localizations.of(context, TranslationBase); + } + + + + String get dashboardScreenToolbarTitle => localizedValues['dashboardScreenToolbarTitle'][locale.languageCode]; + + String get settings => localizedValues['settings'][locale.languageCode]; + + String get language => localizedValues['language'][locale.languageCode]; + + String get lanEnglish => localizedValues['lanEnglish'][locale.languageCode]; + + String get lanArabic => localizedValues['lanArabic'][locale.languageCode]; + +} + +class TranslationBaseDelegate extends LocalizationsDelegate { + const TranslationBaseDelegate(); + + @override + bool isSupported(Locale locale) => ['en', 'ar'].contains(locale.languageCode); + + @override + Future load(Locale locale) { + return SynchronousFuture(TranslationBase(locale)); + } + + @override + bool shouldReload(TranslationBaseDelegate old) => false; +} diff --git a/lib/widgets/auth/login_form.dart b/lib/widgets/auth/login_form.dart index f20cb0f3..43daa219 100644 --- a/lib/widgets/auth/login_form.dart +++ b/lib/widgets/auth/login_form.dart @@ -10,7 +10,7 @@ import '../../config/shared_pref_kay.dart'; import '../../config/size_config.dart'; import '../../models/user_model.dart'; import '../../providers/auth_provider.dart'; -import '../../providers/projects_provider.dart'; +import '../../providers/hospital_provider.dart'; import '../../routes.dart'; import '../../util/dr_app_shared_pref.dart'; import '../../util/dr_app_toast_msg.dart'; @@ -290,7 +290,7 @@ class _LoginFormState extends State { } getProjectsList() { - ProjectsProvider projectsProv = Provider.of(context); + HospitalProvider projectsProv = Provider.of(context); projectsProv.getProjectsList().then((res) { if (res['MessageStatus'] == 1) { setState(() { diff --git a/lib/widgets/patients/profile/patient_profile_widget.dart b/lib/widgets/patients/profile/patient_profile_widget.dart index 72d287b0..4dbcf39b 100644 --- a/lib/widgets/patients/profile/patient_profile_widget.dart +++ b/lib/widgets/patients/profile/patient_profile_widget.dart @@ -15,38 +15,7 @@ import './profile_status_info_widget.dart'; *@desc: Patient Profile Widget */ class PatientProfileWidget extends StatelessWidget { - // Map patient = { - // "ProjectID": 15, - // "ClinicID": null, - // "DoctorID": 70907, - // "PatientID": 3315674, - // "DoctorName": "MOQBIL ABDULLAH AL HODAITHY", - // "DoctorNameN": null, - // "FirstName": "WALEED", - // "MiddleName": "ALI", - // "LastName": "AL-YAZIDI", - // "FirstNameN": null, - // "MiddleNameN": null, - // "LastNameN": null, - // "Gender": 1, - // "DateofBirth": "/Date(534286800000+0300)/", - // "NationalityID": null, - // "MobileNumber": "0500014559", - // "EmailAddress": "unknown@unknown.com", - // "PatientIdentificationNo": "1063236754", - // "NationalityName": "Saudi", - // "NationalityNameN": null, - // "PatientStatusType": null, - // "PatientType": 1, - // "AppointmentDate": "/Date(1587848400000+0300)/", - // "StartTime": "13:00:00", - // "Age": "34 Yr", - // "ClinicDescription": "INTERNAL MEDICINE CLINIC", - // "GenderDescription": "Male", - // "AdmissionDate": "/Date(1587848400000+0300)/", - // "AdmissionNo": "2020008652" - // }; - + PatiantInformtion patient; diff --git a/lib/widgets/patients/profile/profile_medical_info_widget.dart b/lib/widgets/patients/profile/profile_medical_info_widget.dart index 7817e9b0..5bf83cf0 100644 --- a/lib/widgets/patients/profile/profile_medical_info_widget.dart +++ b/lib/widgets/patients/profile/profile_medical_info_widget.dart @@ -79,7 +79,7 @@ class ProfileMedicalInfoWidget extends StatelessWidget { ), InkWell( //RADIOLOGY - onTap: () { + onTap: () { navigator(context, RADIOLOGY); }, child: CircleAvatarWidget( @@ -123,26 +123,34 @@ class CircleAvatarWidget extends StatelessWidget { @override Widget build(BuildContext context) { - return Column( - children: [ - Container( - height: height, - width: width, - decoration: new BoxDecoration( - // color: Colors.green, // border color - shape: BoxShape.circle, - border: Border.all(color: Hexcolor('#B7831A'), width: 1.5)), - child: CircleAvatar( - radius: SizeConfig.imageSizeMultiplier * 12, - child: Image.asset(url), - backgroundColor: Colors.transparent, + return Container( + child: Column( + children: [ + Container( + height: height, + width: width, + // width: 50, + // height: 50, + decoration: new BoxDecoration( + // color: Colors.green, // border color + shape: BoxShape.circle, + border: Border.all(color: Hexcolor('#B7831A'), width: 1.5)), + child: CircleAvatar( + radius: SizeConfig.imageSizeMultiplier * 12, + child: Image.asset(url), + backgroundColor: Colors.transparent, + ), ), - ), - SizedBox( - height: 10, - ), - AppText(des) - ], + SizedBox( + height: 10, + ), + AppText( + des, + fontSize: 2 * SizeConfig.textMultiplier, + textAlign: TextAlign.center, + ) + ], + ), ); } } diff --git a/lib/widgets/shared/app_texts_widget.dart b/lib/widgets/shared/app_texts_widget.dart index db4f1b2c..100f9bd9 100644 --- a/lib/widgets/shared/app_texts_widget.dart +++ b/lib/widgets/shared/app_texts_widget.dart @@ -2,7 +2,6 @@ import 'package:doctor_app_flutter/config/size_config.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; - // OWNER : Ibrahim albitar // DATE : 12-04-2020 // DESCRIPTION : Customization for Texts in app @@ -19,6 +18,7 @@ class AppText extends StatefulWidget { final double marginBottom; final double marginLeft; final bool visibility; + final TextAlign textAlign; AppText(this.data, {this.color = Colors.black, @@ -30,7 +30,8 @@ class AppText extends StatefulWidget { this.marginRight = 0, this.marginBottom = 0, this.marginLeft = 0, - this.visibility = true}); + this.visibility = true, + this.textAlign}); @override _AppTextState createState() => _AppTextState(); @@ -39,18 +40,19 @@ class AppText extends StatefulWidget { class _AppTextState extends State { @override Widget build(BuildContext context) { - return Visibility( visible: widget.visibility, - child: Container( - margin: widget.margin != null ? EdgeInsets.all(widget.margin) : EdgeInsets.only( - top: widget.marginTop, - right: widget.marginRight, - bottom: widget.marginBottom, - left: widget.marginLeft - ), + child: Container( + margin: widget.margin != null + ? EdgeInsets.all(widget.margin) + : EdgeInsets.only( + top: widget.marginTop, + right: widget.marginRight, + bottom: widget.marginBottom, + left: widget.marginLeft), child: Text( widget.data, + textAlign: widget.textAlign, style: TextStyle( color: widget.color, fontWeight: widget.fontWeight, diff --git a/pubspec.lock b/pubspec.lock index 14612a67..7deef573 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -35,7 +35,7 @@ packages: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.4.1" + version: "2.4.0" bazel_worker: dependency: transitive description: @@ -49,7 +49,7 @@ packages: name: boolean_selector url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "1.0.5" build: dependency: transitive description: @@ -126,7 +126,7 @@ packages: name: charcode url: "https://pub.dartlang.org" source: hosted - version: "1.1.3" + version: "1.1.2" checked_yaml: dependency: transitive description: @@ -134,13 +134,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.0.2" - clock: - dependency: transitive - description: - name: clock - url: "https://pub.dartlang.org" - source: hosted - version: "1.0.1" code_builder: dependency: transitive description: @@ -154,7 +147,7 @@ packages: name: collection url: "https://pub.dartlang.org" source: hosted - version: "1.14.12" + version: "1.14.11" connectivity: dependency: "direct main" description: @@ -211,13 +204,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.3.4" - fake_async: - dependency: transitive - description: - name: fake_async - url: "https://pub.dartlang.org" - source: hosted - version: "1.1.0" fixnum: dependency: transitive description: @@ -244,6 +230,11 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.1.4" + flutter_localizations: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" flutter_plugin_android_lifecycle: dependency: transitive description: @@ -317,13 +308,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "3.1.4" - i18n: - dependency: "direct main" - description: - name: i18n - url: "https://pub.dartlang.org" - source: hosted - version: "0.9.10" imei_plugin: dependency: "direct main" description: @@ -373,6 +357,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.11.4" + maps_launcher: + dependency: "direct main" + description: + name: maps_launcher + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0" matcher: dependency: transitive description: @@ -428,7 +419,7 @@ packages: name: path url: "https://pub.dartlang.org" source: hosted - version: "1.7.0" + version: "1.6.4" pedantic: dependency: transitive description: @@ -443,6 +434,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.1.1+1" + petitparser: + dependency: transitive + description: + name: petitparser + url: "https://pub.dartlang.org" + source: hosted + version: "2.4.0" platform: dependency: transitive description: @@ -499,13 +497,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.1.5" - quick_log: - dependency: transitive - description: - name: quick_log - url: "https://pub.dartlang.org" - source: hosted - version: "0.4.0" quiver: dependency: transitive description: @@ -513,13 +504,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.0.5" - rxdart: - dependency: transitive - description: - name: rxdart - url: "https://pub.dartlang.org" - source: hosted - version: "0.23.1" scratch_space: dependency: transitive description: @@ -587,7 +571,7 @@ packages: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.7.0" + version: "1.5.5" stack_trace: dependency: transitive description: @@ -629,7 +613,7 @@ packages: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.2.15" + version: "0.2.11" timing: dependency: transitive description: @@ -644,6 +628,34 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.1.6" + url_launcher: + dependency: "direct main" + description: + name: url_launcher + url: "https://pub.dartlang.org" + source: hosted + version: "5.4.5" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.1+5" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.6" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.1+4" vector_math: dependency: transitive description: @@ -665,6 +677,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.1.0" + xml: + dependency: transitive + description: + name: xml + url: "https://pub.dartlang.org" + source: hosted + version: "3.5.0" yaml: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 8a82ea4a..62c813b2 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -20,11 +20,12 @@ dependencies: flutter: sdk: flutter hexcolor: ^1.0.1 + flutter_localizations: + sdk: flutter flutter_device_type: ^0.2.0 intl: ^0.16.1 http: ^0.12.0+4 provider: ^4.0.5+1 - i18n: any shared_preferences: ^0.5.6+3 imei_plugin: ^1.1.6 flutter_flexible_toast: ^0.1.4 @@ -34,6 +35,7 @@ dependencies: connectivity: ^0.4.8+2 maps_launcher: ^1.2.0 url_launcher: ^5.4.5 + charts_flutter: ^0.9.0