From b07ff8154cf73352ed11303b7d5104c1b9593ffc Mon Sep 17 00:00:00 2001 From: her_username Date: Mon, 11 May 2020 14:51:26 +0300 Subject: [PATCH 1/5] update local for doctor replay , my schedule and message screen --- lib/config/localized_values.dart | 10 ++++++- lib/screens/doctor/doctor_reply_screen.dart | 9 ++++--- lib/screens/doctor/message_screen.dart | 3 ++- lib/screens/doctor/my_schedule_screen.dart | 7 ++--- lib/util/translations_delegate_base.dart | 15 +++++++++++ lib/widgets/shared/card_with_bg_widget.dart | 30 +++++++++++++++------ 6 files changed, 57 insertions(+), 17 deletions(-) diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 20393d92..93575607 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -3,5 +3,13 @@ const Map> localizedValues = { 'settings': {'en': 'Settings', 'ar': 'الاعدادات'}, 'language': {'en': 'App Language', 'ar': 'لغة التطبيق'}, 'lanEnglish': {'en': 'English', 'ar': 'English'}, - 'lanArabic': {'en': 'العربية', 'ar': 'العربية'} + 'lanArabic': {'en': 'العربية', 'ar': 'العربية'}, + 'doctorReply':{'en': 'Doctor Reply', 'ar': 'رد الطبيب'}, + 'time' :{'en': 'Time','ar':'الوقت'}, + 'fileNo' :{'en':'File No', 'ar':'رقم الملف'}, + 'mobileNo' :{'en':'Mobile No', 'ar':'رقم الموبايل'}, + 'messagesScreenToolbarTitle' : {'en': 'Messages','ar': 'الرسائل' }, + 'mySchedule' : {'en': 'My Schedule', 'ar' : 'جدولي'}, + 'errorNoSchedule' :{'en': 'You don\'t have any Schedule' , 'ar': 'ليس لديك أي جدول زمني'}, + }; diff --git a/lib/screens/doctor/doctor_reply_screen.dart b/lib/screens/doctor/doctor_reply_screen.dart index ad200706..9f73feea 100644 --- a/lib/screens/doctor/doctor_reply_screen.dart +++ b/lib/screens/doctor/doctor_reply_screen.dart @@ -1,5 +1,6 @@ import 'package:doctor_app_flutter/config/size_config.dart'; import 'package:doctor_app_flutter/providers/doctor_reply_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:doctor_app_flutter/widgets/shared/card_with_bg_widget.dart'; @@ -24,7 +25,7 @@ class DoctorReplyScreen extends StatelessWidget { Widget build(BuildContext context) { _doctorReplyProvider = Provider.of(context); return AppScaffold( - appBarTitle: 'Doctor Reply', + appBarTitle: TranslationBase.of(context).doctorReply, showAppDrawer: false, body:_doctorReplyProvider.isLoading? DrAppCircularProgressIndeicator(): _doctorReplyProvider.isError? Center( @@ -62,7 +63,7 @@ class DoctorReplyScreen extends StatelessWidget { Row( children: [ AppText( - 'Time', + TranslationBase.of(context).time, fontSize: 2.5 * SizeConfig.textMultiplier, ), Container( @@ -80,7 +81,7 @@ class DoctorReplyScreen extends StatelessWidget { Row( children: [ AppText( - 'File No', + TranslationBase.of(context).fileNo, fontSize: 2.5 * SizeConfig.textMultiplier, ), Container( @@ -98,7 +99,7 @@ class DoctorReplyScreen extends StatelessWidget { Row( children: [ AppText( - 'Mobile No', + TranslationBase.of(context).mobileNo, fontSize: 2.5 * SizeConfig.textMultiplier, ), Container( diff --git a/lib/screens/doctor/message_screen.dart b/lib/screens/doctor/message_screen.dart index 92eb61f3..1321c4fc 100644 --- a/lib/screens/doctor/message_screen.dart +++ b/lib/screens/doctor/message_screen.dart @@ -1,3 +1,4 @@ +import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; import 'package:flutter/material.dart'; @@ -6,7 +7,7 @@ class MessagesScreen extends StatelessWidget { Widget build(BuildContext context) { return AppScaffold( current: 1, - appBarTitle: 'Messages', + appBarTitle: TranslationBase.of(context).messagesScreenToolbarTitle, body: Center( child: Text('Messages heeer'), ), diff --git a/lib/screens/doctor/my_schedule_screen.dart b/lib/screens/doctor/my_schedule_screen.dart index f4627d6c..b9f60889 100644 --- a/lib/screens/doctor/my_schedule_screen.dart +++ b/lib/screens/doctor/my_schedule_screen.dart @@ -1,4 +1,5 @@ import 'package:doctor_app_flutter/providers/schedule_provider.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/dr_app_circular_progress_Indeicator.dart'; import 'package:flutter/material.dart'; @@ -18,7 +19,7 @@ class MyScheduleScreen extends StatelessWidget { // pageOnly: false, showBottomBar: false, showAppDrawer: false, - appBarTitle: 'My Schedule', + appBarTitle: TranslationBase.of(context).mySchedule, body: scheduleProvider.isLoading ? DrAppCircularProgressIndeicator() : scheduleProvider.isError @@ -31,7 +32,7 @@ class MyScheduleScreen extends StatelessWidget { : scheduleProvider.listDoctorWorkingHoursTable.length == 0 ? Center( child: AppText( - 'You don\'t have any Schedule', + TranslationBase.of(context).errorNoSchedule, color: Theme.of(context).errorColor, ), ) @@ -48,7 +49,7 @@ class MyScheduleScreen extends StatelessWidget { SizedBox( height: 20, ), - AppText('My Schedule', + AppText(TranslationBase.of(context).mySchedule, fontSize: 2.5 * SizeConfig.textMultiplier), scheduleListByDate(), diff --git a/lib/util/translations_delegate_base.dart b/lib/util/translations_delegate_base.dart index 1af735a1..b5f75602 100644 --- a/lib/util/translations_delegate_base.dart +++ b/lib/util/translations_delegate_base.dart @@ -25,6 +25,21 @@ class TranslationBase { String get lanArabic => localizedValues['lanArabic'][locale.languageCode]; + String get doctorReply => localizedValues['doctorReply'][locale.languageCode]; + + String get time => localizedValues['time'][locale.languageCode]; + + String get fileNo => localizedValues['fileNo'][locale.languageCode]; + + String get mobileNo => localizedValues['mobileNo'][locale.languageCode]; + + String get messagesScreenToolbarTitle => localizedValues['messagesScreenToolbarTitle'][locale.languageCode]; + + String get mySchedule => localizedValues['mySchedule'][locale.languageCode]; + + String get errorNoSchedule => localizedValues['errorNoSchedule'][locale.languageCode]; + + } class TranslationBaseDelegate extends LocalizationsDelegate { diff --git a/lib/widgets/shared/card_with_bg_widget.dart b/lib/widgets/shared/card_with_bg_widget.dart index 07562a5e..39468b83 100644 --- a/lib/widgets/shared/card_with_bg_widget.dart +++ b/lib/widgets/shared/card_with_bg_widget.dart @@ -1,7 +1,9 @@ import 'package:doctor_app_flutter/config/size_config.dart'; +import 'package:doctor_app_flutter/providers/project_provider.dart'; import 'package:doctor_app_flutter/widgets/shared/rounded_container_widget.dart'; import 'package:flutter/material.dart'; import 'package:hexcolor/hexcolor.dart'; +import 'package:provider/provider.dart'; /* *@author: Mohammad Aljammal @@ -18,6 +20,7 @@ class CardWithBgWidget extends StatelessWidget { @override Widget build(BuildContext context) { + ProjectProvider projectProvider = Provider.of(context); return Container( margin: EdgeInsets.symmetric(vertical: 10.0), width: double.infinity, @@ -31,15 +34,26 @@ class CardWithBgWidget extends StatelessWidget { borderRadius: BorderRadius.all(Radius.circular(10.0)), child: Stack( children: [ - Positioned( - child: Container( - width: 10, - color: Hexcolor('#58434F'), + if (projectProvider.isArabic) + Positioned( + child: Container( + width: 10, + color: Hexcolor('#58434F'), + ), + bottom: 0, + top: 0, + right: 0, + ) + else + Positioned( + child: Container( + width: 10, + color: Hexcolor('#58434F'), + ), + bottom: 0, + top: 0, + left: 0, ), - bottom: 0, - top: 0, - left: 0, - ), Container( padding: EdgeInsets.all(15.0), margin: EdgeInsets.only(left: 10), From 7d3856f2b25399acb2797855bae97ca0c55ef671 Mon Sep 17 00:00:00 2001 From: her_username Date: Sun, 17 May 2020 18:19:02 +0300 Subject: [PATCH 2/5] done QR reader --- android/app/build.gradle | 6 +- android/app/src/main/AndroidManifest.xml | 2 + assets/images/qr_code.png | Bin 0 -> 10396 bytes assets/images/qr_code_white.png | Bin 0 -> 11022 bytes ios/Runner/Info.plist | 2 + lib/models/patient/patiant_info_model.dart | 2 +- lib/models/patient/patient_model.dart | 25 +++ lib/providers/doctor_reply_provider.dart | 1 + lib/screens/QR_reader_screen.dart | 179 ++++++++++++++++++++- lib/widgets/shared/app_button.dart | 146 +++++++++++++++++ pubspec.lock | 66 +++++--- pubspec.yaml | 8 + 12 files changed, 411 insertions(+), 26 deletions(-) create mode 100644 assets/images/qr_code.png create mode 100644 assets/images/qr_code_white.png create mode 100644 lib/widgets/shared/app_button.dart diff --git a/android/app/build.gradle b/android/app/build.gradle index dd7a2958..1aa8b742 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -26,7 +26,7 @@ apply plugin: 'kotlin-android' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 28 + compileSdkVersion 29 sourceSets { main.java.srcDirs += 'src/main/kotlin' @@ -39,8 +39,8 @@ android { defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "com.example.doctor_app_flutter" - minSdkVersion 16 - targetSdkVersion 28 + minSdkVersion 18 + targetSdkVersion 29 versionCode flutterVersionCode.toInteger() versionName flutterVersionName testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 1eb79e87..e6d9a9ad 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -5,6 +5,8 @@ In most cases you can leave this as-is, but you if you want to provide additional functionality it is fine to subclass or reimplement FlutterApplication and put your custom class here. --> + + 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 literal 0 HcmV?d00001 diff --git a/assets/images/qr_code_white.png b/assets/images/qr_code_white.png new file mode 100644 index 0000000000000000000000000000000000000000..3a95cd7b3ef51b2938d507a8308625104ba32632 GIT binary patch literal 11022 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 CycQM! literal 0 HcmV?d00001 diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index 695cf105..31708450 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -43,5 +43,7 @@ UIViewControllerBasedStatusBarAppearance + NSCameraUsageDescription + Camera permission is required for barcode scanning. diff --git a/lib/models/patient/patiant_info_model.dart b/lib/models/patient/patiant_info_model.dart index c85edace..6e1813fe 100644 --- a/lib/models/patient/patiant_info_model.dart +++ b/lib/models/patient/patiant_info_model.dart @@ -123,7 +123,7 @@ class PatiantInformtion { age: json["Age"], genderDescription: json["GenderDescription"], nursingStationName: json["NursingStationName"], - appointmentDate: json["AppointmentDate"], + appointmentDate: json["AppointmentDate"]?? '', ); diff --git a/lib/models/patient/patient_model.dart b/lib/models/patient/patient_model.dart index e49f64ea..564f2527 100644 --- a/lib/models/patient/patient_model.dart +++ b/lib/models/patient/patient_model.dart @@ -60,6 +60,31 @@ class PatientModel { LastName: json["LasttName"], ); + Map toJson() { + final Map data = new Map(); + data['ProjectID'] = this.ProjectID; + data['ClinicID'] = this.ClinicID; + data['DoctorID'] = this.DoctorID; + data['PatientID'] = this.PatientID; + data['FirstName'] = this.FirstName; + data['MiddleName'] = this.MiddleName; + data['LastName'] = this.LastName; + data['PatientMobileNumber'] = this.PatientMobileNumber; + data['PatientIdentificationID'] = this.PatientIdentificationID; + data['PatientID'] = this.PatientID; + data['From'] = this.From; + data['To'] = this.To; + data['LanguageID'] = this.LanguageID; + data['stamp'] = this.stamp; + data['IPAdress'] = this.IPAdress; + data['VersionID'] = this.VersionID; + data['Channel'] = this.Channel; + data['TokenID'] = this.TokenID; + data['SessionID'] = this.SessionID; + data['IsLoginForDoctorApp'] = this.IsLoginForDoctorApp; + data['PatientOutSA'] = this.PatientOutSA; + return data; + } } //*************************** \ No newline at end of file diff --git a/lib/providers/doctor_reply_provider.dart b/lib/providers/doctor_reply_provider.dart index b67cba47..b187639e 100644 --- a/lib/providers/doctor_reply_provider.dart +++ b/lib/providers/doctor_reply_provider.dart @@ -45,6 +45,7 @@ class DoctorReplyProvider with ChangeNotifier { isLoading = false; } else { isError = true; + isLoading = false; error = parsed['ErrorMessage'] ?? parsed['ErrorEndUserMessage']; } } diff --git a/lib/screens/QR_reader_screen.dart b/lib/screens/QR_reader_screen.dart index 7a7baacf..646e8f2f 100644 --- a/lib/screens/QR_reader_screen.dart +++ b/lib/screens/QR_reader_screen.dart @@ -1,11 +1,184 @@ +import 'package:barcode_scan/platform_wrapper.dart'; +import 'package:doctor_app_flutter/config/size_config.dart'; +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'; +import 'package:doctor_app_flutter/providers/patients_provider.dart'; +import 'package:doctor_app_flutter/widgets/shared/app_button.dart'; import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/card_with_bg_widget.dart'; +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -class QrReaderScreen extends StatelessWidget { +import 'package:provider/provider.dart'; + +import '../routes.dart'; + +class QrReaderScreen extends StatefulWidget { + @override + _QrReaderScreenState createState() => _QrReaderScreenState(); +} + +class _QrReaderScreenState extends State { + bool isLoading = false; + PatientModel patient = PatientModel( + ProjectID: 15, + ClinicID: 0, + DoctorID: 4709, + FirstName: "0", + MiddleName: "0", + LastName: "0", + PatientMobileNumber: "0", + PatientIdentificationID: "0", + PatientID: 0, + From: "0", + To: "0", + LanguageID: 2, + stamp: "2020-03-02T13:56:39.170Z", + IPAdress: "11.11.11.11", + VersionID: 1.2, + Channel: 9, + TokenID: "@dm!n", + SessionID: "5G0yXn0Jnq", + IsLoginForDoctorApp: true, + PatientOutSA: false); + List patientList = []; + String error = ''; + @override Widget build(BuildContext context) { return AppScaffold( appBarTitle: "QR Reader", - body: Container(), + body: Center( + child: Container( + margin: EdgeInsets.only(top: SizeConfig.realScreenHeight / 7), + child: FractionallySizedBox( + widthFactor: 0.9, + child: ListView( + children: [ + AppText( + 'Start Scanning', + fontSize: 18, + fontWeight: FontWeight.bold, + textAlign: TextAlign.center, + ), + SizedBox( + height: 7, + ), + AppText( + 'scan Qr code to retrieve patient profile', + fontSize: 14, + fontWeight: FontWeight.w400, + textAlign: TextAlign.center + ), + SizedBox( + height: 15, + ), + Container( + height: 150, + child: Image.asset('assets/images/qr_code.png'), + ), + SizedBox( + height: 35, + ), + Button( + onTap: () { + _scanQrAndGetPatient(context); + }, + title: 'Scan Qr', + loading: isLoading, + icon: Image.asset('assets/images/qr_code_white.png'), + ), + error!=''?Container( + margin: EdgeInsets.only(top: 8), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(6.0), + color: Theme.of(context).errorColor.withOpacity(0.06), + ), + padding: EdgeInsets.symmetric(vertical: 8.0, horizontal: 12.0), + child: Row( + children: [ + Expanded(child: AppText(error ?? "Something went wrong.", color: Theme.of(context).errorColor)), + ], + ), + ):Container(), + Column( + children: patientList.map((item) { + return InkWell( + onTap: (){ + Navigator.of(context).pushNamed(PATIENTS_PROFILE, arguments: { + "patient": item, + }); + }, + child: CardWithBgWidget( + widget: Container( + child: AppText( + '${item.firstName} ${item.lastName}', + fontSize: 2.5 * SizeConfig.textMultiplier, + ), + ), + ), + ); + }).toList() + ) + ], + ), + ), + ), + ), ); } -} \ No newline at end of file + + + _scanQrAndGetPatient(BuildContext context) async { + /// When give qr we will change this method to get data + /// var result = await BarcodeScanner.scan(); + /// int patientID = get from qr result + String patientType = "1"; + setState(() { + isLoading = true; + patientList = []; + }); + patient.PatientID = 3120144; + Provider.of(context, listen: false) + .getPatientList(patient, "1") + .then((response) { + if (response['MessageStatus'] == 1) { + switch (patientType) { + case "0": + if (response['List_MyOutPatient'] != null) { + setState(() { + patientList = ModelResponse.fromJson(response['List_MyOutPatient']).list; + isLoading = false; + }); + } else { + setState(() { + error = 'No patient'; + isLoading = false; + }); + } + break; + case "1": + if (response['List_MyInPatient'] != null) { + setState(() { + patientList = ModelResponse.fromJson(response['List_MyInPatient']).list; + isLoading = false; + error=""; + }); + } else { + setState(() { + error = 'No patient'; + isLoading = false; + }); + break; + } + } + } else { + setState(() { + error = response['ErrorMessage'] ?? response['ErrorEndUserMessage']; + isLoading = false; + }); + } + }); + } +} diff --git a/lib/widgets/shared/app_button.dart b/lib/widgets/shared/app_button.dart new file mode 100644 index 00000000..522255df --- /dev/null +++ b/lib/widgets/shared/app_button.dart @@ -0,0 +1,146 @@ +import 'package:flutter/material.dart'; +import 'package:hexcolor/hexcolor.dart'; + +class Button extends StatefulWidget { + Button({ + Key key, + this.title: "", + this.icon, + this.onTap, + this.loading: false, + }) : super(key: key); + + final String title; + final Widget icon; + final VoidCallback onTap; + final bool loading; + + @override + _ButtonState createState() => _ButtonState(); +} + +class _ButtonState extends State