From 20f7d98ce5aec59d394bfc73e56c5656bee2040a Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Wed, 24 Aug 2022 14:49:54 +0300 Subject: [PATCH] profile improvements --- lib/classes/colors.dart | 1 + lib/config/routes.dart | 4 +- lib/extensions/string_extensions.dart | 10 +- lib/ui/profile/contact_details.dart | 2 +- lib/ui/profile/family_members.dart | 2 +- lib/ui/profile/personal_info.dart | 126 ++++---------- .../{screens => }/profile/profile_screen.dart | 106 ++++++------ .../{screens => }/profile/widgets/header.dart | 0 lib/ui/profile/widgets/profile_info.dart | 131 ++++++++++++++ lib/ui/profile/widgets/profile_panel.dart | 49 ++++++ .../screens/profile/widgets/profile_info.dart | 160 ------------------ .../profile/widgets/profile_panel.dart | 39 ----- 12 files changed, 278 insertions(+), 352 deletions(-) rename lib/ui/{screens => }/profile/profile_screen.dart (59%) rename lib/ui/{screens => }/profile/widgets/header.dart (100%) create mode 100644 lib/ui/profile/widgets/profile_info.dart create mode 100644 lib/ui/profile/widgets/profile_panel.dart delete mode 100644 lib/ui/screens/profile/widgets/profile_info.dart delete mode 100644 lib/ui/screens/profile/widgets/profile_panel.dart diff --git a/lib/classes/colors.dart b/lib/classes/colors.dart index e37a049..1b7c1a5 100644 --- a/lib/classes/colors.dart +++ b/lib/classes/colors.dart @@ -12,6 +12,7 @@ class MyColors { static const Color grey57Color = Color(0xff575757); static const Color grey67Color = Color(0xff676767); static const Color grey77Color = Color(0xff777777); + static const Color grey80Color = Color(0xff808080); static const Color grey70Color = Color(0xff707070); static const Color greyACColor = Color(0xffACACAC); static const Color grey98Color = Color(0xff989898); diff --git a/lib/config/routes.dart b/lib/config/routes.dart index 61cf8aa..ca476df 100644 --- a/lib/config/routes.dart +++ b/lib/config/routes.dart @@ -32,7 +32,7 @@ import 'package:mohem_flutter_app/ui/screens/mowadhafhi/mowadhafhi_hr_request.da import 'package:mohem_flutter_app/ui/screens/mowadhafhi/request_details.dart'; import 'package:mohem_flutter_app/ui/screens/pending_transactions/pending_transactions.dart'; import 'package:mohem_flutter_app/ui/screens/pending_transactions/pending_transactions_details.dart'; -import 'package:mohem_flutter_app/ui/screens/profile/profile_screen.dart'; +import 'package:mohem_flutter_app/ui/profile/profile_screen.dart'; import 'package:mohem_flutter_app/ui/screens/submenu_screen.dart'; import 'package:mohem_flutter_app/ui/work_list/item_history_screen.dart'; import 'package:mohem_flutter_app/ui/work_list/itg_detail_screen.dart'; @@ -139,7 +139,7 @@ class AppRoutes { //Profile //profile: (context) => Profile(), //profile: (context) => Profile(), - personalInfo: (context) => PesonalInfo(), + personalInfo: (context) => PersonalInfo(), basicDetails: (context) => BasicDetails(), contactDetails: (context) => ContactDetails(), familyMembers: (context) => FamilyMembers(), diff --git a/lib/extensions/string_extensions.dart b/lib/extensions/string_extensions.dart index 869b61c..e895ad1 100644 --- a/lib/extensions/string_extensions.dart +++ b/lib/extensions/string_extensions.dart @@ -54,10 +54,16 @@ extension EmailValidator on String { style: TextStyle(color: color ?? MyColors.darkTextColor, fontSize: 14, letterSpacing: -0.48, fontWeight: isBold ? FontWeight.bold : FontWeight.w600), ); - Widget toText16({Color? color, bool isBold = false, int? maxlines}) => Text( + Widget toText16({Color? color, bool isUnderLine = false, bool isBold = false, int? maxlines}) => Text( this, maxLines: maxlines, - style: TextStyle(color: color ?? MyColors.darkTextColor, fontSize: 16, letterSpacing: -0.64, fontWeight: isBold ? FontWeight.bold : FontWeight.w600), + style: TextStyle( + color: color ?? MyColors.darkTextColor, + fontSize: 16, + letterSpacing: -0.64, + fontWeight: isBold ? FontWeight.bold : FontWeight.w600, + decoration: isUnderLine ? TextDecoration.underline : null, + ), ); Widget toText17({Color? color, bool isBold = false}) => Text( diff --git a/lib/ui/profile/contact_details.dart b/lib/ui/profile/contact_details.dart index 034292d..c0af0c5 100644 --- a/lib/ui/profile/contact_details.dart +++ b/lib/ui/profile/contact_details.dart @@ -13,7 +13,7 @@ import 'package:mohem_flutter_app/models/get_employee_phones_model.dart'; import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart'; import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_address_screen.dart'; import 'package:mohem_flutter_app/ui/profile/phone_numbers.dart'; -import 'package:mohem_flutter_app/ui/screens/profile/profile_screen.dart'; +import 'package:mohem_flutter_app/ui/profile/profile_screen.dart'; import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; import 'package:mohem_flutter_app/widgets/button/default_button.dart'; import 'package:provider/provider.dart'; diff --git a/lib/ui/profile/family_members.dart b/lib/ui/profile/family_members.dart index 2dd84ea..4f38531 100644 --- a/lib/ui/profile/family_members.dart +++ b/lib/ui/profile/family_members.dart @@ -8,7 +8,7 @@ import 'package:mohem_flutter_app/extensions/string_extensions.dart'; import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/models/get_employee_contacts.model.dart'; import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_familyMembers_screen.dart'; -import 'package:mohem_flutter_app/ui/screens/profile/profile_screen.dart'; +import 'package:mohem_flutter_app/ui/profile/profile_screen.dart'; import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; import 'package:mohem_flutter_app/widgets/button/default_button.dart'; diff --git a/lib/ui/profile/personal_info.dart b/lib/ui/profile/personal_info.dart index ce35bf1..bd7eebd 100644 --- a/lib/ui/profile/personal_info.dart +++ b/lib/ui/profile/personal_info.dart @@ -2,114 +2,48 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:mohem_flutter_app/app_state/app_state.dart'; import 'package:mohem_flutter_app/classes/colors.dart'; +import 'package:mohem_flutter_app/extensions/int_extensions.dart'; import 'package:mohem_flutter_app/extensions/string_extensions.dart'; +import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; -import 'package:mohem_flutter_app/models/get_employee_basic_details.model.dart'; import 'package:mohem_flutter_app/models/member_information_list_model.dart'; import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; -import 'package:mohem_flutter_app/widgets/button/default_button.dart'; -class PesonalInfo extends StatefulWidget { - const PesonalInfo({Key? key}) : super(key: key); +class PersonalInfo extends StatelessWidget { + PersonalInfo({Key? key}) : super(key: key); - @override - _PesonalInfoState createState() => _PesonalInfoState(); -} - -class _PesonalInfoState extends State { - String? fullName = ""; - String? maritalStatus = ""; - String? birthDate = ""; - String? civilIdentityNumber = ""; - String? emailAddress = ""; - String? employeeNo = ""; - - // List getEmployeeBasicDetailsList = []; - // MemberInformationListModel? _memberInformationList; - - late MemberInformationListModel memberInformationList; - - List getEmployeeBasicDetailsList = []; - - @override - void initState() { - super.initState(); - memberInformationList = AppState().memberInformationList!; - } + MemberInformationListModel memberInformationList = AppState().memberInformationList!; Widget build(BuildContext context) { return Scaffold( - appBar: AppBarWidget( - context, - title: LocaleKeys.profile_personalInformation.tr(), - ), - backgroundColor: MyColors.backgroundColor, - // bottomSheet:footer(), - body: Column( + appBar: AppBarWidget( + context, + title: LocaleKeys.profile_personalInformation.tr(), + ), + backgroundColor: MyColors.backgroundColor, + body: SizedBox( + width: MediaQuery.of(context).size.width, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, children: [ - Container( - width: double.infinity, - margin: EdgeInsets.only( - top: 28, - left: 26, - right: 26, - ), - padding: EdgeInsets.only(left: 14, right: 14, top: 13, bottom: 20), - height: 350, - decoration: BoxDecoration( - boxShadow: [ - BoxShadow( - color: Colors.grey.withOpacity(0.5), - spreadRadius: 5, - blurRadius: 26, - offset: Offset(0, 3), - ), - ], - color: Colors.white, - borderRadius: BorderRadius.circular(10.0), - ), - child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ - LocaleKeys.category.tr().toText13(color: MyColors.lightGrayColor), - "${memberInformationList!.eMPLOYMENTCATEGORYMEANING}".toText16(isBold: true, color: MyColors.blackColor), - SizedBox( - height: 20, - ), - LocaleKeys.address.tr().toText13(color: MyColors.lightGrayColor), - "${memberInformationList!.lOCATIONNAME}".toText16(isBold: true, color: MyColors.blackColor), - SizedBox( - height: 20, - ), - LocaleKeys.phoneNumber.tr().toText13(color: MyColors.lightGrayColor), - "${memberInformationList!.eMPLOYEEMOBILENUMBER}".toText16(isBold: true, color: MyColors.blackColor), - SizedBox( - height: 20, - ), - LocaleKeys.businessGroup.tr().toText13(color: MyColors.lightGrayColor), - "${memberInformationList!.bUSINESSGROUPNAME}".toText16(isBold: true, color: MyColors.blackColor), - SizedBox( - height: 20, - ), - LocaleKeys.Payroll.tr().toText13(color: MyColors.lightGrayColor), - "${memberInformationList!.pAYROLLNAME}".toText16(isBold: true, color: MyColors.blackColor), - ]), - ), + LocaleKeys.category.tr().toText13(color: MyColors.lightGrayColor), + (memberInformationList.eMPLOYMENTCATEGORYMEANING ?? "").toText16(), + 20.height, + LocaleKeys.address.tr().toText13(color: MyColors.lightGrayColor), + (memberInformationList.lOCATIONNAME ?? "").toText16(), + 20.height, + LocaleKeys.phoneNumber.tr().toText13(color: MyColors.lightGrayColor), + (memberInformationList.eMPLOYEEMOBILENUMBER ?? "").toText16(), + 20.height, + LocaleKeys.businessGroup.tr().toText13(color: MyColors.lightGrayColor), + (memberInformationList.bUSINESSGROUPNAME ?? "").toText16(), + 20.height, + LocaleKeys.Payroll.tr().toText13(color: MyColors.lightGrayColor), + (memberInformationList.pAYROLLNAME ?? "").toText16(), ], - )); - } - - Widget footer() { - return Container( - decoration: BoxDecoration( - // borderRadius: BorderRadius.circular(10), - color: MyColors.white, - boxShadow: [ - BoxShadow(color: MyColors.lightGreyEFColor, spreadRadius: 3), - ], + ).objectContainerView().paddingAll(21), ), - child: DefaultButton( - LocaleKeys.update.tr(), - () async {}, - ).insideContainer, ); } } diff --git a/lib/ui/screens/profile/profile_screen.dart b/lib/ui/profile/profile_screen.dart similarity index 59% rename from lib/ui/screens/profile/profile_screen.dart rename to lib/ui/profile/profile_screen.dart index 35c4a57..cea9f11 100644 --- a/lib/ui/screens/profile/profile_screen.dart +++ b/lib/ui/profile/profile_screen.dart @@ -1,19 +1,20 @@ -import 'dart:ui'; import 'dart:convert'; import 'dart:ui'; -import 'package:easy_localization/easy_localization.dart'; +import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; import 'package:mohem_flutter_app/api/profile_api_client.dart'; import 'package:mohem_flutter_app/app_state/app_state.dart'; import 'package:mohem_flutter_app/classes/utils.dart'; +import 'package:mohem_flutter_app/extensions/int_extensions.dart'; +import 'package:mohem_flutter_app/extensions/string_extensions.dart'; +import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/models/get_employee_basic_details.model.dart'; import 'package:mohem_flutter_app/models/member_information_list_model.dart'; -import 'package:mohem_flutter_app/ui/screens/profile/widgets/header.dart'; -import 'package:mohem_flutter_app/ui/screens/profile/widgets/profile_panel.dart'; +import 'package:mohem_flutter_app/ui/profile/widgets/profile_panel.dart'; import 'package:mohem_flutter_app/widgets/bottom_sheet.dart'; // todo '@sultan' kindly follow structure of code written. use extension methods for widgets and dont hard code strings, use localizations @@ -40,17 +41,24 @@ class _ProfileScreenState extends State { @override Widget build(BuildContext context) { return Scaffold( - extendBody: true, - backgroundColor: const Color(0xffefefef), - body: Stack(children: [ + extendBody: true, + backgroundColor: const Color(0xffefefef), + body: Stack( + children: [ Container( height: 300, - margin: EdgeInsets.only(top: 50), - decoration: BoxDecoration(image: DecorationImage(image: MemoryImage(Utils.getPostBytes(memberInformationList.eMPLOYEEIMAGE)), fit: BoxFit.cover)), - child: new BackdropFilter( - filter: new ImageFilter.blur(sigmaX: 10.0, sigmaY: 10.0), - child: new Container( - decoration: new BoxDecoration(color: Colors.white.withOpacity(0.0)), + margin: const EdgeInsets.only(top: 50), + decoration: BoxDecoration( + image: DecorationImage( + image: MemoryImage( + Utils.getPostBytes(memberInformationList.eMPLOYEEIMAGE), + ), + fit: BoxFit.cover), + ), + child: BackdropFilter( + filter: ImageFilter.blur(sigmaX: 10.0, sigmaY: 10.0), + child: Container( + color: Colors.white.withOpacity(0.0), ), ), ), @@ -59,50 +67,46 @@ class _ProfileScreenState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ - SizedBox( - height: 80, - ), - Container( - padding: EdgeInsets.only(left: 15, right: 15), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - IconButton( - onPressed: () { - Navigator.pop(context); - }, - icon: Icon( - Icons.arrow_back_ios, - color: Colors.white, - ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + IconButton( + onPressed: () { + Navigator.pop(context); + }, + icon: const Icon( + Icons.arrow_back_ios, + color: Colors.white, ), - InkWell( - onTap: () { - startImageSheet(); - }, - child: Container( - padding: EdgeInsets.only(left: 10, right: 10, top: 5, bottom: 5), - decoration: BoxDecoration(borderRadius: BorderRadius.circular(15), color: Colors.black.withOpacity(.3)), - child: Row( - children: [ - Icon(Icons.photo, color: Colors.white), - Text( - 'Edit', - style: TextStyle(color: Colors.white, fontSize: 12), - ) - ], - ), + ), + InkWell( + onTap: () { + startImageSheet(); + }, + child: Container( + padding: const EdgeInsets.only(left: 17, right: 17, top: 8, bottom: 8), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(30), + color: Colors.black.withOpacity(.21), + ), + child: Row( + children: [ + const Icon(Icons.photo, color: Colors.white, size: 16), + 4.width, + LocaleKeys.edit.tr().toText12(color: Colors.white), + ], ), ), - ], - ), - ), - HeaderPanel(memberInformationList), - ProfilePanle(memberInformationList) + ), + ], + ).paddingOnly(left: 16, right: 16, top: 80), + ProfilePanel(memberInformationList) ], ), ) - ])); + ], + ), + ); } void startImageSheet() { diff --git a/lib/ui/screens/profile/widgets/header.dart b/lib/ui/profile/widgets/header.dart similarity index 100% rename from lib/ui/screens/profile/widgets/header.dart rename to lib/ui/profile/widgets/header.dart diff --git a/lib/ui/profile/widgets/profile_info.dart b/lib/ui/profile/widgets/profile_info.dart new file mode 100644 index 0000000..63880b3 --- /dev/null +++ b/lib/ui/profile/widgets/profile_info.dart @@ -0,0 +1,131 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:mohem_flutter_app/classes/colors.dart'; +import 'package:mohem_flutter_app/config/routes.dart'; +import 'package:mohem_flutter_app/extensions/int_extensions.dart'; +import 'package:mohem_flutter_app/extensions/string_extensions.dart'; +import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; +import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; +import 'package:mohem_flutter_app/models/dashboard/menu_entries.dart'; +import 'package:mohem_flutter_app/models/member_information_list_model.dart'; +import 'package:mohem_flutter_app/models/profile_menu.model.dart'; + +class ProfileInFo extends StatefulWidget { + ProfileInFo(this.memberInfo); + + MemberInformationListModel memberInfo; + + @override + State createState() => _ProfileInFoState(); +} + +class _ProfileInFoState extends State { + static List menuData = []; + String data = '.'; + double sliderValue = 75; + List menu = [ + ProfileMenu(name: LocaleKeys.profile_personalInformation.tr(), icon: 'personal-info.svg', route: AppRoutes.personalInfo, dynamicUrl: '', menuEntries: getMenuEntries('')), + ProfileMenu(name: LocaleKeys.profile_basicDetails.tr(), icon: 'basic-details.svg', route: AppRoutes.basicDetails, menuEntries: getMenuEntries('BASIC_DETAILS')), + ProfileMenu(name: LocaleKeys.profile_contactDetails.tr(), icon: 'contact-details.svg', route: AppRoutes.contactDetails, dynamicUrl: '', menuEntries: getMenuEntries('ADDRESS')), + ProfileMenu(name: LocaleKeys.profile_familyDetails.tr(), icon: 'family-members.svg', route: AppRoutes.familyMembers, dynamicUrl: '', menuEntries: getMenuEntries('CONTACT')), + ]; + + @override + void setState(VoidCallback fn) { + super.setState(fn); + } + + @override + Widget build(BuildContext context) { + return Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + 16.height, + widget.memberInfo.eMPLOYEENAME!.toText22(), + ("${widget.memberInfo.eMPLOYEENUMBER!} | ${widget.memberInfo.jOBNAME!}").toText13(color: MyColors.grey80Color), + widget.memberInfo.eMPLOYEEEMAILADDRESS!.toText13(), + 12.height, + const Divider(height: 8, thickness: 8, color: MyColors.lightGreyEFColor), + 12.height, + LocaleKeys.completingYear.tr().toText11(), + Row(children: [ + appreciationTime(LocaleKeys.year.tr(), widget.memberInfo.sERVICEYEARS.toString()), + appreciationTime(LocaleKeys.month.tr(), widget.memberInfo.sERVICEMONTHS.toString()), + appreciationTime(LocaleKeys.day.tr(), widget.memberInfo.sERVICEDAYS.toString()), + ]).paddingOnly(bottom: 12, top: 12), + const Divider(height: 8, thickness: 8, color: MyColors.lightGreyEFColor), + Column( + // mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + (LocaleKeys.profile_profileCompletionPer.tr() + ' 75%').toText16(), + 8.height, + Row( + children: [ + for (var i = 0; i < 4; i++) + if (i < 3) Expanded(child: drawSlider(Color(0xff2BB8A6))) else Expanded(child: drawSlider(const Color(0xffefefef))) + ], + ), + 14.height, + LocaleKeys.profile_completeProfile.tr().toText16(color: MyColors.textMixColor, isUnderLine: true), + ], + ).paddingOnly(left: 21, right: 21, bottom: 18, top: 12), + const Divider(height: 8, thickness: 8, color: MyColors.lightGreyEFColor), + ListView.separated( + padding: EdgeInsets.zero, + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + itemBuilder: (cxt, index) => Row( + children: [ + SvgPicture.asset('assets/images/' + menu[index].icon, width: 20, height: 20), + 16.width, + menu[index].name.toText16().expanded, + 16.width, + const Icon(Icons.arrow_forward, color: MyColors.darkIconColor) + ], + ).onPress(() { + Navigator.pushNamed(context, menu[index].route); + }).paddingOnly(left: 21, right: 21, top: 21), + separatorBuilder: (cxt, index) => 12.height, + itemCount: menu.length), + ], + ); + } + + Widget drawSlider(color) { + return Row(children: [ + Expanded( + flex: 1, + child: ClipRRect( + borderRadius: BorderRadius.circular(10), + child: Container( + height: 6, + width: 20, + color: color, + ), + )), + Container(height: 6, width: 3, color: Colors.white), + ]); + } + + Widget appreciationTime(String title, String value) { + return Column( + mainAxisSize: MainAxisSize.min, + children: [ + title.toText13(color: MyColors.grey80Color), + value.padLeft(2, '0').toText20(color: MyColors.textMixColor), + ], + ).expanded; + } +} + +GetMenuEntriesList getMenuEntries(String type) { + List data = _ProfileInFoState.menuData.where((GetMenuEntriesList test) => test.functionName == type).toList(); + if (data.isNotEmpty) { + return data[0]; + } else { + return GetMenuEntriesList(); + } +} diff --git a/lib/ui/profile/widgets/profile_panel.dart b/lib/ui/profile/widgets/profile_panel.dart new file mode 100644 index 0000000..da3e02c --- /dev/null +++ b/lib/ui/profile/widgets/profile_panel.dart @@ -0,0 +1,49 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:mohem_flutter_app/classes/utils.dart'; +import 'package:mohem_flutter_app/models/member_information_list_model.dart'; +import 'package:mohem_flutter_app/ui/profile/widgets/profile_info.dart'; + +class ProfilePanel extends StatelessWidget { + ProfilePanel(this.memberInformationList); + + late MemberInformationListModel memberInformationList; + + @override + Widget build(BuildContext context) { + return SizedBox( + height: MediaQuery.of(context).size.height, + child: Stack( + children: [ + Container( + margin: const EdgeInsets.only(top: 32), + padding: const EdgeInsets.only(top: 37), + decoration: BoxDecoration( + color: Colors.white, + // border: Border.all(color: MyColors.lightGreyEFColor, width: 1), + borderRadius: const BorderRadius.only( + topLeft: Radius.circular(25), + topRight: Radius.circular(25), + ), + boxShadow: [ + BoxShadow( + color: const Color(0xff000000).withOpacity(.1), + blurRadius: 26, + offset: const Offset(0, -3), + ), + ], + ), + child: ProfileInFo(memberInformationList), + ), + Container(height: 68, alignment: Alignment.center, child: profileImage()) + ], + ), + ); + } + + Widget profileImage() => CircleAvatar( + radius: 68, + backgroundImage: MemoryImage(Utils.getPostBytes(memberInformationList.eMPLOYEEIMAGE)), + backgroundColor: Colors.black, + ); +} diff --git a/lib/ui/screens/profile/widgets/profile_info.dart b/lib/ui/screens/profile/widgets/profile_info.dart deleted file mode 100644 index 029e50a..0000000 --- a/lib/ui/screens/profile/widgets/profile_info.dart +++ /dev/null @@ -1,160 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_svg/flutter_svg.dart'; -import 'package:mohem_flutter_app/config/routes.dart'; -import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; -import 'package:mohem_flutter_app/models/dashboard/menu_entries.dart'; -import 'package:mohem_flutter_app/models/member_information_list_model.dart'; -import 'package:easy_localization/easy_localization.dart'; -import 'package:mohem_flutter_app/models/profile_menu.model.dart'; -import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart'; -import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart'; -import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_listview_screen.dart'; -import 'package:provider/provider.dart'; - -// todo '@sultan' kindly follow structure of code written. use extension methods for widgets, also format code - -class ProfileInFo extends StatefulWidget { - ProfileInFo(this.memberInfo); - - MemberInformationListModel memberInfo; - - @override - State createState() => _ProfileInFoState(); -} - -class _ProfileInFoState extends State { - static List menuData = []; - String data = '.'; - double sliderValue = 75; - List menu = [ - ProfileMenu(name: LocaleKeys.profile_personalInformation.tr(), icon: 'personal-info.svg', route: AppRoutes.personalInfo, dynamicUrl: '', menuEntries: getMenuEntries('')), - ProfileMenu(name: LocaleKeys.profile_basicDetails.tr(), icon: 'basic-details.svg', route: AppRoutes.basicDetails, menuEntries: getMenuEntries('BASIC_DETAILS')), - ProfileMenu(name: LocaleKeys.profile_contactDetails.tr(), icon: 'contact-details.svg', route: AppRoutes.contactDetails, dynamicUrl: '', menuEntries: getMenuEntries('ADDRESS')), - ProfileMenu(name: LocaleKeys.profile_familyDetails.tr(), icon: 'family-members.svg', route: AppRoutes.familyMembers, dynamicUrl: '', menuEntries: getMenuEntries('CONTACT')), - ]; - - @override - void setState(VoidCallback fn) { - super.setState(fn); - } - - @override - Widget build(BuildContext context) { - return Container( - child: Column( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - /// card header - customLabel(widget.memberInfo.eMPLOYEENAME.toString(), 22, Colors.black, true), - - customLabel(widget.memberInfo.eMPLOYEENUMBER.toString() + ' | ' + widget.memberInfo.jOBNAME.toString(), 14, Colors.grey, false), - - customLabel(widget.memberInfo.eMPLOYEEEMAILADDRESS.toString(), 13, Colors.black, true), - - Divider(height: 40, thickness: 8, color: const Color(0xffefefef)), - - customLabel(LocaleKeys.completingYear.tr(), 10, Colors.black, true), - - SizedBox(height: 10), - Container( - child: Row(mainAxisAlignment: MainAxisAlignment.spaceAround, crossAxisAlignment: CrossAxisAlignment.center, children: [ - Column( - children: [customLabel(LocaleKeys.year.tr(), 14, const Color(0xff808080), true), customLabel(widget.memberInfo.sERVICEYEARS.toString().padLeft(2, '0'), 22, Color(0xff2BB8A6), true)], - ), - Column( - children: [customLabel(LocaleKeys.month.tr(), 14, const Color(0xff808080), true), customLabel(widget.memberInfo.sERVICEMONTHS.toString().padLeft(2, '0'), 22, Color(0xff2BB8A6), true)], - ), - Column( - children: [customLabel(LocaleKeys.day.tr(), 14, const Color(0xff808080), true), customLabel(widget.memberInfo.sERVICEDAYS.toString().padLeft(2, '0'), 22, Color(0xff2BB8A6), true)], - ) - ])), - - Divider(height: 40, thickness: 8, color: const Color(0xffefefef)), - Container( - padding: EdgeInsets.only( - left: 20, - right: 20, - ), - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - customLabel(LocaleKeys.profile_profileCompletionPer.tr() + ' 75%', 18, Colors.black, true), - const SizedBox(height: 10), - Row( - children: [ - for (var i = 0; i < 4; i++) - if (i < 3) Expanded(child: drawSlider(Color(0xff2BB8A6))) else Expanded(child: drawSlider(const Color(0xffefefef))) - ], - ), - const SizedBox(height: 10), - Text( - LocaleKeys.profile_completeProfile.tr(), - style: TextStyle(color: Color(0xff2BB8A6), fontWeight: FontWeight.bold, decoration: TextDecoration.underline), - ), - ], - ), - ), - - /// description - Divider(height: 50, thickness: 8, color: const Color(0xffefefef)), - - Column( - children: menu.map((i) => rowItem(i, context)).toList(), - ) - ], - ), - ); - } - - Widget drawSlider(color) { - return Row(children: [ - Expanded( - flex: 1, - child: ClipRRect( - borderRadius: BorderRadius.circular(10), - child: Container( - height: 6, - width: 20, - color: color, - ), - )), - Container(height: 6, width: 3, color: Colors.white), - ]); - } - - Widget rowItem(obj, context) { - return InkWell( - onTap: () { - //if (obj.dynamicUrl == '') { - Navigator.pushNamed(context, obj.route); - // } else { - // Navigator.pushNamed(context, AppRoutes.addDynamicInputProfile, arguments: DynamicListViewParams(obj.name, obj.functionName, uRL: obj.dynamicUrl, requestID: obj.requestID)); - //} - }, - child: ListTile( - leading: SvgPicture.asset('assets/images/' + obj.icon), - title: Text(obj.name), - trailing: Icon(Icons.arrow_forward), - ), - ); - } - - Widget customLabel(String label, double size, Color color, bool isBold, {double padding = 0.0}) => Container( - padding: EdgeInsets.all(padding), - // height: 50, - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - crossAxisAlignment: CrossAxisAlignment.center, - children: [Text(label, style: TextStyle(color: color, fontSize: size, fontWeight: isBold ? FontWeight.bold : FontWeight.normal))])); -} - -GetMenuEntriesList getMenuEntries(String type) { - List data = _ProfileInFoState.menuData.where((GetMenuEntriesList test) => test.functionName == type).toList(); - if (data.isNotEmpty) { - return data[0]; - } else { - return GetMenuEntriesList(); - } -} diff --git a/lib/ui/screens/profile/widgets/profile_panel.dart b/lib/ui/screens/profile/widgets/profile_panel.dart deleted file mode 100644 index 1facf52..0000000 --- a/lib/ui/screens/profile/widgets/profile_panel.dart +++ /dev/null @@ -1,39 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:mohem_flutter_app/classes/utils.dart'; -import 'package:mohem_flutter_app/models/member_information_list_model.dart'; -import 'package:mohem_flutter_app/ui/screens/profile/widgets/profile_info.dart'; - -class ProfilePanle extends StatelessWidget { - ProfilePanle(this.memberInformationList); - - late MemberInformationListModel memberInformationList; - - @override - Widget build(BuildContext context) { - double _width = MediaQuery.of(context).size.width; - return Container( - margin: EdgeInsets.fromLTRB(5, 0, 5, 10), - height: MediaQuery.of(context).size.height, - child: Stack(children: [ - Container( - width: _width, - margin: EdgeInsets.only(top: 50), - padding: EdgeInsets.only(top: 50), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: const BorderRadius.only(topLeft: Radius.circular(25), topRight: Radius.circular(25)), - boxShadow: [BoxShadow(color: Colors.white60, blurRadius: 10, spreadRadius: 10)], - ), - child: ProfileInFo(memberInformationList), - ), - Container(height: 100, alignment: Alignment.center, child: ProfileImage()) - ])); - } - - Widget ProfileImage() => CircleAvatar( - radius: 70, - backgroundImage: MemoryImage(Utils.getPostBytes(memberInformationList.eMPLOYEEIMAGE)), - backgroundColor: Colors.black, - ); -}