From 9c7e8e3637c26283d8b52feeb5006aff461f012d Mon Sep 17 00:00:00 2001 From: "Mirza.Shafique" Date: Mon, 11 Oct 2021 16:27:14 +0300 Subject: [PATCH 1/9] Back Button on Landing Page 1 --- lib/config/config.dart | 4 +- lib/pages/landing/landing_page.dart | 25 ++++--- .../vital_sing_chart_and_detials.dart | 14 ++-- lib/widgets/charts/sync_fu_chart.dart | 69 +++++++++++++++++++ pubspec.yaml | 1 + 5 files changed, 96 insertions(+), 17 deletions(-) create mode 100644 lib/widgets/charts/sync_fu_chart.dart diff --git a/lib/config/config.dart b/lib/config/config.dart index 7840b97d..d7ffabcd 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -12,8 +12,8 @@ const PACKAGES_PRODUCTS = '/api/products'; const PACKAGES_CUSTOMER = '/api/customers'; const PACKAGES_SHOPPING_CART = '/api/shopping_cart_items'; const PACKAGES_ORDERS = '/api/orders'; -// const BASE_URL = 'https://uat.hmgwebservices.com/'; -const BASE_URL = 'https://hmgwebservices.com/'; +const BASE_URL = 'https://uat.hmgwebservices.com/'; +// const BASE_URL = 'https://hmgwebservices.com/'; // Pharmacy UAT URLs // const BASE_PHARMACY_URL = 'https://uat.hmgwebservices.com/epharmacy/api/'; diff --git a/lib/pages/landing/landing_page.dart b/lib/pages/landing/landing_page.dart index f96cf7f4..86c158ad 100644 --- a/lib/pages/landing/landing_page.dart +++ b/lib/pages/landing/landing_page.dart @@ -610,21 +610,28 @@ class _LandingPageState extends State with WidgetsBindingObserver { changeCurrentTab(1); }, ), - MedicalProfilePageNew(onTap: (){ - changeCurrentTab(0); - },), - Search(onBackClick: (){ - changeCurrentTab(0); - },), + MedicalProfilePageNew( + onTap: () { + changeCurrentTab(0); + }, + ), + Search( + onBackClick: () { + changeCurrentTab(0); + }, + ), MyFamily( isAppbarVisible: false, onBackClick: () { changeCurrentTab(0); }, ), - ToDo(isShowAppBar: true,onBackClick: (){ - changeCurrentTab(0); - },), + ToDo( + isShowAppBar: true, + onBackClick: () { + changeCurrentTab(0); + }, + ), ], // Please do not remove the BookingOptions from this array ), RobotIcon() diff --git a/lib/pages/medical/vital_sign/vital_sing_chart_and_detials.dart b/lib/pages/medical/vital_sign/vital_sing_chart_and_detials.dart index ea29909b..62498d51 100644 --- a/lib/pages/medical/vital_sign/vital_sing_chart_and_detials.dart +++ b/lib/pages/medical/vital_sign/vital_sing_chart_and_detials.dart @@ -6,6 +6,7 @@ import 'package:diplomaticquarterapp/uitl/utils.dart'; import 'package:diplomaticquarterapp/uitl/utils_new.dart'; import 'package:diplomaticquarterapp/widgets/charts/app_time_series_chart.dart'; import 'package:diplomaticquarterapp/widgets/charts/show_chart.dart'; +import 'package:diplomaticquarterapp/widgets/charts/sync_fu_chart.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -53,12 +54,13 @@ class _VitalSingChartAndDetialsState extends State { shape: cardRadius(12), elevation: 1, margin: EdgeInsets.only(left: 16, top: 16, right: 16, bottom: 8), - child: ShowChart( - title: widget.name, - timeSeries: timeSeriesData, - indexes: timeSeriesData.length ~/ 5.5, - horizontalInterval: 8, - ), + // child: ShowChart( + // title: widget.name, + // timeSeries: timeSeriesData, + // indexes: timeSeriesData.length ~/ 5.5, + // horizontalInterval: 8, + // ), + child: SyncFuChart(), ), Card( shape: cardRadius(12), diff --git a/lib/widgets/charts/sync_fu_chart.dart b/lib/widgets/charts/sync_fu_chart.dart new file mode 100644 index 00000000..ca0a626e --- /dev/null +++ b/lib/widgets/charts/sync_fu_chart.dart @@ -0,0 +1,69 @@ +import 'package:flutter/material.dart'; +import 'package:syncfusion_flutter_charts/charts.dart'; +import 'package:syncfusion_flutter_charts/sparkcharts.dart'; + +class SyncFuChart extends StatelessWidget { + + List<_SalesData> data = [ + _SalesData('Jan', 35), + _SalesData('Feb', 28), + _SalesData('Mar', 34), + _SalesData('Apr', 32), + _SalesData('May', 40), + ]; + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: const Text('Syncfusion Flutter chart'), + ), + body: Column( + children: [ + //Initialize the chart widget + SfCartesianChart( + primaryXAxis: CategoryAxis(), + // Chart title + title: ChartTitle(text: 'Half yearly sales analysis'), + // Enable legend + legend: Legend(isVisible: true), + // Enable tooltip + tooltipBehavior: TooltipBehavior(enable: true), + series: >[ + LineSeries<_SalesData, String>( + dataSource: data, + xValueMapper: (_SalesData sales, _) => sales.year, + yValueMapper: (_SalesData sales, _) => sales.sales, + name: 'Sales', + // Enable data label + dataLabelSettings: DataLabelSettings(isVisible: true)) + ]), + Expanded( + child: Padding( + padding: const EdgeInsets.all(8.0), + //Initialize the spark charts widget + child: SfSparkLineChart.custom( + //Enable the trackball + trackball: SparkChartTrackball(activationMode: SparkChartActivationMode.tap), + //Enable marker + marker: SparkChartMarker(displayMode: SparkChartMarkerDisplayMode.all), + //Enable data label + labelDisplayMode: SparkChartLabelDisplayMode.all, + xValueMapper: (int index) => data[index].year, + yValueMapper: (int index) => data[index].sales, + dataCount: 5, + ), + ), + ) + ], + ), + ); + } +} + +class _SalesData { + _SalesData(this.year, this.sales); + + final String year; + final double sales; +} diff --git a/pubspec.yaml b/pubspec.yaml index c5541181..e1732307 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -104,6 +104,7 @@ dependencies: # Calendar # table_calendar: ^2.3.0 syncfusion_flutter_calendar: ^18.4.49 + syncfusion_flutter_charts: any # SVG Images flutter_svg: ^0.18.0 From 0a9d0e5eaa3c2f8bee3d982959ec1e4e18b49f91 Mon Sep 17 00:00:00 2001 From: haroon amjad Date: Mon, 11 Oct 2021 16:27:32 +0300 Subject: [PATCH 2/9] fixes --- .../medical/prescriptions_service.dart | 2 +- .../medical/prescriptions_view_model.dart | 19 ++- .../AlHabibMedicalService/h2o/h2o_page.dart | 160 ++++-------------- 3 files changed, 42 insertions(+), 139 deletions(-) diff --git a/lib/core/service/medical/prescriptions_service.dart b/lib/core/service/medical/prescriptions_service.dart index ce91be53..fa2a24c6 100644 --- a/lib/core/service/medical/prescriptions_service.dart +++ b/lib/core/service/medical/prescriptions_service.dart @@ -34,10 +34,10 @@ class PrescriptionsService extends BaseService { } Future getPrescriptionsOrders() async { + prescriptionsOrderList.clear(); Map body = Map(); body['isDentalAllowedBackend'] = false; await baseAppClient.post(GET_PRESCRIPTIONS_ALL_ORDERS, onSuccess: (dynamic response, int statusCode) { - prescriptionsOrderList.clear(); response['PatientER_GetPatientAllPresOrdersList'].forEach((prescriptionsOrder) { prescriptionsOrderList.add(PrescriptionsOrder.fromJson(prescriptionsOrder)); }); diff --git a/lib/core/viewModels/medical/prescriptions_view_model.dart b/lib/core/viewModels/medical/prescriptions_view_model.dart index 38009f45..0c1fafdf 100644 --- a/lib/core/viewModels/medical/prescriptions_view_model.dart +++ b/lib/core/viewModels/medical/prescriptions_view_model.dart @@ -77,14 +77,17 @@ class PrescriptionsViewModel extends BaseViewModel { } getPrescriptionsOrders({bool showLoading = false}) async { - if (showLoading) setState(ViewState.Busy); - await _prescriptionsService.getPrescriptionsOrders(); - if (_prescriptionsService.hasError) { - error = _prescriptionsService.error; - setState(ViewState.ErrorLocal); - } else { - setState(ViewState.Idle); - } + // print(showLoading); + setState(ViewState.Busy); + Future.delayed(new Duration(milliseconds: 300)).then((value) async { + await _prescriptionsService.getPrescriptionsOrders(); + if (_prescriptionsService.hasError) { + error = _prescriptionsService.error; + setState(ViewState.ErrorLocal); + } else { + setState(ViewState.Idle); + } + }); } setFilterType(FilterType filterType) { diff --git a/lib/pages/AlHabibMedicalService/h2o/h2o_page.dart b/lib/pages/AlHabibMedicalService/h2o/h2o_page.dart index 982b9044..9478ae38 100644 --- a/lib/pages/AlHabibMedicalService/h2o/h2o_page.dart +++ b/lib/pages/AlHabibMedicalService/h2o/h2o_page.dart @@ -1,20 +1,15 @@ import 'dart:ui'; -import 'package:diplomaticquarterapp/config/config.dart'; import 'package:diplomaticquarterapp/core/model/ImagesInfo.dart'; import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/H2O_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; +import 'package:diplomaticquarterapp/extensions/string_extensions.dart'; import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/h2o/h20_setting.dart'; import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/h2o/month_page.dart'; import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/h2o/today_page.dart'; import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/h2o/week_page.dart'; -import 'package:diplomaticquarterapp/pages/ToDoList/ToDo.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart'; -import 'package:diplomaticquarterapp/pages/medical/medical_profile_page_new.dart'; -import 'package:diplomaticquarterapp/routes.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; -import 'package:diplomaticquarterapp/widgets/bottom_navigation/bottom_nav_bar.dart'; -import 'package:diplomaticquarterapp/extensions/string_extensions.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:flutter/cupertino.dart'; @@ -77,132 +72,37 @@ class _H2OPageState extends State with SingleTickerProviderStateMixin { }, ), ], - body: Scaffold( - // extendBodyBehindAppBar: true, - // appBar: PreferredSize( - // preferredSize: Size.fromHeight(65.0), - // child: Stack( - // children: [ - // Positioned( - // bottom: 1, - // left: 0, - // right: 0, - // child: BackdropFilter( - // filter: ImageFilter.blur(sigmaX: 10, sigmaY: 10), - // child: Container( - // color: Theme.of(context).scaffoldBackgroundColor.withOpacity(0.8), - // height: 70.0, - // ), - // ), - // ), - // Center( - // child: Container( - // height: 60.0, - // alignment: Alignment.center, - // // margin: EdgeInsets.only(top: 10.0), - // // width: MediaQuery.of(context).size.width * 0.9, - // - // child: TabBar( - // isScrollable: false, - // controller: _tabController, - // indicatorWeight: 5.0, - // indicatorSize: TabBarIndicatorSize.tab, - // indicatorColor: Colors.red[800], - // labelColor: Theme.of(context).primaryColor, - // labelPadding: EdgeInsets.only(top: 4.0, left: 10.0, right: 13.0), - // unselectedLabelColor: Colors.grey[800], - // tabs: [ - // Container( - // width: MediaQuery.of(context).size.width * 0.28, - // child: Center( - // child: Texts(TranslationBase.of(context).today), - // ), - // ), - // Container( - // width: MediaQuery.of(context).size.width * 0.28, - // child: Center( - // child: Texts(TranslationBase.of(context).week), - // ), - // ), - // Container( - // width: MediaQuery.of(context).size.width * 0.28, - // child: Center( - // child: Texts(TranslationBase.of(context).month), - // ), - // ), - // ], - // ), - // ), - // ), - // ], - // ), - // ), - // backgroundColor: Colors.white, - body: Column( - children: [ - TabBar( + body: Column( + children: [ + TabBar( + controller: _tabController, + indicatorWeight: 3.0, + indicatorSize: TabBarIndicatorSize.tab, + labelColor: Color(0xff2B353E), + unselectedLabelColor: Color(0xff575757), + labelPadding: EdgeInsets.only(top: 15, bottom: 13, left: 20, right: 20), + labelStyle: TextStyle( + fontFamily: projectViewModel.isArabic ? 'Cairo' : 'Poppins', + fontSize: 16, + fontWeight: FontWeight.w600, + letterSpacing: -0.48, + ), + unselectedLabelStyle: TextStyle( + fontFamily: projectViewModel.isArabic ? 'Cairo' : 'Poppins', + fontSize: 16, + fontWeight: FontWeight.w600, + letterSpacing: -0.48, + ), + tabs: [Text(TranslationBase.of(context).today), Text(TranslationBase.of(context).week), Text(TranslationBase.of(context).month.toLowerCase().capitalizeFirstofEach)], + ), + Expanded( + child: TabBarView( + physics: BouncingScrollPhysics(), controller: _tabController, - indicatorWeight: 3.0, - indicatorSize: TabBarIndicatorSize.tab, - labelColor: Color(0xff2B353E), - unselectedLabelColor: Color(0xff575757), - labelPadding: EdgeInsets.only(top: 15, bottom: 13, left: 20, right: 20), - labelStyle: TextStyle( - fontFamily: projectViewModel.isArabic ? 'Cairo' : 'Poppins', - fontSize: 16, - fontWeight: FontWeight.w600, - letterSpacing: -0.48, - ), - unselectedLabelStyle: TextStyle( - fontFamily: projectViewModel.isArabic ? 'Cairo' : 'Poppins', - fontSize: 16, - fontWeight: FontWeight.w600, - letterSpacing: -0.48, - ), - tabs: [Text(TranslationBase.of(context).today), Text(TranslationBase.of(context).week), Text(TranslationBase.of(context).month.toLowerCase().capitalizeFirstofEach)], + children: [TodayPage(), WeekPage(), MonthPage()], ), - Expanded( - child: TabBarView( - physics: BouncingScrollPhysics(), - controller: _tabController, - children: [TodayPage(), WeekPage(), MonthPage()], - ), - ) - ], - ), - bottomNavigationBar: BottomNavBar( - changeIndex: (index) { - if (index == 0) { - IS_VOICE_COMMAND_CLOSED = false; - } else if (index == 1) { - Navigator.push( - context, - FadePage( - page: AppScaffold( - appBarTitle: TranslationBase.of(context).medicalProfile, - isShowAppBar: true, - showHomeAppBarIcon: false, - appBarIcons: [ - IconButton( - icon: Image.asset("assets/images/new-design/setting_gear_icon.png"), - color: Colors.white, - onPressed: () => Navigator.of(context).pushNamed( - SETTINGS, - ), - ), - ], - body: MedicalProfilePageNew()))); - } else if (index == 2) { - Navigator.of(context).pushNamedAndRemoveUntil(HOME, (Route route) => false); - } else if (index == 3) { - Navigator.of(context).pushNamed(MY_FAMILIY); - } else if (index == 4) { - Navigator.push(context, FadePage(page: ToDo(isShowAppBar: false))); - } - }, - showHomeIcon: true, - index: 0, - ), + ) + ], ), ), ); From e62e3dae1bfa14cf3a9bfb41ddbaddc37476afa6 Mon Sep 17 00:00:00 2001 From: haroon amjad Date: Mon, 11 Oct 2021 18:42:03 +0300 Subject: [PATCH 3/9] CMC APIs coverting to RC --- lib/config/config.dart | 5 + .../cmc_insert_pres_order_request_model.dart | 13 +- .../get_cmc_service_response_model.dart | 72 ++- .../AlHabibMedicalService/cmc_service.dart | 38 +- lib/core/service/client/base_app_client.dart | 87 +-- .../AlHabibMedicalService/cmc_view_model.dart | 17 +- .../NewCMC/new_cmc_page.dart | 8 +- .../NewCMC/new_cmc_step_one_page.dart | 69 +- .../NewCMC/new_cmc_step_three_page.dart | 2 +- lib/pages/MyAppointments/SchedulePage.dart | 597 +++++++++++++----- 10 files changed, 586 insertions(+), 322 deletions(-) diff --git a/lib/config/config.dart b/lib/config/config.dart index 7840b97d..f12c9191 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -438,6 +438,11 @@ const PHARMACY_MAKE_REVIEW = 'epharmacy/api/insertreviews'; const BLOOD_DONATION_REGISTER_BLOOD_TYPE = 'Services/PatientVarification.svc/REST/BloodDonation_RegisterBloodType'; const ADD_USER_AGREEMENT_FOR_BLOOD_DONATION = 'Services/PatientVarification.svc/REST/AddUserAgreementForBloodDonation'; + +// CMC RC SERVICES +const GET_ALL_CMC_SERVICES_RC = 'rc/api/cmc/getallcmc'; +const ADD_CMC_ORDER_RC = 'rc/api/cmc/add'; + //Pharmacy wishlist const GET_WISHLIST = "shopping_cart_items/"; const DELETE_WISHLIST = "delete_shopping_cart_item_by_product?customer_id="; diff --git a/lib/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_insert_pres_order_request_model.dart b/lib/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_insert_pres_order_request_model.dart index 534988a7..8cece1f5 100644 --- a/lib/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_insert_pres_order_request_model.dart +++ b/lib/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_insert_pres_order_request_model.dart @@ -73,20 +73,21 @@ class CMCInsertPresOrderRequestModel { data['LanguageID'] = this.languageID; data['IPAdress'] = this.iPAdress; data['generalid'] = this.generalid; - data['PatientOutSA'] = this.patientOutSA; + data['patientOutSa'] = this.patientOutSA; + data['isOutPatient'] = this.patientOutSA == 0 ? false : true; data['SessionID'] = this.sessionID; data['isDentalAllowedBackend'] = this.isDentalAllowedBackend; data['DeviceTypeID'] = this.deviceTypeID; - data['PatientID'] = this.patientID; + data['patientId'] = this.patientID.toString(); data['TokenID'] = this.tokenID; data['PatientTypeID'] = this.patientTypeID; data['PatientType'] = this.patientType; - data['Latitude'] = this.latitude; - data['Longitude'] = this.longitude; - data['CreatedBy'] = this.createdBy; + data['latitude'] = this.latitude; + data['longitude'] = this.longitude; + // data['CreatedBy'] = this.createdBy; data['OrderServiceID'] = this.orderServiceID; if (this.patientERCMCInsertServicesList != null) { - data['PatientER_CMC_InsertServicesList'] = + data['procedures'] = this.patientERCMCInsertServicesList.map((v) => v.toJson()).toList(); } return data; diff --git a/lib/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/get_cmc_service_response_model.dart b/lib/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/get_cmc_service_response_model.dart index 5f356e2b..42d2fb99 100644 --- a/lib/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/get_cmc_service_response_model.dart +++ b/lib/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/get_cmc_service_response_model.dart @@ -1,44 +1,56 @@ class GetCMCServicesResponseModel { - String description; - String descriptionN; - int iD; - bool isActive; + int id; + String serviceID; + int orderServiceID; + String text; + String textN; dynamic price; - int serviceID; - dynamic totalPrice; - dynamic vAT; + dynamic priceVAT; + dynamic priceTotal; + bool isEnabled; + int orderId; + int quantity; GetCMCServicesResponseModel( - {this.description, - this.descriptionN, - this.iD, - this.isActive, - this.price, + {this.id, this.serviceID, - this.totalPrice, - this.vAT}); + this.orderServiceID, + this.text, + this.textN, + this.price, + this.priceVAT, + this.priceTotal, + this.isEnabled, + this.orderId, + this.quantity}); GetCMCServicesResponseModel.fromJson(Map json) { - description = json['Description']; - descriptionN = json['DescriptionN']; - iD = json['ID']; - isActive = json['IsActive']; - price = json['Price']; - serviceID = json['ServiceID']; - totalPrice = json['TotalPrice']; - vAT = json['VAT']; + id = json['id']; + serviceID = json['serviceID']; + orderServiceID = json['orderServiceID']; + text = json['text']; + textN = json['textN']; + price = json['price']; + priceVAT = json['priceVAT']; + priceTotal = json['priceTotal']; + isEnabled = json['isEnabled']; + orderId = json['orderId']; + quantity = json['quantity']; } Map toJson() { final Map data = new Map(); - data['Description'] = this.description; - data['DescriptionN'] = this.descriptionN; - data['ID'] = this.iD; - data['IsActive'] = this.isActive; - data['Price'] = this.price; - data['ServiceID'] = this.serviceID; - data['TotalPrice'] = this.totalPrice; - data['VAT'] = this.vAT; + data['id'] = this.id; + data['serviceID'] = this.serviceID; + data['orderServiceID'] = this.orderServiceID; + data['text'] = this.text; + data['textN'] = this.textN; + data['price'] = this.price; + data['priceVAT'] = this.priceVAT; + data['priceTotal'] = this.priceTotal; + data['isEnabled'] = this.isEnabled; + data['orderId'] = this.orderId; + data['quantity'] = this.quantity; return data; } } diff --git a/lib/core/service/AlHabibMedicalService/cmc_service.dart b/lib/core/service/AlHabibMedicalService/cmc_service.dart index 012e4d90..b79b6fdb 100644 --- a/lib/core/service/AlHabibMedicalService/cmc_service.dart +++ b/lib/core/service/AlHabibMedicalService/cmc_service.dart @@ -23,17 +23,30 @@ class CMCService extends BaseService { bool isOrderUpdated; Future getCMCAllServices() async { - GetCMCServicesRequestModel getCMCServicesRequestModel = new GetCMCServicesRequestModel(genderID: authenticatedUserObject.user.gender, identificationNo: authenticatedUserObject.user.patientIdentificationNo); + GetCMCServicesRequestModel getCMCServicesRequestModel = + new GetCMCServicesRequestModel(genderID: authenticatedUserObject.user.gender, identificationNo: authenticatedUserObject.user.patientIdentificationNo); hasError = false; - await baseAppClient.post(HHC_GET_ALL_CMC_SERVICES, onSuccess: (dynamic response, int statusCode) { + + // RC IMPLEMENTATION + await baseAppClient.post(GET_ALL_CMC_SERVICES_RC + "?patientID=" + user.patientID.toString(), isAllowAny: true, onSuccess: (dynamic response, int statusCode) { cmcAllServicesList.clear(); - response['PatientER_CMC_GetAllServicesList'].forEach((data) { + response.forEach((data) { cmcAllServicesList.add(GetCMCServicesResponseModel.fromJson(data)); }); }, onFailure: (String error, int statusCode) { hasError = true; super.error = error; - }, body: getCMCServicesRequestModel.toJson()); + }, body: {}); + + // await baseAppClient.post(HHC_GET_ALL_CMC_SERVICES, onSuccess: (dynamic response, int statusCode) { + // cmcAllServicesList.clear(); + // response['PatientER_CMC_GetAllServicesList'].forEach((data) { + // cmcAllServicesList.add(GetCMCServicesResponseModel.fromJson(data)); + // }); + // }, onFailure: (String error, int statusCode) { + // hasError = true; + // super.error = error; + // }, body: getCMCServicesRequestModel.toJson()); } Future getCmcAllPresOrders() async { @@ -87,12 +100,25 @@ class CMCService extends BaseService { }, body: updatePresOrderRequestModel.toJson()); } + Future insertCMCOrderRC({CMCInsertPresOrderRequestModel order}) async { + hasError = false; + String reqId = ""; + await baseAppClient.post(ADD_CMC_ORDER_RC, onSuccess: (dynamic response, int statusCode) { + isOrderUpdated = true; + reqId = response['RequestNo'].toString(); + }, onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, body: order.toJson()); + return reqId; + } + Future insertPresPresOrder({CMCInsertPresOrderRequestModel order}) async { hasError = false; - String reqId=""; + String reqId = ""; await baseAppClient.post(PATIENT_ER_INSERT_PRES_ORDER, onSuccess: (dynamic response, int statusCode) { isOrderUpdated = true; - reqId=response['RequestNo'].toString(); + reqId = response['RequestNo'].toString(); }, onFailure: (String error, int statusCode) { hasError = true; super.error = error; diff --git a/lib/core/service/client/base_app_client.dart b/lib/core/service/client/base_app_client.dart index b0c0925f..a9d03fd5 100644 --- a/lib/core/service/client/base_app_client.dart +++ b/lib/core/service/client/base_app_client.dart @@ -126,60 +126,65 @@ class BaseAppClient { } else { var decoded = utf8.decode(response.bodyBytes); var parsed = json.decode(utf8.decode(response.bodyBytes)); - if (parsed['Response_Message'] != null) { + + if (isAllowAny) { onSuccess(parsed, statusCode); } else { - if (parsed['ErrorType'] == 4) { - navigateToAppUpdate(AppGlobal.context, parsed['ErrorEndUserMessage']); - } - if (parsed['ErrorType'] == 2) { - await logout(); - } - if (isAllowAny) { + if (parsed['Response_Message'] != null) { onSuccess(parsed, statusCode); - } else if (parsed['IsAuthenticated'] == null) { - if (parsed['isSMSSent'] == true) { - onSuccess(parsed, statusCode); - } else if (parsed['MessageStatus'] == 1) { - onSuccess(parsed, statusCode); - } else if (parsed['Result'] == 'OK') { + } else { + if (parsed['ErrorType'] == 4) { + navigateToAppUpdate(AppGlobal.context, parsed['ErrorEndUserMessage']); + } + if (parsed['ErrorType'] == 2) { + await logout(); + } + if (isAllowAny) { onSuccess(parsed, statusCode); - } else { - if (parsed != null) { + } else if (parsed['IsAuthenticated'] == null) { + if (parsed['isSMSSent'] == true) { + onSuccess(parsed, statusCode); + } else if (parsed['MessageStatus'] == 1) { + onSuccess(parsed, statusCode); + } else if (parsed['Result'] == 'OK') { onSuccess(parsed, statusCode); } else { - onFailure(parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], statusCode); - logout(); + if (parsed != null) { + onSuccess(parsed, statusCode); + } else { + onFailure(parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], statusCode); + logout(); + } } - } - } else if (parsed['MessageStatus'] == 1 || parsed['SMSLoginRequired'] == true) { - onSuccess(parsed, statusCode); - } else if (parsed['MessageStatus'] == 2 && parsed['IsAuthenticated']) { - if (parsed['SameClinicApptList'] != null) { + } else if (parsed['MessageStatus'] == 1 || parsed['SMSLoginRequired'] == true) { onSuccess(parsed, statusCode); - } else { - if (parsed['message'] == null && parsed['ErrorEndUserMessage'] == null) { - if (parsed['ErrorSearchMsg'] == null) { - onFailure("Server Error found with no available message", statusCode); + } else if (parsed['MessageStatus'] == 2 && parsed['IsAuthenticated']) { + if (parsed['SameClinicApptList'] != null) { + onSuccess(parsed, statusCode); + } else { + if (parsed['message'] == null && parsed['ErrorEndUserMessage'] == null) { + if (parsed['ErrorSearchMsg'] == null) { + onFailure("Server Error found with no available message", statusCode); + } else { + onFailure(parsed['ErrorSearchMsg'], statusCode); + } } else { - onFailure(parsed['ErrorSearchMsg'], statusCode); + onFailure(parsed['message'] ?? parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], statusCode); } - } else { - onFailure(parsed['message'] ?? parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], statusCode); } } - } - // else if (!parsed['IsAuthenticated']) { - // await logout(); - // } - else { - if (parsed['SameClinicApptList'] != null) { - onSuccess(parsed, statusCode); - } else { - if (parsed['message'] != null) { - onFailure(parsed['message'] ?? parsed['message'], statusCode); + // else if (!parsed['IsAuthenticated']) { + // await logout(); + // } + else { + if (parsed['SameClinicApptList'] != null) { + onSuccess(parsed, statusCode); } else { - onFailure(parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], statusCode); + if (parsed['message'] != null) { + onFailure(parsed['message'] ?? parsed['message'], statusCode); + } else { + onFailure(parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], statusCode); + } } } } diff --git a/lib/core/viewModels/AlHabibMedicalService/cmc_view_model.dart b/lib/core/viewModels/AlHabibMedicalService/cmc_view_model.dart index de007d67..8080ddec 100644 --- a/lib/core/viewModels/AlHabibMedicalService/cmc_view_model.dart +++ b/lib/core/viewModels/AlHabibMedicalService/cmc_view_model.dart @@ -38,9 +38,6 @@ class CMCViewModel extends BaseViewModel { Future getCMCAllServices() async { await _cMCService.getCMCAllServices(); - CMCGetItemsRequestModel cMCGetItemsRequestModel = new CMCGetItemsRequestModel(checkupType: cmcAllServicesList[0].iD); - - await getCheckupItems(cMCGetItemsRequestModel: cMCGetItemsRequestModel, isFirst: true); if (_cMCService.hasError) { error = _cMCService.error; setState(ViewState.Error); @@ -92,7 +89,6 @@ class CMCViewModel extends BaseViewModel { await _cMCService.getOrderDetailByOrderID(getOrderDetailByOrderIDRequestModel); } - //TODO check it in uat Future insertPresPresOrder({CMCInsertPresOrderRequestModel order}) async { setState(ViewState.Busy); order.createdBy = user.patientID; @@ -104,7 +100,20 @@ class CMCViewModel extends BaseViewModel { } else { getCmcAllPresOrders(); } + return requestId; + } + Future insertCMCOrderRC({CMCInsertPresOrderRequestModel order}) async { + setState(ViewState.Busy); + order.createdBy = user.patientID; + order.orderServiceID = OrderService.Comprehensive_Medical_Checkup.getIdOrderService(); + String requestId = await _cMCService.insertCMCOrderRC(order: order); + if (_cMCService.hasError) { + error = _cMCService.error; + setState(ViewState.ErrorLocal); + } else { + getCmcAllPresOrders(); + } return requestId; } diff --git a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_page.dart b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_page.dart index 859580ef..5093729c 100644 --- a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_page.dart +++ b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_page.dart @@ -46,11 +46,11 @@ class _NewCMCPageState extends State with TickerProviderStateMixin { patientERCMCInsertServicesList = new PatientERCMCInsertServicesList( price: widget.model.cmcAllServicesList[0].price, serviceID: widget.model.cmcAllServicesList[0].serviceID.toString(), - selectedServiceName: widget.model.cmcAllServicesList[0].description, - selectedServiceNameAR: widget.model.cmcAllServicesList[0].descriptionN, + selectedServiceName: widget.model.cmcAllServicesList[0].text, + selectedServiceNameAR: widget.model.cmcAllServicesList[0].textN, recordID: 1, - totalPrice: widget.model.cmcAllServicesList[0].totalPrice, - vAT: widget.model.cmcAllServicesList[0].vAT); + totalPrice: widget.model.cmcAllServicesList[0].priceTotal, + vAT: widget.model.cmcAllServicesList[0].priceVAT); cMCInsertPresOrderRequestModel = new CMCInsertPresOrderRequestModel(patientERCMCInsertServicesList: [patientERCMCInsertServicesList]); } diff --git a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_step_one_page.dart b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_step_one_page.dart index 32aaa898..5e2b0498 100644 --- a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_step_one_page.dart +++ b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_step_one_page.dart @@ -63,18 +63,18 @@ class _NewCMCStepOnePageState extends State { return Row( children: [ Radio( - value: widget.model.cmcAllServicesList[index].serviceID, + value: num.tryParse(widget.model.cmcAllServicesList[index].serviceID), activeColor: Colors.red[800], onChanged: (newValue) async { selectedItem = index; PatientERCMCInsertServicesList patientERCMCInsertServicesList = new PatientERCMCInsertServicesList( price: widget.model.cmcAllServicesList[index].price, - serviceID: widget.model.cmcAllServicesList[index].serviceID.toString(), - selectedServiceName: widget.model.cmcAllServicesList[index].description, - selectedServiceNameAR: widget.model.cmcAllServicesList[index].descriptionN, + serviceID: widget.model.cmcAllServicesList[index].serviceID, + selectedServiceName: widget.model.cmcAllServicesList[index].text, + selectedServiceNameAR: widget.model.cmcAllServicesList[index].textN, recordID: 1, - totalPrice: widget.model.cmcAllServicesList[index].totalPrice, - vAT: widget.model.cmcAllServicesList[index].vAT); + totalPrice: widget.model.cmcAllServicesList[index].priceTotal, + vAT: widget.model.cmcAllServicesList[index].priceVAT); setState(() { widget.cMCInsertPresOrderRequestModel.patientERCMCInsertServicesList = [patientERCMCInsertServicesList]; }); @@ -93,7 +93,7 @@ class _NewCMCStepOnePageState extends State { bottom: 20, ), child: Text( - projectViewModel.isArabic ? widget.model.cmcAllServicesList[index].descriptionN : widget.model.cmcAllServicesList[index].description, + projectViewModel.isArabic ? widget.model.cmcAllServicesList[index].textN : widget.model.cmcAllServicesList[index].text, style: TextStyle( fontSize: 14, fontWeight: FontWeight.w600, @@ -135,50 +135,6 @@ class _NewCMCStepOnePageState extends State { ), ], ), - // Card( - // shape: cardRadius(12), - // elevation: 4, - // child: Container( - // width: double.infinity, - // child: Column( - // crossAxisAlignment: CrossAxisAlignment.start, - // children: [ - // Padding( - // padding: const EdgeInsets.only(left: 12, right: 12, top: 12), - // child: Text( - // TranslationBase.of(context).coveredService, - // style: TextStyle( - // fontSize: 14, - // fontWeight: FontWeight.w600, - // letterSpacing: -0.45, - // ), - // ), - // ), - // ListView.separated( - // itemBuilder: (context, index) { - // return Padding( - // padding: const EdgeInsets.all(12.0), - // child: Text( - // widget.model.checkupItems[index].itemName, - // style: TextStyle( - // fontSize: 12, - // fontWeight: FontWeight.w600, - // letterSpacing: -0.45, - // ), - // ), - // ); - // }, - // separatorBuilder: (context, index) { - // return mDivider(Colors.grey); - // }, - // physics: NeverScrollableScrollPhysics(), - // shrinkWrap: true, - // itemCount: widget.model.checkupItems.length, - // ), - // ], - // ), - // ), - // ), ], ), ), @@ -194,13 +150,16 @@ class _NewCMCStepOnePageState extends State { PatientERCMCInsertServicesList patientERCMCInsertServicesList = new PatientERCMCInsertServicesList( price: widget.model.cmcAllServicesList[selectedItem].price, serviceID: widget.model.cmcAllServicesList[selectedItem].serviceID.toString(), - selectedServiceName: widget.model.cmcAllServicesList[selectedItem].description, - selectedServiceNameAR: widget.model.cmcAllServicesList[selectedItem].descriptionN, + selectedServiceName: widget.model.cmcAllServicesList[selectedItem].text, + selectedServiceNameAR: widget.model.cmcAllServicesList[selectedItem].textN, recordID: 1, - totalPrice: widget.model.cmcAllServicesList[selectedItem].totalPrice, - vAT: widget.model.cmcAllServicesList[selectedItem].vAT, + totalPrice: widget.model.cmcAllServicesList[selectedItem].priceTotal, + vAT: widget.model.cmcAllServicesList[selectedItem].priceVAT, ); + widget.cMCInsertPresOrderRequestModel.patientID = projectViewModel.user.patientID; + widget.cMCInsertPresOrderRequestModel.patientOutSA = projectViewModel.user.outSA; + widget.cMCInsertPresOrderRequestModel.patientERCMCInsertServicesList = [patientERCMCInsertServicesList]; await widget.model.getCustomerInfo(); // if (widget.model.state == ViewState.ErrorLocal) { diff --git a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_step_three_page.dart b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_step_three_page.dart index c314812c..a1b7ccee 100644 --- a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_step_three_page.dart +++ b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_step_three_page.dart @@ -202,7 +202,7 @@ class _NewCMCStepThreePageState extends State { color: CustomColors.green, onTap: () async { GifLoaderDialogUtils.showMyDialog(context); - String requestId = await widget.model.insertPresPresOrder(order: widget.cmcInsertPresOrderRequestModel); + String requestId = await widget.model.insertCMCOrderRC(order: widget.cmcInsertPresOrderRequestModel); GifLoaderDialogUtils.hideDialog(context); if (widget.model.state != ViewState.ErrorLocal) { //show scuccess dialog diff --git a/lib/pages/MyAppointments/SchedulePage.dart b/lib/pages/MyAppointments/SchedulePage.dart index 2287cff5..92fbeedf 100644 --- a/lib/pages/MyAppointments/SchedulePage.dart +++ b/lib/pages/MyAppointments/SchedulePage.dart @@ -1,33 +1,30 @@ +import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; +import 'package:diplomaticquarterapp/core/viewModels/medical/medical_view_model.dart'; +import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; +import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart'; import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart'; -import 'package:diplomaticquarterapp/pages/MyAppointments/AppointmentDetails.dart'; - import 'package:diplomaticquarterapp/pages/MyAppointments/models/DoctorScheduleResponse.dart'; import 'package:diplomaticquarterapp/pages/MyAppointments/widgets/indicator.dart'; -import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart'; -import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; -import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; -import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; -import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; -import 'package:flutter/material.dart'; -import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; -import 'package:diplomaticquarterapp/core/viewModels/medical/medical_view_model.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart'; +import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart'; import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; -import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; -import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; -import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; +import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; +import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; class SchedulePage extends StatefulWidget { DoctorList doctorList; AppoitmentAllHistoryResultList appo; + SchedulePage({ this.appo, this.doctorList, }); + @override _SchedulePageState createState() => _SchedulePageState(); } @@ -45,6 +42,7 @@ class _SchedulePageState extends State { bool isPageChange = false; AppSharedPreferences sharedPref = AppSharedPreferences(); + @override void initState() { this.doctorList = widget.doctorList; @@ -56,169 +54,132 @@ class _SchedulePageState extends State { Widget build(BuildContext context) { ProjectViewModel projectViewModel = Provider.of(context); return BaseView( - onModelReady: (model) => model.getDoctorSchedule(doctorList), - allowAny: true, - builder: (_, model, widget) => BaseView( - onModelReady: (model2) => model2.getFreeSlots(doctorList), - allowAny: true, - builder: (_, model2, widget2) { - if (model2.freeSlots.length > 0 && isPageChange == false && model2.state == ViewState.Idle) { - this.freeSlots = model2.freeSlots; - this.doctorScheduleResponse = model.getDoctorScheduleList; + onModelReady: (model) => model.getDoctorSchedule(doctorList), + allowAny: true, + builder: (_, model, widget) => BaseView( + onModelReady: (model2) => model2.getFreeSlots(doctorList), + allowAny: true, + builder: (_, model2, widget2) { + if (model2.freeSlots.length > 0 && isPageChange == false && model2.state == ViewState.Idle) { + this.freeSlots = model2.freeSlots; + this.doctorScheduleResponse = model.getDoctorScheduleList; - this.generateWeeksSchedules(); - } else if (model2.freeSlots.length == 0 && model2.state == ViewState.Idle) { - AppToast.showErrorToast(message: TranslationBase.of(context).emptySchedule); - Navigator.pop(context); - } - return AppScaffold( - appBarTitle: TranslationBase.of(context).schedule, - showNewAppBar: true, - showNewAppBarTitle: true, - isShowAppBar: true, - backgroundColor: Color(0xffF7F7F7), - baseViewModel: model2, - isShowDecPage: false, - body: Column( - children: [ - SizedBox(height: 21), - PageViewIndicator( - isActive: true, - currentPage: this.currentPage, - length: weeks.length, - ), - Expanded( - child: PageView.builder( - controller: _pageController, - itemCount: weeks.length, - onPageChanged: (index) { - setState(() { - isPageChange = true; - this.currentPage = index.toDouble(); - }); - }, - itemBuilder: (context, index) { - return ListView.separated( - itemCount: weeks[index].length, - padding: EdgeInsets.all(21), - separatorBuilder: (context, index) => SizedBox(height: 12), - itemBuilder: (context, index2) { - bool isToday = DateUtil.convertStringToDate(weeks[index][index2]['Date']).toString().substring(0, 10) == DateTime.now().toString().substring(0, 10); - Color toDayColor = isToday ? Color(0xff359846) : Colors.white; - - return InkWell( - onTap: () { - openBookAppointment(weeks[index][index2]); + this.generateWeeksSchedules(); + } else if (model2.freeSlots.length == 0 && model2.state == ViewState.Idle) { + AppToast.showErrorToast(message: TranslationBase.of(context).emptySchedule); + Navigator.pop(context); + } + return AppScaffold( + appBarTitle: TranslationBase.of(context).schedule, + showNewAppBar: true, + showNewAppBarTitle: true, + isShowAppBar: true, + baseViewModel: model2, + isShowDecPage: false, + body: SizedBox( + height: MediaQuery.of(context).size.height, + child: Stack( + children: [ + Container( + margin: EdgeInsets.only(top: 40), + child: PageView.builder( + controller: _pageController, + itemCount: weeks.length, + onPageChanged: (index) { + setState(() { + isPageChange = true; + this.currentPage = index.toDouble(); + }); + }, + itemBuilder: (context, index) { + return Container( + child: ListView.builder( + itemCount: weeks[index].length, + itemBuilder: (context, index2) => InkWell( + onTap: () { + openBookAppointment(weeks[index][index2]); + }, + child: Row( + children: [ + Expanded( + flex: 1, + child: Padding( + padding: projectViewModel.isArabic ? EdgeInsets.only(right: 20) : EdgeInsets.only(left: 20), + child: Row(children: [ + Column( + children: [ + Texts( + weeks[index][index2]['DayName'], + fontSize: 13, + fontWeight: projectViewModel.isArabic ? FontWeight.w600 : FontWeight.w500, + ), + Texts( + getDayMonths( + DateUtil.convertStringToDate( + weeks[index][index2]['Date'], + ), + ), + fontWeight: FontWeight.bold, + fontSize: 18, + ) + ], + ) + ])), + ), + Expanded( + flex: 3, + child: ClipRRect( + borderRadius: const BorderRadius.all(Radius.circular(20.0)), + child: Container( + padding: EdgeInsets.only(left: 10, right: 10, top: 15, bottom: 20), + margin: EdgeInsets.only(left: 20, right: 20, top: 7, bottom: 7), + decoration: BoxDecoration(boxShadow: [ + DateUtil.convertStringToDate(weeks[index][index2]['Date']).toString().substring(0, 10) == DateTime.now().toString().substring(0, 10) + ? BoxShadow(color: Colors.green, offset: Offset(projectViewModel.isArabic ? 5 : -5, 0)) + : BoxShadow( + color: Colors.grey[100], + blurRadius: 5, + spreadRadius: 4, + offset: Offset(0, 10), + ), + ], borderRadius: const BorderRadius.all(Radius.circular(10.0)), color: Colors.white), + child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ + DateUtil.convertStringToDate(weeks[index][index2]['Date']).toString().substring(0, 10) == DateTime.now().toString().substring(0, 10) + ? Texts( + TranslationBase.of(context).today, + color: Colors.green, + fontWeight: FontWeight.w600, + fontSize: 12, + marginTop: 0, + ) + : SizedBox(), + Row( + children: [ + Expanded( + child: Text( + weeks[index][index2]['WorkingHours'], + style: TextStyle( + fontWeight: FontWeight.w600, + ), + ), + ), + Icon(Icons.arrow_forward, size: 16.0), + ], + ) + ]))), + ), + ], + )))); }, - child: Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Expanded( - flex: 1, - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - weeks[index][index2]['DayName'], - style: TextStyle( - fontSize: 13, - fontWeight: FontWeight.w600, - color: Color(0xff2E303A), - letterSpacing: -0.52, - ), - ), - Text( - getDayMonths(DateUtil.convertStringToDate(weeks[index][index2]['Date'])), - style: TextStyle( - fontSize: 18, - fontWeight: FontWeight.w700, - color: Color(0xff2E303A), - letterSpacing: -0.72, - ), - ), - ], - ), - ), - Expanded( - flex: 3, - child: Container( - decoration: BoxDecoration( - color: toDayColor, - borderRadius: BorderRadius.all( - Radius.circular(10.0), - ), - boxShadow: [ - BoxShadow( - color: Color(0xff000000).withOpacity(.05), - blurRadius: 27, - offset: Offset(0, -3), - ), - ], - ), - child: Container( - margin: EdgeInsets.only(left: projectViewModel.isArabic ? 0 : 6, right: projectViewModel.isArabic ? 6 : 0), - padding: EdgeInsets.symmetric(vertical: 14, horizontal: 12), - decoration: BoxDecoration( - color: Colors.white, - border: Border.all(color: Colors.white, width: 1), - borderRadius: BorderRadius.only( - bottomRight: projectViewModel.isArabic ? Radius.circular(0) : Radius.circular(10.0), - topRight: projectViewModel.isArabic ? Radius.circular(0) : Radius.circular(10.0), - bottomLeft: projectViewModel.isArabic ? Radius.circular(10.0) : Radius.circular(0), - topLeft: projectViewModel.isArabic ? Radius.circular(10.0) : Radius.circular(0), - ), - ), - child: Row( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Expanded( - child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ - if (isToday) - Text( - TranslationBase.of(context).today, - style: TextStyle( - fontSize: 12, - fontWeight: FontWeight.w600, - color: toDayColor, - letterSpacing: -0.48, - ), - ), - Row( - children: [ - Expanded( - child: Text( - weeks[index][index2]['WorkingHours'], - style: TextStyle( - fontSize: 13, - fontWeight: FontWeight.w600, - color: Color(0xff2E303A), - letterSpacing: -0.56, - ), - ), - ), - ], - ) - ]), - ), - Icon(Icons.arrow_forward, color: Color(0xff2B353E)), - ], - ), - ), - ), - ), - ], - ), - ); - }); - }, - ), - ), - ], - ), - ); - }), - ); + )), + PageViewIndicator( + isActive: true, + currentPage: this.currentPage, + length: weeks.length, + ) + ], + ))); + })); } generateWeeksSchedules() { @@ -284,3 +245,289 @@ class _SchedulePageState extends State { // ); } } + +// import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart'; +// import 'package:diplomaticquarterapp/pages/MyAppointments/AppointmentDetails.dart'; +// +// import 'package:diplomaticquarterapp/pages/MyAppointments/models/DoctorScheduleResponse.dart'; +// import 'package:diplomaticquarterapp/pages/MyAppointments/widgets/indicator.dart'; +// import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart'; +// import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +// import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; +// import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; +// import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; +// import 'package:flutter/material.dart'; +// import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; +// import 'package:diplomaticquarterapp/core/viewModels/medical/medical_view_model.dart'; +// import 'package:diplomaticquarterapp/pages/base/base_view.dart'; +// import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; +// import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; +// import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart'; +// import 'package:diplomaticquarterapp/uitl/app_toast.dart'; +// import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; +// import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; +// import 'package:provider/provider.dart'; +// import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; +// +// class SchedulePage extends StatefulWidget { +// DoctorList doctorList; +// AppoitmentAllHistoryResultList appo; +// SchedulePage({ +// this.appo, +// this.doctorList, +// }); +// @override +// _SchedulePageState createState() => _SchedulePageState(); +// } +// +// class _SchedulePageState extends State { +// DoctorsListService service; +// PageController _pageController = PageController(); +// double currentPage = 0; +// int selectedindex = 0; +// List weeks = []; +// List doctorScheduleResponse = []; +// int weekMS = 604800 * 1000; +// DoctorList doctorList; +// List freeSlots = []; +// bool isPageChange = false; +// +// AppSharedPreferences sharedPref = AppSharedPreferences(); +// @override +// void initState() { +// this.doctorList = widget.doctorList; +// +// super.initState(); +// } +// +// @override +// Widget build(BuildContext context) { +// ProjectViewModel projectViewModel = Provider.of(context); +// return BaseView( +// onModelReady: (model) => model.getDoctorSchedule(doctorList), +// allowAny: true, +// builder: (_, model, widget) => BaseView( +// onModelReady: (model2) => model2.getFreeSlots(doctorList), +// allowAny: true, +// builder: (_, model2, widget2) { +// if (model2.freeSlots.length > 0 && isPageChange == false && model2.state == ViewState.Idle) { +// this.freeSlots = model2.freeSlots; +// this.doctorScheduleResponse = model.getDoctorScheduleList; +// +// this.generateWeeksSchedules(); +// } else if (model2.freeSlots.length == 0 && model2.state == ViewState.Idle) { +// AppToast.showErrorToast(message: TranslationBase.of(context).emptySchedule); +// Navigator.pop(context); +// } +// return AppScaffold( +// appBarTitle: TranslationBase.of(context).schedule, +// showNewAppBar: true, +// showNewAppBarTitle: true, +// isShowAppBar: true, +// backgroundColor: Color(0xffF7F7F7), +// baseViewModel: model2, +// isShowDecPage: false, +// body: Column( +// children: [ +// SizedBox(height: 21), +// PageViewIndicator( +// isActive: true, +// currentPage: this.currentPage, +// length: weeks.length, +// ), +// Expanded( +// child: PageView.builder( +// controller: _pageController, +// itemCount: weeks.length, +// onPageChanged: (index) { +// setState(() { +// isPageChange = true; +// this.currentPage = index.toDouble(); +// }); +// }, +// itemBuilder: (context, index) { +// return ListView.separated( +// itemCount: weeks[index].length, +// padding: EdgeInsets.all(21), +// separatorBuilder: (context, index) => SizedBox(height: 12), +// itemBuilder: (context, index2) { +// bool isToday = DateUtil.convertStringToDate(weeks[index][index2]['Date']).toString().substring(0, 10) == DateTime.now().toString().substring(0, 10); +// Color toDayColor = isToday ? Color(0xff359846) : Colors.white; +// return InkWell( +// onTap: () { +// openBookAppointment(weeks[index][index2]); +// }, +// child: Row( +// crossAxisAlignment: CrossAxisAlignment.start, +// children: [ +// Expanded( +// flex: 1, +// child: Column( +// mainAxisSize: MainAxisSize.min, +// crossAxisAlignment: CrossAxisAlignment.start, +// children: [ +// Text( +// weeks[index][index2]['DayName'], +// style: TextStyle( +// fontSize: 13, +// fontWeight: FontWeight.w600, +// color: Color(0xff2E303A), +// letterSpacing: -0.52, +// ), +// ), +// Text( +// getDayMonths(DateUtil.convertStringToDate(weeks[index][index2]['Date'])), +// style: TextStyle( +// fontSize: 18, +// fontWeight: FontWeight.w700, +// color: Color(0xff2E303A), +// letterSpacing: -0.72, +// ), +// ), +// ], +// ), +// ), +// Expanded( +// flex: 3, +// child: Container( +// decoration: BoxDecoration( +// color: toDayColor, +// borderRadius: BorderRadius.all( +// Radius.circular(10.0), +// ), +// boxShadow: [ +// BoxShadow( +// color: Color(0xff000000).withOpacity(.05), +// blurRadius: 27, +// offset: Offset(0, -3), +// ), +// ], +// ), +// child: Container( +// margin: EdgeInsets.only(left: projectViewModel.isArabic ? 0 : 6, right: projectViewModel.isArabic ? 6 : 0), +// padding: EdgeInsets.symmetric(vertical: 14, horizontal: 12), +// decoration: BoxDecoration( +// color: Colors.white, +// border: Border.all(color: Colors.white, width: 1), +// borderRadius: BorderRadius.only( +// bottomRight: projectViewModel.isArabic ? Radius.circular(0) : Radius.circular(10.0), +// topRight: projectViewModel.isArabic ? Radius.circular(0) : Radius.circular(10.0), +// bottomLeft: projectViewModel.isArabic ? Radius.circular(10.0) : Radius.circular(0), +// topLeft: projectViewModel.isArabic ? Radius.circular(10.0) : Radius.circular(0), +// ), +// ), +// child: Row( +// crossAxisAlignment: CrossAxisAlignment.center, +// children: [ +// Expanded( +// child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ +// if (isToday) +// Text( +// TranslationBase.of(context).today, +// style: TextStyle( +// fontSize: 12, +// fontWeight: FontWeight.w600, +// color: toDayColor, +// letterSpacing: -0.48, +// ), +// ), +// Row( +// children: [ +// Expanded( +// child: Text( +// weeks[index][index2]['WorkingHours'], +// style: TextStyle( +// fontSize: 13, +// fontWeight: FontWeight.w600, +// color: Color(0xff2E303A), +// letterSpacing: -0.56, +// ), +// ), +// ), +// ], +// ) +// ]), +// ), +// Icon(Icons.arrow_forward, color: Color(0xff2B353E)), +// ], +// ), +// ), +// ), +// ), +// ], +// ), +// ); +// }); +// }, +// ), +// ), +// ], +// ), +// ); +// }), +// ); +// } +// +// generateWeeksSchedules() { +// this.weeks.clear(); +// for (var i = 0; i < 8; i++) { +// var weekSchedule = generateNewWeekSchedule(i); +// this.markWeekFreeDays(weekSchedule); +// this.weeks.add(weekSchedule); +// } +// //print(this.weeks); +// } +// +// markWeekFreeDays(schedule) { +// for (var workDay in schedule) { +// workDay['fullDay'] = !this.hasFreeSlot(workDay['Date']); +// } +// } +// +// generateNewWeekSchedule(weekIndex) { +// var weekMSOffset = weekIndex * weekMS; +// +// var newWeekSchedule = []; +// for (var workDay in this.doctorScheduleResponse) { +// Map newWorkDay = Map(); +// newWorkDay['Date'] = DateUtil.convertDateMSToJsonDate(DateUtil.convertStringToDate(workDay.date).millisecondsSinceEpoch + weekMSOffset); +// newWorkDay['DayName'] = workDay.dayName; +// newWorkDay['WorkingHours'] = workDay.workingHours; +// newWeekSchedule.add(newWorkDay); +// } +// return newWeekSchedule; +// } +// +// hasFreeSlot(String jsonDate) { +// var date = DateUtil.convertStringToDate(jsonDate); +// var scheduleDay = date; +// for (var event in this.freeSlots) { +// var date = DateUtil.convertStringToDate(event); +// var nDate = DateTime(date.year, date.month, date.day); +// +// if (nDate.millisecondsSinceEpoch == scheduleDay.millisecondsSinceEpoch) { +// return true; +// } +// } +// return false; +// } +// +// String getDayMonths(DateTime dateTime) { +// String dateFormat = '${dateTime.day} ${DateUtil.getMonth(dateTime.month).toString().substring(0, 3)}'; +// return dateFormat; +// } +// +// openBookAppointment(selectedDate) { +// //sharedPref.setObject(DOCTOR_SCHEDULE_DATE_SEL, selectedDate); +// Navigator.of(context).pop(selectedDate); +// // Navigator.push( +// // context, +// // FadePage( +// // page: AppointmentDetails( +// // appo: widget.appo, +// // doctorSchedule: selectedDate, +// // ), +// // ), +// // ); +// } +// } From d664a216c6cfbc9495c0f52399124654165512bb Mon Sep 17 00:00:00 2001 From: "Mirza.Shafique" Date: Tue, 12 Oct 2021 11:27:05 +0300 Subject: [PATCH 4/9] Profile Page and Back Button Click --- lib/config/localized_values.dart | 2 + lib/pages/landing/landing_page.dart | 15 +- .../vital_sing_chart_and_detials.dart | 25 +- lib/pages/settings/profile_setting.dart | 477 +++++++++++------- lib/pages/settings/settings.dart | 78 +-- lib/uitl/translations_delegate_base.dart | 3 + lib/widgets/charts/sync_fu_chart.dart | 121 ++--- pubspec.yaml | 2 +- 8 files changed, 410 insertions(+), 313 deletions(-) diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 608c67f0..e34982a1 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -1497,4 +1497,6 @@ const Map localizedValues = { "years": {"en": "Years", "ar": "سنوات"}, "respirationBPM": { "en": "bpm", "ar": "نفس" }, "extremeObese": {"en": "Extreme Obese", "ar": "السمنة المفرطة"}, + "selectLanguage": { "en": "Please select any language:", "ar": ":الرجاء تحديد أي لغة" }, + "recAlert": { "en": "How do you want to receive alerts?", "ar": "كيف تريد تلقي التنبيهات؟" }, }; diff --git a/lib/pages/landing/landing_page.dart b/lib/pages/landing/landing_page.dart index 7c83c338..13cc2dce 100644 --- a/lib/pages/landing/landing_page.dart +++ b/lib/pages/landing/landing_page.dart @@ -102,13 +102,18 @@ class _LandingPageState extends State with WidgetsBindingObserver { LocationUtils locationUtils; Future onWillPop() { - DateTime now = DateTime.now(); - if (currentBackPressTime == null || now.difference(currentBackPressTime) > Duration(seconds: 2)) { - currentBackPressTime = now; - AppToast.showToast(message: TranslationBase.of(context).pressAgain); + if (currentTab != 0) { + changeCurrentTab(0); return Future.value(false); + } else { + DateTime now = DateTime.now(); + if (currentBackPressTime == null || now.difference(currentBackPressTime) > Duration(seconds: 2)) { + currentBackPressTime = now; + AppToast.showToast(message: TranslationBase.of(context).pressAgain); + return Future.value(false); + } + return Future.value(true); } - return Future.value(true); } changeCurrentTab(int tab) { diff --git a/lib/pages/medical/vital_sign/vital_sing_chart_and_detials.dart b/lib/pages/medical/vital_sign/vital_sing_chart_and_detials.dart index 62498d51..e98bcb72 100644 --- a/lib/pages/medical/vital_sign/vital_sing_chart_and_detials.dart +++ b/lib/pages/medical/vital_sign/vital_sing_chart_and_detials.dart @@ -50,17 +50,20 @@ class _VitalSingChartAndDetialsState extends State { return SingleChildScrollView( child: Column( children: [ - Card( - shape: cardRadius(12), - elevation: 1, - margin: EdgeInsets.only(left: 16, top: 16, right: 16, bottom: 8), - // child: ShowChart( - // title: widget.name, - // timeSeries: timeSeriesData, - // indexes: timeSeriesData.length ~/ 5.5, - // horizontalInterval: 8, - // ), - child: SyncFuChart(), + Container( + height: 400, + child: Card( + shape: cardRadius(12), + elevation: 1, + margin: EdgeInsets.only(left: 16, top: 16, right: 16, bottom: 8), + child: ShowChart( + title: widget.name, + timeSeries: timeSeriesData, + indexes: timeSeriesData.length ~/ 5.5, + horizontalInterval: 8, + ), + // child: SyncFuChart(), + ), ), Card( shape: cardRadius(12), diff --git a/lib/pages/settings/profile_setting.dart b/lib/pages/settings/profile_setting.dart index 838af5f9..1d2938cc 100644 --- a/lib/pages/settings/profile_setting.dart +++ b/lib/pages/settings/profile_setting.dart @@ -2,9 +2,11 @@ import 'package:diplomaticquarterapp/core/viewModels/dashboard_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/services/authentication/auth_provider.dart'; +import 'package:diplomaticquarterapp/theme/colors.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/uitl/utils_new.dart'; import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart'; import 'package:diplomaticquarterapp/widgets/text/app_texts_widget.dart'; import 'package:flutter/cupertino.dart'; @@ -16,8 +18,7 @@ class ProfileSettings extends StatefulWidget { _ProfileSettings createState() => _ProfileSettings(); } -class _ProfileSettings extends State - with TickerProviderStateMixin { +class _ProfileSettings extends State with TickerProviderStateMixin { bool smsAlert = true; bool emailAlert = true; int language = 1; @@ -25,6 +26,7 @@ class _ProfileSettings extends State TextEditingController emergencyContact = new TextEditingController(); TextEditingController emailController = new TextEditingController(); TextEditingController emergencyContactName = new TextEditingController(); + @override void initState() { Future.delayed(new Duration(seconds: 0), () { @@ -37,199 +39,300 @@ class _ProfileSettings extends State Widget build(BuildContext context) { return BaseView( - onModelReady: (model) => {}, - builder: (_, model, wi) => Container( - child: model.user != null - ? ListView(scrollDirection: Axis.vertical, children: [ - Container( - color: Theme.of(context).textTheme.headline2.color, - padding: EdgeInsets.all(15), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - AppText( - TranslationBase.of(context).fileNo, - color: Colors.black, - ), - AppText( - model.user.patientID.toString(), - color: Colors.black, - ), - ], + onModelReady: (model) => {}, + builder: (_, model, wi) => Container( + child: model.user != null + ? Column( + children: [ + Expanded( + child: SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.all(12.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Card( + shape: cardRadius(8), + margin: EdgeInsets.zero, + elevation: 3, + child: Padding( + padding: const EdgeInsets.all(12.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Text( + TranslationBase.of(context).fileNo + ": ", + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w600, + letterSpacing: -0.64, + ), + ), + Text( + model.user.patientID.toString(), + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w600, + letterSpacing: -0.64, + ), + ), + ], + ), + ), + ), + mHeight(12), + Text( + TranslationBase.of(context).languageSetting, + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w600, + letterSpacing: -0.64, + ), + ), + Text( + TranslationBase.of(context).selectLanguage, + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w600, + letterSpacing: -0.48, + ), + ), + Row( + children: [ + Expanded( + child: Row( + children: [ + new Radio( + value: 2, + groupValue: language, + onChanged: (value) { + setState(() { + language = value; + }); + }, + ), + Text( + TranslationBase.of(context).english, + style: TextStyle( + fontSize: 12, + letterSpacing: -0.48, + ), + ), + ], + ), + ), + Expanded( + child: Row( + children: [ + Radio( + value: 1, + groupValue: language, + onChanged: (value) { + setState(() { + language = value; + }); + }, + ), + Text( + TranslationBase.of(context).arabic, + style: TextStyle( + fontSize: 12, + letterSpacing: -0.48, + ), + ), + ], + ), + ), + ], + ), + mHeight(12), + Text( + TranslationBase.of(context).alert, + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w600, + letterSpacing: -0.64, + ), + ), + Text( + TranslationBase.of(context).recAlert, + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w600, + letterSpacing: -0.48, + ), + ), + Row( + children: [ + Checkbox( + value: emailAlert, + onChanged: (value) { + setState(() { + emailAlert = value; + }); + }, + activeColor: CustomColors.accentColor, + ), + Text( + TranslationBase.of(context).emailAlert, + style: TextStyle( + fontSize: 12, + letterSpacing: -0.48, + ), + ), + ], + ), + Row( + children: [ + Checkbox( + value: smsAlert, + onChanged: (value) { + setState(() { + smsAlert = value; + }); + }, + activeColor: CustomColors.accentColor, + ), + Text( + TranslationBase.of(context).smsAlert, + style: TextStyle( + fontSize: 12, + letterSpacing: -0.48, + ), + ), + ], + ), + mHeight(16), + Text( + TranslationBase.of(context).contactInfo, + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w600, + letterSpacing: -0.64, + ), + ), + mHeight(12), + inputWidget(TranslationBase.of(context).email, "", emailController), + mHeight(8), + inputWidget(TranslationBase.of(context).emergencyName, "", emergencyContactName), + mHeight(8), + inputWidget(TranslationBase.of(context).emergencyContact, "", emergencyContact), + mHeight(8), + ], + ), ), ), - SizedBox( - height: 1, - width: MediaQuery.of(context).size.width, - child: Container( - color: Colors.grey[300], + ), + Container( + width: double.infinity, + child: Card( + margin: EdgeInsets.zero, + elevation: 20, + child: Padding( + padding: const EdgeInsets.only(left: 16, right: 16, bottom: 16, top: 16), + child: DefaultButton( + TranslationBase.of(context).save, + () { + saveSettings(); + }, + ), ), ), - Padding( - child: AppText( - TranslationBase.of(context).languageSetting, - fontWeight: FontWeight.bold), - padding: EdgeInsets.all(10), + ), + ], + ) + : Center( + child: AppText(TranslationBase.of(context).loginToUseService), + ), + ), + ); + } + + Widget inputWidget(String _labelText, String _hintText, TextEditingController _controller, {String prefix, bool isEnable = true, bool hasSelection = false}) { + return Container( + padding: EdgeInsets.only(left: 16, right: 16, bottom: 15, top: 15), + alignment: Alignment.center, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(15), + color: Colors.white, + border: Border.all( + color: Color(0xffefefef), + width: 1, + ), + ), + child: InkWell( + onTap: hasSelection ? () {} : null, + child: Row( + children: [ + Expanded( + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + _labelText, + style: TextStyle( + fontSize: 11, + fontWeight: FontWeight.w600, + color: Color(0xff2B353E), + letterSpacing: -0.44, ), - Container( - color: Theme.of(context).textTheme.headline2.color, - padding: EdgeInsets.only( - top: 0, left: 10, right: 10, bottom: 0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - AppText(TranslationBase.of(context).english), - new Radio( - value: 2, - groupValue: language, - onChanged: (value) { - setState(() { - language = value; - }); - }, - ) - ], - )), - Container( - color: Theme.of(context).textTheme.headline2.color, - padding: EdgeInsets.only( - top: 0, left: 10, right: 10, bottom: 0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - AppText(TranslationBase.of(context).arabic), - new Radio( - value: 1, - groupValue: language, - onChanged: (value) { - setState(() { - language = value; - }); - }, - ) - ], - )), - Padding( - child: AppText(TranslationBase.of(context).alert), - padding: EdgeInsets.all(10), + ), + TextField( + enabled: isEnable, + scrollPadding: EdgeInsets.zero, + keyboardType: TextInputType.number, + controller: _controller, + // onChanged: (value) => {validateForm()}, + style: TextStyle( + fontSize: 14, + height: 21 / 14, + fontWeight: FontWeight.w400, + color: Color(0xff2B353E), + letterSpacing: -0.44, ), - Container( - color: Theme.of(context).textTheme.headline2.color, - padding: EdgeInsets.only( - top: 0, left: 10, right: 10, bottom: 0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - AppText(TranslationBase.of(context).emailAlert), - Switch( - value: emailAlert, - onChanged: (value) { - setState(() { - emailAlert = value; - }); - }, - activeTrackColor: Colors.lightGreenAccent, - activeColor: Colors.green, - ) - ], - )), - Container( - color: Theme.of(context).textTheme.headline2.color, - padding: EdgeInsets.only( - top: 0, left: 10, right: 10, bottom: 0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - AppText(TranslationBase.of(context).smsAlert), - Switch( - value: smsAlert, - onChanged: (value) { - setState(() { - smsAlert = value; - }); - }, - activeTrackColor: Colors.lightGreenAccent, - activeColor: Colors.green, - ) - ], - )), - Padding( - child: AppText(TranslationBase.of(context).contactInfo), - padding: EdgeInsets.all(10), - ), - Container( - color: Theme.of(context).textTheme.headline2.color, - padding: EdgeInsets.only( - top: 0, left: 10, right: 10, bottom: 0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - AppText(TranslationBase.of(context).email), - TextField( - controller: emailController, - decoration: InputDecoration( - suffixIcon: Icon(Icons.edit), - )) - ], - )), - Container( - color: Theme.of(context).textTheme.headline2.color, - padding: EdgeInsets.only( - top: 0, left: 10, right: 10, bottom: 0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - AppText(TranslationBase.of(context).emergencyName), - TextField( - controller: emergencyContactName, - decoration: InputDecoration( - suffixIcon: Icon(Icons.edit), - )) - ], - )), - Container( - color: Theme.of(context).textTheme.headline2.color, - padding: EdgeInsets.only( - top: 0, left: 10, right: 10, bottom: 0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - AppText( - TranslationBase.of(context).emergencyContact), - TextField( - controller: emergencyContact, - decoration: InputDecoration( - suffixIcon: Icon(Icons.edit), + decoration: InputDecoration( + isDense: true, + hintText: _hintText, + hintStyle: TextStyle( + fontSize: 14, + height: 21 / 14, + fontWeight: FontWeight.w400, + color: Color(0xff575757), + letterSpacing: -0.56, + ), + prefixIconConstraints: BoxConstraints(minWidth: 50), + prefixIcon: prefix == null + ? null + : Text( + "+" + prefix, + style: TextStyle( + fontSize: 14, + height: 21 / 14, + fontWeight: FontWeight.w500, + color: Color(0xff2E303A), + letterSpacing: -0.56, ), - ) - ], - )), - Container( - padding: EdgeInsets.all(10), - child: Row( - children: [ - Expanded( - child: DefaultButton( - TranslationBase.of(context).save, - () { - saveSettings(); - }, - )), - ], - )) - ]) - : Center( - child: - AppText(TranslationBase.of(context).loginToUseService), - ))); + ), + contentPadding: EdgeInsets.zero, + border: InputBorder.none, + focusedBorder: InputBorder.none, + enabledBorder: InputBorder.none, + ), + ), + ], + ), + ), + if (hasSelection) Icon(Icons.keyboard_arrow_down_outlined), + ], + ), + ), + ); } getSettings(context) { GifLoaderDialogUtils.showMyDialog(context); - authService.getSettings().then((result) => { - GifLoaderDialogUtils.hideDialog(context), - setValue(result["PateintInfoForUpdateList"][0]) - }); + authService.getSettings().then((result) => {GifLoaderDialogUtils.hideDialog(context), setValue(result["PateintInfoForUpdateList"][0])}); } setValue(value) { @@ -252,10 +355,6 @@ class _ProfileSettings extends State request["IsEmailAlertRequired"] = this.emailAlert; request["IsSMSAlertRequired"] = this.smsAlert; request["PreferredLanguage"] = this.language.toString(); - authService.saveSettings(request).then((result) => { - AppToast.showSuccessToast( - message: TranslationBase.of(context).profileUpdate), - GifLoaderDialogUtils.hideDialog(context) - }); + authService.saveSettings(request).then((result) => {AppToast.showSuccessToast(message: TranslationBase.of(context).profileUpdate), GifLoaderDialogUtils.hideDialog(context)}); } } diff --git a/lib/pages/settings/settings.dart b/lib/pages/settings/settings.dart index 1282a636..32e4cf66 100644 --- a/lib/pages/settings/settings.dart +++ b/lib/pages/settings/settings.dart @@ -1,7 +1,9 @@ import 'package:diplomaticquarterapp/config/config.dart'; import 'package:diplomaticquarterapp/pages/settings/general_setting.dart'; import 'package:diplomaticquarterapp/pages/settings/profile_setting.dart'; +import 'package:diplomaticquarterapp/theme/colors.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/arrow_back.dart'; import 'package:flutter/material.dart'; @@ -9,6 +11,7 @@ class Settings extends StatefulWidget { final int type; Settings({this.type = 0}); + @override _Settings createState() => _Settings(); } @@ -18,8 +21,7 @@ class _Settings extends State with TickerProviderStateMixin { @override void initState() { - _tabController = - new TabController(length: 2, vsync: this, initialIndex: widget.type); + _tabController = new TabController(length: 2, vsync: this, initialIndex: widget.type); if (widget.type == 1) { _tabController.animateTo(1); @@ -31,45 +33,45 @@ class _Settings extends State with TickerProviderStateMixin { @override Widget build(BuildContext context) { AppGlobal.context = context; - return Scaffold( - appBar: AppBar( - actions: [ - IconButton( - icon: Icon(Icons.info, color: Colors.white), - onPressed: () { - //openInfoPage() - }, - ) - ], - bottom: TabBar( - // isScrollable: true, + return AppScaffold( + isShowAppBar: false, + isShowDecPage: false, + showNewAppBarTitle: true, + showNewAppBar: true, + appBarTitle: TranslationBase.of(context).settings, + backgroundColor: Color(0xFFF7F7F7), + body: Column( + children: [ + TabBar( + // isScrollable: true, - indicatorWeight: 5.0, - //indicatorSize: TabBarIndicatorSize.label, - // indicatorSize: TabBarIndicatorSize.tab, + indicatorWeight: 3.0, + //indicatorSize: TabBarIndicatorSize.label, + // indicatorSize: TabBarIndicatorSize.tab, - indicatorColor: Theme.of(context).primaryColor, - // labelColor: Theme.of(context).primaryColor, - tabs: [ - Tab(text: TranslationBase.of(context).general), - Tab( - text: TranslationBase.of(context).profile, - ) - ], - controller: _tabController, - ), - title: Text(TranslationBase.of(context).settings, - style: TextStyle(color: Colors.white)), - leading: Builder( - builder: (BuildContext context) { - return ArrowBack(); - }, - ), + indicatorColor: CustomColors.accentColor, + labelColor: Colors.black, + unselectedLabelColor: CustomColors.grey, + // labelColor: Theme.of(context).primaryColor, + tabs: [ + Tab(text: TranslationBase.of(context).general), + Tab( + text: TranslationBase.of(context).profile, + ) + ], + controller: _tabController, + ), + Expanded( + child: TabBarView( + physics: NeverScrollableScrollPhysics(), + children: [ + GeneralSettings(), + ProfileSettings(), + ], + controller: _tabController), + ), + ], ), - body: TabBarView( - physics: NeverScrollableScrollPhysics(), - children: [GeneralSettings(), ProfileSettings()], - controller: _tabController), ); } } diff --git a/lib/uitl/translations_delegate_base.dart b/lib/uitl/translations_delegate_base.dart index 0a3177e0..48e8b0bd 100644 --- a/lib/uitl/translations_delegate_base.dart +++ b/lib/uitl/translations_delegate_base.dart @@ -2361,6 +2361,9 @@ class TranslationBase { String get selectSlot => localizedValues["selectSlot"][locale.languageCode]; + String get selectLanguage => localizedValues["selectLanguage"][locale.languageCode]; + + String get recAlert => localizedValues["recAlert"][locale.languageCode]; } class TranslationBaseDelegate extends LocalizationsDelegate { diff --git a/lib/widgets/charts/sync_fu_chart.dart b/lib/widgets/charts/sync_fu_chart.dart index ca0a626e..3119cc36 100644 --- a/lib/widgets/charts/sync_fu_chart.dart +++ b/lib/widgets/charts/sync_fu_chart.dart @@ -1,69 +1,52 @@ -import 'package:flutter/material.dart'; -import 'package:syncfusion_flutter_charts/charts.dart'; -import 'package:syncfusion_flutter_charts/sparkcharts.dart'; - -class SyncFuChart extends StatelessWidget { - - List<_SalesData> data = [ - _SalesData('Jan', 35), - _SalesData('Feb', 28), - _SalesData('Mar', 34), - _SalesData('Apr', 32), - _SalesData('May', 40), - ]; - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: const Text('Syncfusion Flutter chart'), - ), - body: Column( - children: [ - //Initialize the chart widget - SfCartesianChart( - primaryXAxis: CategoryAxis(), - // Chart title - title: ChartTitle(text: 'Half yearly sales analysis'), - // Enable legend - legend: Legend(isVisible: true), - // Enable tooltip - tooltipBehavior: TooltipBehavior(enable: true), - series: >[ - LineSeries<_SalesData, String>( - dataSource: data, - xValueMapper: (_SalesData sales, _) => sales.year, - yValueMapper: (_SalesData sales, _) => sales.sales, - name: 'Sales', - // Enable data label - dataLabelSettings: DataLabelSettings(isVisible: true)) - ]), - Expanded( - child: Padding( - padding: const EdgeInsets.all(8.0), - //Initialize the spark charts widget - child: SfSparkLineChart.custom( - //Enable the trackball - trackball: SparkChartTrackball(activationMode: SparkChartActivationMode.tap), - //Enable marker - marker: SparkChartMarker(displayMode: SparkChartMarkerDisplayMode.all), - //Enable data label - labelDisplayMode: SparkChartLabelDisplayMode.all, - xValueMapper: (int index) => data[index].year, - yValueMapper: (int index) => data[index].sales, - dataCount: 5, - ), - ), - ) - ], - ), - ); - } -} - -class _SalesData { - _SalesData(this.year, this.sales); - - final String year; - final double sales; -} +// import 'package:flutter/material.dart'; +// import 'package:syncfusion_flutter_charts/charts.dart'; +// import 'package:syncfusion_flutter_charts/sparkcharts.dart'; +// +// class SyncFuChart extends StatelessWidget { +// List<_SalesData> data = [ +// _SalesData('Jan', 35), +// _SalesData('Feb', 28), +// _SalesData('Mar', 34), +// _SalesData('Apr', 32), +// _SalesData('May', 40), +// ]; +// +// @override +// Widget build(BuildContext context) { +// return Scaffold( +// body: Column( +// children: [ +// //Initialize the chart widget +// SfCartesianChart( +// +// primaryXAxis: CategoryAxis(), +// primaryYAxis: CategoryAxis(minimum: 28), +// // Chart title +// title: ChartTitle(text: 'Half yearly sales analysis'), +// // Enable legend +// legend: Legend(isVisible: true), +// // Enable tooltip +// tooltipBehavior: TooltipBehavior(enable: true), +// series: >[ +// LineSeries<_SalesData, String>( +// dataSource: data, +// xValueMapper: (_SalesData sales, _) => sales.year, +// yValueMapper: (_SalesData sales, _) => sales.sales, +// name: 'Sales', +// // Enable data label +// dataLabelSettings: DataLabelSettings(isVisible: true), +// ), +// ], +// ), +// ], +// ), +// ); +// } +// } +// +// class _SalesData { +// _SalesData(this.year, this.sales); +// +// final String year; +// final double sales; +// } diff --git a/pubspec.yaml b/pubspec.yaml index e1732307..306513d4 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -104,7 +104,7 @@ dependencies: # Calendar # table_calendar: ^2.3.0 syncfusion_flutter_calendar: ^18.4.49 - syncfusion_flutter_charts: any +# syncfusion_flutter_charts: any # SVG Images flutter_svg: ^0.18.0 From b475adb5c33b8a1b3f885713df99568803ca7b64 Mon Sep 17 00:00:00 2001 From: haroon amjad Date: Wed, 13 Oct 2021 13:58:20 +0300 Subject: [PATCH 5/9] Updates & fixes --- assets/images/new/payment/Apple_Pay.png | Bin 0 -> 6592 bytes assets/images/new/payment/Mada.png | Bin 0 -> 10340 bytes assets/images/new/payment/Mastercard.png | Bin 0 -> 14639 bytes assets/images/new/payment/installments.png | Bin 0 -> 5041 bytes assets/images/new/payment/visa.png | Bin 0 -> 16450 bytes lib/config/localized_values.dart | 7 +- .../e_referral_service.dart | 3 + lib/core/service/client/base_app_client.dart | 10 + .../new_e_referral_step_one_page.dart | 53 ++-- .../E-Referral/referral_details.dart | 4 +- .../E-Referral/search_for_referrals_page.dart | 2 +- lib/pages/BookAppointment/BookSuccess.dart | 16 +- .../covid-payment-details.dart | 5 +- .../covid-payment-summary.dart | 36 +-- lib/pages/ToDoList/ToDo.dart | 14 +- lib/pages/ToDoList/payment_method_select.dart | 10 +- lib/pages/ToDoList/widgets/paymentDialog.dart | 252 +++++++----------- .../widgets/LiveCarePaymentDialog.dart | 21 +- lib/pages/livecare/widgets/clinic_list.dart | 5 +- .../PrescriptionOrderOverveiw.dart | 20 +- lib/uitl/translations_delegate_base.dart | 8 + lib/uitl/utils_new.dart | 16 ++ pubspec.yaml | 1 + 23 files changed, 224 insertions(+), 259 deletions(-) create mode 100644 assets/images/new/payment/Apple_Pay.png create mode 100644 assets/images/new/payment/Mada.png create mode 100644 assets/images/new/payment/Mastercard.png create mode 100644 assets/images/new/payment/installments.png create mode 100644 assets/images/new/payment/visa.png diff --git a/assets/images/new/payment/Apple_Pay.png b/assets/images/new/payment/Apple_Pay.png new file mode 100644 index 0000000000000000000000000000000000000000..1dc75042f37de9d6b7629dc7e3f33e7c5d5671b4 GIT binary patch literal 6592 zcmV;x89(NUP)Px#IAvH#W=%~1DgXcg2mk?xX#fNO00031000^Q000000-yo_1ONa40RR92ET97b z1ONa40RR91djJ3c0J_IuqW}OIHc3Q5RCodHT?^P2RkhXtQ8BZB}_$yyo*X| z26-zl2g`eESF@9PEX+%3ob>4Ps70AKo&-$IFw&!`C2Ho4Kul8v0u?0V@~csxnCHCj z4->=u-}lX4Yi@gH)_R`z|GsZ#t-aQM_sp8T_w1Q}z4fXsy-~fhfC<10z&k)+z{D6Z z28;nO80ds3jsqS6{ssJB1cUM0#27FJjDbQKSRdX;1G9l>k_!JGRA`ju+!!zhYR|xq zVBk?8oS2$@->UX(83D$CF;Ex-r@-@apjm_A>dWO2S7L} zwfg>CZP~Jl8v_+!pmT}qFb=VQQ5gR-LVe%VH}oVRUKCaVyjYkR1GzC!)`WE_7?LI{ zlKL?JlvtJ__KiG>|DTAZ4Oj@w16~5A15W{q0TW}O_6&R$3`mB7!4Q!rSND>$$2tV{ z@%fX>NoE390DAx?#y~9@=!07Gimo|XCsly4vLvi%`#cZs*(3I;cUXbL!K&ap15*%S z^ki`Ty|3?;bBM332`gx$zoL%k0$m;IYAVJ+sTnvN(FX^<^z)HY*L-d8WlvZ^yS;)c z9lEw!_RScm9s|=*rQm>X~02?M&hoo-aErLBoUqu& zTx_~Si~8FxW59a`u0({AgvCcjPWQf6x&W)5u-MMCfF3$}%&O`Pl;P2wT?LK6H;R4^ zxL06P2UYf5n8=ez7Z`JRzHyR59BlcjpqqhX9du2_81RmPml2Um59?{@Red<2?O~<) zcnlL3UxLV?`XvCL&*W=+T-r#Ya|+5dF$PM<09Qx1I?$J3|2Y6(ja+r{Az?M*n9pdQ z2Jmedt=dYmkL|hzU}6lEih*VcYYu900l<@`F5+v#3iJO-{CE+NB&TM&*M|$X@5VqG z7`P8Xaw7Iw;7;IMz%ZbWQig=ZcG&>9641O=Bb>arG^H6^KY(Tjn#*=3m`8zA0p2oq73!W0JO*f!RHOK~ zO8y>TcfdC(Yr^7szvqBPe7kIWz_*65c*?^7S0P^ma6;7OV3X*yq0Acq4(A#TSGjHf zH9BwOQ&P56mx=2}AUvGJ&qAfF35%p13`pA`(C0d@53>*xV?e?HZ&|+%1P4-X_7= z0ZxXt5+hofI}26SngpfJYojPQ-5*5S8O+6%y7N3686QDRTWGlyxM)N56Ox%IX;A zyzfK6@jzP1;=%;+7Im>j$nC=ANZO@PpIK8zhmYad@;;DNBbK?`dEjN=4vgiqp$ZA> z&;-X-8vp%>BZtudpK{3iIQ$EIegWtNB$2)_*4_ZSHi_dDY>!468s53&scR$u%zz|T zQ)ty~?guYD8k|HfuP zU!g2e6GWM8ZUrxCb?KXNAGf^<32ShI<4b$
Tkad4vCmt&42n9BghrjgTOq^-*k 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 literal 0 HcmV?d00001 diff --git a/assets/images/new/payment/Mada.png b/assets/images/new/payment/Mada.png new file mode 100644 index 0000000000000000000000000000000000000000..905a5ba893f3e650656028f91f2f7833b5408ede GIT binary patch literal 10340 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 Hu0mjf;~=R2 literal 0 HcmV?d00001 diff --git a/assets/images/new/payment/visa.png b/assets/images/new/payment/visa.png new file mode 100644 index 0000000000000000000000000000000000000000..3a6d90dd128ebe6c69ae31e1f89dcb028976aa72 GIT binary patch literal 16450 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 { super.initState(); } + void showSMSDialog(EReferralViewModel model) { + SMSOTP( + context, + 1, + _selectedCountry['code'] + _mobileTextController.text, + (value) { + submit(model, value); + }, + () => { + Navigator.pop(context), + }, + ).displayDialog(context); + } + @override Widget build(BuildContext context) { projectViewModel = Provider.of(context); - void showSMSDialog(EReferralViewModel model) { - SMSOTP( - context, - 1, - _selectedCountry['code'] + _mobileTextController.text, - (value) { - submit(model, value); - }, - () => { - Navigator.pop(context), - }, - ).displayDialog(context); - // showDialog( - // context: context, - // barrierDismissible: false, - // child: EReferralConfirmSMSDialog( - // phoneNumber: _selectedCountry['code'] + _mobileTextController.text, - // onSucces: () { - // Navigator.of(context).pop(); - // widget.changePageViewIndex(1); - // widget.createEReferralRequestModel.requesterName = - // _nameTextController.text; - // widget.createEReferralRequestModel.requesterContactNo = - // _selectedCountry['code'].toString().substring(1) + - // _mobileTextController.text; - // widget.createEReferralRequestModel.requesterRelationship = - // _selectedRelation.iD; - // }), - // ).then((value) { - // print("dialog dismissed"); - // print(value); - // if (value != null && value) {} - // }); - } return BaseView( onModelReady: (model) => model.getRelationTypes(), @@ -205,6 +186,10 @@ class _NewEReferralStepOnePageState extends State { await model.checkActivationCodeForEReferral(checkActivationCodeForEReferralRequestModel); if (model.state == ViewState.ErrorLocal) { GifLoaderDialogUtils.hideDialog(context); + Future.delayed(Duration(seconds: 1), () { + AppToast.showErrorToast(message: model.error); + showSMSDialog(model); + }); } else { GifLoaderDialogUtils.hideDialog(context); Navigator.of(context).pop(); diff --git a/lib/pages/AlHabibMedicalService/E-Referral/referral_details.dart b/lib/pages/AlHabibMedicalService/E-Referral/referral_details.dart index 85ea80e6..1eaf9875 100644 --- a/lib/pages/AlHabibMedicalService/E-Referral/referral_details.dart +++ b/lib/pages/AlHabibMedicalService/E-Referral/referral_details.dart @@ -42,7 +42,7 @@ class _ReferralDetailsState extends State { Container( margin: EdgeInsets.only(bottom: 10.0), child: Text( - TranslationBase.of(context).referralDetails, + TranslationBase.of(context).ereferral, style: TextStyle( letterSpacing: -0.64, color: Colors.black, @@ -116,7 +116,7 @@ class _ReferralDetailsState extends State { ), Expanded( child: _getNormalText( - DateUtil.getMonthDayYearDateFormatted( + DateUtil.getDayMonthYearDateFormatted( DateUtil.convertStringToDateNoTimeZone( widget.referral.referralDate)), isBold: true), diff --git a/lib/pages/AlHabibMedicalService/E-Referral/search_for_referrals_page.dart b/lib/pages/AlHabibMedicalService/E-Referral/search_for_referrals_page.dart index 513eb3b2..356e8eb1 100644 --- a/lib/pages/AlHabibMedicalService/E-Referral/search_for_referrals_page.dart +++ b/lib/pages/AlHabibMedicalService/E-Referral/search_for_referrals_page.dart @@ -172,7 +172,7 @@ class _SearchForReferralsPageState extends State { child: myRichText(TranslationBase.of(context).patientName + ": ", model.allReferral[index].patientName, projectViewModel.isArabic)), myRichText(TranslationBase.of(context).hospital + ": ", model.allReferral[index].preferredBranchName, projectViewModel.isArabic), myRichText(TranslationBase.of(context).referralDate + ": ", - DateUtil.getMonthDayYearDateFormatted(DateUtil.convertStringToDateNoTimeZone(model.allReferral[index].referralDate)), projectViewModel.isArabic), + DateUtil.getDayMonthYearDateFormatted(DateUtil.convertStringToDateNoTimeZone(model.allReferral[index].referralDate)), projectViewModel.isArabic), ], ), Icon(projectViewModel.isArabic ? Icons.arrow_back_ios_outlined : Icons.arrow_forward_outlined), diff --git a/lib/pages/BookAppointment/BookSuccess.dart b/lib/pages/BookAppointment/BookSuccess.dart index 2c278f5e..84af56d6 100644 --- a/lib/pages/BookAppointment/BookSuccess.dart +++ b/lib/pages/BookAppointment/BookSuccess.dart @@ -175,7 +175,7 @@ class _BookSuccessState extends State { ), height: 45.0, child: RaisedButton( - color: new Color(0xFF60686b), + color: CustomColors.green, textColor: Colors.white, disabledTextColor: Colors.white, disabledColor: new Color(0xFFbcc2c4), @@ -365,10 +365,11 @@ class _BookSuccessState extends State { ), ], ), - Container( - margin: EdgeInsets.fromLTRB(50.0, 20.0, 50.0, 20.0), - child: Image.asset("assets/images/new-design/payment-method.png"), - ), + // Container( + // margin: EdgeInsets.fromLTRB(50.0, 20.0, 50.0, 20.0), + // child: Image.asset("assets/images/new-design/payment-method.png"), + // ), + Container(margin: EdgeInsets.fromLTRB(20.0, 5.0, 20.0, 5.0), child: getPaymentMethods()), ], ); } @@ -447,10 +448,7 @@ class _BookSuccessState extends State { fontSize: 12.0, letterSpacing: -0.36, )), - Container( - margin: EdgeInsets.fromLTRB(50.0, 20.0, 50.0, 20.0), - child: Image.asset("assets/images/new-design/payment-method.png"), - ), + Container(margin: EdgeInsets.fromLTRB(20.0, 5.0, 20.0, 5.0), child: getPaymentMethods()), Text( TranslationBase.of(context).payNowBookSuccesstext2, overflow: TextOverflow.clip, diff --git a/lib/pages/Covid-DriveThru/covid-payment-details.dart b/lib/pages/Covid-DriveThru/covid-payment-details.dart index 81ba1285..f31aa53e 100644 --- a/lib/pages/Covid-DriveThru/covid-payment-details.dart +++ b/lib/pages/Covid-DriveThru/covid-payment-details.dart @@ -262,10 +262,7 @@ class _CovidPaymentDetailsState extends State { letterSpacing: -0.46, ), ), - Container( - margin: EdgeInsets.only(top: 12, bottom: 12), - child: Image.asset("assets/images/new-design/payment_options_invoice_confirmation.png", width: 300), - ), + Container(margin: EdgeInsets.fromLTRB(20.0, 5.0, 20.0, 5.0), child: getPaymentMethods()), ], ), ), diff --git a/lib/pages/Covid-DriveThru/covid-payment-summary.dart b/lib/pages/Covid-DriveThru/covid-payment-summary.dart index c47c8d36..c5bcb23b 100644 --- a/lib/pages/Covid-DriveThru/covid-payment-summary.dart +++ b/lib/pages/Covid-DriveThru/covid-payment-summary.dart @@ -13,6 +13,7 @@ import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/utils.dart'; import 'package:diplomaticquarterapp/uitl/utils_new.dart'; +import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart'; import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; import 'package:diplomaticquarterapp/widgets/dragable_sheet.dart'; import 'package:diplomaticquarterapp/widgets/in_app_browser/InAppBrowser.dart'; @@ -95,9 +96,9 @@ class _CovidPaymentSummaryState extends State { decoration: containerColorRadiusBorderWidth(CustomColors.accentColor, 200, Colors.white, 4), ), Container( - height: 60.0, + height: 100.0, padding: EdgeInsets.all(7.0), - child: widget.selectedPaymentMethod == "ApplePay" ? SvgPicture.asset(getImagePath(widget.selectedPaymentMethod)) : Image.asset(getImagePath(widget.selectedPaymentMethod)), + child: Image.asset(getImagePath(widget.selectedPaymentMethod), width: 100, height: 100), ), mFlex(1), InkWell( @@ -154,17 +155,16 @@ class _CovidPaymentSummaryState extends State { ), ), bottomSheet: Container( - color: Colors.white, - height: MediaQuery.of(context).size.height * 0.1, + color: Theme.of(context).scaffoldBackgroundColor, + margin: EdgeInsets.only(bottom: 5.0), width: double.infinity, padding: EdgeInsets.all(12), - child: SecondaryButton( - textColor: Colors.white, - color: CustomColors.green, - label: TranslationBase.of(context).confirm.toUpperCase(), - onTap: () { + child: DefaultButton( + TranslationBase.of(context).confirm.toUpperCase(), + () { startPaymentProcess(projectViewModel.user); }, + color: CustomColors.green, ), ), ); @@ -335,25 +335,25 @@ class _CovidPaymentSummaryState extends State { String getImagePath(String paymentMethod) { switch (paymentMethod) { case "MADA": - return 'assets/images/new-design/mada.png'; - break; - case "SADAD": - return 'assets/images/new-design/sadad.png'; + return 'assets/images/new/payment/Mada.png'; break; + // case "SADAD": + // return 'assets/images/new-design/sadad.png'; + // break; case "VISA": - return 'assets/images/new-design/visa.png'; + return 'assets/images/new/payment/visa.png'; break; case "MASTERCARD": - return 'assets/images/new-design/mastercard.png'; + return 'assets/images/new/payment/Mastercard.png'; break; case "Installment": - return 'assets/images/new-design/installment.png'; + return 'assets/images/new/payment/installments.png'; break; case "ApplePay": - return 'assets/images/new-design/applepay.svg'; + return 'assets/images/new/payment/Apple_Pay.png'; break; } - return 'assets/images/new-design/mada.png'; + return 'assets/images/new/payment/Mada.png'; } } diff --git a/lib/pages/ToDoList/ToDo.dart b/lib/pages/ToDoList/ToDo.dart index a143fa15..1a0ec103 100644 --- a/lib/pages/ToDoList/ToDo.dart +++ b/lib/pages/ToDoList/ToDo.dart @@ -57,6 +57,8 @@ class _ToDoState extends State { ToDoCountProviderModel toDoProvider; CountdownTimerController controller; + ProjectViewModel projectViewModel; + @override void initState() { widget.patientShareResponse = new PatientShareResponse(); @@ -73,7 +75,7 @@ class _ToDoState extends State { @override Widget build(BuildContext context) { toDoProvider = Provider.of(context); - ProjectViewModel projectViewModel = Provider.of(context); + projectViewModel = Provider.of(context); return AppScaffold( appBarTitle: TranslationBase.of(context).todoList, imagesInfo: imagesInfo, @@ -169,12 +171,12 @@ class _ToDoState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text(widget.appoList[index].doctorTitle + " " + widget.appoList[index].doctorNameObj, - style: TextStyle(fontSize: 14.0, color: Colors.black, fontWeight: FontWeight.bold, letterSpacing: 1.0)), + style: TextStyle(fontSize: 14.0, color: Colors.black, fontWeight: FontWeight.bold, letterSpacing: -0.64)), if (getDoctorSpeciality(widget.appoList[index].doctorSpeciality) != "null\n") Container( margin: EdgeInsets.only(top: 3.0, bottom: 3.0), child: Text(getDoctorSpeciality(widget.appoList[index].doctorSpeciality).trim(), - style: TextStyle(fontSize: 12.0, color: Colors.grey[600], letterSpacing: 1.0)), + style: TextStyle(fontSize: 12.0, color: Colors.grey[600], letterSpacing: -0.64)), ), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, @@ -267,7 +269,7 @@ class _ToDoState extends State { color: Color(0xff20bc44), ), height: 30.0, - padding: EdgeInsets.only(right: 15), + padding: EdgeInsets.only(right: 10, left: 10), margin: EdgeInsets.symmetric(horizontal: 20), transform: Matrix4.translationValues(0.0, -8.0, 0.0), child: Row( @@ -319,11 +321,11 @@ class _ToDoState extends State { break; case 15: - return widget.languageID == 'ar' ? "assets/images/new-design/pay_online_button_arabic_disabled.png" : "assets/images/new-design/pay_online_button_disabled.png"; + return projectViewModel.isArabic ? "assets/images/new-design/pay_online_button_arabic_disabled.png" : "assets/images/new-design/pay_online_button_disabled.png"; break; case 20: - return widget.languageID == 'ar' ? "assets/images/new-design/pay_online_button_arabic.png" : "assets/images/new-design/pay_online_button.png"; + return projectViewModel.isArabic ? "assets/images/new-design/pay_online_button_arabic.png" : "assets/images/new-design/pay_online_button.png"; break; case 30: diff --git a/lib/pages/ToDoList/payment_method_select.dart b/lib/pages/ToDoList/payment_method_select.dart index f2a96651..3e7678cc 100644 --- a/lib/pages/ToDoList/payment_method_select.dart +++ b/lib/pages/ToDoList/payment_method_select.dart @@ -60,7 +60,7 @@ class _PaymentMethodState extends State { height: 60.0, width: 60, padding: EdgeInsets.all(7.0), - child: Image.asset("assets/images/new-design/mada.png"), + child: Image.asset("assets/images/new/payment/Mada.png"), ), mWidth(12), Text( @@ -96,7 +96,7 @@ class _PaymentMethodState extends State { height: 60.0, padding: EdgeInsets.all(7.0), width: 60, - child: Image.asset("assets/images/new-design/visa.png"), + child: Image.asset("assets/images/new/payment/visa.png"), ), mWidth(12), Text( @@ -132,7 +132,7 @@ class _PaymentMethodState extends State { height: 60.0, padding: EdgeInsets.all(7.0), width: 60, - child: Image.asset("assets/images/new-design/mastercard.png"), + child: Image.asset("assets/images/new/payment/Mastercard.png"), ), mWidth(12), Text( @@ -168,7 +168,7 @@ class _PaymentMethodState extends State { height: 60.0, padding: EdgeInsets.all(7.0), width: 60, - child: Image.asset("assets/images/new-design/installment.png"), + child: Image.asset("assets/images/new/payment/installments.png"), ), mWidth(12), Text( @@ -205,7 +205,7 @@ class _PaymentMethodState extends State { height: 60.0, padding: EdgeInsets.all(7.0), width: 60, - child: SvgPicture.asset("assets/images/new-design/applepay.svg"), + child: Image.asset("assets/images/new/payment/Apple_Pay.png"), ), mWidth(12), Text( diff --git a/lib/pages/ToDoList/widgets/paymentDialog.dart b/lib/pages/ToDoList/widgets/paymentDialog.dart index 7c461815..c46535b3 100644 --- a/lib/pages/ToDoList/widgets/paymentDialog.dart +++ b/lib/pages/ToDoList/widgets/paymentDialog.dart @@ -1,7 +1,9 @@ import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart'; import 'package:diplomaticquarterapp/models/Appointments/PatientShareResposne.dart'; +import 'package:diplomaticquarterapp/theme/colors.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/uitl/utils_new.dart'; import 'package:flutter/material.dart'; class PaymentDialog extends StatefulWidget { @@ -21,159 +23,106 @@ class _PaymentDialogState extends State { Widget build(BuildContext context) { return Container( child: Dialog( - shape: - RoundedRectangleBorder(borderRadius: BorderRadius.circular(12.0)), + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12.0)), child: Container( height: 550.0, width: 450.0, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.max, - children: [ - Container( - margin: EdgeInsets.fromLTRB(20.0, 20.0, 20.0, 5.0), - child: Text("Invoice Detail", - style: TextStyle( - fontSize: 25.0, - fontWeight: FontWeight.bold, - fontFamily: "Open-Sans-Bold")), - ), - Divider( - color: Colors.grey, - ), - Container( - margin: EdgeInsets.fromLTRB(20.0, 5.0, 20.0, 5.0), - child: Text("Appointment Details", - style: TextStyle( - fontSize: 15.0, - fontWeight: FontWeight.bold, - fontFamily: "Open-Sans-Bold")), - ), - Container( - margin: EdgeInsets.fromLTRB(20.0, 5.0, 20.0, 5.0), - child: Text( - widget.appo.doctorTitle + " " + widget.appo.doctorNameObj, - style: TextStyle( - color: Colors.grey[700], - fontSize: 15.0, - fontWeight: FontWeight.bold, - fontFamily: "Open-Sans-Bold")), - ), - Container( - margin: EdgeInsets.fromLTRB(20.0, 5.0, 20.0, 5.0), - child: Text(getDate(widget.appo.appointmentDate), - style: getTextStyle()), - ), - Container( - margin: EdgeInsets.fromLTRB(20.0, 5.0, 20.0, 5.0), - child: Text(widget.appo.projectName, style: getTextStyle()), - ), - Divider( - color: Colors.grey, - ), - Container( - margin: EdgeInsets.fromLTRB(20.0, 0.0, 20.0, 5.0), - child: Table( - children: [ - TableRow(children: [ - TableCell( - child: _getNormalText( - TranslationBase.of(context).patientShareToDo)), - TableCell( - child: _getNormalText(widget - .patientShareResponse.patientShare - .toString())), - ]), - TableRow(children: [ - TableCell( - child: _getNormalText( - TranslationBase.of(context).patientTaxToDo)), - TableCell( - child: _getNormalText(widget - .patientShareResponse.patientTaxAmount - .toString())), - ]), - TableRow(children: [ - TableCell( - child: _getNormalText(TranslationBase.of(context) - .patientShareTotalToDo)), - TableCell( - child: _getNormalText(widget - .patientShareResponse.patientShareWithTax - .toString())), - ]), - ], - ), - ), - Container( - alignment: Alignment.center, - margin: EdgeInsets.fromLTRB(20.0, 20.0, 20.0, 5.0), - child: Text("You can pay by following options: ", - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 16.0, - fontWeight: FontWeight.bold, - fontFamily: "Open-Sans")), - ), - Container( - alignment: Alignment.center, - margin: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 5.0), - child: Image.asset( - "assets/images/new-design/payment_options_invoice_confirmation.png", - width: 300), - ), - Container( - alignment: Alignment.center, - margin: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 15.0), - child: Text( - "Are You Sure You Want To Make payment for this Appointment?", - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 14.0, - color: Colors.red[700], - fontFamily: "Open-Sans")), - ), - Divider( - color: Colors.grey, - ), - Container( - alignment: Alignment.center, - height: 40.0, - child: Flex( - direction: Axis.horizontal, - children: [ - Expanded( - child: InkWell( - onTap: () { - Navigator.pop(context, null); - }, - child: Container( - child: Text("Cancel", - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 18.0, color: Colors.red[700])), - ), - ), + child: Column(crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.max, children: [ + Container( + margin: EdgeInsets.fromLTRB(20.0, 20.0, 20.0, 5.0), + child: Text(TranslationBase.of(context).invoiceDetails, style: TextStyle(fontSize: 25.0, fontWeight: FontWeight.bold)), + ), + Divider( + color: Colors.grey, + ), + Container( + margin: EdgeInsets.fromLTRB(20.0, 5.0, 20.0, 5.0), + child: Text(TranslationBase.of(context).appoDetails, style: TextStyle(fontSize: 15.0, fontWeight: FontWeight.bold)), + ), + Container( + margin: EdgeInsets.fromLTRB(20.0, 5.0, 20.0, 5.0), + child: Text(widget.appo.doctorTitle + " " + widget.appo.doctorNameObj, style: TextStyle(color: Colors.grey[700], fontSize: 15.0, fontWeight: FontWeight.bold)), + ), + Container( + margin: EdgeInsets.fromLTRB(20.0, 5.0, 20.0, 5.0), + child: Text(getDate(widget.appo.appointmentDate), style: getTextStyle()), + ), + Container( + margin: EdgeInsets.fromLTRB(20.0, 5.0, 20.0, 5.0), + child: Text(widget.appo.projectName, style: getTextStyle()), + ), + Divider( + color: Colors.grey, + ), + Container( + margin: EdgeInsets.fromLTRB(20.0, 0.0, 20.0, 5.0), + child: Table( + children: [ + TableRow(children: [ + TableCell(child: _getNormalText(TranslationBase.of(context).patientShareToDo)), + TableCell(child: _getNormalText(widget.patientShareResponse.patientShare.toString())), + ]), + TableRow(children: [ + TableCell(child: _getNormalText(TranslationBase.of(context).patientTaxToDo)), + TableCell(child: _getNormalText(widget.patientShareResponse.patientTaxAmount.toString())), + ]), + TableRow(children: [ + TableCell(child: _getNormalText(TranslationBase.of(context).patientShareTotalToDo)), + TableCell(child: _getNormalText(widget.patientShareResponse.patientShareWithTax.toString())), + ]), + ], + ), + ), + Divider( + color: Colors.grey, + ), + Container( + margin: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 5.0), + child: Text(TranslationBase.of(context).YouCanPayByTheFollowingOptions, style: TextStyle(fontSize: 14.0, fontWeight: FontWeight.bold)), + ), + Container(margin: EdgeInsets.fromLTRB(20.0, 5.0, 20.0, 5.0), child: getPaymentMethods()), + Container( + margin: EdgeInsets.fromLTRB(20.0, 5.0, 20.0, 15.0), + child: Text(TranslationBase.of(context).appoPaymentConfirm, style: TextStyle(fontSize: 14.0, color: CustomColors.accentColor)), + ), + Divider( + color: Colors.grey, + ), + Container( + alignment: Alignment.center, + height: 40.0, + child: Flex( + direction: Axis.horizontal, + children: [ + Expanded( + child: InkWell( + onTap: () { + Navigator.pop(context, null); + }, + child: Container( + child: Text(TranslationBase.of(context).cancel, textAlign: TextAlign.center, style: TextStyle(fontSize: 18.0, color: CustomColors.accentColor)), ), - Expanded( - child: InkWell( - onTap: () { - Navigator.pop(context, widget.patientShareResponse); + ), + ), + Expanded( + child: InkWell( + onTap: () { + Navigator.pop(context, widget.patientShareResponse); // widget.onPaymentMethodSelected(); - }, - child: Container( - child: Text("Ok", - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 18.0, - )), - ), - ), + }, + child: Container( + child: Text(TranslationBase.of(context).ok, + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 18.0, + )), ), - ], + ), ), - ), - ]), + ], + ), + ), + ]), ), ), ); @@ -182,19 +131,12 @@ class _PaymentDialogState extends State { _getNormalText(text) { return Container( margin: EdgeInsets.only(top: 10.0, right: 10.0), - child: Text(text, - textAlign: TextAlign.end, - style: TextStyle( - fontSize: 15, - fontFamily: 'Open-Sans', - letterSpacing: 0.5, - color: Colors.grey[700])), + child: Text(text, style: TextStyle(fontSize: 13, letterSpacing: 0.5, color: Colors.grey[700])), ); } TextStyle getTextStyle() { - return TextStyle( - color: Colors.grey[700], fontSize: 15.0, fontFamily: "Open-Sans-Bold"); + return TextStyle(color: Colors.grey[700], fontSize: 13.0); } // Future navigateToPaymentMethod(context) async { diff --git a/lib/pages/livecare/widgets/LiveCarePaymentDialog.dart b/lib/pages/livecare/widgets/LiveCarePaymentDialog.dart index 30c273ae..a8950e5d 100644 --- a/lib/pages/livecare/widgets/LiveCarePaymentDialog.dart +++ b/lib/pages/livecare/widgets/LiveCarePaymentDialog.dart @@ -2,6 +2,7 @@ import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/models/LiveCare/ERAppointmentFeesResponse.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/uitl/utils_new.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -38,7 +39,7 @@ class _LiveCarePaymentDialogState extends State { child: Container( height: 600.0, margin: EdgeInsets.all(20.0), - width: 450.0, + width: 500.0, child: SingleChildScrollView( child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -81,10 +82,8 @@ class _LiveCarePaymentDialogState extends State { ], ), Container( - alignment: Alignment.center, margin: EdgeInsets.only(bottom: 10.0, top: 10.0), child: Text(widget.clinicName, - textAlign: TextAlign.center, style: TextStyle(fontSize: 22.0, fontWeight: FontWeight.bold)), ), @@ -194,21 +193,13 @@ class _LiveCarePaymentDialogState extends State { color: Colors.grey[400], ), Container( - alignment: Alignment.center, margin: EdgeInsets.only(top: 10.0), child: new Text( TranslationBase.of(context).upComingPayOption, - textAlign: TextAlign.center, style: new TextStyle(fontSize: 14.0), ), ), - Container( - alignment: Alignment.center, - margin: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 5.0), - child: Image.asset( - "assets/images/new-design/payment_options_invoice_confirmation.png", - width: 300), - ), + Container(margin: EdgeInsets.fromLTRB(10.0, 5.0, 10.0, 5.0), child: getPaymentMethods()), Divider( thickness: 1.0, color: Colors.grey[400], @@ -272,10 +263,9 @@ class _LiveCarePaymentDialogState extends State { return Container( margin: EdgeInsets.only(top: 10.0, right: 10.0), child: Text(text, - textAlign: TextAlign.end, + textAlign: TextAlign.start, style: TextStyle( fontSize: 14, - // fontFamily: projectViewModel.isArabic ? 'Cairo' : 'Poppins', letterSpacing: 0.5, color: Colors.black)), ); @@ -285,10 +275,9 @@ class _LiveCarePaymentDialogState extends State { return Container( margin: EdgeInsets.only(top: 10.0, right: 10.0, bottom: 10.0), child: Text(text, - textAlign: TextAlign.end, + textAlign: TextAlign.start, style: TextStyle( fontSize: 14, - // fontFamily: projectViewModel.isArabic ? 'Cairo' : 'Poppins', letterSpacing: 0.5, fontWeight: FontWeight.bold, color: Colors.black)), diff --git a/lib/pages/livecare/widgets/clinic_list.dart b/lib/pages/livecare/widgets/clinic_list.dart index 87dd7d2b..3e2ba0cf 100644 --- a/lib/pages/livecare/widgets/clinic_list.dart +++ b/lib/pages/livecare/widgets/clinic_list.dart @@ -21,6 +21,7 @@ import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/utils.dart'; +import 'package:diplomaticquarterapp/uitl/utils_new.dart'; import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart'; import 'package:diplomaticquarterapp/widgets/dialogs/confirm_dialog.dart'; import 'package:diplomaticquarterapp/widgets/in_app_browser/InAppBrowser.dart'; @@ -439,7 +440,7 @@ class _clinic_listState extends State { isDataLoaded ? Container( height: MediaQuery.of(context).size.height * 0.7, - child: Column( + child: liveCareScheduleClinicsListResponse.clinicsHaveScheduleList.length > 0 ? Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ ListView.builder( @@ -465,7 +466,7 @@ class _clinic_listState extends State { height: 10.0, ), ], - ), + ): getNoDataWidget(context), ) : Container(), isDataLoaded diff --git a/lib/pages/medical/prescriptions/PrescriptionOrderOverveiw.dart b/lib/pages/medical/prescriptions/PrescriptionOrderOverveiw.dart index e081e32b..fd4f8b26 100644 --- a/lib/pages/medical/prescriptions/PrescriptionOrderOverveiw.dart +++ b/lib/pages/medical/prescriptions/PrescriptionOrderOverveiw.dart @@ -10,7 +10,6 @@ import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/utils_new.dart'; import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; -import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/dialogs/ConfirmWithMessageDialog.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:flutter/cupertino.dart'; @@ -77,9 +76,11 @@ class PrescriptionOrderOverview extends StatelessWidget { child: Padding( padding: const EdgeInsets.all(8.0), child: Center( - child: Text(prescriptionReportList[index].itemDescription.isNotEmpty - ? prescriptionReportList[index].itemDescription - : prescriptionReportList[index].itemDescriptionN)), + child: Text( + prescriptionReportList[index].itemDescription.isNotEmpty + ? prescriptionReportList[index].itemDescription + : prescriptionReportList[index].itemDescriptionN, + style: TextStyle(fontFamily: prescriptionReportList[index].itemDescription.isNotEmpty ? 'Poppins' : 'Cairo'))), )), ], ), @@ -130,7 +131,16 @@ class PrescriptionOrderOverview extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text(prescriptionReportEnhList[index].itemDescription), + Text( + (prescriptionReportList[index].itemDescription.isNotEmpty + ? prescriptionReportList[index].itemDescription + : prescriptionReportList[index].itemDescriptionN ?? ''), + style: TextStyle( + fontFamily: prescriptionReportList[index].itemDescription.isNotEmpty ? 'Poppins' : 'Cairo', + letterSpacing: -0.64, + color: Color(0xff2E303A), + fontSize: 16.0, + fontWeight: FontWeight.w600)), ], ), ), diff --git a/lib/uitl/translations_delegate_base.dart b/lib/uitl/translations_delegate_base.dart index 0a3177e0..d663881f 100644 --- a/lib/uitl/translations_delegate_base.dart +++ b/lib/uitl/translations_delegate_base.dart @@ -2361,6 +2361,14 @@ class TranslationBase { String get selectSlot => localizedValues["selectSlot"][locale.languageCode]; + String get invoiceDetails => localizedValues["invoiceDetails"][locale.languageCode]; + + String get appoDetails => localizedValues["appoDetails"][locale.languageCode]; + + String get appoPaymentConfirm => localizedValues["appoPaymentConfirm"][locale.languageCode]; + + + } class TranslationBaseDelegate extends LocalizationsDelegate { diff --git a/lib/uitl/utils_new.dart b/lib/uitl/utils_new.dart index 0bbad901..e9d70a1f 100644 --- a/lib/uitl/utils_new.dart +++ b/lib/uitl/utils_new.dart @@ -26,6 +26,22 @@ Color getColorFromHex(String hexColor) { return Color(int.parse(hexColor, radix: 16)); } +Widget getPaymentMethods() { + return Container( + child: Row( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Image.asset("assets/images/new/payment/Mada.png", width: 50, height: 50), + Image.asset("assets/images/new/payment/visa.png", width: 50, height: 50), + Image.asset("assets/images/new/payment/Mastercard.png", width: 50, height: 50), + Image.asset("assets/images/new/payment/Apple_Pay.png", width: 50, height: 50), + Image.asset("assets/images/new/payment/installments.png", width: 50, height: 50), + ], + ), + ); +} + Widget getNoDataWidget(BuildContext context) { return Container( child: Center( diff --git a/pubspec.yaml b/pubspec.yaml index c5541181..c9de653d 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -244,6 +244,7 @@ flutter: - assets/images/new/bottom_nav/ - assets/images/new/services/ - assets/images/new/appointment-rating/ + - assets/images/new/payment/ fonts: - family: WorkSans From 1223ab7a17137020ee70b2c562c0ea933a6920dd Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Wed, 13 Oct 2021 14:25:42 +0300 Subject: [PATCH 6/9] h20 week & month graph updated & improvements. --- lib/config/config.dart | 4 +- .../AlHabibMedicalService/H2O_view_model.dart | 31 ++- .../AlHabibMedicalService/h2o/h2o_page.dart | 184 ++++++------------ .../AlHabibMedicalService/h2o/month_page.dart | 63 +++--- .../AlHabibMedicalService/h2o/week_page.dart | 66 +++---- .../medical/vital_sign/vital_sign_item.dart | 3 +- lib/widgets/charts/custom_line_chart.dart | 148 ++++++++++++++ lib/widgets/others/app_scaffold_widget.dart | 8 +- 8 files changed, 311 insertions(+), 196 deletions(-) create mode 100644 lib/widgets/charts/custom_line_chart.dart diff --git a/lib/config/config.dart b/lib/config/config.dart index 7840b97d..d7ffabcd 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -12,8 +12,8 @@ const PACKAGES_PRODUCTS = '/api/products'; const PACKAGES_CUSTOMER = '/api/customers'; const PACKAGES_SHOPPING_CART = '/api/shopping_cart_items'; const PACKAGES_ORDERS = '/api/orders'; -// const BASE_URL = 'https://uat.hmgwebservices.com/'; -const BASE_URL = 'https://hmgwebservices.com/'; +const BASE_URL = 'https://uat.hmgwebservices.com/'; +// const BASE_URL = 'https://hmgwebservices.com/'; // Pharmacy UAT URLs // const BASE_PHARMACY_URL = 'https://uat.hmgwebservices.com/epharmacy/api/'; diff --git a/lib/core/viewModels/AlHabibMedicalService/H2O_view_model.dart b/lib/core/viewModels/AlHabibMedicalService/H2O_view_model.dart index 219103da..3e980071 100644 --- a/lib/core/viewModels/AlHabibMedicalService/H2O_view_model.dart +++ b/lib/core/viewModels/AlHabibMedicalService/H2O_view_model.dart @@ -9,14 +9,19 @@ import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/H2O/user_p import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/H2O/user_progress_for_week_data_model.dart'; import 'package:diplomaticquarterapp/core/service/AlHabibMedicalService/H2O_service.dart'; import 'package:diplomaticquarterapp/core/viewModels/base_view_model.dart'; +import 'package:diplomaticquarterapp/widgets/charts/custom_line_chart.dart'; import '../../../locator.dart'; class H2OViewModel extends BaseViewModel { H2OService _h2OService = locator(); - List userProgressForWeekDataSeries; - List userProgressForMonthDataSeries; + // + // List userProgressForWeekDataSeries; + List userProgressForWeekDataSeries; + List userProgressForMonthDataSeries; + + // List userProgressForMonthDataSeries; UserDetailModel get userDetail => _h2OService.userDetailModel; @@ -71,7 +76,8 @@ class H2OViewModel extends BaseViewModel { error = _h2OService.error; setState(ViewState.Error); } else { - userProgressForWeekDataSeries = createUserProgressForWeekDataSeries(); + // userProgressForWeekDataSeries = createUserProgressForWeekDataSeries(); + userProgressForWeekDataSeries = createUserProgressForWeekDataSeriesNew(); setState(ViewState.Idle); } } @@ -83,7 +89,7 @@ class H2OViewModel extends BaseViewModel { error = _h2OService.error; setState(ViewState.Error); } else { - userProgressForMonthDataSeries = createUserProgressForMonthDataSeries(); + userProgressForMonthDataSeries = createUserProgressForMonthDataSeriesNew(); setState(ViewState.Idle); } } @@ -113,6 +119,23 @@ class H2OViewModel extends BaseViewModel { ]; } + List createUserProgressForWeekDataSeriesNew() { + List list = []; + + _h2OService.userProgressForWeekDataList.forEach((UserProgressForWeekDataModel data) { + list.add(new LineChartModel(data.dayName, data.percentageConsumed)); + }); + return list; + } + + List createUserProgressForMonthDataSeriesNew() { + List list = []; + _h2OService.userProgressForMonthDataList.forEach((UserProgressForMonthDataModel data) { + list.add(new LineChartModel(data.monthName, data.percentageConsumed)); + }); + return list; + } + List> createUserProgressForMonthDataSeries() { List globalData = []; _h2OService.userProgressForMonthDataList.forEach((UserProgressForMonthDataModel data) { diff --git a/lib/pages/AlHabibMedicalService/h2o/h2o_page.dart b/lib/pages/AlHabibMedicalService/h2o/h2o_page.dart index 982b9044..69488bfe 100644 --- a/lib/pages/AlHabibMedicalService/h2o/h2o_page.dart +++ b/lib/pages/AlHabibMedicalService/h2o/h2o_page.dart @@ -77,132 +77,70 @@ class _H2OPageState extends State with SingleTickerProviderStateMixin { }, ), ], - body: Scaffold( - // extendBodyBehindAppBar: true, - // appBar: PreferredSize( - // preferredSize: Size.fromHeight(65.0), - // child: Stack( - // children: [ - // Positioned( - // bottom: 1, - // left: 0, - // right: 0, - // child: BackdropFilter( - // filter: ImageFilter.blur(sigmaX: 10, sigmaY: 10), - // child: Container( - // color: Theme.of(context).scaffoldBackgroundColor.withOpacity(0.8), - // height: 70.0, - // ), - // ), - // ), - // Center( - // child: Container( - // height: 60.0, - // alignment: Alignment.center, - // // margin: EdgeInsets.only(top: 10.0), - // // width: MediaQuery.of(context).size.width * 0.9, - // - // child: TabBar( - // isScrollable: false, - // controller: _tabController, - // indicatorWeight: 5.0, - // indicatorSize: TabBarIndicatorSize.tab, - // indicatorColor: Colors.red[800], - // labelColor: Theme.of(context).primaryColor, - // labelPadding: EdgeInsets.only(top: 4.0, left: 10.0, right: 13.0), - // unselectedLabelColor: Colors.grey[800], - // tabs: [ - // Container( - // width: MediaQuery.of(context).size.width * 0.28, - // child: Center( - // child: Texts(TranslationBase.of(context).today), - // ), - // ), - // Container( - // width: MediaQuery.of(context).size.width * 0.28, - // child: Center( - // child: Texts(TranslationBase.of(context).week), - // ), - // ), - // Container( - // width: MediaQuery.of(context).size.width * 0.28, - // child: Center( - // child: Texts(TranslationBase.of(context).month), - // ), - // ), - // ], - // ), - // ), - // ), - // ], - // ), - // ), - // backgroundColor: Colors.white, - body: Column( - children: [ - TabBar( + body: Column( + children: [ + TabBar( + controller: _tabController, + indicatorWeight: 3.0, + indicatorSize: TabBarIndicatorSize.tab, + labelColor: Color(0xff2B353E), + unselectedLabelColor: Color(0xff575757), + labelPadding: EdgeInsets.only(top: 15, bottom: 13, left: 20, right: 20), + labelStyle: TextStyle( + fontFamily: projectViewModel.isArabic ? 'Cairo' : 'Poppins', + fontSize: 16, + fontWeight: FontWeight.w600, + letterSpacing: -0.48, + ), + unselectedLabelStyle: TextStyle( + fontFamily: projectViewModel.isArabic ? 'Cairo' : 'Poppins', + fontSize: 16, + fontWeight: FontWeight.w600, + letterSpacing: -0.48, + ), + tabs: [Text(TranslationBase.of(context).today), Text(TranslationBase.of(context).week), Text(TranslationBase.of(context).month.toLowerCase().capitalizeFirstofEach)], + ), + Expanded( + child: TabBarView( + physics: BouncingScrollPhysics(), controller: _tabController, - indicatorWeight: 3.0, - indicatorSize: TabBarIndicatorSize.tab, - labelColor: Color(0xff2B353E), - unselectedLabelColor: Color(0xff575757), - labelPadding: EdgeInsets.only(top: 15, bottom: 13, left: 20, right: 20), - labelStyle: TextStyle( - fontFamily: projectViewModel.isArabic ? 'Cairo' : 'Poppins', - fontSize: 16, - fontWeight: FontWeight.w600, - letterSpacing: -0.48, - ), - unselectedLabelStyle: TextStyle( - fontFamily: projectViewModel.isArabic ? 'Cairo' : 'Poppins', - fontSize: 16, - fontWeight: FontWeight.w600, - letterSpacing: -0.48, - ), - tabs: [Text(TranslationBase.of(context).today), Text(TranslationBase.of(context).week), Text(TranslationBase.of(context).month.toLowerCase().capitalizeFirstofEach)], + children: [TodayPage(), WeekPage(), MonthPage()], ), - Expanded( - child: TabBarView( - physics: BouncingScrollPhysics(), - controller: _tabController, - children: [TodayPage(), WeekPage(), MonthPage()], - ), - ) - ], - ), - bottomNavigationBar: BottomNavBar( - changeIndex: (index) { - if (index == 0) { - IS_VOICE_COMMAND_CLOSED = false; - } else if (index == 1) { - Navigator.push( - context, - FadePage( - page: AppScaffold( - appBarTitle: TranslationBase.of(context).medicalProfile, - isShowAppBar: true, - showHomeAppBarIcon: false, - appBarIcons: [ - IconButton( - icon: Image.asset("assets/images/new-design/setting_gear_icon.png"), - color: Colors.white, - onPressed: () => Navigator.of(context).pushNamed( - SETTINGS, - ), + ) + ], + ), + bottomNavigationBar: BottomNavBar( + changeIndex: (index) { + if (index == 0) { + IS_VOICE_COMMAND_CLOSED = false; + } else if (index == 1) { + Navigator.push( + context, + FadePage( + page: AppScaffold( + appBarTitle: TranslationBase.of(context).medicalProfile, + isShowAppBar: true, + showHomeAppBarIcon: false, + appBarIcons: [ + IconButton( + icon: Image.asset("assets/images/new-design/setting_gear_icon.png"), + color: Colors.white, + onPressed: () => Navigator.of(context).pushNamed( + SETTINGS, ), - ], - body: MedicalProfilePageNew()))); - } else if (index == 2) { - Navigator.of(context).pushNamedAndRemoveUntil(HOME, (Route route) => false); - } else if (index == 3) { - Navigator.of(context).pushNamed(MY_FAMILIY); - } else if (index == 4) { - Navigator.push(context, FadePage(page: ToDo(isShowAppBar: false))); - } - }, - showHomeIcon: true, - index: 0, - ), + ), + ], + body: MedicalProfilePageNew()))); + } else if (index == 2) { + Navigator.of(context).pushNamedAndRemoveUntil(HOME, (Route route) => false); + } else if (index == 3) { + Navigator.of(context).pushNamed(MY_FAMILIY); + } else if (index == 4) { + Navigator.push(context, FadePage(page: ToDo(isShowAppBar: false))); + } + }, + showHomeIcon: true, + index: 0, ), ), ); diff --git a/lib/pages/AlHabibMedicalService/h2o/month_page.dart b/lib/pages/AlHabibMedicalService/h2o/month_page.dart index 8867fb77..daf91cb9 100644 --- a/lib/pages/AlHabibMedicalService/h2o/month_page.dart +++ b/lib/pages/AlHabibMedicalService/h2o/month_page.dart @@ -6,10 +6,11 @@ import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/charts/app_bar_chart.dart'; import 'package:diplomaticquarterapp/widgets/errors/app_embedded_error.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; -import 'package:diplomaticquarterapp/widgets/progress_indicator/app_circular_progress_Indeicator.dart'; +import 'package:diplomaticquarterapp/uitl/utils_new.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; +import 'package:diplomaticquarterapp/widgets/charts/custom_line_chart.dart'; class MonthPage extends StatelessWidget { @override @@ -21,37 +22,39 @@ class MonthPage extends StatelessWidget { isShowAppBar: false, appBarTitle: TranslationBase.of(context).h2o, baseViewModel: model, - body: Padding( - padding: EdgeInsets.all(8.0), - child: ListView( - children: [ - Center( - child: Text( - TranslationBase.of(context).waterConsumedInMonth, - textAlign: TextAlign.center, - style: TextStyle(fontSize: 20.0, color: Colors.black87), - ), - ), - SizedBox(height: 16), - Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Container( - height: 10, - width: 40, - color: Colors.blue, + body: SingleChildScrollView( + padding: EdgeInsets.all(21), + physics: BouncingScrollPhysics(), + child: (model.userProgressForMonthDataSeries ?? []).isEmpty + ? getNoDataWidget(context) + : Container( + padding: EdgeInsets.fromLTRB(16, 14, 16, 14), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.all( + Radius.circular(10.0), + ), + boxShadow: [ + BoxShadow( + color: Color(0xff000000).withOpacity(.05), + blurRadius: 27, + offset: Offset(0, -3), + ), + ], ), - SizedBox(width: 8), - Text( - TranslationBase.of(context).waterConsumedInMonth, - style: TextStyle(fontSize: 12.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + TranslationBase.of(context).waterConsumedInMonth, + style: TextStyle(fontSize: 16.0, color: Color(0xff2E303A), fontWeight: FontWeight.w600, letterSpacing: -0.64), + ), + SizedBox(height: 24), + CustomLineChart(model.userProgressForMonthDataSeries, projectViewModel.isArabic), + ], ), - ], - ), - // SizedBox(height: 8), - AppBarChart(seriesList: model.userProgressForMonthDataSeries, isArabic: projectViewModel.isArabic), - ], - ), + ), ), ), ); diff --git a/lib/pages/AlHabibMedicalService/h2o/week_page.dart b/lib/pages/AlHabibMedicalService/h2o/week_page.dart index 6f4423b2..83529afd 100644 --- a/lib/pages/AlHabibMedicalService/h2o/week_page.dart +++ b/lib/pages/AlHabibMedicalService/h2o/week_page.dart @@ -1,12 +1,10 @@ -import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/H2O_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; -import 'package:diplomaticquarterapp/widgets/charts/app_bar_chart.dart'; -import 'package:diplomaticquarterapp/widgets/errors/app_embedded_error.dart'; +import 'package:diplomaticquarterapp/uitl/utils_new.dart'; +import 'package:diplomaticquarterapp/widgets/charts/custom_line_chart.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; -import 'package:diplomaticquarterapp/widgets/progress_indicator/app_circular_progress_Indeicator.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -21,37 +19,39 @@ class WeekPage extends StatelessWidget { isShowAppBar: false, appBarTitle: TranslationBase.of(context).h2o, baseViewModel: model, - body: Padding( - padding: EdgeInsets.all(8.0), - child: ListView( - children: [ - Center( - child: Text( - TranslationBase.of(context).waterConsumedInWeek, - textAlign: TextAlign.center, - style: TextStyle(fontSize: 20.0, color: Colors.black87), - ), - ), - SizedBox(height: 16), - Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Container( - height: 10, - width: 40, - color: Colors.blue, + body: SingleChildScrollView( + padding: EdgeInsets.all(21), + physics: BouncingScrollPhysics(), + child: (model.userProgressForWeekDataSeries ?? []).isEmpty + ? getNoDataWidget(context) + : Container( + padding: EdgeInsets.fromLTRB(16, 14, 16, 14), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.all( + Radius.circular(10.0), + ), + boxShadow: [ + BoxShadow( + color: Color(0xff000000).withOpacity(.05), + blurRadius: 27, + offset: Offset(0, -3), + ), + ], ), - SizedBox(width: 8), - Text( - TranslationBase.of(context).waterConsumedInWeek, - style: TextStyle(fontSize: 12.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + TranslationBase.of(context).waterConsumedInWeek, + style: TextStyle(fontSize: 16.0, color: Color(0xff2E303A), fontWeight: FontWeight.w600, letterSpacing: -0.64), + ), + SizedBox(height: 24), + CustomLineChart(model.userProgressForWeekDataSeries, projectViewModel.isArabic), + ], ), - ], - ), - // SizedBox(height: 8), - AppBarChart(seriesList: model.userProgressForWeekDataSeries,isArabic: projectViewModel.isArabic), - ], - ), + ), ), ), ); diff --git a/lib/pages/medical/vital_sign/vital_sign_item.dart b/lib/pages/medical/vital_sign/vital_sign_item.dart index 37cbbf27..1549db39 100644 --- a/lib/pages/medical/vital_sign/vital_sign_item.dart +++ b/lib/pages/medical/vital_sign/vital_sign_item.dart @@ -42,6 +42,7 @@ class VitalSignItem extends StatelessWidget { maxLines: 1, style: TextStyle( fontSize: 15, + color: Color(0xff2B353E), letterSpacing: -0.45, fontWeight: FontWeight.bold, ), @@ -64,7 +65,7 @@ class VitalSignItem extends StatelessWidget { height: MediaQuery.of(context).size.width / 16, child: SvgPicture.asset( vitalSign.icon, - color: Colors.black, + color: Color(0xff2E303A), ), ), ], diff --git a/lib/widgets/charts/custom_line_chart.dart b/lib/widgets/charts/custom_line_chart.dart new file mode 100644 index 00000000..cfd1e718 --- /dev/null +++ b/lib/widgets/charts/custom_line_chart.dart @@ -0,0 +1,148 @@ +import 'dart:math' as math; + +import 'package:fl_chart/fl_chart.dart'; +import 'package:flutter/material.dart'; + +class LineChartModel { + int value; + String title; + + LineChartModel(this.title, this.value); +} + +class CustomLineChart extends StatefulWidget { + final List list; + final bool isArabic; + CustomLineChart(this.list, this.isArabic); + + @override + _CustomLineChartState createState() => _CustomLineChartState(); +} + +class _CustomLineChartState extends State { + bool showAvg = false; + + final List myList = [ + LineChartModel("", 0), + LineChartModel("", 0), + // LineChartModel("", 0), + ]; + + List list = []; + + @override + void initState() { + super.initState(); + if (widget.list.isEmpty) { + list = myList; + } else { + list = widget.list; + } + } + + @override + Widget build(BuildContext context) { + return Stack( + children: [ + AspectRatio( + aspectRatio: 1.0, + child: LineChart( + mainData(), + ), + ), + SizedBox( + width: 60, + height: 34, + child: TextButton( + onPressed: () { + setState(() { + showAvg = !showAvg; + }); + }, + child: Text( + '', + style: TextStyle(fontSize: 12, color: showAvg ? Colors.white.withOpacity(0.5) : Colors.white), + ), + ), + ), + ], + ); + } + + LineChartData mainData() { + SideTitles right = SideTitles( + showTitles: true, + margin: 0, + reservedSize: 8, + getTitles: (value) { + return ''; + }, + ); + SideTitles left = SideTitles( + showTitles: true, + interval: 1, + getTextStyles: (value) => const TextStyle(color: Color(0xff2E303A), fontWeight: FontWeight.w600, fontSize: 12, letterSpacing: 0), + getTitles: (value) { + if (widget.list.isEmpty) { + return (value).toInt().toString(); + } + return (value * 20).toInt().toString(); + }, + reservedSize: 22, + margin: 12, + ); + return LineChartData( + lineTouchData: LineTouchData(enabled: false), + gridData: FlGridData( + show: true, + drawVerticalLine: false, + getDrawingHorizontalLine: (value) { + return FlLine( + color: const Color(0xffEFEFEF), + strokeWidth: 1, + ); + }, + ), + titlesData: FlTitlesData( + show: true, + topTitles: SideTitles(showTitles: false), + bottomTitles: SideTitles( + showTitles: true, + reservedSize: 22, + interval: 1, + getTextStyles: (value) => const TextStyle(color: Color(0xff2E303A), fontWeight: FontWeight.w600, fontSize: 12, letterSpacing: 0), + getTitles: (value) { + String _title = list[value.toInt()].title; + return (_title.length > 3 ? (widget.isArabic ? _title : _title.substring(0, 3)) : _title).toUpperCase(); + }, + margin: 12, + ), + rightTitles: widget.isArabic ? left : right, + leftTitles: widget.isArabic ? right : left), + borderData: FlBorderData( + show: true, + border: Border.symmetric( + horizontal: BorderSide(color: const Color(0xffEFEFEF), width: 1), + ), + ), + minX: 0, + maxX: widget.list.isEmpty ? 1 : widget.list.length - 1.0, + minY: widget.list.isEmpty ? -1 : 0, + maxY: widget.list.isEmpty ? 1 : 5, + lineBarsData: [ + LineChartBarData( + spots: [ + for (int i = 0; i < list.length; i++) FlSpot(i + 0.0, (list[i].value / 20) + 0.0), + ], + isCurved: true, + preventCurveOverShooting: true, + barWidth: 2, + isStrokeCapRound: true, + dotData: FlDotData( + show: false, + ), + ), + ], + ); + } +} diff --git a/lib/widgets/others/app_scaffold_widget.dart b/lib/widgets/others/app_scaffold_widget.dart index 5d4e3704..a0f95c1d 100644 --- a/lib/widgets/others/app_scaffold_widget.dart +++ b/lib/widgets/others/app_scaffold_widget.dart @@ -28,6 +28,7 @@ class AppScaffold extends StatelessWidget { final String appBarTitle; final Widget body; final Widget bottomSheet; + final Widget bottomNavigationBar; final bool isLoading; final bool isShowAppBar; final bool showNewAppBar; @@ -70,6 +71,7 @@ class AppScaffold extends StatelessWidget { this.showNewAppBarTitle = false, this.hasAppBarParam, this.bottomSheet, + this.bottomNavigationBar, this.baseViewModel, this.floatingActionButton, this.isPharmacy = false, @@ -118,7 +120,7 @@ class AppScaffold extends StatelessWidget { dropDownList: dropDownList ?? [], dropDownIndexChange: dropDownIndexChange, appBarIcons: appBarIcons, - onTap: onTap, + onTap: onTap, ) : (isShowAppBar ? appBar = AppBarWidget( @@ -151,6 +153,7 @@ class AppScaffold extends StatelessWidget { ) : buildBodyWidget(context), ), + bottomNavigationBar: bottomNavigationBar, floatingActionButton: floatingActionButton, ); } @@ -174,8 +177,7 @@ class NewAppBarWidget extends StatelessWidget with PreferredSizeWidget { final List appBarIcons; Function onTap; - NewAppBarWidget( - {Key key, this.showTitle = false, this.showDropDown = false, this.title = "", this.dropDownList, this.appBarIcons, this.dropdownIndexValue, this.dropDownIndexChange, this.onTap}) + NewAppBarWidget({Key key, this.showTitle = false, this.showDropDown = false, this.title = "", this.dropDownList, this.appBarIcons, this.dropdownIndexValue, this.dropDownIndexChange, this.onTap}) : super(key: key); @override From 21863cfe06e777c68289415638ef68257de7ce4c Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Wed, 13 Oct 2021 14:51:22 +0300 Subject: [PATCH 7/9] improvements. --- .../AlHabibMedicalService/h2o/h2o_page.dart | 5 + .../medical/balance/advance_payment_page.dart | 396 +++++++++--------- 2 files changed, 208 insertions(+), 193 deletions(-) diff --git a/lib/pages/AlHabibMedicalService/h2o/h2o_page.dart b/lib/pages/AlHabibMedicalService/h2o/h2o_page.dart index ef2bc2e9..d216cd21 100644 --- a/lib/pages/AlHabibMedicalService/h2o/h2o_page.dart +++ b/lib/pages/AlHabibMedicalService/h2o/h2o_page.dart @@ -1,5 +1,6 @@ import 'dart:ui'; +import 'package:diplomaticquarterapp/config/config.dart'; import 'package:diplomaticquarterapp/core/model/ImagesInfo.dart'; import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/H2O_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; @@ -8,8 +9,12 @@ import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/h2o/h20_setting import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/h2o/month_page.dart'; import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/h2o/today_page.dart'; import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/h2o/week_page.dart'; +import 'package:diplomaticquarterapp/pages/ToDoList/ToDo.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart'; +import 'package:diplomaticquarterapp/pages/medical/medical_profile_page_new.dart'; +import 'package:diplomaticquarterapp/routes.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/widgets/bottom_navigation/bottom_nav_bar.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:flutter/cupertino.dart'; diff --git a/lib/pages/medical/balance/advance_payment_page.dart b/lib/pages/medical/balance/advance_payment_page.dart index 9e587b7f..338aff23 100644 --- a/lib/pages/medical/balance/advance_payment_page.dart +++ b/lib/pages/medical/balance/advance_payment_page.dart @@ -67,70 +67,38 @@ class _AdvancePaymentPageState extends State { return BaseView( onModelReady: (model) => model.getHospitals(), builder: (_, model, w) => AppScaffold( - isShowAppBar: true, - imagesInfo: imagesInfo, - appBarTitle: TranslationBase.of(context).advancePayment, - description: TranslationBase.of(context).infoAdvancePayment, - showNewAppBarTitle: true, - showNewAppBar: true, - backgroundColor: CustomColors.appBackgroudGreyColor, - body: SingleChildScrollView( - physics: ScrollPhysics(), - child: Container( - margin: EdgeInsets.all(12), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - TranslationBase.of(context).advancePaymentLabel, - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 14, - fontWeight: FontWeight.w600, - letterSpacing: -0.46, - ), - ), - SizedBox( - height: 12, - ), - InkWell( - onTap: () => confirmSelectBeneficiaryDialog(model), - child: Container( - padding: EdgeInsets.all(8), - width: double.infinity, - height: 65, - decoration: BoxDecoration(borderRadius: BorderRadius.circular(12), color: Colors.white), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - getBeneficiaryType(), - style: TextStyle( - fontSize: 14, - fontWeight: FontWeight.w600, - letterSpacing: -0.46, - ), - ), - Icon(Icons.arrow_drop_down) - ], + isShowAppBar: true, + imagesInfo: imagesInfo, + appBarTitle: TranslationBase.of(context).advancePayment, + description: TranslationBase.of(context).infoAdvancePayment, + showNewAppBarTitle: true, + showNewAppBar: true, + backgroundColor: CustomColors.appBackgroudGreyColor, + body: Column( + children: [ + Expanded( + child: SingleChildScrollView( + padding: EdgeInsets.all(21), + physics: BouncingScrollPhysics(), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + TranslationBase.of(context).advancePaymentLabel, + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w600, + letterSpacing: -0.46, ), ), - ), - if (beneficiaryType == BeneficiaryType.MyFamilyFiles) SizedBox( height: 12, ), - if (beneficiaryType == BeneficiaryType.MyFamilyFiles) InkWell( - onTap: () { - GifLoaderDialogUtils.showMyDialog(context); - model.getFamilyFiles().then((value) { - GifLoaderDialogUtils.hideDialog(context); - confirmSelectFamilyDialog(model.getAllSharedRecordsByStatusResponse.getAllSharedRecordsByStatusList); - }); - }, + onTap: () => confirmSelectBeneficiaryDialog(model), child: Container( - padding: EdgeInsets.all(12), + padding: EdgeInsets.all(8), width: double.infinity, height: 65, decoration: BoxDecoration(borderRadius: BorderRadius.circular(12), color: Colors.white), @@ -138,42 +106,102 @@ class _AdvancePaymentPageState extends State { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( - getFamilyMembersName(), + getBeneficiaryType(), style: TextStyle( fontSize: 14, fontWeight: FontWeight.w600, letterSpacing: -0.46, ), ), - Icon(Icons.arrow_drop_down), + Icon(Icons.arrow_drop_down) ], ), ), ), - SizedBox( - height: 12, - ), - NewTextFields( - hintText: TranslationBase.of(context).fileNumber, - controller: _fileTextController, - readOnly: beneficiaryType == BeneficiaryType.OtherAccount ? false : true, - ), - if (beneficiaryType == BeneficiaryType.OtherAccount) + if (beneficiaryType == BeneficiaryType.MyFamilyFiles) + SizedBox( + height: 12, + ), + if (beneficiaryType == BeneficiaryType.MyFamilyFiles) + InkWell( + onTap: () { + GifLoaderDialogUtils.showMyDialog(context); + model.getFamilyFiles().then((value) { + GifLoaderDialogUtils.hideDialog(context); + confirmSelectFamilyDialog(model.getAllSharedRecordsByStatusResponse.getAllSharedRecordsByStatusList); + }); + }, + child: Container( + padding: EdgeInsets.all(12), + width: double.infinity, + height: 65, + decoration: BoxDecoration(borderRadius: BorderRadius.circular(12), color: Colors.white), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + getFamilyMembersName(), + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w600, + letterSpacing: -0.46, + ), + ), + Icon(Icons.arrow_drop_down), + ], + ), + ), + ), + SizedBox( + height: 12, + ), + NewTextFields( + hintText: TranslationBase.of(context).fileNumber, + controller: _fileTextController, + readOnly: beneficiaryType == BeneficiaryType.OtherAccount ? false : true, + ), + if (beneficiaryType == BeneficiaryType.OtherAccount) + SizedBox( + height: 12, + ), + if (beneficiaryType == BeneficiaryType.OtherAccount) + InkWell( + onTap: () { + if (_fileTextController.text.isNotEmpty) { + GifLoaderDialogUtils.showMyDialog(context); + model.getPatientInfoByPatientID(id: _fileTextController.text).then((value) { + GifLoaderDialogUtils.hideDialog(context); + confirmSelectPatientDialog(model.patientInfoList); + }); + } else + AppToast.showErrorToast(message: 'Please Enter The File Number'); + }, + child: Container( + padding: EdgeInsets.all(12), + width: double.infinity, + height: 65, + decoration: BoxDecoration(borderRadius: BorderRadius.circular(12), color: Colors.white), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + getPatientName(), + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w600, + letterSpacing: -0.46, + ), + ), + Icon(Icons.arrow_drop_down), + ], + ), + ), + ), SizedBox( height: 12, ), - if (beneficiaryType == BeneficiaryType.OtherAccount) InkWell( - onTap: () { - if (_fileTextController.text.isNotEmpty) { - GifLoaderDialogUtils.showMyDialog(context); - model.getPatientInfoByPatientID(id: _fileTextController.text).then((value) { - GifLoaderDialogUtils.hideDialog(context); - confirmSelectPatientDialog(model.patientInfoList); - }); - } else - AppToast.showErrorToast(message: 'Please Enter The File Number'); - }, + onTap: () => confirmSelectHospitalDialog(model.hospitals), child: Container( padding: EdgeInsets.all(12), width: double.infinity, @@ -183,7 +211,7 @@ class _AdvancePaymentPageState extends State { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( - getPatientName(), + getHospitalName(), style: TextStyle( fontSize: 14, fontWeight: FontWeight.w600, @@ -195,132 +223,114 @@ class _AdvancePaymentPageState extends State { ), ), ), - SizedBox( - height: 12, - ), - InkWell( - onTap: () => confirmSelectHospitalDialog(model.hospitals), - child: Container( - padding: EdgeInsets.all(12), - width: double.infinity, - height: 65, - decoration: BoxDecoration(borderRadius: BorderRadius.circular(12), color: Colors.white), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - getHospitalName(), - style: TextStyle( - fontSize: 14, - fontWeight: FontWeight.w600, - letterSpacing: -0.46, - ), - ), - Icon(Icons.arrow_drop_down), - ], - ), + SizedBox( + height: 12, ), - ), - SizedBox( - height: 12, - ), - NewTextFields( - hintText: TranslationBase.of(context).amount, - keyboardType: TextInputType.numberWithOptions(signed: false, decimal: true), - onChanged: (value) { - setState(() { - amount = value; - }); - }, - ), - SizedBox( - height: 12, - ), - if (model.user != null) NewTextFields( - hintText: TranslationBase.of(context).depositorEmail, - initialValue: model.user.emailAddress, + hintText: TranslationBase.of(context).amount, + keyboardType: TextInputType.numberWithOptions(signed: false, decimal: true), onChanged: (value) { - email = value; + setState(() { + amount = value; + }); }, ), - SizedBox( - height: 12, - ), - NewTextFields( - hintText: TranslationBase.of(context).notes, - controller: _notesTextController, - ), - SizedBox( - height: MediaQuery.of(context).size.height * 0.15, - ) - ], + SizedBox( + height: 12, + ), + if (model.user != null) + NewTextFields( + hintText: TranslationBase.of(context).depositorEmail, + initialValue: model.user.emailAddress, + onChanged: (value) { + email = value; + }, + ), + SizedBox( + height: 12, + ), + NewTextFields( + hintText: TranslationBase.of(context).notes, + controller: _notesTextController, + ), + SizedBox( + height: MediaQuery.of(context).size.height * 0.15, + ) + ], + ), ), ), - ), - bottomSheet: Container( - width: double.infinity, - color: Theme.of(context).scaffoldBackgroundColor, - padding: EdgeInsets.all(12), - child: DefaultButton( - TranslationBase.of(context).submit, - (amount.isEmpty || _fileTextController.text.isEmpty || _selectedHospital == null) ? null : - () { - var mobileNum; - var patientName; + Container( + color: Colors.white, + padding: EdgeInsets.only(top: 16, bottom: 16, right: 21, left: 21), + child: DefaultButton( + TranslationBase.of(context).submit, + (amount.isEmpty || _fileTextController.text.isEmpty || _selectedHospital == null) + ? null + : () { + var mobileNum; + var patientName; - if (beneficiaryType == BeneficiaryType.MyFamilyFiles) { - mobileNum = selectedPatientFamily.mobileNumber; - patientName = selectedPatientFamily.patientName; - } - - if (beneficiaryType == BeneficiaryType.MyAccount) { - mobileNum = model.user.mobileNumber; - patientName = model.user.firstName; - } + if (beneficiaryType == BeneficiaryType.MyFamilyFiles) { + mobileNum = selectedPatientFamily.mobileNumber; + patientName = selectedPatientFamily.patientName; + } - if (beneficiaryType == BeneficiaryType.OtherAccount) { - mobileNum = _selectedPatientInfo.mobileNumber; - patientName = _selectedPatientInfo.fullName; - } + if (beneficiaryType == BeneficiaryType.MyAccount) { + mobileNum = model.user.mobileNumber; + patientName = model.user.firstName; + } - advanceModel.fileNumber = _fileTextController.text; - advanceModel.hospitalsModel = _selectedHospital; - advanceModel.note = _notesTextController.text; - advanceModel.email = email ?? model.user.emailAddress; - advanceModel.amount = amount; - advanceModel.mobileNumber = mobileNum; - advanceModel.patientName = patientName; - GifLoaderDialogUtils.showMyDialog(context); - model.getPatientInfoByPatientIDAndMobileNumber(advanceModel).then((value) { - GifLoaderDialogUtils.hideDialog(context); - if (model.state != ViewState.Error && model.state != ViewState.ErrorLocal) { - Utils.hideKeyboard(context); - Navigator.push(context, FadePage(page: PaymentMethod( - onSelectedMethod: (String metohd) { - setState(() {}); + if (beneficiaryType == BeneficiaryType.OtherAccount) { + mobileNum = _selectedPatientInfo.mobileNumber; + patientName = _selectedPatientInfo.fullName; } - ))).then( - (value) { - Navigator.push( - context, - FadePage( - page: ConfirmPaymentPage( - advanceModel: advanceModel, - selectedPaymentMethod: value, - patientInfoAndMobileNumber: model.patientInfoAndMobileNumber, - authenticatedUser: authUser, - ), - ), - ); + + advanceModel.fileNumber = _fileTextController.text; + advanceModel.hospitalsModel = _selectedHospital; + advanceModel.note = _notesTextController.text; + advanceModel.email = email ?? model.user.emailAddress; + advanceModel.amount = amount; + advanceModel.mobileNumber = mobileNum; + advanceModel.patientName = patientName; + GifLoaderDialogUtils.showMyDialog(context); + model.getPatientInfoByPatientIDAndMobileNumber(advanceModel).then((value) { + GifLoaderDialogUtils.hideDialog(context); + if (model.state != ViewState.Error && model.state != ViewState.ErrorLocal) { + Utils.hideKeyboard(context); + Navigator.push( + context, + FadePage( + page: PaymentMethod(onSelectedMethod: (String metohd) { + setState(() {}); + }), + ), + ).then( + (value) { + Navigator.push( + context, + FadePage( + page: ConfirmPaymentPage( + advanceModel: advanceModel, + selectedPaymentMethod: value, + patientInfoAndMobileNumber: model.patientInfoAndMobileNumber, + authenticatedUser: authUser, + ), + ), + ); + }, + ); + } + }); }, - ); - } - }); - }, - disabledColor: Colors.grey, + color: Color(0xffD02127), + textColor: Colors.white, + disabledColor: Color(0xffEAEAEA), + ), ), - )), + ], + ), + ), ); } From dde16a13fe3ec6f089bf5fd54f939bb5bc1de927 Mon Sep 17 00:00:00 2001 From: "Mirza.Shafique" Date: Wed, 13 Oct 2021 15:36:40 +0300 Subject: [PATCH 8/9] General page in profile --- lib/config/localized_values.dart | 3 + .../all_habib_medical_service_page.dart | 9 +- lib/pages/settings/general_setting.dart | 432 ++++++++++-------- lib/pages/settings/profile_setting.dart | 2 +- lib/uitl/translations_delegate_base.dart | 4 + 5 files changed, 245 insertions(+), 205 deletions(-) diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index e34982a1..f16c395d 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -1499,4 +1499,7 @@ const Map localizedValues = { "extremeObese": {"en": "Extreme Obese", "ar": "السمنة المفرطة"}, "selectLanguage": { "en": "Please select any language:", "ar": ":الرجاء تحديد أي لغة" }, "recAlert": { "en": "How do you want to receive alerts?", "ar": "كيف تريد تلقي التنبيهات؟" }, + "modesBelow": { "en": "Please select the modes below:", "ar": ":الرجاء تحديد الأوضاع أدناه" }, + "prefferedMode": { "en": "Please select the preferred mode below:", "ar": ":الرجاء تحديد الوضع المفضل أدناه" }, + "permissionsBellow": { "en": "Please allow the permissions below:", "ar": ":الرجاء السماح الأذونات أدناه" }, }; diff --git a/lib/pages/AlHabibMedicalService/all_habib_medical_service_page.dart b/lib/pages/AlHabibMedicalService/all_habib_medical_service_page.dart index b0b14f1d..ce3bde14 100644 --- a/lib/pages/AlHabibMedicalService/all_habib_medical_service_page.dart +++ b/lib/pages/AlHabibMedicalService/all_habib_medical_service_page.dart @@ -244,10 +244,7 @@ class _AllHabibMedicalServiceState extends State { imageLocation: 'assets/images/emergency_service_image.png', title: TranslationBase.of(context).emergencyService, ), - ServicesContainer( - onTap: () => getPharmacyToken(), - imageLocation: 'assets/images/pharmacy_logo.png', - title: TranslationBase.of(context).pharmacy), + ServicesContainer(onTap: () => getPharmacyToken(), imageLocation: 'assets/images/pharmacy_logo.png', title: TranslationBase.of(context).pharmacy), ServicesContainer( onTap: () => Navigator.push( context, @@ -332,9 +329,7 @@ class _AllHabibMedicalServiceState extends State { ServicesContainer( onTap: () => Navigator.push( context, - FadePage( - page: SmartWatchInstructions() - ), + FadePage(page: SmartWatchInstructions()), ), imageLocation: 'assets/images/new-design/smartwatch_icon.png', title: TranslationBase.of(context).smartWatches, diff --git a/lib/pages/settings/general_setting.dart b/lib/pages/settings/general_setting.dart index 049b9821..adbebfca 100644 --- a/lib/pages/settings/general_setting.dart +++ b/lib/pages/settings/general_setting.dart @@ -1,9 +1,11 @@ import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/services/permission/permission_service.dart'; +import 'package:diplomaticquarterapp/theme/colors.dart'; import 'package:diplomaticquarterapp/theme/theme_notifier.dart'; import 'package:diplomaticquarterapp/theme/theme_value.dart'; import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/uitl/utils_new.dart'; import 'package:diplomaticquarterapp/widgets/text/app_texts_widget.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; @@ -16,8 +18,7 @@ class GeneralSettings extends StatefulWidget { _GeneralSettings createState() => _GeneralSettings(); } -class _GeneralSettings extends State - with TickerProviderStateMixin { +class _GeneralSettings extends State with TickerProviderStateMixin { var themeNotifier; int blindValue = 0; bool vibration = false; @@ -28,6 +29,7 @@ class _GeneralSettings extends State var permission = new PermissionService(); LocationPermission locationPermission; var mediaQueryData; + @override void initState() { this.getValues(); @@ -38,196 +40,243 @@ class _GeneralSettings extends State mediaQueryData = MediaQuery.of(context); themeNotifier = Provider.of(context); return Container( - child: ListView(scrollDirection: Axis.vertical, children: [ - Container( - color: Theme.of(context).scaffoldBackgroundColor, - padding: EdgeInsets.all(10), - child: AppText( - TranslationBase.of(context).modes, - fontWeight: FontWeight.bold, - ), - ), - Container( - color: Theme.of(context).scaffoldBackgroundColor, - padding: EdgeInsets.all(10), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - AppText(TranslationBase.of(context).vibration), - Switch( - value: vibration, - onChanged: (value) { - setState(() { - vibration = value; - }); - setVibration(value); - }, - activeTrackColor: Colors.lightGreenAccent, - activeColor: Colors.green, - ) - ], - )), - Container( - color: Theme.of(context).scaffoldBackgroundColor, - padding: EdgeInsets.all(10), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - AppText(TranslationBase.of(context).accessibility), - Switch( - value: accsibility, - onChanged: (value) { - setState(() { - accsibility = value; - }); - }, - activeTrackColor: Colors.lightGreenAccent, - activeColor: Colors.green, - ) - ], - )), - Container( - color: Theme.of(context).scaffoldBackgroundColor, - padding: EdgeInsets.all(10), - child: AppText( - TranslationBase.of(context).blindMode, - fontWeight: FontWeight.bold, - ), - ), - new Container( - color: Theme.of(context).scaffoldBackgroundColor, - padding: EdgeInsets.all(8.0), - child: new Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - new Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - new Text( - TranslationBase.of(context).offTheme, - style: new TextStyle(fontSize: 16.0), - ), - Radio( - value: 0, - groupValue: blindValue, - onChanged: (value) { - setState(() => {this.blindValue = value}); - setTheme(value); - }, - ), - ], + child: SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.all(21.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + + Text( + TranslationBase.of(context).alert, + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w600, + letterSpacing: -0.64, + ), + ), + Text( + TranslationBase.of(context).modesBelow, + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w600, + letterSpacing: -0.48, + ), + ), + Row( + children: [ + Checkbox( + value: vibration, + onChanged: (value) { + setState(() { + vibration = value; + }); + }, + activeColor: CustomColors.accentColor, + ), + Text( + TranslationBase.of(context).prefferedMode, + style: TextStyle( + fontSize: 12, + letterSpacing: -0.48, ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - new Text( - TranslationBase.of(context).invertTheme, - style: new TextStyle( - fontSize: 16.0, - ), - ), - new Radio( - value: 1, - groupValue: blindValue, - onChanged: (value) { - setState(() => {this.blindValue = value}); - setTheme(value); - }, - ) - ], + ), + ], + ), + Row( + children: [ + Checkbox( + value: accsibility, + onChanged: (value) { + setState(() { + accsibility = value; + }); + }, + activeColor: CustomColors.accentColor, + ), + Text( + TranslationBase.of(context).accessibility, + style: TextStyle( + fontSize: 12, + letterSpacing: -0.48, ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - new Text( - TranslationBase.of(context).dimTheme, - style: new TextStyle(fontSize: 16.0), + ), + ], + ), + mHeight(16), + mHeight(12), + Text( + TranslationBase.of(context).blindMode, + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w600, + letterSpacing: -0.64, + ), + ), + Text( + TranslationBase.of(context).prefferedMode, + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w600, + letterSpacing: -0.48, + ), + ), + Column( + children: [ + Row( + children: [ + new Radio( + value: 0, + groupValue: blindValue, + onChanged: (value) { + setState(() { + blindValue = value; + setTheme(value); + }); + }, + ), + Text( + TranslationBase.of(context).offTheme, + style: TextStyle( + fontSize: 12, + letterSpacing: -0.48, ), - new Radio( - value: 2, - groupValue: blindValue, - onChanged: (value) { - setState(() => {this.blindValue = value}); + ), + ], + ), + Row( + children: [ + Radio( + value: 1, + groupValue: blindValue, + onChanged: (value) { + setState(() { + blindValue = value; setTheme(value); - }, + }); + }, + ), + Text( + TranslationBase.of(context).invertTheme, + style: TextStyle( + fontSize: 12, + letterSpacing: -0.48, ), - ], - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - new Text( - TranslationBase.of(context).bwTheme, - style: new TextStyle(fontSize: 16.0), + ), + ], + ), + Row( + children: [ + Radio( + value: 2, + groupValue: blindValue, + onChanged: (value) { + setState(() { + blindValue = value; + setTheme(value); + }); + }, + ), + Text( + TranslationBase.of(context).dimTheme, + style: TextStyle( + fontSize: 12, + letterSpacing: -0.48, ), - new Radio( - value: 3, - groupValue: blindValue, - onChanged: (value) { - setState(() => {this.blindValue = value}); - + ), + ], + ), + Row( + children: [ + Radio( + value: 1, + groupValue: blindValue, + onChanged: (value) { + setState(() { + blindValue = value; setTheme(value); - }, + }); + }, + ), + Text( + TranslationBase.of(context).bwTheme, + style: TextStyle( + fontSize: 12, + letterSpacing: -0.48, ), - ], + ), + ], + ), + ], + ), + mHeight(12), + mHeight(12), + Text( + TranslationBase.of(context).permissions, + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w600, + letterSpacing: -0.64, + ), + ), + Text( + TranslationBase.of(context).permissionsBellow, + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w600, + letterSpacing: -0.48, + ), + ), + Row( + children: [ + Checkbox( + value: camera, + onChanged: (value) { + setState(() { + camera = value; + }); + this.permission.openSettings(); + }, + activeColor: CustomColors.accentColor, + ), + Text( + TranslationBase.of(context).cameraPermission, + style: TextStyle( + fontSize: 12, + letterSpacing: -0.48, + ), + ), + ], + ), + Row( + children: [ + Checkbox( + value: location, + onChanged: (value) { + if (value == true) { + Navigator.pop(context); + this.setLocationPermission(); + } else { + Geolocator.openLocationSettings(); + } + }, + activeColor: CustomColors.accentColor, + ), + Text( + TranslationBase.of(context).locationPermission, + style: TextStyle( + fontSize: 12, + letterSpacing: -0.48, ), - ], - ) - ])), - Container( - color: Theme.of(context).scaffoldBackgroundColor, - padding: EdgeInsets.all(10), - child: AppText( - TranslationBase.of(context).permissions, - fontWeight: FontWeight.bold, + ), + ], + ), + mHeight(16), + ], + ), ), ), - Container( - color: Theme.of(context).scaffoldBackgroundColor, - padding: EdgeInsets.all(10), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - AppText(TranslationBase.of(context).cameraPermission), - Switch( - value: camera, - onChanged: (value) { - setState(() { - camera = value; - }); - this.permission.openSettings(); - }, - activeTrackColor: Colors.lightGreenAccent, - activeColor: Colors.green, - ) - ], - )), - Container( - color: Theme.of(context).scaffoldBackgroundColor, - padding: EdgeInsets.all(10), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - AppText(TranslationBase.of(context).locationPermission), - Switch( - value: location, - onChanged: (value) { - if (value == true) { - Navigator.pop(context); - this.setLocationPermission(); - } else { - Geolocator.openLocationSettings(); - } - }, - activeTrackColor: Colors.lightGreenAccent, - activeColor: Colors.green, - ) - ], - )) - ])); + ); } setLocationPermission() async { @@ -292,11 +341,8 @@ class _GeneralSettings extends State getValues() async { if (permission.isThemeEnabled() != null) { - blindValue = - permission.isThemeEnabled() == null ? 0 : permission.isThemeEnabled(); - vibration = permission.isVibrationEnabled() == null - ? false - : permission.isVibrationEnabled(); + blindValue = permission.isThemeEnabled() == null ? 0 : permission.isThemeEnabled(); + vibration = permission.isVibrationEnabled() == null ? false : permission.isVibrationEnabled(); // accsibility = mediaQueryData.accessibleNavigation; //setTheme(blindValue); } @@ -310,19 +356,11 @@ class _GeneralSettings extends State getTheme(value) async { if (value == 1) { - return invertThemes( - fontName: Provider.of(context, listen: false).isArabic ? 'Cairo' : 'Poppins' - ); + return invertThemes(fontName: Provider.of(context, listen: false).isArabic ? 'Cairo' : 'Poppins'); } else if (value == 3) { - return bwThemes( - fontName: Provider.of(context, listen: false).isArabic ? 'Cairo' : 'Poppins' - ); + return bwThemes(fontName: Provider.of(context, listen: false).isArabic ? 'Cairo' : 'Poppins'); } else { - return defaultTheme( - fontName: - Provider.of(context, listen: false).isArabic - ? 'Cairo' - : 'Poppins'); + return defaultTheme(fontName: Provider.of(context, listen: false).isArabic ? 'Cairo' : 'Poppins'); } } } diff --git a/lib/pages/settings/profile_setting.dart b/lib/pages/settings/profile_setting.dart index 1d2938cc..f55227d8 100644 --- a/lib/pages/settings/profile_setting.dart +++ b/lib/pages/settings/profile_setting.dart @@ -47,7 +47,7 @@ class _ProfileSettings extends State with TickerProviderStateMi Expanded( child: SingleChildScrollView( child: Padding( - padding: const EdgeInsets.all(12.0), + padding: const EdgeInsets.all(21.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ diff --git a/lib/uitl/translations_delegate_base.dart b/lib/uitl/translations_delegate_base.dart index 48e8b0bd..a971531e 100644 --- a/lib/uitl/translations_delegate_base.dart +++ b/lib/uitl/translations_delegate_base.dart @@ -2364,6 +2364,10 @@ class TranslationBase { String get selectLanguage => localizedValues["selectLanguage"][locale.languageCode]; String get recAlert => localizedValues["recAlert"][locale.languageCode]; + + String get modesBelow => localizedValues["modesBelow"][locale.languageCode]; + String get prefferedMode => localizedValues["prefferedMode"][locale.languageCode]; + String get permissionsBellow => localizedValues["permissionsBellow"][locale.languageCode]; } class TranslationBaseDelegate extends LocalizationsDelegate { From 54c3beadf25d255e2cd8a7a8e8e5baa1db0513a0 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Wed, 13 Oct 2021 15:52:30 +0300 Subject: [PATCH 9/9] improvements. --- lib/config/localized_values.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index f63eeeb4..139ee7a6 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -911,14 +911,14 @@ const Map localizedValues = { "info-todo": { "en": "This service is designed to enable you to have a quick link to the list of tasks that need to be done", "ar": "هذه الخدمة تم تصميمها لتمكنك من الوصول الى رابط سريع لقائمة المهام التي يجب القيام بها" - + }, "family-info": { "en": "Through this service, you will be able to link your family medical files to your medical file so that you can manage their records by login to your medical file.", "ar": "هذه الخدمة تم تصميمها لتتمكن من ربط الملفات الطبية للعائلة بملفك الطبي حتى تتمكن من إدارة سجلاتهم عن طريق تسجيل الدخول إلى ملفك الطبي." }, "update-succ": {"en": "Successfully updated profile", "ar": "تم تحديث البيانات بنجاح"}, "dental-complains": {"en": "Symptoms", "ar": "الأعراض"}, - "empt},y-result": {"en": "There is no search results found", "ar": "لايوجد نتائج"}, + "empty-result": {"en": "There is no search results found", "ar": "لايوجد نتائج"}, "no-booked-appointment": {"en": "No booked appointments", "ar": "لا يوجد مواعيد محجوزة"}, "no-confirmed-appointment": {"en": "No confirmed appointments", "ar": "لا توجد مواعيد مؤكدة"}, "no-arrived-appointment": {"en": "No arrived appointments", "ar": "لا يوجد مواعيد"},