diff --git a/lib/core/viewModel/base_view_model.dart b/lib/core/viewModel/base_view_model.dart index 794706a6..03f6e84a 100644 --- a/lib/core/viewModel/base_view_model.dart +++ b/lib/core/viewModel/base_view_model.dart @@ -1,3 +1,5 @@ +import 'dart:isolate'; + import 'package:doctor_app_flutter/config/shared_pref_kay.dart'; import 'package:doctor_app_flutter/core/enum/viewstate.dart'; import 'package:doctor_app_flutter/models/doctor/doctor_profile_model.dart'; @@ -47,6 +49,21 @@ class BaseViewModel extends ChangeNotifier { } } + void getIsolateDoctorProfile(bool isGetProfile) async { + if (isGetProfile) { + Map profile = await sharedPref.getObj(DOCTOR_PROFILE); + if (profile != null) { + doctorProfile = DoctorProfileModel.fromJson(profile); + } + } + if (doctorProfile == null) { + Map profile = await sharedPref.getObj(DOCTOR_PROFILE); + if (profile != null) { + doctorProfile = DoctorProfileModel.fromJson(profile); + } + } + } + setDoctorProfile(DoctorProfileModel doctorProfile) async { await sharedPref.setObj(DOCTOR_PROFILE, doctorProfile); this.doctorProfile = doctorProfile; diff --git a/lib/core/viewModel/dashboard_view_model.dart b/lib/core/viewModel/dashboard_view_model.dart index 02e540af..afcec235 100644 --- a/lib/core/viewModel/dashboard_view_model.dart +++ b/lib/core/viewModel/dashboard_view_model.dart @@ -1,5 +1,3 @@ -import 'package:doctor_app_flutter/config/config.dart'; -import 'package:doctor_app_flutter/config/shared_pref_kay.dart'; import 'package:doctor_app_flutter/core/enum/viewstate.dart'; import 'package:doctor_app_flutter/core/service/home/dasboard_service.dart'; import 'package:doctor_app_flutter/core/service/home/doctor_reply_service.dart'; @@ -8,16 +6,17 @@ import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart'; import 'package:doctor_app_flutter/models/dashboard/dashboard_model.dart'; import 'package:doctor_app_flutter/models/dashboard/get_special_clinical_care_List_Respose_Model.dart'; import 'package:doctor_app_flutter/models/doctor/clinic_model.dart'; -import 'package:doctor_app_flutter/models/doctor/profile_req_Model.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; import '../../locator.dart'; import 'authentication_view_model.dart'; import 'base_view_model.dart'; + class DashboardViewModel extends BaseViewModel { final FirebaseMessaging _firebaseMessaging = FirebaseMessaging(); DashboardService _dashboardService = locator(); - SpecialClinicsService _specialClinicsService = locator(); + SpecialClinicsService _specialClinicsService = + locator(); DoctorReplyService _doctorReplyService = locator(); List get dashboardItemsList => @@ -26,17 +25,34 @@ class DashboardViewModel extends BaseViewModel { bool get hasVirtualClinic => _dashboardService.hasVirtualClinic; String get sServiceID => _dashboardService.sServiceID; - int get notRepliedCount => _doctorReplyService.notRepliedCount; - List get specialClinicalCareList => _specialClinicsService.specialClinicalCareList; + int get notRepliedCount => _doctorReplyService.notRepliedCount; + List get specialClinicalCareList => + _specialClinicsService.specialClinicalCareList; - Future setFirebaseNotification(ProjectViewModel projectsProvider, + Future startHomeScreenServices(ProjectViewModel projectsProvider, AuthenticationViewModel authProvider) async { setState(ViewState.Busy); - await projectsProvider.getDoctorClinicsList(); + await getDoctorProfile(isGetProfile: true); + + final results = await Future.wait([ + projectsProvider.getDoctorClinicsList(), + _dashboardService.getDashboard(), + _dashboardService.checkDoctorHasLiveCare(), + _specialClinicsService.getSpecialClinicalCareList(), + ]); - // _firebaseMessaging.setAutoInitEnabled(true); + if (_dashboardService.hasError) { + error = _dashboardService.error; + setState(ViewState.Error); + } else + setState(ViewState.Idle); + + setFirebaseNotification(authProvider); + } + + Future setFirebaseNotification(AuthenticationViewModel authProvider) async { _firebaseMessaging.requestNotificationPermissions( const IosNotificationSettings( sound: true, badge: true, alert: true, provisional: true)); @@ -105,20 +121,17 @@ class DashboardViewModel extends BaseViewModel { return value.toString(); } - - GetSpecialClinicalCareListResponseModel getSpecialClinic(clinicId){ - GetSpecialClinicalCareListResponseModel special ; + GetSpecialClinicalCareListResponseModel getSpecialClinic(clinicId) { + GetSpecialClinicalCareListResponseModel special; specialClinicalCareList.forEach((element) { - if(element.clinicID == clinicId){ + if (element.clinicID == clinicId) { special = element; } }); return special; - } - Future getNotRepliedCount() async { setState(ViewState.BusyLocal); await getDoctorProfile(); diff --git a/lib/screens/home/home_screen.dart b/lib/screens/home/home_screen.dart index 64d72067..32a842d3 100644 --- a/lib/screens/home/home_screen.dart +++ b/lib/screens/home/home_screen.dart @@ -66,12 +66,7 @@ class _HomeScreenState extends State { return BaseView( onModelReady: (model) async { - await model.setFirebaseNotification( - projectsProvider, authenticationViewModel); - await model.getDashboard(); - await model.getDoctorProfile(isGetProfile: true); - await model.checkDoctorHasLiveCare(); - await model.getSpecialClinicalCareList(); + model.startHomeScreenServices(projectsProvider, authenticationViewModel); }, builder: (_, model, w) => AppScaffold( baseViewModel: model,