import 'dart:io'; import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; import 'package:diplomaticquarterapp/core/service/AuthenticatedUserObject.dart'; import 'package:diplomaticquarterapp/core/service/medical/vital_sign_service.dart'; import 'package:diplomaticquarterapp/core/viewModels/appointment_rate_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/pharmacy_module_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.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'; import 'package:diplomaticquarterapp/models/FamilyFiles/GetAllSharedRecordByStatusResponse.dart'; import 'package:diplomaticquarterapp/pages/DrawerPages/notifications/notifications_page.dart'; import 'package:diplomaticquarterapp/pages/landing/landing_page.dart'; import 'package:diplomaticquarterapp/pages/rateAppointment/rate_appointment_doctor.dart'; import 'package:diplomaticquarterapp/routes.dart'; import 'package:diplomaticquarterapp/services/family_files/family_files_provider.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.dart'; import 'package:diplomaticquarterapp/widgets/text/app_texts_widget.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:url_launcher/url_launcher.dart'; import '../../config/size_config.dart'; import '../../locator.dart'; import 'drawer_item_widget.dart'; class AppDrawer extends StatefulWidget { @override _AppDrawerState createState() => _AppDrawerState(); } class _AppDrawerState extends State { @override void initState() { super.initState(); checkUserData(); } ProjectViewModel projectProvider; var sharedPref = new AppSharedPreferences(); var familyFileProvider = FamilyFilesProvider(); PharmacyModuleViewModel pharmacyModuleViewModel = locator(); AuthenticatedUser user; AuthenticatedUser mainUser; AuthenticatedUserObject authenticatedUserObject = locator(); VitalSignService _vitalSignService = locator(); AppointmentRateViewModel appointmentRateViewModel = locator(); ToDoCountProviderModel toDoProvider; String booldType; String notificationCount; @override Widget build(BuildContext context) { projectProvider = Provider.of(context); return Container( width: MediaQuery.of(context).size.width * 0.75, color: Theme.of(context).scaffoldBackgroundColor, child: Container( // color: Colors.white, child: Theme( data: Theme.of(context).copyWith( canvasColor: Theme.of(context).scaffoldBackgroundColor), child: Drawer( child: Column( children: [ Expanded( flex: 4, child: ListView( padding: EdgeInsets.zero, children: [ Container( height: SizeConfig.screenHeight * .30, child: InkWell( child: DrawerHeader( child: Column( children: [ Container( child: Image.asset( 'assets/images/logo_HMG.png'), margin: EdgeInsets.all( SizeConfig.imageSizeMultiplier * 4), ), (user != null && projectProvider.isLogin) ? Padding( padding: EdgeInsets.all(15), child: Column( mainAxisAlignment: MainAxisAlignment.start, children: [ Row( children: [ Padding( padding: EdgeInsets.only( right: 5), child: Icon( Icons.account_circle, color: Color(0xFF40ACC9), )), AppText( user.firstName + ' ' + user.lastName, color: Color(0xFF40ACC9), ) ], ), Row(children: [ Padding( padding: EdgeInsets.only( left: 30, top: 5), child: Column( children: [ AppText( TranslationBase.of( context) .fileno + ": " + user.patientID .toString(), color: Color( 0xFF40ACC9), fontSize: SizeConfig .textMultiplier * 1.5, ), AppText( user.bloodGroup != null ? 'Blood Group: ' + user.bloodGroup : '', fontSize: SizeConfig .textMultiplier * 1.5, ), ], )) ]) ])) : SizedBox(), ], ), ), ), ), Container( child: Column( mainAxisAlignment: MainAxisAlignment.start, children: [ InkWell( child: DrawerItem( TranslationBase.of(context).arabicChange, Padding( child: Image.asset('assets/images/lang.png'), padding: EdgeInsets.all(3)), isImageIcon: true, ), onTap: () { sharedPref.setBool(IS_ROBOT_INIT, null); if (projectProvider.isArabic) { projectProvider.changeLanguage('en'); } else { projectProvider.changeLanguage('ar'); } }, ), (user != null && projectProvider.isLogin) ? Column( mainAxisAlignment: MainAxisAlignment.start, children: [ (user.isFamily == null || user.isFamily == false) && projectProvider.havePrivilege(2) ? InkWell( child: DrawerItem( TranslationBase.of(context) .family, Icons.group, textColor: Theme.of(context) .textTheme .bodyText1 .color, iconColor: Theme.of(context) .textTheme .bodyText1 .color, bottomLine: false, sideArrow: true, ), onTap: () { Navigator.of(context).pop(); Navigator.of(context).pushNamed( MY_FAMILIY, ); }, ) : SizedBox(), FutureBuilder( future: getFamilyFiles(), // async work builder: (BuildContext context, AsyncSnapshot< GetAllSharedRecordsByStatusResponse> snapshot) { switch (snapshot.connectionState) { case ConnectionState.waiting: return Padding( padding: EdgeInsets.all(10), child: Text('')); default: if (snapshot.hasError) return Padding( padding: EdgeInsets.all(10), child: Text(snapshot.error)); else return Container( decoration: BoxDecoration( border: Border( bottom: BorderSide( // <--- left side color: Colors.grey[200], width: 1.0, ), )), child: Column( children: [ user.isFamily == true ? Container( padding: EdgeInsets .only( bottom: 5), child: InkWell( onTap: () { switchUser( mainUser, context); }, child: Row( crossAxisAlignment: CrossAxisAlignment .start, children: < Widget>[ Expanded( child: Icon(Icons.person), ), Expanded( flex: 7, child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ AppText(mainUser.firstName + ' ' + mainUser.lastName, color: Theme.of(context).textTheme.bodyText1.color), AppText( TranslationBase.of(context).fileno + ": " + mainUser.patientID.toString(), color: Theme.of(context).textTheme.bodyText1.color, ), ])), ], ))) : SizedBox(), Column( mainAxisAlignment: MainAxisAlignment .start, mainAxisSize: MainAxisSize .min, children: snapshot .data .getAllSharedRecordsByStatusList .map( (result) { return result .status == 3 ? Container( padding: EdgeInsets.only( bottom: 5), child: InkWell( onTap: () { switchUser(result, context); }, child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ Expanded( child: Icon(Icons.person, color: result.responseID == user.patientID ? Color(0xFF40ACC9) : Colors.black), ), Expanded( flex: 7, child: Padding( padding: EdgeInsets.only(left: 5, right: 5), child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ AppText(result.patientName, color: result.responseID == user.patientID ? Color(0xFF40ACC9) : Colors.black), AppText(TranslationBase.of(context).fileno + ": " + result.responseID.toString(), color: result.responseID == user.patientID ? Color(0xFF40ACC9) : Colors.black), ]))), ], ))) : SizedBox(); }).toList()) ], )); } }, ), InkWell( child: Stack( children: [ DrawerItem( TranslationBase.of(context) .notification, Icons.notifications, count: notificationCount != null ? new Container( padding: EdgeInsets.all(4), margin: EdgeInsets.all(2), decoration: new BoxDecoration( color: Colors.red, borderRadius: BorderRadius .circular(20), ), constraints: BoxConstraints( minWidth: 20, minHeight: 20, ), child: new Text( notificationCount, style: new TextStyle( color: Colors.white, fontSize: projectProvider .isArabic ? 8 : 9, ), textAlign: TextAlign.center, ), // ), ) : SizedBox(), ), ], ), onTap: () { //NotificationsPage Navigator.of(context).pop(); Navigator.push( context, FadePage( page: NotificationsPage())); }, ), if (projectProvider.havePrivilege(3)) InkWell( child: DrawerItem( TranslationBase.of(context) .appsetting, Icons.settings_input_composite), onTap: () { Navigator.of(context).pushNamed( SETTINGS, ); }, ), InkWell( child: DrawerItem( TranslationBase.of(context).rateApp, Icons.star), onTap: () { if (Platform.isIOS) { launch( "https://apps.apple.com/sa/app/dr-suliaman-alhabib/id733503978"); } else { launch( "https://play.google.com/store/apps/details?id=com.ejada.hmg&hl=en"); } }, ), InkWell( child: DrawerItem( TranslationBase.of(context).logout, Icons.lock_open), onTap: () { logout(); }, ) ], ) : InkWell( child: DrawerItem( TranslationBase.of(context) .loginregister, Icons.lock_open), onTap: () { login(); }, ), // InkWell( // child: DrawerItem( // TranslationBase.of(context).appsetting, // Icons.settings_input_composite), // onTap: () { // Navigator.of(context).pushNamed( // SETTINGS, // ); // }, // ) ], )) ], ), ), Expanded( flex: 1, child: Column( children: [ Container( child: Align( alignment: FractionalOffset.bottomCenter, child: Container( child: Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Column( children: [ Text(TranslationBase.of(context) .poweredBy), Image.asset( 'assets/images/cs_logo_container.png', width: SizeConfig.imageSizeMultiplier * 30, ) ], ), Column( children: [ Image.asset( 'assets/images/new-design/vidamobile.png', width: SizeConfig.imageSizeMultiplier * 25, ) ], ), ], ), ), ), ) ], ), ) ], ), ), ), )); } drawerNavigator(context, routeName) { Navigator.of(context).pushNamed(routeName); } checkUserData() async { if (await this.sharedPref.getObject(USER_PROFILE) != null) { var data = AuthenticatedUser.fromJson( await this.sharedPref.getObject(USER_PROFILE)); var data2 = AuthenticatedUser.fromJson( await this.sharedPref.getObject(MAIN_USER)); setState(() { this.user = data; this.mainUser = data2; }); } } logout() async { authenticatedUserObject.logout(); projectProvider.isLogin = false; await authenticatedUserObject.getUser(); _vitalSignService.heightCm = ""; _vitalSignService.weightKg = ""; await sharedPref.clear(); this.user = null; Navigator.of(context).pushNamed(HOME); // projectProvider.platformBridge().unRegisterHmgGeofences(); } login() async { var data = await sharedPref.getObject(IMEI_USER_DATA); sharedPref.remove(REGISTER_DATA_FOR_LOGIIN); if (data != null) { Navigator.of(context).pushNamed(CONFIRM_LOGIN); } else { Navigator.of(context).pushNamed( WELCOME_LOGIN, ); } } 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(); } } } switchUser(user, context) { GifLoaderDialogUtils.showMyDialog(context); this .familyFileProvider .silentLoggin(user is AuthenticatedUser ? null : user, mainUser: user is AuthenticatedUser) .then((value) { GifLoaderDialogUtils.hideDialog(context); loginAfter(value, context); }).catchError((err) { GifLoaderDialogUtils.hideDialog(context); print(err); AppToast.showErrorToast(message: err); Navigator.of(context).pop(); }); } loginAfter(result, context) async { Utils.hideProgressDialog(); Provider.of(context, listen: false) .setPrivilege(privilegeList: result, isLoginChild: true); result = CheckActivationCode.fromJson(result); var familyFile = await sharedPref.getObject(FAMILY_FILE); var currentLang = await sharedPref.getString(APP_LANGUAGE); var mainUser = await sharedPref.getObject(MAIN_USER); this.sharedPref.clear(); if (mainUser["PatientID"] != result.list.patientID) { result.list.isFamily = true; } this.sharedPref.setString(APP_LANGUAGE, currentLang); this.sharedPref.setObject(MAIN_USER, mainUser); this.sharedPref.setObject(USER_PROFILE, result.list); this.sharedPref.setObject(FAMILY_FILE, familyFile); this.sharedPref.setObject(LOGIN_TOKEN_ID, result.logInTokenID); this.sharedPref.setString(TOKEN, result.authenticationTokenID); // Navigator.of(context).pop(); 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(); }); appointmentRateViewModel .getIsLastAppointmentRatedList() .then((value) => { //getToDoCount(), //Utils.hideProgressDialog(), if (appointmentRateViewModel.isHaveAppointmentNotRate) { Navigator.pushAndRemoveUntil( context, FadePage( page: RateAppointmentDoctor(), ), (r) => false) } else { Navigator.pushAndRemoveUntil( context, FadePage( page: LandingPage(), ), (r) => false) } }) .catchError((err) { print(err); //Utils.hideProgressDialog(); // GifLoaderDialogUtils.hideDialog(context); }); } }