diff --git a/lib/core/service/doctor_reply_service.dart b/lib/core/service/doctor_reply_service.dart new file mode 100644 index 00000000..5025037d --- /dev/null +++ b/lib/core/service/doctor_reply_service.dart @@ -0,0 +1,27 @@ +import 'package:doctor_app_flutter/config/config.dart'; +import 'package:doctor_app_flutter/core/model/hospitals_model.dart'; +import 'package:doctor_app_flutter/core/service/base/base_service.dart'; +import 'package:doctor_app_flutter/models/doctor/list_gt_my_patients_question_model.dart'; +import 'package:doctor_app_flutter/models/doctor/request_doctor_reply.dart'; + +class DoctorReplyService extends BaseService { + + List get listDoctorWorkingHoursTable => _listDoctorWorkingHoursTable; + List _listDoctorWorkingHoursTable = []; + + + RequestDoctorReply _requestDoctorReply = RequestDoctorReply(); + Future getDoctorReply() async { + await baseAppClient.post(GT_MY_PATIENT_QUESTION, + onSuccess: (dynamic response, int statusCode) { + _listDoctorWorkingHoursTable.clear(); + response['List_GtMyPatientsQuestions'].forEach((v) { + _listDoctorWorkingHoursTable + .add(ListGtMyPatientsQuestions.fromJson(v)); + }); + }, onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, body: _requestDoctorReply.toJson(),); + } +} diff --git a/lib/core/viewModel/doctor_replay_view_model.dart b/lib/core/viewModel/doctor_replay_view_model.dart new file mode 100644 index 00000000..ac212578 --- /dev/null +++ b/lib/core/viewModel/doctor_replay_view_model.dart @@ -0,0 +1,24 @@ +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/models/doctor/list_gt_my_patients_question_model.dart'; + +import '../../locator.dart'; +import 'base_view_model.dart'; + +class DoctorReplayViewModel extends BaseViewModel { + DoctorReplyService _doctorReplyService = locator(); + + List get listDoctorWorkingHoursTable => _doctorReplyService.listDoctorWorkingHoursTable; + + Future getDoctorReply() async { + setState(ViewState.Busy); + await _doctorReplyService.getDoctorReply(); + if (_doctorReplyService.hasError) { + error = _doctorReplyService.error; + setState(ViewState.Error); + } else + setState(ViewState.Idle); + } +} diff --git a/lib/locator.dart b/lib/locator.dart index efc15045..40b27da5 100644 --- a/lib/locator.dart +++ b/lib/locator.dart @@ -1,6 +1,8 @@ import 'package:get_it/get_it.dart'; +import 'core/service/doctor_reply_service.dart'; import 'core/service/hospital/hospitals_service.dart'; +import 'core/viewModel/doctor_replay_view_model.dart'; import 'core/viewModel/hospital_view_model.dart'; GetIt locator = GetIt.instance; @@ -9,7 +11,9 @@ GetIt locator = GetIt.instance; void setupLocator() { /// Services locator.registerLazySingleton(() => HospitalService()); + locator.registerLazySingleton(() => DoctorReplyService()); /// View Model locator.registerFactory(() => HospitalViewModel()); + locator.registerFactory(() => DoctorReplayViewModel()); } diff --git a/lib/providers/doctor_reply_provider.dart b/lib/providers/doctor_reply_provider.dart deleted file mode 100644 index 983237a1..00000000 --- a/lib/providers/doctor_reply_provider.dart +++ /dev/null @@ -1,41 +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/request_doctor_reply.dart'; -import 'package:doctor_app_flutter/models/doctor/list_gt_my_patients_question_model.dart'; -import 'package:flutter/cupertino.dart'; - -class DoctorReplyProvider with ChangeNotifier { - List listDoctorWorkingHoursTable = []; - - bool isLoading = true; - bool isError = false; - String error = ''; - RequestDoctorReply _requestDoctorReply = RequestDoctorReply(); - BaseAppClient baseAppClient = BaseAppClient(); - DoctorReplyProvider() { - getDoctorReply(); - } - - getDoctorReply() async { - try { - await baseAppClient.post(GT_MY_PATIENT_QUESTION, - body: _requestDoctorReply.toJson(), - onSuccess: (dynamic response, int statusCode) { - response['List_GtMyPatientsQuestions'].forEach((v) { - listDoctorWorkingHoursTable - .add(ListGtMyPatientsQuestions.fromJson(v)); - isError = false; - isLoading = false; - }); - }, onFailure: (String error, int statusCode) { - isError = true; - isLoading = false; - this.error = error; - }); - - notifyListeners(); - } catch (error) { - throw error; - } - } -} diff --git a/lib/screens/dashboard_screen.dart b/lib/screens/dashboard_screen.dart index 18d70904..0f01dd1e 100644 --- a/lib/screens/dashboard_screen.dart +++ b/lib/screens/dashboard_screen.dart @@ -5,7 +5,6 @@ import 'package:doctor_app_flutter/models/doctor/clinic_model.dart'; import 'package:doctor_app_flutter/models/doctor/doctor_profile_model.dart'; import 'package:doctor_app_flutter/models/doctor/profile_req_Model.dart'; import 'package:doctor_app_flutter/providers/auth_provider.dart'; -import 'package:doctor_app_flutter/providers/doctor_reply_provider.dart'; import 'package:doctor_app_flutter/providers/hospital_provider.dart'; import 'package:doctor_app_flutter/providers/medicine_provider.dart'; import 'package:doctor_app_flutter/providers/project_provider.dart'; @@ -718,10 +717,7 @@ class _DashboardScreenState extends State { context, MaterialPageRoute( builder: (context) => - ChangeNotifierProvider( - create: (_) => DoctorReplyProvider(), - child: DoctorReplyScreen(), - ), + DoctorReplyScreen(), ), ); }, diff --git a/lib/screens/doctor/doctor_reply_screen.dart b/lib/screens/doctor/doctor_reply_screen.dart index 48665a27..4326397f 100644 --- a/lib/screens/doctor/doctor_reply_screen.dart +++ b/lib/screens/doctor/doctor_reply_screen.dart @@ -1,19 +1,10 @@ -import 'package:doctor_app_flutter/config/size_config.dart'; -import 'package:doctor_app_flutter/providers/doctor_reply_provider.dart'; -import 'package:doctor_app_flutter/util/helpers.dart'; +import 'package:doctor_app_flutter/core/viewModel/doctor_replay_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/doctor_reply_widget.dart'; -import 'package:doctor_app_flutter/widgets/patients/profile/large_avatar.dart'; import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; -import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; -import 'package:doctor_app_flutter/widgets/shared/card_with_bgNew_widget.dart'; -import 'package:doctor_app_flutter/widgets/shared/card_with_bg_widget.dart'; -import 'package:doctor_app_flutter/widgets/shared/dr_app_circular_progress_Indeicator.dart'; -import 'package:doctor_app_flutter/widgets/shared/rounded_container_widget.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:hexcolor/hexcolor.dart'; -import 'package:provider/provider.dart'; /* *@author: Mohammad Aljammal @@ -23,38 +14,31 @@ import 'package:provider/provider.dart'; *@desc: Doctor Reply Screen display data from GtMyPatientsQuestions service */ class DoctorReplyScreen extends StatelessWidget { - DoctorReplyProvider _doctorReplyProvider; @override Widget build(BuildContext context) { - _doctorReplyProvider = Provider.of(context); - return AppScaffold( - appBarTitle: TranslationBase.of(context).replay2, - body: _doctorReplyProvider.isLoading - ? DrAppCircularProgressIndeicator() - : _doctorReplyProvider.isError - ? Center( - child: Text( - _doctorReplyProvider.error, - style: TextStyle(color: Theme.of(context).errorColor), - ), - ) - : Container( - padding: EdgeInsetsDirectional.fromSTEB(30, 0, 30, 0), - child: ListView( - children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: _doctorReplyProvider - .listDoctorWorkingHoursTable - .map((reply) { - return DoctorReplyWidget(reply: reply); - }).toList(), - ) - ], - ), - ), - ); + return BaseView( + onModelReady: (model) => model.getDoctorReply(), + builder: (_, model, w) => AppScaffold( + baseViewModel: model, + appBarTitle: TranslationBase.of(context).replay2, + body: Container( + padding: EdgeInsetsDirectional.fromSTEB(30, 0, 30, 0), + child: ListView( + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: model + .listDoctorWorkingHoursTable + .map((reply) { + return DoctorReplyWidget(reply: reply); + }).toList(), + ) + ], + ), + ), + )); } }