You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
diplomatic-quarter/lib/widgets/drawer/app_drawer_widget.dart

601 lines
34 KiB
Dart

4 years ago
import 'dart:io';
4 years ago
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
import 'package:diplomaticquarterapp/core/service/AuthenticatedUserObject.dart';
4 years ago
import 'package:diplomaticquarterapp/core/service/medical/vital_sign_service.dart';
4 years ago
import 'package:diplomaticquarterapp/core/viewModels/appointment_rate_view_model.dart';
3 years ago
import 'package:diplomaticquarterapp/core/viewModels/dashboard_view_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/pharmacy_module_view_model.dart';
4 years ago
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/models/Appointments/toDoCountProviderModel.dart';
4 years ago
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';
4 years ago
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/theme/colors.dart';
import 'package:diplomaticquarterapp/theme/theme_notifier.dart';
import 'package:diplomaticquarterapp/theme/theme_value.dart';
4 years ago
import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart';
4 years ago
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/uitl/utils_new.dart';
4 years ago
import 'package:diplomaticquarterapp/widgets/text/app_texts_widget.dart';
4 years ago
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
4 years ago
import 'package:provider/provider.dart';
4 years ago
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<AppDrawer> {
4 years ago
@override
void initState() {
super.initState();
checkUserData();
}
4 years ago
ProjectViewModel projectProvider;
4 years ago
var sharedPref = new AppSharedPreferences();
var familyFileProvider = FamilyFilesProvider();
PharmacyModuleViewModel pharmacyModuleViewModel = locator<PharmacyModuleViewModel>();
4 years ago
AuthenticatedUser user;
AuthenticatedUser mainUser;
AuthenticatedUserObject authenticatedUserObject = locator<AuthenticatedUserObject>();
4 years ago
VitalSignService _vitalSignService = locator<VitalSignService>();
AppointmentRateViewModel appointmentRateViewModel = locator<AppointmentRateViewModel>();
ToDoCountProviderModel toDoProvider;
4 years ago
String booldType;
String notificationCount;
4 years ago
@override
Widget build(BuildContext context) {
4 years ago
projectProvider = Provider.of(context);
// (user.isFamily == null || user.isFamily == false) && projectProvider.havePrivilege(2)
4 years ago
return Container(
width: MediaQuery.of(context).size.width * 0.75,
color: Theme.of(context).scaffoldBackgroundColor,
child: Container(
3 years ago
color: Colors.white,
4 years ago
child: Theme(
data: Theme.of(context).copyWith(canvasColor: Theme.of(context).scaffoldBackgroundColor),
4 years ago
child: Drawer(
child: Column(
children: <Widget>[
Expanded(
child: ListView(
padding: EdgeInsets.zero,
children: <Widget>[
Container(
height: SizeConfig.screenHeight * .30,
child: InkWell(
child: Padding(
padding: const EdgeInsets.all(14.0),
4 years ago
child: Column(
children: <Widget>[
Container(
width: double.infinity,
padding: EdgeInsets.only(top: 12),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
3 years ago
SvgPicture.asset(
"assets/images/new/logo.svg",
height: 60,
width: 60,
),
IconButton(
icon: Icon(Icons.clear),
onPressed: () {
Navigator.pop(context);
},
)
],
),
4 years ago
),
mHeight(12),
Container(
width: double.infinity,
margin: EdgeInsets.only(top: 12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text(
(user != null && projectProvider.isLogin) ? user.firstName + ' ' + user.lastName : TranslationBase.of(context).cantSeeProfile,
3 years ago
style: TextStyle(color: Color(0xff2E303A), fontWeight: FontWeight.bold, fontSize: 20, letterSpacing: -1.2, height: 35 / 20),
),
Text(
(user != null && projectProvider.isLogin)
3 years ago
? TranslationBase.of(context).fileNumber + ": " + user.patientID.toString()
: TranslationBase.of(context).loginRegisterNow,
style: TextStyle(
3 years ago
color: Color(0xff2E303A),
fontSize: 16,
letterSpacing: -0.96,
height: 1,
),
),
],
),
),
4 years ago
],
),
),
),
),
Container(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
(user != null && projectProvider.isLogin)
? Container()
: InkWell(
child: DrawerItem(
TranslationBase.of(context).arabicChange,
Padding(child: Image.asset('assets/images/lang.png'), padding: EdgeInsets.all(3)),
isImageIcon: true,
bottomLine: false,
),
onTap: () {
sharedPref.setBool(IS_ROBOT_INIT, null);
if (projectProvider.isArabic) {
projectProvider.changeLanguage('en');
} else {
projectProvider.changeLanguage('ar');
}
var themeNotifier = Provider.of<ThemeNotifier>(context, listen: false);
themeNotifier.setTheme(defaultTheme(fontName: projectProvider.isArabic ? 'Cairo' : 'Poppins'));
},
),
4 years ago
(user != null && projectProvider.isLogin)
? Column(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
(user.isFamily == null || user.isFamily == false)
4 years ago
? InkWell(
child: DrawerItem(
TranslationBase.of(context).family,
SvgPicture.asset("assets/images/new/family_files.svg"),
isImageIcon: true,
bottomLine: false,
textColor: Theme.of(context).textTheme.bodyText1.color,
iconColor: Theme.of(context).textTheme.bodyText1.color,
4 years ago
sideArrow: true,
letterSpacing: -0.84,
4 years ago
),
onTap: () {
4 years ago
Navigator.of(context).pop();
4 years ago
Navigator.of(context).pushNamed(
MY_FAMILIY,
);
},
)
: SizedBox(),
FutureBuilder(
future: getFamilyFiles(), // async work
builder: (BuildContext context, AsyncSnapshot<GetAllSharedRecordsByStatusResponse> snapshot) {
4 years ago
switch (snapshot.connectionState) {
case ConnectionState.waiting:
return Padding(padding: EdgeInsets.all(10), child: Text(''));
4 years ago
default:
if (snapshot.hasError)
return Padding(padding: EdgeInsets.all(10), child: Text(snapshot.error));
4 years ago
else
return Container(
child: Column(
children: [
user.isFamily == true
? Container(
padding: EdgeInsets.only(bottom: 5, left: 4),
child: InkWell(
onTap: () {
switchUser(mainUser, context);
},
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Expanded(
child: SvgPicture.asset("assets/images/new/family_files.svg"),
),
Expanded(
flex: 7,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
AppText(
mainUser.firstName + ' ' + mainUser.lastName,
3 years ago
color: Color(0xff2E303A), //Theme.of(context).textTheme.bodyText1.color,
fontWeight: FontWeight.w600,
fontSize: 12,
letterSpacing: -0.33,
),
AppText(
TranslationBase.of(context).fileno + ": " + mainUser.patientID.toString(),
3 years ago
color: Color(0xff989898),
fontSize: 12,
letterSpacing: -0.33,
),
3 years ago
Container(
height: 1,
margin: EdgeInsets.only(top: 7.5),
color: Color(0xffEDEDED),
),
],
),
),
],
),
),
)
: SizedBox(),
Column(
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: snapshot.data.getAllSharedRecordsByStatusList.map<Widget>((result) {
return result.status == 3
? Container(
padding: EdgeInsets.only(bottom: 5),
child: InkWell(
4 years ago
onTap: () {
switchUser(result, context);
4 years ago
},
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
4 years ago
Expanded(
child: Icon(Icons.person, color: result.responseID == user.patientID ? Colors.transparent : Colors.transparent),
4 years ago
),
Expanded(
flex: 7,
child: Padding(
padding: EdgeInsets.only(left: 5, right: 5),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
AppText(
result.patientName,
3 years ago
color: result.responseID == user.patientID ? Color(0xFF40ACC9) : Color(0xff2B353E),
fontWeight: FontWeight.w600,
3 years ago
fontSize: 11,
letterSpacing: -0.33,
),
AppText(
TranslationBase.of(context).fileno + ": " + result.responseID.toString(),
3 years ago
color: result.responseID == user.patientID ? Color(0xFF40ACC9) : Color(0xff989898),
fontSize: 11,
letterSpacing: -0.33,
),
Divider(
color: Colors.grey[400],
),
],
),
),
),
4 years ago
],
),
),
)
: SizedBox();
}).toList())
],
));
}
},
),
mHeight(20),
InkWell(
child: DrawerItem(
TranslationBase.of(context).arabicChange,
Padding(child: Image.asset('assets/images/lang.png'), padding: EdgeInsets.only(left: 3, right: 3, top: 3, bottom: projectProvider.isArabic ? 3 : 0)),
isImageIcon: true,
bottomLine: false,
letterSpacing: -0.84,
fontSize: 14,
fontHeight: projectProvider.isArabic ? 1 : 0.8,
),
onTap: () {
sharedPref.setBool(IS_ROBOT_INIT, null);
if (projectProvider.isArabic) {
projectProvider.changeLanguage('en');
} else {
projectProvider.changeLanguage('ar');
4 years ago
}
},
),
InkWell(
child: Stack(
children: [
DrawerItem(
TranslationBase.of(context).notification,
SvgPicture.asset("assets/images/new/notifications.svg"),
isImageIcon: true,
bottomLine: false,
letterSpacing: -0.84,
fontSize: 14,
4 years ago
count: notificationCount != null
? new Container(
padding: EdgeInsets.all(4),
4 years ago
margin: EdgeInsets.all(2),
decoration: new BoxDecoration(
4 years ago
color: Colors.red,
borderRadius: BorderRadius.circular(20),
),
constraints: BoxConstraints(
4 years ago
minWidth: 20,
minHeight: 20,
),
4 years ago
child: new Text(
notificationCount,
style: new TextStyle(
color: Colors.white,
fontSize: projectProvider.isArabic ? 8 : 9,
4 years ago
),
textAlign: TextAlign.center,
4 years ago
),
// ),
)
: SizedBox(),
),
],
),
onTap: () {
//NotificationsPage
Navigator.of(context).pop();
Navigator.push(context, FadePage(page: NotificationsPage()));
4 years ago
},
),
if (projectProvider.havePrivilege(3))
InkWell(
child: DrawerItem(
TranslationBase.of(context).appsetting,
SvgPicture.asset("assets/images/new/app_setting.svg"),
isImageIcon: true,
bottomLine: false,
letterSpacing: -0.84,
fontSize: 14,
),
onTap: () {
Navigator.of(context).pushNamed(
4 years ago
SETTINGS,
);
},
4 years ago
),
4 years ago
InkWell(
child: DrawerItem(
TranslationBase.of(context).rateApp,
Icons.star,
bottomLine: false,
letterSpacing: -0.84,
fontSize: 14,
),
4 years ago
onTap: () {
if (Platform.isIOS) {
launch("https://apps.apple.com/sa/app/dr-suliaman-alhabib/id733503978");
4 years ago
} else {
launch("https://play.google.com/store/apps/details?id=com.ejada.hmg&hl=en");
4 years ago
}
},
),
InkWell(
child: DrawerItem(
TranslationBase.of(context).logout,
SvgPicture.asset("assets/images/new/logout.svg"),
isImageIcon: true,
bottomLine: false,
letterSpacing: -0.84,
fontSize: 14,
),
4 years ago
onTap: () {
logout();
},
)
],
)
: InkWell(
child: DrawerItem(
TranslationBase.of(context).loginregister,
SvgPicture.asset("assets/images/new/logout.svg"),
isImageIcon: true,
letterSpacing: -0.84,
fontSize: 14,
bottomLine: false,
),
onTap: () {
4 years ago
login();
},
4 years ago
),
// InkWell(
// child: DrawerItem(
// TranslationBase.of(context).appsetting,
// Icons.settings_input_composite),
// onTap: () {
// Navigator.of(context).pushNamed(
// SETTINGS,
// );
// },
// )
],
))
4 years ago
],
4 years ago
),
),
mHeight(12),
Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
TranslationBase.of(context).poweredBy,
style: TextStyle(
color: Color(0xFF989898),
fontSize: 13,
letterSpacing: -0.54,
fontWeight: FontWeight.w600,
),
),
mWidth(2),
Text(
"Cloud Solutions",
style: TextStyle(
3 years ago
color: Color(0xff2E303A),
fontSize: 13,
letterSpacing: -0.54,
fontWeight: FontWeight.w600,
),
),
mWidth(16),
SvgPicture.asset("assets/images/new/cloud_logo.svg"),
],
),
mHeight(12),
4 years ago
],
),
),
),
4 years ago
));
}
drawerNavigator(context, routeName) {
Navigator.of(context).pushNamed(routeName);
}
4 years ago
checkUserData() async {
4 years ago
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));
4 years ago
setState(() {
this.user = data;
this.mainUser = data2;
4 years ago
});
}
4 years ago
}
logout() async {
authenticatedUserObject.logout();
projectProvider.isLogin = false;
await authenticatedUserObject.getUser();
_vitalSignService.heightCm = "";
_vitalSignService.weightKg = "";
3 years ago
var appLanguage = await sharedPref.getString(APP_LANGUAGE);
4 years ago
await sharedPref.clear();
3 years ago
await sharedPref.setString(APP_LANGUAGE, appLanguage);
4 years ago
this.user = null;
Navigator.of(context).pushNamed(HOME);
4 years ago
// projectProvider.platformBridge().unRegisterHmgGeofences();
4 years ago
}
4 years ago
login() async {
var data = await sharedPref.getObject(IMEI_USER_DATA);
sharedPref.remove(REGISTER_DATA_FOR_LOGIIN);
4 years ago
if (data != null) {
Navigator.of(context).pushNamed(CONFIRM_LOGIN);
} else {
Navigator.of(context).pushNamed(
WELCOME_LOGIN,
);
}
}
Future<GetAllSharedRecordsByStatusResponse> getFamilyFiles() async {
4 years ago
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)));
4 years ago
} else {
return familyFileProvider.getSharedRecordByStatus();
}
}
}
switchUser(user, context) {
GifLoaderDialogUtils.showMyDialog(context);
this.familyFileProvider.silentLoggin(user is AuthenticatedUser ? null : user, mainUser: user is AuthenticatedUser).then((value) {
3 years ago
// GifLoaderDialogUtils.hideDialog(context);
// Navigator.of(context).pop();
loginAfter(value, context);
}).catchError((err) {
GifLoaderDialogUtils.hideDialog(context);
4 years ago
print(err);
AppToast.showErrorToast(message: err);
Navigator.of(context).pop();
});
}
loginAfter(result, context) async {
Utils.hideProgressDialog();
Provider.of<ProjectViewModel>(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();
4 years ago
if (mainUser["PatientID"] != result.list.patientID) {
result.list.isFamily = true;
}
3 years ago
// result.list.cRSVerificationStatus = result['CRSVerificationStatus'];
this.sharedPref.setString(APP_LANGUAGE, currentLang);
4 years ago
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);
4 years ago
// Navigator.of(context).pop();
4 years ago
await authenticatedUserObject.getUser(getUser: true);
Provider.of<ProjectViewModel>(context, listen: false).user = authenticatedUserObject.user;
Provider.of<ProjectViewModel>(context, listen: false).setUser(authenticatedUserObject.user);
3 years ago
await pharmacyModuleViewModel.generatePharmacyToken();
if (pharmacyModuleViewModel.error.isNotEmpty) await pharmacyModuleViewModel.createUser();
4 years ago
appointmentRateViewModel
.getIsLastAppointmentRatedList()
.then((value) => {
//getToDoCount(),
4 years ago
//Utils.hideProgressDialog(),
4 years ago
if (appointmentRateViewModel.isHaveAppointmentNotRate)
{
Navigator.pushAndRemoveUntil(
context,
FadePage(
page: RateAppointmentDoctor(),
),
(r) => false)
}
else
{
Navigator.pushAndRemoveUntil(
context,
FadePage(
page: LandingPage(),
),
(r) => false)
}
})
.catchError((err) {
print(err);
4 years ago
//Utils.hideProgressDialog();
4 years ago
// GifLoaderDialogUtils.hideDialog(context);
});
}
}