diff --git a/lib/core/service/schedule_service.dart b/lib/core/service/schedule_service.dart new file mode 100644 index 00000000..674facda --- /dev/null +++ b/lib/core/service/schedule_service.dart @@ -0,0 +1,26 @@ +import 'package:doctor_app_flutter/config/config.dart'; +import 'package:doctor_app_flutter/core/service/base/base_service.dart'; +import 'package:doctor_app_flutter/models/doctor/list_doctor_working_hours_table_model.dart'; +import 'package:doctor_app_flutter/models/doctor/request_schedule.dart'; + +class ScheduleService extends BaseService { + + List get listDoctorWorkingHoursTable => _listDoctorWorkingHoursTable; + List _listDoctorWorkingHoursTable = []; + + + RequestSchedule _requestSchedule = RequestSchedule(); + Future getDoctorSchedule() async { + await baseAppClient.post(GET_DOCTOR_WORKING_HOURS_TABLE, + onSuccess: (dynamic response, int statusCode) { + _listDoctorWorkingHoursTable.clear(); + response['List_DoctorWorkingHoursTable'].forEach((v) { + _listDoctorWorkingHoursTable + .add(ListDoctorWorkingHoursTable.fromJson(v)); + }); + }, onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, body: _requestSchedule.toJson(),); + } +} diff --git a/lib/core/viewModel/schedule_view_model.dart b/lib/core/viewModel/schedule_view_model.dart new file mode 100644 index 00000000..cfaa1be4 --- /dev/null +++ b/lib/core/viewModel/schedule_view_model.dart @@ -0,0 +1,26 @@ +import 'package:doctor_app_flutter/core/enum/viewstate.dart'; +import 'package:doctor_app_flutter/core/model/hospitals_model.dart'; +import 'package:doctor_app_flutter/core/service/doctor_reply_service.dart'; +import 'package:doctor_app_flutter/core/service/hospital/hospitals_service.dart'; +import 'package:doctor_app_flutter/core/service/schedule_service.dart'; +import 'package:doctor_app_flutter/models/doctor/list_doctor_working_hours_table_model.dart'; +import 'package:doctor_app_flutter/models/doctor/list_gt_my_patients_question_model.dart'; + +import '../../locator.dart'; +import 'base_view_model.dart'; + +class ScheduleViewModel extends BaseViewModel { + ScheduleService _scheduleService = locator(); + + List get listDoctorWorkingHoursTable => _scheduleService.listDoctorWorkingHoursTable; + + Future getDoctorSchedule() async { + setState(ViewState.Busy); + await _scheduleService.getDoctorSchedule(); + if (_scheduleService.hasError) { + error = _scheduleService.error; + setState(ViewState.Error); + } else + setState(ViewState.Idle); + } +} diff --git a/lib/locator.dart b/lib/locator.dart index 40b27da5..053f7535 100644 --- a/lib/locator.dart +++ b/lib/locator.dart @@ -2,8 +2,10 @@ import 'package:get_it/get_it.dart'; import 'core/service/doctor_reply_service.dart'; import 'core/service/hospital/hospitals_service.dart'; +import 'core/service/schedule_service.dart'; import 'core/viewModel/doctor_replay_view_model.dart'; import 'core/viewModel/hospital_view_model.dart'; +import 'core/viewModel/schedule_view_model.dart'; GetIt locator = GetIt.instance; @@ -12,8 +14,10 @@ void setupLocator() { /// Services locator.registerLazySingleton(() => HospitalService()); locator.registerLazySingleton(() => DoctorReplyService()); + locator.registerLazySingleton(() => ScheduleService()); /// View Model locator.registerFactory(() => HospitalViewModel()); locator.registerFactory(() => DoctorReplayViewModel()); + locator.registerFactory(() => ScheduleViewModel()); } diff --git a/lib/main.dart b/lib/main.dart index 53d0839b..3b32e732 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,7 +1,6 @@ import 'package:doctor_app_flutter/providers/livecare_provider.dart'; import 'package:doctor_app_flutter/providers/medicine_provider.dart'; import 'package:doctor_app_flutter/providers/project_provider.dart'; -import 'package:doctor_app_flutter/providers/schedule_provider.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:flutter/material.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; @@ -41,9 +40,6 @@ class MyApp extends StatelessWidget { ChangeNotifierProvider( create: (context) => ProjectProvider(), ), - ChangeNotifierProvider( - create: (context) => ScheduleProvider(), - ), ChangeNotifierProvider( create: (context) => LiveCareProvider(), ), diff --git a/lib/providers/doctors_provider.dart b/lib/providers/doctors_provider.dart deleted file mode 100644 index d27b04da..00000000 --- a/lib/providers/doctors_provider.dart +++ /dev/null @@ -1,68 +0,0 @@ -import 'package:doctor_app_flutter/client/base_app_client.dart'; -import 'package:doctor_app_flutter/config/config.dart'; -import 'package:doctor_app_flutter/models/doctor/statstics_for_certain_doctor_request.dart'; -import 'package:doctor_app_flutter/util/dr_app_shared_pref.dart'; -import 'package:doctor_app_flutter/util/helpers.dart'; -import 'package:flutter/cupertino.dart'; - -Helpers helpers = Helpers(); -DrAppSharedPreferances sharedPref = new DrAppSharedPreferances(); - -StatsticsForCertainDoctorRequest _statsticsForCertainDoctorRequest = StatsticsForCertainDoctorRequest(); - - -var certainDoctorsStasticsList = []; - -/*@author: ibrahem albitar - *@Date:22/6/2020 - *@desc: Doctor Provider - */ - -class DoctorsProvider with ChangeNotifier { - - bool isLoading = false; - bool isError = false; - String error = ''; - BaseAppClient baseAppClient = BaseAppClient(); - resetDefaultValues() { - isLoading = true; - isError = false; - error = ''; - notifyListeners(); - } - - - /*@author: ibrahem albitar - *@Date:22/6/2020 - *@desc: StatsticsForCertainDoctor - */ - getStatsticsForCertainDoctor(String generalId) async { - resetDefaultValues(); - try { - _statsticsForCertainDoctorRequest.generalid = generalId; - await baseAppClient.post(LIVE_CARE_STATISTICS_FOR_CERTAIN_DOCTOR_URL, - onSuccess: (dynamic response, int statusCode) { - certainDoctorsStasticsList = response['List_LiveCareCertainDoctorsStastics']; - isLoading = false; - isError = false; - this.error = ''; - }, onFailure: (String error, int statusCode) { - isLoading = false; - isError = true; - this.error = error; - }, body: _statsticsForCertainDoctorRequest.toJson()); - notifyListeners(); - } catch (err) { - handelCatchErrorCase(err); - } - } - - handelCatchErrorCase(err) { - isLoading = false; - isError = true; - error = helpers.generateContactAdminMsg(err); - notifyListeners(); - throw err; - } - -} \ No newline at end of file diff --git a/lib/providers/pending_patient_provider.dart b/lib/providers/pending_patient_provider.dart deleted file mode 100644 index e69de29b..00000000 diff --git a/lib/providers/schedule_provider.dart b/lib/providers/schedule_provider.dart deleted file mode 100644 index 79a41d10..00000000 --- a/lib/providers/schedule_provider.dart +++ /dev/null @@ -1,43 +0,0 @@ -import 'package:doctor_app_flutter/client/base_app_client.dart'; -import 'package:doctor_app_flutter/config/config.dart'; -import 'package:flutter/cupertino.dart'; -import '../models/doctor/list_doctor_working_hours_table_model.dart'; -import '../models/doctor/request_schedule.dart'; - -class ScheduleProvider with ChangeNotifier { - List listDoctorWorkingHoursTable = []; - bool isLoading = true; - bool isError = false; - String error = ''; - RequestSchedule requestSchedule = RequestSchedule(); - - ScheduleProvider() { - getDoctorSchedule(); - } - BaseAppClient baseAppClient = BaseAppClient(); - - - getDoctorSchedule() async { - try { - await baseAppClient.post(GET_DOCTOR_WORKING_HOURS_TABLE, - body: requestSchedule.toJson(), - onSuccess: (dynamic response, int statusCode) { - response['List_DoctorWorkingHoursTable'].forEach((v) { - listDoctorWorkingHoursTable.add(new ListDoctorWorkingHoursTable.fromJson(v)); - }); - isError = false; - isLoading = false; - }, onFailure: (String error, int statusCode) { - isLoading = false; - isError = true; - this.error = error; - }); - notifyListeners(); - } catch (e) { - isLoading = false; - isError = true; - error = 'Something wrong happened, please contact the admin'; - notifyListeners(); - } - } -} diff --git a/lib/screens/doctor/my_referral_patient_screen.dart b/lib/screens/doctor/my_referral_patient_screen.dart index 10b73d6b..4df450e7 100644 --- a/lib/screens/doctor/my_referral_patient_screen.dart +++ b/lib/screens/doctor/my_referral_patient_screen.dart @@ -1,8 +1,6 @@ import 'package:doctor_app_flutter/providers/referral_patient_provider.dart'; -import 'package:doctor_app_flutter/providers/schedule_provider.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/widgets/doctor/my_referral_patient_widget.dart'; -import 'package:doctor_app_flutter/widgets/doctor/my_schedule_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/dr_app_circular_progress_Indeicator.dart'; import 'package:flutter/material.dart'; diff --git a/lib/screens/doctor/my_referred_patient_screen.dart b/lib/screens/doctor/my_referred_patient_screen.dart index 48c68c61..ec91b4c3 100644 --- a/lib/screens/doctor/my_referred_patient_screen.dart +++ b/lib/screens/doctor/my_referred_patient_screen.dart @@ -1,15 +1,12 @@ import 'package:doctor_app_flutter/providers/referred_patient_provider.dart'; -import 'package:doctor_app_flutter/providers/schedule_provider.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/widgets/doctor/my_referred_patient_widget.dart'; -import 'package:doctor_app_flutter/widgets/doctor/my_schedule_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/dr_app_circular_progress_Indeicator.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import '../../widgets/shared/app_scaffold_widget.dart'; -import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; class MyReferredPatient extends StatelessWidget { MyReferredPatientProvider referredPatientProvider; diff --git a/lib/screens/doctor/my_schedule_screen.dart b/lib/screens/doctor/my_schedule_screen.dart index 281357ca..b94b3823 100644 --- a/lib/screens/doctor/my_schedule_screen.dart +++ b/lib/screens/doctor/my_schedule_screen.dart @@ -1,31 +1,22 @@ -import 'package:doctor_app_flutter/providers/schedule_provider.dart'; +import 'package:doctor_app_flutter/core/viewModel/schedule_view_model.dart'; +import 'package:doctor_app_flutter/screens/base/base_view.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/widgets/doctor/my_schedule_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; -import 'package:doctor_app_flutter/widgets/shared/dr_app_circular_progress_Indeicator.dart'; import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; class MyScheduleScreen extends StatelessWidget { - ScheduleProvider scheduleProvider; @override Widget build(BuildContext context) { - scheduleProvider = Provider.of(context); - return AppScaffold( - isShowAppBar: false, - body: scheduleProvider.isLoading - ? DrAppCircularProgressIndeicator() - : scheduleProvider.isError - ? Center( - child: AppText( - scheduleProvider.error, - color: Theme.of(context).errorColor, - ), - ) - : scheduleProvider.listDoctorWorkingHoursTable.length == 0 + return BaseView( + onModelReady: (model) => model.getDoctorSchedule(), + builder: (_, model, w) => AppScaffold( + baseViewModel: model, + isShowAppBar: false, + body: model.listDoctorWorkingHoursTable.length == 0 ? Center( child: AppText( TranslationBase.of(context).errorNoSchedule, @@ -37,28 +28,28 @@ class MyScheduleScreen extends StatelessWidget { child: ListView( children: [ Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SizedBox( - height: 20, - ), + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + height: 20, + ), - scheduleListByDate(), - // scheduleListByDate('Wednesday, 8 April '), - ], - ), - ], - ), - ], - ), + scheduleListByDate(model), + // scheduleListByDate('Wednesday, 8 April '), + ], + ), + ], ), - ); + ], + ), + ), + )); } - Column scheduleListByDate() { + Column scheduleListByDate(ScheduleViewModel model ) { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -67,7 +58,7 @@ class MyScheduleScreen extends StatelessWidget { ), Container( child: Column( - children: scheduleProvider.listDoctorWorkingHoursTable.map((item) { + children: model.listDoctorWorkingHoursTable.map((item) { return MyScheduleWidget(workingHoursTable: item,); }).toList(), ), diff --git a/lib/widgets/shared/app_drawer_widget.dart b/lib/widgets/shared/app_drawer_widget.dart index d022b352..e899d6e8 100644 --- a/lib/widgets/shared/app_drawer_widget.dart +++ b/lib/widgets/shared/app_drawer_widget.dart @@ -1,20 +1,16 @@ import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart'; import 'package:doctor_app_flutter/providers/auth_provider.dart'; import 'package:doctor_app_flutter/util/helpers.dart'; +import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import '../../config/shared_pref_kay.dart'; import '../../config/size_config.dart'; -import '../../providers/schedule_provider.dart'; import '../../routes.dart'; -import '../../screens/doctor/my_schedule_screen.dart'; import '../../util/dr_app_shared_pref.dart'; import '../../widgets/shared/drawer_item_widget.dart'; import '../../widgets/shared/rounded_container_widget.dart'; import 'app_texts_widget.dart'; -import 'package:doctor_app_flutter/models/doctor/doctor_profile_model.dart'; -import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; DrAppSharedPreferances sharedPref = new DrAppSharedPreferances();