diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 927b4000..f8001fae 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -1492,5 +1492,7 @@ const Map localizedValues = { "rateAppointment": {"en": "Rate Appointment", "ar": "سعر التعيين"}, "noInsuranceCardAttached": {"en": "Please attach your insurance card image to continue", "ar": "يرجى إرفاق صورة بطاقة التأمين الخاصة بك للمتابعة"}, "bodyMassIndex": {"en": "Body Mass Index is: ", "ar": "مؤشر كتلة الجسم هو:"}, + "noSlotsError": {"en": "No appointments available for selected date", "ar": "لا توجد مواعيد متاحة للتاريخ المحدد"}, + "selectSlot": {"en": "Please select Time Slot to continue", "ar": "الرجاء تحديد فترة زمنية للمتابعة"}, "years": {"en": "Years", "ar": "سنوات"}, }; diff --git a/lib/config/shared_pref_kay.dart b/lib/config/shared_pref_kay.dart index 752938ad..c256d0c1 100644 --- a/lib/config/shared_pref_kay.dart +++ b/lib/config/shared_pref_kay.dart @@ -21,6 +21,7 @@ const THEME_VALUE = 'is_vibration'; const MAIN_USER = 'main-user'; const PHARMACY_LAST_VISITED_PRODUCTS = 'last-visited'; const PHARMACY_CUSTOMER_ID = 'costumer-id'; +const PHARMACY_CUSTOMER_OBJECT = 'pharmacy-customer-object'; const IS_ROBOT_VISIBLE = 'robot-visible'; const IS_ROBOT_INIT = 'robot-init'; const HMG_GEOFENCES = 'hmg-geo-fences'; @@ -34,3 +35,4 @@ const H2O_REMINDER = 'H2O_REMINDER'; const LIVECARE_CLINIC_DATA = 'LIVECARE_CLINIC_DATA'; const DOCTOR_SCHEDULE_DATE_SEL = 'DOCTOR_SCHEDULE_DATE_SEL'; const APPOINTMENT_HISTORY_MEDICAL = 'APPOINTMENT_HISTORY_MEDICAL'; +const CLINICS_LIST = 'CLINICS_LIST'; diff --git a/lib/core/service/AlHabibMedicalService/customer_addresses_service.dart b/lib/core/service/AlHabibMedicalService/customer_addresses_service.dart index 260b3a92..bd2e94e4 100644 --- a/lib/core/service/AlHabibMedicalService/customer_addresses_service.dart +++ b/lib/core/service/AlHabibMedicalService/customer_addresses_service.dart @@ -1,16 +1,14 @@ import 'package:diplomaticquarterapp/config/config.dart'; import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/add_new_address_Request_Model.dart'; -import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/pharmacy_module_view_model.dart'; import 'package:diplomaticquarterapp/uitl/utils.dart'; import 'package:intl/intl.dart'; -import '../../../locator.dart'; import '../base_service.dart'; class CustomerAddressesService extends BaseService { List addressesList = List(); - CustomerInfo customerInfo; + CustomerInfo customerInfo = new CustomerInfo(); Future addAddressInfo({AddNewAddressRequestModel addNewAddressRequestModel}) async { addNewAddressRequestModel.customer.email = customerInfo.email; @@ -40,7 +38,8 @@ class CustomerAddressesService extends BaseService { Future getCustomerAddresses() async { Map queryParams = {'fields': 'addresses'}; hasError = false; - await baseAppClient.getPharmacy("$BASE_PHARMACY_URL$GET_CUSTOMER_ADDRESSES${customerInfo.customerId}", onSuccess: (dynamic response, int statusCode) { + var customerID = await sharedPref.getObject(PHARMACY_CUSTOMER_ID); + await baseAppClient.getPharmacy("$BASE_PHARMACY_URL$GET_CUSTOMER_ADDRESSES$customerID", onSuccess: (dynamic response, int statusCode) { addressesList.clear(); response["customers"][0]["addresses"].forEach((data) { addressesList.add(AddressInfo.fromJson(data)); diff --git a/lib/core/service/client/base_app_client.dart b/lib/core/service/client/base_app_client.dart index 5c1361ab..b0c0925f 100644 --- a/lib/core/service/client/base_app_client.dart +++ b/lib/core/service/client/base_app_client.dart @@ -124,7 +124,7 @@ class BaseAppClient { if (statusCode < 200 || statusCode >= 400 || json == null) { onFailure('Error While Fetching data', statusCode); } else { - // var parsed = json.decode(response.body.toString()); + var decoded = utf8.decode(response.bodyBytes); var parsed = json.decode(utf8.decode(response.bodyBytes)); if (parsed['Response_Message'] != null) { onSuccess(parsed, statusCode); diff --git a/lib/core/service/parmacyModule/parmacy_module_service.dart b/lib/core/service/parmacyModule/parmacy_module_service.dart index 9cca6ac9..58ce50f5 100644 --- a/lib/core/service/parmacyModule/parmacy_module_service.dart +++ b/lib/core/service/parmacyModule/parmacy_module_service.dart @@ -57,6 +57,7 @@ class PharmacyModuleService extends BaseService { } else { customerInfo = CustomerInfo.fromJson(response); + await sharedPref.setObject(PHARMACY_CUSTOMER_ID, customerInfo.customerId); } // await generatePharmacyToken(); }, onFailure: (String error, int statusCode) { diff --git a/lib/core/viewModels/AlHabibMedicalService/cmc_view_model.dart b/lib/core/viewModels/AlHabibMedicalService/cmc_view_model.dart index d7e290d0..de007d67 100644 --- a/lib/core/viewModels/AlHabibMedicalService/cmc_view_model.dart +++ b/lib/core/viewModels/AlHabibMedicalService/cmc_view_model.dart @@ -122,16 +122,13 @@ class CMCViewModel extends BaseViewModel { Future getCustomerInfo() async { setState(ViewState.Busy); await _pharmacyModuleService.generatePharmacyToken(); - // await _pharmacyModuleService.createUser(); if (_customerAddressesService.hasError) { error = _customerAddressesService.error; await _pharmacyModuleService.createUser(); - // await _customerAddressesService.getCustomerInfo(); setState(ViewState.ErrorLocal); } else { await _pharmacyModuleService.createUser(); - // await _customerAddressesService.getCustomerInfo(); await getCustomerAddresses(); } } diff --git a/lib/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart b/lib/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart index d7d9f1c2..91465b11 100644 --- a/lib/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart +++ b/lib/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart @@ -105,16 +105,13 @@ class HomeHealthCareViewModel extends BaseViewModel { Future getCustomerInfo() async { setState(ViewState.Busy); await _pharmacyModuleService.generatePharmacyToken(); - // await _pharmacyModuleService.createUser(); if (_customerAddressesService.hasError) { error = _customerAddressesService.error; await _pharmacyModuleService.createUser(); - // await _customerAddressesService.getCustomerInfo(); setState(ViewState.ErrorLocal); } else { await _pharmacyModuleService.createUser(); - // await _customerAddressesService.getCustomerInfo(); await getCustomerAddresses(); } } diff --git a/lib/core/viewModels/er/rrt-view-model.dart b/lib/core/viewModels/er/rrt-view-model.dart index 339f6874..19179313 100644 --- a/lib/core/viewModels/er/rrt-view-model.dart +++ b/lib/core/viewModels/er/rrt-view-model.dart @@ -152,14 +152,27 @@ class RRTViewModel extends BaseViewModel { Future getCustomerInfo() async { setState(ViewState.Busy); await _pharmacy_service.generatePharmacyToken(); + if (_customerAddressesService.hasError) { error = _customerAddressesService.error; await _pharmacy_service.createUser(); - await getCustomerAddresses(); setState(ViewState.ErrorLocal); } else { - await _customerAddressesService.getCustomerInfo(); + await _pharmacy_service.createUser(); await getCustomerAddresses(); } + + + // setState(ViewState.Busy); + // await _pharmacy_service.generatePharmacyToken(); + // if (_customerAddressesService.hasError) { + // error = _customerAddressesService.error; + // await _pharmacy_service.createUser(); + // await getCustomerAddresses(); + // setState(ViewState.ErrorLocal); + // } else { + // await _customerAddressesService.getCustomerInfo(); + // await getCustomerAddresses(); + // } } } diff --git a/lib/models/FamilyFiles/GetAllSharedRecordByStatusResponse.dart b/lib/models/FamilyFiles/GetAllSharedRecordByStatusResponse.dart index b92962eb..e6e702eb 100644 --- a/lib/models/FamilyFiles/GetAllSharedRecordByStatusResponse.dart +++ b/lib/models/FamilyFiles/GetAllSharedRecordByStatusResponse.dart @@ -295,12 +295,12 @@ class GetAllSharedRecordsByStatusList { int iD; int patientID; int responseID; - Null relationshipID; - Null relationship; - Null relationshipN; + dynamic relationshipID; + dynamic relationship; + dynamic relationshipN; int regionID; int status; - Null isActive; + dynamic isActive; String editedOn; String createdOn; int age; diff --git a/lib/pages/BookAppointment/DoctorProfile.dart b/lib/pages/BookAppointment/DoctorProfile.dart index 99afbd7f..e71fa02b 100644 --- a/lib/pages/BookAppointment/DoctorProfile.dart +++ b/lib/pages/BookAppointment/DoctorProfile.dart @@ -500,7 +500,7 @@ class _DoctorProfileState extends State with TickerProviderStateM dialog.showAlertDialog(context); } } else - AppToast.showErrorToast(message: "Please select Time Slot to continue"); + AppToast.showErrorToast(message: TranslationBase.of(context).selectSlot); } navigateToLogin() { diff --git a/lib/pages/BookAppointment/components/DocAvailableAppointments.dart b/lib/pages/BookAppointment/components/DocAvailableAppointments.dart index aaceb5ca..25f8cb9c 100644 --- a/lib/pages/BookAppointment/components/DocAvailableAppointments.dart +++ b/lib/pages/BookAppointment/components/DocAvailableAppointments.dart @@ -7,11 +7,13 @@ import 'package:diplomaticquarterapp/theme/colors.dart'; import 'package:diplomaticquarterapp/uitl/app_shared_preferences.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:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; -import 'package:table_calendar/table_calendar.dart'; + +import 'package:syncfusion_flutter_calendar/calendar.dart'; import '../../../uitl/date_uitl.dart'; @@ -24,6 +26,7 @@ class DocAvailableAppointments extends StatefulWidget { static String selectedTime; bool isLiveCareAppointment; final dynamic doctorSchedule; + DocAvailableAppointments({@required this.doctor, this.doctorSchedule, @required this.isLiveCareAppointment}); @override @@ -55,8 +58,8 @@ class _DocAvailableAppointmentsState extends State wit @override void didUpdateWidget(covariant DocAvailableAppointments oldWidget) { if (oldWidget.doctorSchedule != widget.doctorSchedule) { - _calendarController.setSelectedDay(DateUtil.convertStringToDate(widget.doctorSchedule['Date']), isProgrammatic: true); - _onDaySelected(DateUtil.convertStringToDate(widget.doctorSchedule['Date']), List()); + _onDaySelected(DateUtil.convertStringToDate(widget.doctorSchedule['Date'])); + _calendarController.selectedDate = DateUtil.convertStringToDate(widget.doctorSchedule['Date']); } super.didUpdateWidget(oldWidget); } @@ -99,28 +102,17 @@ class _DocAvailableAppointmentsState extends State wit super.dispose(); } - void _onDaySelected(DateTime day, List events) { + void _onDaySelected(DateTime day) { final DateFormat formatter = DateFormat('yyyy-MM-dd'); setState(() { this.selectedDate = DateUtil.getWeekDayMonthDayYearDateFormatted(day, language); openTimeSlotsPickerForDate(day, docFreeSlots); DocAvailableAppointments.selectedDate = formatter.format(day); - print(DocAvailableAppointments.selectedDate); + _calendarController.selectedDate = day; + print(_calendarController.selectedDate); }); } - void _onVisibleDaysChanged(DateTime first, DateTime last, CalendarFormat format) { - print('CALLBACK: _onVisibleDaysChanged'); - print(first); - print(last); - } - - void _onCalendarCreated(DateTime first, DateTime last, CalendarFormat format) { - print('CALLBACK: _onCalendarCreated'); - print(first); - print(last); - } - @override Widget build(BuildContext context) { return SingleChildScrollView( @@ -134,30 +126,36 @@ class _DocAvailableAppointmentsState extends State wit padding: const EdgeInsets.only(left: 16, right: 16, bottom: 16), child: Text(selectedDate, style: TextStyle(fontSize: 16.0, fontWeight: FontWeight.w600, letterSpacing: -0.64)), ), - Container( - height: 40, - child: ListView.builder( - controller: _scrollController, - scrollDirection: Axis.horizontal, - itemCount: dayEvents.length, - itemBuilder: (context, index) { - return Container( - margin: EdgeInsets.only(right: (index == dayEvents.length - 1) ? 16 : 5.0, left: index == 0 ? 16 : 5), - child: ButtonTheme( - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(5.0), - side: BorderSide( - color: index == selectedButtonIndex ? CustomColors.green : Colors.black, //Color of the border - style: BorderStyle.solid, //Style of the border - width: 1.5, //width of the border - ), - ), - minWidth: MediaQuery.of(context).size.width * 0.18, - child: index == selectedButtonIndex ? getSelectedButton(index) : getNormalButton(index)), - ); - }, - ), - ), + DocAvailableAppointments.areSlotsAvailable + ? Container( + height: 40, + child: ListView.builder( + controller: _scrollController, + scrollDirection: Axis.horizontal, + itemCount: dayEvents.length, + itemBuilder: (context, index) { + return Container( + margin: EdgeInsets.only(right: (index == dayEvents.length - 1) ? 16 : 5.0, left: index == 0 ? 16 : 5), + child: ButtonTheme( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(5.0), + side: BorderSide( + color: index == selectedButtonIndex ? CustomColors.green : Colors.black, //Color of the border + style: BorderStyle.solid, //Style of the border + width: 1.5, //width of the border + ), + ), + minWidth: MediaQuery.of(context).size.width * 0.18, + child: index == selectedButtonIndex ? getSelectedButton(index) : getNormalButton(index)), + ); + }, + ), + ) + : Center( + child: Padding( + padding: const EdgeInsets.only(left: 12.0, right: 12.0), + child: Text(TranslationBase.of(context).noSlotsError, style: TextStyle(fontSize: 14.0, fontWeight: FontWeight.w600, letterSpacing: -0.46, color: CustomColors.grey)), + )), ], ), ), @@ -166,99 +164,42 @@ class _DocAvailableAppointmentsState extends State wit Widget _buildTableCalendarWithBuilders() { return Card( - shape: cardRadius(12), - margin: EdgeInsets.all(16), - clipBehavior: Clip.antiAlias, - child: Padding( - padding: const EdgeInsets.only(bottom: 12), - child: TableCalendar( - locale: language == "en" ? 'en_US' : 'ar_SA', - calendarController: _calendarController, - events: _events, - initialCalendarFormat: CalendarFormat.month, - startDay: DateTime.now(), - formatAnimation: FormatAnimation.slide, - startingDayOfWeek: StartingDayOfWeek.sunday, - weekendDays: [DateTime.friday, DateTime.saturday], - availableGestures: AvailableGestures.horizontalSwipe, - availableCalendarFormats: const { - CalendarFormat.month: '', - CalendarFormat.week: '', - }, - calendarStyle: CalendarStyle( - outsideDaysVisible: false, - weekendStyle: TextStyle().copyWith(color: Colors.blue[800]), - holidayStyle: TextStyle().copyWith(color: Colors.blue[800]), - ), - daysOfWeekStyle: DaysOfWeekStyle( - weekendStyle: TextStyle().copyWith(color: Colors.black, fontSize: 11.0, fontWeight: FontWeight.w600), - weekdayStyle: TextStyle().copyWith(color: Colors.black, fontSize: 11.0, fontWeight: FontWeight.w600), - ), - headerStyle: HeaderStyle(centerHeaderTitle: true, formatButtonVisible: false, titleTextStyle: TextStyle(fontSize: 16, letterSpacing: -0.64, fontWeight: FontWeight.w600)), - builders: CalendarBuilders( - selectedDayBuilder: (context, date, _) { - return FadeTransition( - opacity: Tween(begin: 0.0, end: 1.0).animate(_animationController), - child: Container( - margin: const EdgeInsets.all(4.0), - padding: const EdgeInsets.only(top: 5.0, left: 5.0), - color: Colors.transparent, - width: 0, - height: 0, - child: Text( - '${date.day}', - style: TextStyle().copyWith(fontSize: 14.0), - ), - ), - ); - }, - todayDayBuilder: (context, date, _) { - return Container( - decoration: BoxDecoration( - shape: BoxShape.circle, - color: _calendarController.isSelected(date) - ? Colors.green[400] - : _calendarController.isToday(date) - ? Colors.transparent - : Color(0xff76cfb7), - ), - width: 40.0, - height: 40.0, - child: Center( - child: Text( - '${date.day}', - style: TextStyle().copyWith( - color: Colors.white, - fontSize: 14.0, - ), - ), - ), - ); - }, - markersBuilder: (context, date, events, _) { - final children = []; - if (events.isNotEmpty) { - children.add( - Positioned( - right: 4, - bottom: 4, - child: _buildEventsMarker(date, events), - ), - ); - } - - return children; - }, + shape: cardRadius(12), + margin: EdgeInsets.all(16), + clipBehavior: Clip.antiAlias, + child: Padding( + padding: const EdgeInsets.only(bottom: 12), + child: Container( + child: SfCalendar( + controller: _calendarController, + minDate: DateTime.now(), + showNavigationArrow: true, + headerStyle: CalendarHeaderStyle(textAlign: TextAlign.center, textStyle: TextStyle(fontSize: 14.0, fontWeight: FontWeight.w600, letterSpacing: -0.46)), + viewHeaderStyle: ViewHeaderStyle(dayTextStyle: TextStyle(fontSize: 12.0, fontWeight: FontWeight.w600, letterSpacing: -0.46, color: CustomColors.black)), + view: CalendarView.month, + todayHighlightColor: CustomColors.green, + selectionDecoration: containerColorRadiusBorderWidthCircular(Colors.transparent, 4, CustomColors.green, 2.5), + cellBorderColor: Colors.white, + dataSource: MeetingDataSource(_getDataSource()), + monthViewSettings: const MonthViewSettings(appointmentDisplayMode: MonthAppointmentDisplayMode.indicator, showTrailingAndLeadingDates: false, appointmentDisplayCount: 1), + onTap: (CalendarTapDetails details) { + _calendarController.selectedDate = details.date; + _onDaySelected(details.date); + }, + ), ), - onDaySelected: (date, event, _) { - _onDaySelected(date, event); - _animationController.forward(from: 0.0); - }, - onVisibleDaysChanged: _onVisibleDaysChanged, - onCalendarCreated: _onCalendarCreated, - ), - ), - ); + )); + } + + List _getDataSource() { + final List meetings = []; + + _events.forEach((key, value) { + final DateTime startTime = DateTime(key.year, key.month, key.day, 9, 0, 0); + final DateTime endTime = startTime.add(const Duration(hours: 2)); + meetings.add(Meeting("", startTime, endTime, CustomColors.green, false)); + }); + return meetings; } openTimeSlotsPickerForDate(DateTime dateStart, List freeSlots) { @@ -270,14 +211,12 @@ class _DocAvailableAppointmentsState extends State wit }); setState(() { - if (dayEvents.length != 0) + if (dayEvents.length != 0) { DocAvailableAppointments.areSlotsAvailable = true; - else + selectedButtonIndex = 0; + DocAvailableAppointments.selectedTime = dayEvents[selectedButtonIndex].isoTime; + } else DocAvailableAppointments.areSlotsAvailable = false; - - selectedButtonIndex = 0; - - DocAvailableAppointments.selectedTime = dayEvents[selectedButtonIndex].isoTime; }); } @@ -299,7 +238,7 @@ class _DocAvailableAppointmentsState extends State wit selectedDateJSON = freeSlotsResponse[0]; }); openTimeSlotsPickerForDate(DateUtil.convertStringToDate(selectedDateJSON), docFreeSlots); - _calendarController.setFocusedDay(DateUtil.convertStringToDate(selectedDateJSON)); + _calendarController.selectedDate = DateUtil.convertStringToDate(selectedDateJSON); return _eventsParsed; } @@ -321,7 +260,8 @@ class _DocAvailableAppointmentsState extends State wit Widget getSelectedButton(int index) { return RaisedButton( - color: CustomColors.green, //Color of the border + color: CustomColors.green, + //Color of the border textColor: Colors.white, elevation: 0, onPressed: () { @@ -352,10 +292,7 @@ class _DocAvailableAppointmentsState extends State wit _events.clear(), _events = value, if (widget.doctorSchedule != null) - { - _calendarController.setSelectedDay(DateUtil.convertStringToDate(widget.doctorSchedule['Date']), isProgrammatic: true), - _onDaySelected(DateUtil.convertStringToDate(widget.doctorSchedule['Date']), List()) - } + {_onDaySelected(DateUtil.convertStringToDate(widget.doctorSchedule['Date'])), _calendarController.selectedDate = DateUtil.convertStringToDate(widget.doctorSchedule['Date'])} }); }); } else { @@ -403,29 +340,49 @@ class _DocAvailableAppointmentsState extends State wit this.language = languageID; }); } +} - Widget _buildEventsMarker(DateTime date, List events) { - return Container( - decoration: containerColorRadiusBorderWidth( - _calendarController.isSelected(date) - ? CustomColors.green - : _calendarController.isToday(date) - ? CustomColors.green.withOpacity(0.5) - : Colors.white, - 200, - _calendarController.isSelected(date) ? CustomColors.green : Colors.black, - 2), - width: 40.0, - height: 40.0, - child: Center( - child: Text( - '${date.day}', - style: TextStyle().copyWith( - color: _calendarController.isSelected(date) ? Colors.white : Colors.black, - fontSize: 14.0, - ), - ), - ), - ); +class MeetingDataSource extends CalendarDataSource { + MeetingDataSource(List source) { + appointments = source; } + + @override + DateTime getStartTime(int index) { + return _getMeetingData(index).from; + } + @override + DateTime getEndTime(int index) { + return _getMeetingData(index).to; + } + @override + String getSubject(int index) { + return _getMeetingData(index).eventName; + } + @override + Color getColor(int index) { + return _getMeetingData(index).background; + } + @override + bool isAllDay(int index) { + return _getMeetingData(index).isAllDay; + } + Meeting _getMeetingData(int index) { + final dynamic meeting = appointments[index]; + Meeting meetingData; + if (meeting is Meeting) { + meetingData = meeting; + } + return meetingData; + } +} + +class Meeting { + Meeting(this.eventName, this.from, this.to, this.background, this.isAllDay); + + String eventName; + DateTime from; + DateTime to; + Color background; + bool isAllDay; } diff --git a/lib/pages/BookAppointment/components/SearchByClinic.dart b/lib/pages/BookAppointment/components/SearchByClinic.dart index dc983581..d1030636 100644 --- a/lib/pages/BookAppointment/components/SearchByClinic.dart +++ b/lib/pages/BookAppointment/components/SearchByClinic.dart @@ -1,5 +1,6 @@ import "dart:collection"; +import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; import 'package:diplomaticquarterapp/core/model/hospitals/hospitals_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart'; @@ -429,24 +430,36 @@ class _SearchByClinicState extends State { return false; } - getClinicsList() { + getClinicsList() async { GifLoaderDialogUtils.showMyDialog(context); - ClinicListService service = new ClinicListService(); - service.getClinicsList(context).then((res) { - if (res['MessageStatus'] == 1) { - setState(() { - isMobileAppDentalAllow = res['ISMobileAppDentalAllow']; - res['ListClinicCentralized'].forEach((v) { - clinicsList.add(new ListClinicCentralized.fromJson(v)); - }); + if (await sharedPref.getObject(CLINICS_LIST) != null) { + dynamic res = await sharedPref.getObject(CLINICS_LIST); + setState(() { + isMobileAppDentalAllow = res['ISMobileAppDentalAllow']; + res['ListClinicCentralized'].forEach((v) { + clinicsList.add(new ListClinicCentralized.fromJson(v)); }); - getProjectsList(); - GifLoaderDialogUtils.hideDialog(context); - } else {} - }).catchError((err) { - print(err); + }); + getProjectsList(); GifLoaderDialogUtils.hideDialog(context); - }); + } else { + ClinicListService service = new ClinicListService(); + service.getClinicsList(context).then((res) { + if (res['MessageStatus'] == 1) { + setState(() { + isMobileAppDentalAllow = res['ISMobileAppDentalAllow']; + res['ListClinicCentralized'].forEach((v) { + clinicsList.add(new ListClinicCentralized.fromJson(v)); + }); + }); + getProjectsList(); + GifLoaderDialogUtils.hideDialog(context); + } else {} + }).catchError((err) { + print(err); + GifLoaderDialogUtils.hideDialog(context); + }); + } } getProjectsList() { diff --git a/lib/pages/Covid-DriveThru/Covid-TimeSlots.dart b/lib/pages/Covid-DriveThru/Covid-TimeSlots.dart index b49a18c6..834d7a0a 100644 --- a/lib/pages/Covid-DriveThru/Covid-TimeSlots.dart +++ b/lib/pages/Covid-DriveThru/Covid-TimeSlots.dart @@ -21,10 +21,11 @@ import 'package:diplomaticquarterapp/widgets/dialogs/confirm_dialog.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_svg/flutter_svg.dart'; import 'package:intl/intl.dart'; import 'package:provider/provider.dart'; -import 'package:table_calendar/table_calendar.dart'; +// import 'package:table_calendar/table_calendar.dart'; + +import 'package:syncfusion_flutter_calendar/calendar.dart'; class CovidTimeSlots extends StatefulWidget { int projectID; @@ -100,24 +101,17 @@ class _CovidTimeSlotsState extends State with TickerProviderStat super.dispose(); } - void _onDaySelected(DateTime day, List events, ProjectViewModel projectViewModel) { + void _onDaySelected(DateTime day, ProjectViewModel projectViewModel) { final DateFormat formatter = DateFormat('yyyy-MM-dd'); setState(() { this.selectedDate = DateUtil.getWeekDayMonthDayYearDateFormatted(day, projectViewModel.isArabic ? "ar" : "en"); openTimeSlotsPickerForDate(day, docFreeSlots); CovidTimeSlots.selectedDate = formatter.format(day); + _calendarController.selectedDate = day; print(CovidTimeSlots.selectedDate); }); } - void _onVisibleDaysChanged(DateTime first, DateTime last, CalendarFormat format) { - print('CALLBACK: _onVisibleDaysChanged'); - } - - void _onCalendarCreated(DateTime first, DateTime last, CalendarFormat format) { - print('CALLBACK: _onCalendarCreated'); - } - @override Widget build(BuildContext context) { ProjectViewModel projectViewModel = Provider.of(context); @@ -151,6 +145,7 @@ class _CovidTimeSlotsState extends State with TickerProviderStat fontWeight: FontWeight.w600, ), ), + mHeight(12), Card( shape: cardRadius(12), child: _buildTableCalendarWithBuilders(projectViewModel), @@ -165,30 +160,36 @@ class _CovidTimeSlotsState extends State with TickerProviderStat ), ), mHeight(8), - Container( - height: 40, - child: ListView.builder( - controller: _scrollController, - scrollDirection: Axis.horizontal, - itemCount: dayEvents.length, - itemBuilder: (context, index) { - return Container( - margin: EdgeInsets.only(right: (index == dayEvents.length - 1) ? 0 : 5.0, left: index == 0 ? 0 : 5), - child: ButtonTheme( - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(5.0), - side: BorderSide( - color: index == selectedButtonIndex ? CustomColors.green : Colors.black, //Color of the border - style: BorderStyle.solid, //Style of the border - width: 1.5, //width of the border - ), - ), - minWidth: MediaQuery.of(context).size.width * 0.2, - child: index == selectedButtonIndex ? getSelectedButton(index) : getNormalButton(index)), - ); - }, - ), - ), + CovidTimeSlots.areSlotsAvailable + ? Container( + height: 40, + child: ListView.builder( + controller: _scrollController, + scrollDirection: Axis.horizontal, + itemCount: dayEvents.length, + itemBuilder: (context, index) { + return Container( + margin: EdgeInsets.only(right: (index == dayEvents.length - 1) ? 0 : 5.0, left: index == 0 ? 0 : 5), + child: ButtonTheme( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(5.0), + side: BorderSide( + color: index == selectedButtonIndex ? CustomColors.green : Colors.black, //Color of the border + style: BorderStyle.solid, //Style of the border + width: 1.5, //width of the border + ), + ), + minWidth: MediaQuery.of(context).size.width * 0.2, + child: index == selectedButtonIndex ? getSelectedButton(index) : getNormalButton(index)), + ); + }, + ), + ) + : Center( + child: Padding( + padding: const EdgeInsets.only(left: 12.0, right: 12.0), + child: Text(TranslationBase.of(context).noSlotsError, style: TextStyle(fontSize: 14.0, fontWeight: FontWeight.w600, letterSpacing: -0.46, color: CustomColors.grey)), + )), ], ), ), @@ -239,95 +240,35 @@ class _CovidTimeSlotsState extends State with TickerProviderStat } Widget _buildTableCalendarWithBuilders(ProjectViewModel projectViewModel) { - return TableCalendar( - locale: projectViewModel.isArabic ? 'ar_SA' : 'en_US', - calendarController: _calendarController, - events: _events, - initialCalendarFormat: CalendarFormat.month, - startDay: DateTime.now(), - formatAnimation: FormatAnimation.slide, - startingDayOfWeek: StartingDayOfWeek.sunday, - weekendDays: [DateTime.friday, DateTime.saturday], - availableGestures: AvailableGestures.horizontalSwipe, - availableCalendarFormats: const { - CalendarFormat.month: '', - CalendarFormat.week: '', - }, - calendarStyle: CalendarStyle( - outsideDaysVisible: false, - weekendStyle: TextStyle().copyWith(color: Colors.blue[800]), - holidayStyle: TextStyle().copyWith(color: Colors.blue[800]), - ), - daysOfWeekStyle: DaysOfWeekStyle( - weekendStyle: TextStyle().copyWith(color: Colors.black, fontSize: 11.0, fontWeight: FontWeight.w600), - weekdayStyle: TextStyle().copyWith(color: Colors.black, fontSize: 11.0, fontWeight: FontWeight.w600), - ), - headerStyle: HeaderStyle(centerHeaderTitle: true, formatButtonVisible: false, titleTextStyle: TextStyle(fontSize: 16, letterSpacing: -0.64, fontWeight: FontWeight.w600)), - builders: CalendarBuilders( - selectedDayBuilder: (context, date, _) { - return FadeTransition( - opacity: Tween(begin: 0.0, end: 1.0).animate(_animationController), - child: Container( - margin: const EdgeInsets.all(4.0), - padding: const EdgeInsets.only(top: 5.0, left: 6.0), - color: Colors.transparent, - width: 0, - height: 0, - child: Text( - '${date.day}', - style: TextStyle().copyWith(fontSize: 14.0), - ), - ), - ); - }, - todayDayBuilder: (context, date, _) { - return Container( - decoration: BoxDecoration( - shape: BoxShape.circle, - color: _calendarController.isSelected(date) - ? Colors.green[400] - : _calendarController.isToday(date) - ? Colors.transparent - : Color(0xff76cfb7), - ), - width: 40.0, - height: 40.0, - child: Center( - child: Text( - '${date.day}', - style: TextStyle().copyWith( - color: Colors.white, - fontSize: 14.0, - ), - ), - ), - ); - }, - markersBuilder: (context, date, events, holidays) { - final children = []; - - if (events.isNotEmpty) { - children.add( - Positioned( - right: 4, - bottom: 4, - child: _buildEventsMarker(date, events), - ), - ); - } - - return children; - }, - ), - onDaySelected: (date, event, _) { - _onDaySelected(date, event, projectViewModel); - _animationController.forward(from: 0.0); + return SfCalendar( + controller: _calendarController, + minDate: DateTime.now(), + showNavigationArrow: true, + headerStyle: CalendarHeaderStyle(textAlign: TextAlign.center, textStyle: TextStyle(fontSize: 14.0, fontWeight: FontWeight.w600, letterSpacing: -0.46)), + viewHeaderStyle: ViewHeaderStyle(dayTextStyle: TextStyle(fontSize: 12.0, fontWeight: FontWeight.w600, letterSpacing: -0.46, color: CustomColors.black)), + view: CalendarView.month, + todayHighlightColor: CustomColors.green, + selectionDecoration: containerColorRadiusBorderWidthCircular(Colors.transparent, 4, CustomColors.green, 2.5), + cellBorderColor: Colors.white, + dataSource: MeetingDataSource(_getDataSource()), + monthViewSettings: const MonthViewSettings(appointmentDisplayMode: MonthAppointmentDisplayMode.indicator, showTrailingAndLeadingDates: false, appointmentDisplayCount: 1), + onTap: (CalendarTapDetails details) { + _calendarController.selectedDate = details.date; + _onDaySelected(details.date, projectViewModel); }, - onVisibleDaysChanged: _onVisibleDaysChanged, - onCalendarCreated: _onCalendarCreated, ); } + List _getDataSource() { + final List meetings = []; + _events.forEach((key, value) { + final DateTime startTime = DateTime(key.year, key.month, key.day, 9, 0, 0); + final DateTime endTime = startTime.add(const Duration(hours: 2)); + meetings.add(Meeting("", startTime, endTime, CustomColors.green, false)); + }); + return meetings; + } + openTimeSlotsPickerForDate(DateTime dateStart, List freeSlots) { dayEvents.clear(); DateTime dateStartObj = new DateTime(dateStart.year, dateStart.month, dateStart.day, 0, 0, 0, 0, 0); @@ -337,14 +278,12 @@ class _CovidTimeSlotsState extends State with TickerProviderStat }); setState(() { - if (dayEvents.length != 0) + if (dayEvents.length != 0) { CovidTimeSlots.areSlotsAvailable = true; - else + selectedButtonIndex = 0; + CovidTimeSlots.selectedTime = dayEvents[selectedButtonIndex].isoTime; + } else CovidTimeSlots.areSlotsAvailable = false; - - selectedButtonIndex = 0; - - CovidTimeSlots.selectedTime = dayEvents[selectedButtonIndex].isoTime; }); } @@ -366,43 +305,43 @@ class _CovidTimeSlotsState extends State with TickerProviderStat selectedDateJSON = freeSlotsResponse[0]['FreeTimeSlots']; }); openTimeSlotsPickerForDate(DateUtil.convertStringToDate(selectedDateJSON), docFreeSlots); - _calendarController.setFocusedDay(DateUtil.convertStringToDate(selectedDateJSON)); + _calendarController.selectedDate = DateUtil.convertStringToDate(selectedDateJSON); return _eventsParsed; } - Widget _buildEventsMarker(DateTime date, List events) { - return Container( - // decoration: BoxDecoration( - // shape: BoxShape.circle, - // color: _calendarController.isSelected(date) - // ? Colors.green[400] - // : _calendarController.isToday(date) - // ? Colors.brown[300] - // : Colors.blue[400], - // ), - - decoration: containerColorRadiusBorderWidth( - _calendarController.isSelected(date) - ? CustomColors.green - : _calendarController.isToday(date) - ? CustomColors.green.withOpacity(0.5) - : Colors.white, - 200, - _calendarController.isSelected(date) ? CustomColors.green : Colors.black, - 2), - width: 40.0, - height: 40.0, - child: Center( - child: Text( - '${date.day}', - style: TextStyle().copyWith( - color: _calendarController.isSelected(date) ? Colors.white : Colors.black, - fontSize: 13.0, - ), - ), - ), - ); - } + // Widget _buildEventsMarker(DateTime date, List events) { + // return Container( + // // decoration: BoxDecoration( + // // shape: BoxShape.circle, + // // color: _calendarController.isSelected(date) + // // ? Colors.green[400] + // // : _calendarController.isToday(date) + // // ? Colors.brown[300] + // // : Colors.blue[400], + // // ), + // + // decoration: containerColorRadiusBorderWidth( + // _calendarController.isSelected(date) + // ? CustomColors.green + // : _calendarController.isToday(date) + // ? CustomColors.green.withOpacity(0.5) + // : Colors.white, + // 200, + // _calendarController.isSelected(date) ? CustomColors.green : Colors.black, + // 2), + // width: 40.0, + // height: 40.0, + // child: Center( + // child: Text( + // '${date.day}', + // style: TextStyle().copyWith( + // color: _calendarController.isSelected(date) ? Colors.white : Colors.black, + // fontSize: 13.0, + // ), + // ), + // ), + // ); + // } Widget getNormalButton(int index) { return RaisedButton( @@ -436,12 +375,16 @@ class _CovidTimeSlotsState extends State with TickerProviderStat } bookCovidTestAppointment() { - GifLoaderDialogUtils.showMyDialog(context); - DoctorList docObject = new DoctorList(); - docObject.doctorID = widget.selectedDoctorID; - docObject.clinicID = widget.selectedClinicID; - docObject.projectID = widget.projectID; - insertAppointmentCovidTest(context, docObject); + if(CovidTimeSlots.areSlotsAvailable) { + GifLoaderDialogUtils.showMyDialog(context); + DoctorList docObject = new DoctorList(); + docObject.doctorID = widget.selectedDoctorID; + docObject.clinicID = widget.selectedClinicID; + docObject.projectID = widget.projectID; + insertAppointmentCovidTest(context, docObject); + } else { + AppToast.showErrorToast(message: TranslationBase.of(context).selectSlot); + } } insertAppointmentCovidTest(context, DoctorList docObject) { @@ -546,8 +489,8 @@ class _CovidTimeSlotsState extends State with TickerProviderStat if (res['COVID19_FreeTimeSlots'].length != 0) { freeSlotsResponse = res['COVID19_FreeTimeSlots']; _getJSONSlots().then((value) => { - setState(() => {widget.selectedClinicID = freeSlotsResponse[0]['ClinicID'], widget.selectedDoctorID = freeSlotsResponse[0]['DoctorID'], _events.clear(), _events = value}) - }); + setState(() => {widget.selectedClinicID = freeSlotsResponse[0]['ClinicID'], widget.selectedDoctorID = freeSlotsResponse[0]['DoctorID'], _events.clear(), _events = value}) + }); } else {} } else { GifLoaderDialogUtils.hideDialog(context); @@ -560,3 +503,53 @@ class _CovidTimeSlotsState extends State with TickerProviderStat }); } } + +class MeetingDataSource extends CalendarDataSource { + MeetingDataSource(List source) { + appointments = source; + } + + @override + DateTime getStartTime(int index) { + return _getMeetingData(index).from; + } + + @override + DateTime getEndTime(int index) { + return _getMeetingData(index).to; + } + + @override + String getSubject(int index) { + return _getMeetingData(index).eventName; + } + + @override + Color getColor(int index) { + return _getMeetingData(index).background; + } + + @override + bool isAllDay(int index) { + return _getMeetingData(index).isAllDay; + } + + Meeting _getMeetingData(int index) { + final dynamic meeting = appointments[index]; + Meeting meetingData; + if (meeting is Meeting) { + meetingData = meeting; + } + return meetingData; + } +} + +class Meeting { + Meeting(this.eventName, this.from, this.to, this.background, this.isAllDay); + + String eventName; + DateTime from; + DateTime to; + Color background; + bool isAllDay; +} diff --git a/lib/pages/Covid-DriveThru/covid-dirvethru-questions.dart b/lib/pages/Covid-DriveThru/covid-dirvethru-questions.dart index 97953978..45cab249 100644 --- a/lib/pages/Covid-DriveThru/covid-dirvethru-questions.dart +++ b/lib/pages/Covid-DriveThru/covid-dirvethru-questions.dart @@ -145,7 +145,6 @@ class CovidDirveThruQuestionsState extends State { itemBuilder: (ctx, idx) { var obj = qa[idx]; var qtext = isArabic ? obj["questionAR"] : obj["questionEN"]; - print("dddddddddddddd " + obj["ans"].toString()); return Padding( padding: const EdgeInsets.symmetric(vertical: 10), diff --git a/lib/pages/DrawerPages/family/my-family.dart b/lib/pages/DrawerPages/family/my-family.dart index 08491827..9cd4e8a0 100644 --- a/lib/pages/DrawerPages/family/my-family.dart +++ b/lib/pages/DrawerPages/family/my-family.dart @@ -12,7 +12,8 @@ import 'package:diplomaticquarterapp/extensions/string_extensions.dart'; import 'package:diplomaticquarterapp/locator.dart'; import 'package:diplomaticquarterapp/models/Appointments/toDoCountProviderModel.dart'; import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart'; -import 'package:diplomaticquarterapp/models/Authentication/check_activation_code_response.dart' as list; +import 'package:diplomaticquarterapp/models/Authentication/check_activation_code_response.dart' + as list; import 'package:diplomaticquarterapp/models/FamilyFiles/GetAllSharedRecordByStatusResponse.dart'; import 'package:diplomaticquarterapp/pages/landing/landing_page.dart'; import 'package:diplomaticquarterapp/pages/rateAppointment/rate_appointment_doctor.dart'; @@ -51,12 +52,15 @@ class _MyFamily extends State with TickerProviderStateMixin { var userID; TabController _tabController; int _tabIndex = 0; - AuthenticatedUserObject authenticatedUserObject = locator(); - AppointmentRateViewModel appointmentRateViewModel = locator(); + AuthenticatedUserObject authenticatedUserObject = + locator(); + AppointmentRateViewModel appointmentRateViewModel = + locator(); ProjectViewModel projectViewModel; AuthenticatedUser user; VitalSignService _vitalSignService = locator(); - PharmacyModuleViewModel pharmacyModuleViewModel = locator(); + PharmacyModuleViewModel pharmacyModuleViewModel = + locator(); ToDoCountProviderModel toDoProvider; var isVaiable = false; bool isSwitchUser = false; @@ -73,12 +77,18 @@ class _MyFamily extends State with TickerProviderStateMixin { Widget build(BuildContext context) { imagesInfo.add( ImagesInfo( - imageEn: 'https://hmgwebservices.com/Images/MobileApp/images-info-home/family-file/en/0.png', imageAr: 'https://hmgwebservices.com/Images/MobileApp/images-info-home/family-file/ar/0.png'), + imageEn: + 'https://hmgwebservices.com/Images/MobileApp/images-info-home/family-file/en/0.png', + imageAr: + 'https://hmgwebservices.com/Images/MobileApp/images-info-home/family-file/ar/0.png'), ); imagesInfo.add( ImagesInfo( - imageEn: 'https://hmgwebservices.com/Images/MobileApp/images-info-home/family-file/en/1.png', imageAr: 'https://hmgwebservices.com/Images/MobileApp/images-info-home/family-file/ar/1.png'), + imageEn: + 'https://hmgwebservices.com/Images/MobileApp/images-info-home/family-file/en/1.png', + imageAr: + 'https://hmgwebservices.com/Images/MobileApp/images-info-home/family-file/ar/1.png'), ); projectViewModel = Provider.of(context); toDoProvider = Provider.of(context); @@ -90,108 +100,56 @@ class _MyFamily extends State with TickerProviderStateMixin { showNewAppBarTitle: true, icon: "assets/images/new/bottom_nav/family_files.svg", description: TranslationBase.of(context).familyInfo, - 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, - // // margin: EdgeInsets.only(top: 10.0), - // width: MediaQuery.of(context).size.width * 0.92, // 0.9, - // decoration: BoxDecoration( - // border: Border( - // bottom: BorderSide(color: Theme.of(context).dividerColor, width: 0.9), //width: 0.7 - // ), - // color: Colors.white), - Center( - child: - // TabBar( - // isScrollable: true, - // controller: _tabController, - // indicatorWeight: 5.0, - // indicatorSize: TabBarIndicatorSize.tab, - // labelPadding: EdgeInsets.only(top: 4.0, left: 35.0, right: 35.0), - // unselectedLabelColor: Colors.grey[800], - // tabs: [ - // Container( - // width: MediaQuery.of(context).size.width * 0.30, - // child: Center( - // child: AppText(TranslationBase.of(context).family), - // ), - // ), - // Container( - // width: MediaQuery.of(context).size.width * 0.30, - // child: Center( - // child: AppText(TranslationBase.of(context).request), - // ), - // ), - // ], - // ), - 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).family), Text(TranslationBase.of(context).request)], - ), - ), - // ), - // ), + 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).family), + Text(TranslationBase.of(context).request) ], ), - ), - body: Column( - children: [ - Expanded( - child: (user != null && projectViewModel.isLogin) - ? TabBarView( - physics: BouncingScrollPhysics(), - controller: _tabController, - children: [myFamilyDetails(context), myFamilyRequest(context)], - ) - : Container(child: AppText('Loading..')), - ) - ], - ), - bottomSheet: Container( - color: Theme.of(context).scaffoldBackgroundColor, - width: double.infinity, - padding: EdgeInsets.all(14), - child: DefaultButton( - TranslationBase.of(context).addFamilyMember, - () async { - Navigator.of(context).pushNamed(ADD_FAMILY_MEMBER_TYPE); - }, + Expanded( + child: (user != null && projectViewModel.isLogin) + ? TabBarView( + physics: BouncingScrollPhysics(), + controller: _tabController, + children: [ + myFamilyDetails(context), + myFamilyRequest(context) + ], + ) + : Container(child: AppText('Loading..')), ), + ], + ), + bottomSheet: Container( + color: Theme.of(context).scaffoldBackgroundColor, + width: double.infinity, + padding: EdgeInsets.all(14), + child: DefaultButton( + TranslationBase.of(context).addFamilyMember, + () async { + Navigator.of(context).pushNamed(ADD_FAMILY_MEMBER_TYPE); + }, ), ), ); @@ -199,150 +157,168 @@ class _MyFamily extends State with TickerProviderStateMixin { Widget myFamilyDetails(context) { return Container( - height: MediaQuery.of(context).size.height, - margin: EdgeInsets.fromLTRB(20.0, 25.0, 20.0, 0.0), + margin: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 0.0), child: Column( children: [ Expanded( flex: 4, child: FutureBuilder( future: getFamilyFiles(), // async work - builder: (BuildContext context, AsyncSnapshot snapshot) { + builder: (BuildContext context, + AsyncSnapshot + snapshot) { switch (snapshot.connectionState) { case ConnectionState.waiting: - return Padding(padding: EdgeInsets.only(top: 50), child: Text('Loading....')); + return Padding( + padding: EdgeInsets.only(top: 50), + child: Text('Loading....')); default: if (snapshot.hasError) - return Padding(padding: EdgeInsets.all(10), child: Text(TranslationBase.of(context).noDataAvailable)); - else return Padding( - padding: EdgeInsets.only(top: 50), - child: Column(children: [ - // Row( - // mainAxisAlignment: MainAxisAlignment.spaceBetween, - // children: [ - // Expanded( - // flex: 3, - // child: Texts( - // TranslationBase.of(context).request, - // textAlign: TextAlign.center, - // )), - // Expanded(flex: 2, child: Texts(TranslationBase.of(context).switchUser, textAlign: TextAlign.center)), - // Expanded(flex: 1, child: Texts(TranslationBase.of(context).deleteView, textAlign: TextAlign.center)), - // ], - // ), - Column( - mainAxisAlignment: MainAxisAlignment.start, - children: snapshot.data.getAllSharedRecordsByStatusList.map((result) { - return result.status == 3 - ? Card( - margin: EdgeInsets.all(10), - shape: cardRadius(15), - color: result.gender == 1 ? Color(0xff6EA8FF) : Color(0xffFDA4B0), - elevation: 3, - child: Container( - // height: 130, - width: MediaQuery.of(context).size.width, - padding: EdgeInsets.all(10), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ + padding: EdgeInsets.all(10), + child: Text( + TranslationBase.of(context).noDataAvailable)); + else + return ListView.separated( + itemBuilder: (context, index) { + if (snapshot + .data + .getAllSharedRecordsByStatusList[index] + .status == + 3) + return Card( + margin: EdgeInsets.all(10), + shape: cardRadius(15), + color: snapshot + .data + .getAllSharedRecordsByStatusList[ + index] + .gender == + 1 + ? Color(0xff6EA8FF) + : Color(0xffFDA4B0), + elevation: 3, + child: Container( + // height: 130, + width: + MediaQuery.of(context).size.width, + padding: EdgeInsets.all(10), + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Texts( + snapshot + .data + .getAllSharedRecordsByStatusList[ + index] + .patientName + .toLowerCase() + .capitalizeFirstofEach, + fontSize: 22, + fontWeight: FontWeight.bold, + color: Colors.white, + ), + Texts( + TranslationBase.of(context) + .fileNumber + + ': ' + + snapshot + .data + .getAllSharedRecordsByStatusList[ + index] + .responseID + .toString(), + fontSize: 12, + color: Colors.white), + Texts( + snapshot + .data + .getAllSharedRecordsByStatusList[ + index] + .age + .toString() + + ' ' + + TranslationBase.of(context) + .years + + ', ' + + snapshot + .data + .getAllSharedRecordsByStatusList[ + index] + .genderDescription, + fontSize: 12, + color: Colors.white), + Row( + mainAxisAlignment: + MainAxisAlignment + .spaceBetween, + children: [ + Row( + children: [ + CupertinoSwitch( + value: isSwitchUser, + onChanged: (value) { + setState(() { + isSwitchUser = value; + }); + if (isSwitchUser == + true) + switchUser( + snapshot.data + .getAllSharedRecordsByStatusList[ + index], + context); + }, + ), Texts( - result.patientName.toLowerCase().capitalizeFirstofEach, - fontSize: 22, - fontWeight: FontWeight.bold, + TranslationBase.of( + context) + .switchUser, color: Colors.white, - ), - Texts(TranslationBase.of(context).fileNumber + ': ' + result.responseID.toString(), fontSize: 12, color: Colors.white), - Texts(result.age.toString() + ' ' + TranslationBase.of(context).years + ', ' + result.genderDescription, fontSize: 12, color: Colors.white), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, + fontSize: 12, + ) + ], + ), + InkWell( + onTap: () { + deleteFamily( + snapshot.data + .getAllSharedRecordsByStatusList[ + index], + context); + }, + child: Row( children: [ - Row( - children: [ - CupertinoSwitch( - value: isSwitchUser, - onChanged: (value) { - setState(() { - isSwitchUser = value; - }); - if (isSwitchUser == true) switchUser(result, context); - }, - ), - Texts( - TranslationBase.of(context).switchUser, - color: Colors.white, - fontSize: 12, - ) - ], + Texts( + TranslationBase.of( + context) + .delete, + color: Colors.white, + fontSize: 12, + ), + Icon( + Icons.delete, + color: Colors.white, ), - InkWell( - onTap: () { - deleteFamily(result, context); - }, - child: Row( - children: [ - Texts( - TranslationBase.of(context).delete, - color: Colors.white, - fontSize: 12, - ), - Icon( - Icons.delete, - color: Colors.white, - ), - ], - )) ], - ) - // Expanded( - // flex: 2, - // child: IconButton( - // icon: Icon(Icons.group), - // color: Colors.black, - // onPressed: () { - // switchUser(result, context); - // }, - // )), - // Expanded( - // flex: 1, - // child: IconButton( - // icon: Icon( - // Icons.delete, - // color: Colors.black, - // ), - // onPressed: () { - // deleteFamily(result, context); - // }, - // )), - ], - ))) - : SizedBox(); - }).toList()) - ])); + )) + ], + ) + ], + ))); + else + return SizedBox.shrink(); + }, + separatorBuilder: (context, index) => + SizedBox(height: 0), + itemCount: snapshot + .data.getAllSharedRecordsByStatusList.length); } }, ), ), - // Expanded( - // flex: 1, - // child: Column( - // mainAxisAlignment: MainAxisAlignment.end, - // children: [ - // Row( - // children: [ - // Expanded( - // child: DefaultButton( - // TranslationBase.of(context).addFamilyMember, - // () => {Navigator.of(context).pushNamed(ADD_FAMILY_MEMBER_TYPE)}, - // color: Colors.grey[900], - // textColor: Colors.white, - // )) - // ], - // ), - // ], - // ), - // ) + SizedBox(height: 80.0) ], )); } @@ -354,25 +330,34 @@ class _MyFamily extends State with TickerProviderStateMixin { SingleChildScrollView( child: Container( height: MediaQuery.of(context).size.height, - margin: EdgeInsets.only(top: 65), + margin: EdgeInsets.only(top: 10), child: Column( children: [ RoundedContainer( child: ExpansionTile( title: Text( TranslationBase.of(context).userViewRequest, - style: TextStyle(fontSize: 16.0, fontWeight: FontWeight.bold, color: Colors.black), + style: TextStyle( + fontSize: 16.0, + fontWeight: FontWeight.bold, + color: Colors.black), ), children: [ FutureBuilder( future: getUserViewRequest(), // async work - builder: (BuildContext context, AsyncSnapshot snapshot) { + builder: (BuildContext context, + AsyncSnapshot snapshot) { switch (snapshot.connectionState) { case ConnectionState.waiting: - return Padding(padding: EdgeInsets.only(top: 50), child: Text('Loading....')); + return Padding( + padding: EdgeInsets.only(top: 50), + child: Text('Loading....')); default: if (snapshot.hasError) - return Padding(padding: EdgeInsets.all(10), child: Text(TranslationBase.of(context).noDataAvailable)); + return Padding( + padding: EdgeInsets.all(10), + child: Text(TranslationBase.of(context) + .noDataAvailable)); else return Container( padding: EdgeInsets.all(15), @@ -385,27 +370,60 @@ class _MyFamily extends State with TickerProviderStateMixin { Padding( padding: EdgeInsets.all(10), child: Row(children: [ - Expanded(flex: 3, child: AppText(TranslationBase.of(context).name, fontWeight: FontWeight.w600)), - Expanded(flex: 1, child: AppText(TranslationBase.of(context).allow, fontWeight: FontWeight.w600)), - Expanded(flex: 1, child: AppText(TranslationBase.of(context).reject, fontWeight: FontWeight.w600)), + Expanded( + flex: 3, + child: AppText( + TranslationBase.of( + context) + .name, + fontWeight: + FontWeight.w600)), + Expanded( + flex: 1, + child: AppText( + TranslationBase.of( + context) + .allow, + fontWeight: + FontWeight.w600)), + Expanded( + flex: 1, + child: AppText( + TranslationBase.of( + context) + .reject, + fontWeight: + FontWeight.w600)), ])), - Divider(color: Colors.black, height: 1), + Divider( + color: Colors.black, height: 1), Column( - children: familyFileProvider.allSharedRecordsByStatusResponse.getAllSharedRecordsByStatusList.map((result) { + children: familyFileProvider + .allSharedRecordsByStatusResponse + .getAllSharedRecordsByStatusList + .map((result) { return Container( padding: EdgeInsets.all(10), child: Row( children: [ - Expanded(flex: 3, child: Text(result.patientName)), + Expanded( + flex: 3, + child: Text(result + .patientName)), Expanded( flex: 1, child: IconButton( icon: Icon( - Icons.check_circle, - color: Colors.black, + Icons + .check_circle, + color: + Colors.black, ), onPressed: () { - acceptRemoveRequest(result.iD, 3, context); + acceptRemoveRequest( + result.iD, + 3, + context); }, )), Expanded( @@ -413,10 +431,14 @@ class _MyFamily extends State with TickerProviderStateMixin { child: IconButton( icon: Icon( Icons.delete, - color: Colors.black, + color: + Colors.black, ), onPressed: () { - acceptRemoveRequest(result.iD, 4, context); + acceptRemoveRequest( + result.iD, + 4, + context); }, )) ], @@ -434,18 +456,28 @@ class _MyFamily extends State with TickerProviderStateMixin { child: ExpansionTile( title: Text( TranslationBase.of(context).sentRequest, - style: TextStyle(fontSize: 16.0, fontWeight: FontWeight.bold, color: Colors.black), + style: TextStyle( + fontSize: 16.0, + fontWeight: FontWeight.bold, + color: Colors.black), ), children: [ FutureBuilder( future: getSentRequest(), // async work - builder: (BuildContext context, AsyncSnapshot snapshot) { + builder: (BuildContext context, + AsyncSnapshot + snapshot) { switch (snapshot.connectionState) { case ConnectionState.waiting: - return Padding(padding: EdgeInsets.only(top: 50), child: Text('Loading....')); + return Padding( + padding: EdgeInsets.only(top: 50), + child: Text('Loading....')); default: if (snapshot.hasError) - return Padding(padding: EdgeInsets.all(10), child: Text(TranslationBase.of(context).noDataAvailable)); + return Padding( + padding: EdgeInsets.all(10), + child: Text(TranslationBase.of(context) + .noDataAvailable)); else return Container( padding: EdgeInsets.all(15), @@ -459,22 +491,45 @@ class _MyFamily extends State with TickerProviderStateMixin { Padding( padding: EdgeInsets.all(10), child: Row(children: [ - Expanded(flex: 3, child: AppText(TranslationBase.of(context).theName, fontWeight: FontWeight.w600)), - Expanded(flex: 2, child: AppText(TranslationBase.of(context).status, fontWeight: FontWeight.w600)) + Expanded( + flex: 3, + child: AppText( + TranslationBase.of( + context) + .theName, + fontWeight: + FontWeight.w600)), + Expanded( + flex: 2, + child: AppText( + TranslationBase.of( + context) + .status, + fontWeight: + FontWeight.w600)) ])), Divider(color: Colors.black, height: 1), Column( - children: snapshot.data.getAllSharedRecordsByStatusList.map((result) { + children: snapshot.data + .getAllSharedRecordsByStatusList + .map((result) { return Padding( padding: EdgeInsets.all(10), child: Row( children: [ - Expanded(flex: 3, child: Text(result.patientName)), + Expanded( + flex: 3, + child: Text(result + .patientName)), Expanded( flex: 2, child: AppText( - result.statusDescription, - color: result.status == 3 ? Colors.green : Colors.red, + result + .statusDescription, + color: + result.status == 3 + ? Colors.green + : Colors.red, )), ], )); @@ -490,18 +545,27 @@ class _MyFamily extends State with TickerProviderStateMixin { child: ExpansionTile( title: Text( TranslationBase.of(context).userView, - style: TextStyle(fontSize: 16.0, fontWeight: FontWeight.bold, color: Colors.black), + style: TextStyle( + fontSize: 16.0, + fontWeight: FontWeight.bold, + color: Colors.black), ), children: [ FutureBuilder( future: getUserViewRequest(), // async work - builder: (BuildContext context, AsyncSnapshot snapshot) { + builder: (BuildContext context, + AsyncSnapshot snapshot) { switch (snapshot.connectionState) { case ConnectionState.waiting: - return Padding(padding: EdgeInsets.only(top: 50), child: Text('Loading....')); + return Padding( + padding: EdgeInsets.only(top: 50), + child: Text('Loading....')); default: if (snapshot.hasError) - return Padding(padding: EdgeInsets.all(10), child: Text(TranslationBase.of(context).noDataAvailable)); + return Padding( + padding: EdgeInsets.all(10), + child: Text(TranslationBase.of(context) + .noDataAvailable)); else return Container( padding: EdgeInsets.all(15), @@ -514,17 +578,33 @@ class _MyFamily extends State with TickerProviderStateMixin { Padding( padding: EdgeInsets.all(10), child: Row(children: [ - Expanded(flex: 3, child: AppText(TranslationBase.of(context).name)), - Expanded(flex: 1, child: AppText(TranslationBase.of(context).delete)), + Expanded( + flex: 3, + child: AppText( + TranslationBase.of( + context) + .name)), + Expanded( + flex: 1, + child: AppText( + TranslationBase.of( + context) + .delete)), ])), Divider(color: Colors.black), Column( - children: familyFileProvider.allSharedRecordsByStatusResponse.getAllSharedRecordsByStatusList.map((result) { + children: familyFileProvider + .allSharedRecordsByStatusResponse + .getAllSharedRecordsByStatusList + .map((result) { return Padding( padding: EdgeInsets.all(10), child: Row( children: [ - Expanded(flex: 3, child: AppText(result.patientName)), + Expanded( + flex: 3, + child: AppText(result + .patientName)), Expanded( flex: 1, child: IconButton( @@ -533,7 +613,10 @@ class _MyFamily extends State with TickerProviderStateMixin { color: Colors.black, ), onPressed: () { - deactivateRequest(result.iD, 5, context); + deactivateRequest( + result.iD, + 5, + context); }, )), ], @@ -562,13 +645,11 @@ class _MyFamily extends State with TickerProviderStateMixin { } Future getFamilyFiles() async { - if (user != null) { - if (await sharedPref.getObject(FAMILY_FILE) != null) { - // print(await sharedPref.getObject(FAMILY_FILE)); - return Future.value(GetAllSharedRecordsByStatusResponse.fromJson(await sharedPref.getObject(FAMILY_FILE))); - } else { - return familyFileProvider.getSharedRecordByStatus(); - } + if (await sharedPref.getObject(FAMILY_FILE) != null) { + return Future.value(GetAllSharedRecordsByStatusResponse.fromJson( + await sharedPref.getObject(FAMILY_FILE))); + } else { + return familyFileProvider.getSharedRecordByStatus().then((value) {}); } } @@ -588,7 +669,10 @@ class _MyFamily extends State with TickerProviderStateMixin { confirmMessage: TranslationBase.of(context).removeFamilyMember, okText: TranslationBase.of(context).confirm, cancelText: TranslationBase.of(context).cancel_nocaps, - okFunction: () => {ConfirmDialog.closeAlertDialog(context), removeFamily(family, context)}, + okFunction: () => { + ConfirmDialog.closeAlertDialog(context), + removeFamily(family, context) + }, cancelFunction: () => {}); dialog.showAlertDialog(context); } @@ -599,7 +683,10 @@ class _MyFamily extends State with TickerProviderStateMixin { Map request = {}; request['ID'] = this.userID; request['IsActive'] = false; - this.familyFileProvider.deativateActivateMemberFile(request).then((value) => refreshFamily(context)); + this + .familyFileProvider + .deativateActivateMemberFile(request) + .then((value) => refreshFamily(context)); } refreshFamily(context) { @@ -617,7 +704,12 @@ class _MyFamily extends State with TickerProviderStateMixin { // .then((value) => loginAfter(value, context)); // Utils.showProgressDialog(context); - this.familyFileProvider.silentLoggin(user is AuthenticatedUser ? null : user, mainUser: user is AuthenticatedUser).then((value) => loginAfter(value, context)).catchError((err) { + this + .familyFileProvider + .silentLoggin(user is AuthenticatedUser ? null : user, + mainUser: user is AuthenticatedUser) + .then((value) => loginAfter(value, context)) + .catchError((err) { print(err); AppToast.showErrorToast(message: err); Navigator.of(context).pop(); @@ -626,7 +718,8 @@ class _MyFamily extends State with TickerProviderStateMixin { loginAfter(result, context) async { var currentLang = await sharedPref.getString(APP_LANGUAGE); - Provider.of(context, listen: false).setPrivilege(privilegeList: result, isLoginChild: true); + Provider.of(context, listen: false) + .setPrivilege(privilegeList: result, isLoginChild: true); result = list.CheckActivationCode.fromJson(result); var familyFile = await sharedPref.getObject(FAMILY_FILE); @@ -647,12 +740,10 @@ class _MyFamily extends State with TickerProviderStateMixin { this.sharedPref.setString(TOKEN, result.authenticationTokenID); await authenticatedUserObject.getUser(getUser: true); - Provider.of(context, listen: false).user = authenticatedUserObject.user; - Provider.of(context, listen: false).setUser(authenticatedUserObject.user); - - // await pharmacyModuleViewModel.generatePharmacyToken().then((value) async { - // if (pharmacyModuleViewModel.error.isNotEmpty) await pharmacyModuleViewModel.createUser(); - // }); + Provider.of(context, listen: false).user = + authenticatedUserObject.user; + Provider.of(context, listen: false) + .setUser(authenticatedUserObject.user); appointmentRateViewModel .getIsLastAppointmentRatedList() @@ -690,7 +781,8 @@ class _MyFamily extends State with TickerProviderStateMixin { Map request = {}; request["ID"] = ID; request["Status"] = status; - this.familyFileProvider.deactivateFamily(request).then((value) => {GifLoaderDialogUtils.hideDialog(context), refreshFamily(context)}); + this.familyFileProvider.deactivateFamily(request).then((value) => + {GifLoaderDialogUtils.hideDialog(context), refreshFamily(context)}); } acceptRemoveRequest(ID, status, context) { @@ -698,15 +790,17 @@ class _MyFamily extends State with TickerProviderStateMixin { Map request = {}; request["ID"] = ID; request["Status"] = status; - this.familyFileProvider.acceptRejectFamily(request).then((value) => {GifLoaderDialogUtils.hideDialog(context), refreshFamily(context)}); + this.familyFileProvider.acceptRejectFamily(request).then((value) => + {GifLoaderDialogUtils.hideDialog(context), refreshFamily(context)}); } checkUserData() async { if (await this.sharedPref.getObject(USER_PROFILE) != null) { - var data = AuthenticatedUser.fromJson(await this.sharedPref.getObject(USER_PROFILE)); + var data = AuthenticatedUser.fromJson( + await this.sharedPref.getObject(USER_PROFILE)); - var data2 = AuthenticatedUser.fromJson(await this.sharedPref.getObject(MAIN_USER)); - print(data2); + var data2 = AuthenticatedUser.fromJson( + await this.sharedPref.getObject(MAIN_USER)); setState(() { this.user = data; }); @@ -719,7 +813,8 @@ class _MyFamily extends State with TickerProviderStateMixin { service.getActiveAppointmentNo(context).then((res) { print(res['AppointmentActiveNumber']); if (res['MessageStatus'] == 1 && res['AppointmentActiveNumber'] != null) { - toDoProvider.setState(res['AppointmentActiveNumber'], true, toDoProvider.notificationsCount); + toDoProvider.setState(res['AppointmentActiveNumber'], true, + toDoProvider.notificationsCount); } else {} }).catchError((err) { print(err); diff --git a/lib/pages/ErService/rapid-response-team/rrt-pickup-address-page.dart b/lib/pages/ErService/rapid-response-team/rrt-pickup-address-page.dart index 7a82ecff..e738a438 100644 --- a/lib/pages/ErService/rapid-response-team/rrt-pickup-address-page.dart +++ b/lib/pages/ErService/rapid-response-team/rrt-pickup-address-page.dart @@ -116,9 +116,7 @@ class RRTRequestPickupAddressPageState extends State { else AppToast.showErrorToast(message: TranslationBase.of(context).pleaseAcceptTerms); }, - color: acceptTerms ? Colors.red[600] : Colors.grey, + color: acceptTerms ? CustomColors.accentColor : Colors.grey, ), ), ], diff --git a/lib/pages/feedback/status_feedback_page.dart b/lib/pages/feedback/status_feedback_page.dart index 2e87f875..cbbf2572 100644 --- a/lib/pages/feedback/status_feedback_page.dart +++ b/lib/pages/feedback/status_feedback_page.dart @@ -52,7 +52,7 @@ class _StatusFeedbackPageState extends State { style: TextStyle(fontSize: 14.0, letterSpacing: -0.56, fontWeight: FontWeight.bold)), Container( margin: EdgeInsets.only(top: 5.0), - child: Text(model.cOCItemList[index].formType, + child: Text(model.cOCItemList[index].formType.toString(), style: TextStyle( fontSize: 14, fontWeight: FontWeight.w600, diff --git a/lib/services/clinic_services/get_clinic_service.dart b/lib/services/clinic_services/get_clinic_service.dart index 2b2d933f..d525dbb1 100644 --- a/lib/services/clinic_services/get_clinic_service.dart +++ b/lib/services/clinic_services/get_clinic_service.dart @@ -40,6 +40,7 @@ class ClinicListService extends BaseService { }, onFailure: (String error, int statusCode) { throw error; }, body: request); + sharedPref.setObject(CLINICS_LIST, localRes); return Future.value(localRes); } diff --git a/lib/services/family_files/family_files_provider.dart b/lib/services/family_files/family_files_provider.dart index 014ba7b3..ef7ad14d 100644 --- a/lib/services/family_files/family_files_provider.dart +++ b/lib/services/family_files/family_files_provider.dart @@ -37,12 +37,14 @@ class FamilyFilesProvider with ChangeNotifier { GetAllSharedRecordsByStatusResponse allSharedRecordsByStatusResponse; Future getSharedRecordByStatus() async { + dynamic localRes; try { - dynamic localRes; var request = GetAllSharedRecordsByStatusReq(); var result = await sharedPref.getObject(MAIN_USER); request.status = 0; + request.patientID = result["PatientID"]; + await new BaseAppClient().post(GET_SHARED_RECORD_BY_STATUS, onSuccess: (dynamic response, int statusCode) { localRes = response; }, onFailure: (String error, int statusCode) { @@ -236,7 +238,7 @@ class FamilyFilesProvider with ChangeNotifier { request['MobileNo'] = currentUser.mobileNumber[0].toString() == "0" ? currentUser.mobileNumber.toString() : '0' + currentUser.mobileNumber.toString(); request['PatientMobileNumber'] = currentUser.mobileNumber; //['MobileNumber']; request['SearchType'] = 2; - request['SuperUser'] = currentUser.patientID; //currentUser.PatientID; + // request['SuperUser'] = currentUser.patientID; //currentUser.PatientID; request['PatientIdentificationID'] = ''; request['IsSilentLogin'] = true; request['DeviceToken'] = await sharedPref.getString(PUSH_TOKEN); diff --git a/lib/uitl/translations_delegate_base.dart b/lib/uitl/translations_delegate_base.dart index a08308ef..0a3177e0 100644 --- a/lib/uitl/translations_delegate_base.dart +++ b/lib/uitl/translations_delegate_base.dart @@ -2357,6 +2357,9 @@ class TranslationBase { String get respirationBPM => localizedValues["respirationBPM"][locale.languageCode]; + String get noSlotsError => localizedValues["noSlotsError"][locale.languageCode]; + + String get selectSlot => localizedValues["selectSlot"][locale.languageCode]; } diff --git a/lib/uitl/utils_new.dart b/lib/uitl/utils_new.dart index 124b3b45..0bbad901 100644 --- a/lib/uitl/utils_new.dart +++ b/lib/uitl/utils_new.dart @@ -310,6 +310,18 @@ Decoration containerColorRadiusBorderWidth(Color background, double radius, Colo ); } +Decoration containerColorRadiusBorderWidthCircular(Color background, double radius, Color color, double w) { + return BoxDecoration( + color: background, + border: Border.all( + width: w, // + color: color // <--- border width here + ), + // borderRadius: BorderRadius.circular(radius), + shape: BoxShape.circle, + ); +} + Decoration containerColorRadiusRight(Color background, double radius) { return BoxDecoration( color: background, diff --git a/lib/widgets/drawer/app_drawer_widget.dart b/lib/widgets/drawer/app_drawer_widget.dart index 3f90ad48..83e70064 100644 --- a/lib/widgets/drawer/app_drawer_widget.dart +++ b/lib/widgets/drawer/app_drawer_widget.dart @@ -357,7 +357,7 @@ class _AppDrawerState extends State { ), onTap: () { //NotificationsPage - Navigator.of(context).pop(); + // Navigator.of(context).pop(); Navigator.push(context, FadePage(page: NotificationsPage())); }, ), diff --git a/pubspec.yaml b/pubspec.yaml index 190db68a..c5541181 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -102,7 +102,8 @@ dependencies: rating_bar: ^0.2.0 # Calendar - table_calendar: ^2.3.0 +# table_calendar: ^2.3.0 + syncfusion_flutter_calendar: ^18.4.49 # SVG Images flutter_svg: ^0.18.0