import 'package:expandable_group/expandable_group_widget.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_progress_hud/flutter_progress_hud.dart'; import 'package:flutter_spinkit/flutter_spinkit.dart'; import 'package:fluttericon/brandico_icons.dart'; import 'package:fluttericon/elusive_icons.dart'; import 'package:fluttericon/entypo_icons.dart'; import 'package:fluttericon/font_awesome5_icons.dart'; import 'package:fluttericon/modern_pictograms_icons.dart'; import 'package:unit2/bloc/profile/primary_information/address/address_bloc.dart'; import 'package:unit2/bloc/profile/primary_information/citizenship/citizenship_bloc.dart'; import 'package:unit2/bloc/profile/primary_information/contact/contact_bloc.dart'; import 'package:unit2/bloc/profile/primary_information/identification/identification_bloc.dart'; import 'package:unit2/bloc/profile/profile_bloc.dart'; import 'package:unit2/screens/profile/components/basic_information/address_screen.dart'; import 'package:unit2/screens/profile/components/basic_information/citizenship_screen.dart'; import 'package:unit2/screens/profile/components/basic_information/contact_information_screen.dart'; import 'package:unit2/screens/profile/components/basic_information/identification_information_screen.dart'; import 'package:unit2/screens/profile/components/basic_information/primary_information_screen.dart'; import 'package:unit2/screens/profile/components/education_screen.dart'; import 'package:unit2/screens/profile/components/eligibility_screen.dart'; import 'package:unit2/screens/profile/components/family_background_screen.dart'; import 'package:unit2/screens/profile/components/learning_and_development_screen.dart'; import 'package:unit2/screens/profile/components/loading_screen.dart'; import 'package:unit2/screens/profile/components/other_information/non_academic_recognition_screen.dart'; import 'package:unit2/screens/profile/components/other_information/org_membership_screen.dart'; import 'package:unit2/screens/profile/components/other_information/skills_and_hobbies_screen.dart'; import 'package:unit2/screens/profile/components/references_screen.dart'; import 'package:unit2/screens/profile/components/work_history_screen.dart'; import 'package:unit2/screens/profile/components/voluntary_works_screen.dart'; import 'package:unit2/theme-data.dart/colors.dart'; import 'package:unit2/utils/global.dart'; import 'package:unit2/widgets/error_state.dart'; import '../../bloc/profile/eligibility/eligibility_bloc.dart'; import '../../bloc/profile/family/family_bloc.dart'; import '../../bloc/profile/education/education_bloc.dart'; import '../../bloc/profile/learningDevelopment/learning_development_bloc.dart'; import '../../bloc/profile/other_information/hobbies/hoobies_bloc.dart'; import '../../bloc/profile/other_information/non_academic_recognition.dart/non_academic_recognition_bloc.dart'; import '../../bloc/profile/other_information/org_membership/organization_membership_bloc.dart'; import '../../bloc/profile/references/references_bloc.dart'; import '../../bloc/profile/voluntary_works/voluntary_work_bloc.dart'; import '../../bloc/profile/workHistory/workHistory_bloc.dart'; import '../../bloc/user/user_bloc.dart'; import '../../model/profile/basic_information/primary-information.dart'; import 'components/main_menu.dart'; import 'components/submenu.dart'; class ProfileInfo extends StatefulWidget { const ProfileInfo({super.key}); @override State createState() => _ProfileInfoState(); } class _ProfileInfoState extends State { @override Widget build(BuildContext context) { int? profileId; String? token; Profile profile; return WillPopScope( onWillPop: () async { setState(() {}); return true; }, child: Scaffold( appBar: AppBar( backgroundColor: primary, centerTitle: true, title: const Text('Profile'), ), body: ProgressHUD( padding: const EdgeInsets.all(24), backgroundColor: Colors.black87, indicatorWidget: const SpinKitFadingCircle(color: Colors.white), child: BlocBuilder(builder: (context, state) { if (state is UserLoggedIn) { profileId = state.userData!.user!.login!.user!.profileId; token = state.userData!.user!.login!.token!; if (globalCurrentProfile == null) { profile = state.userData!.employeeInfo!.profile!; globalCurrentProfile = profile; } else { profile = globalCurrentProfile!; } return BlocConsumer( listener: ( context, state, ) { if (state is ProfileLoading) { final progress = ProgressHUD.of(context); progress!.showWithText("Please wait..."); } if (state is ProfileLoaded || state is ProfileErrorState || state is BasicInformationEditingState) { final progress = ProgressHUD.of(context); progress?.dismiss(); } }, builder: (context, state) { if (state is ProfileLoaded) { return Container( padding: const EdgeInsets.symmetric( vertical: 12, horizontal: 12), child: ListView( children: [ Text( "View and Update your Profile Information", textAlign: TextAlign.center, style: Theme.of(context).textTheme.bodyLarge, ), ExpandableGroup( collapsedIcon: const Icon(Icons.keyboard_arrow_down), expandedIcon: const Icon(Icons.keyboard_arrow_up), header: const ListTile( leading: Icon( Elusive.address_book, color: primary, ), title: Text( "Basic Information", style: TextStyle(fontWeight: FontWeight.bold), ), ), items: [ subMenu(Icons.person, "Primary", () { Navigator.push(context, MaterialPageRoute( builder: (BuildContext context) { return BlocProvider.value( value: ProfileBloc() ..add(GetPrimaryBasicInfo( primaryBasicInformation: profile)), child: PrimaryInfo( token: token!, profileId: profileId!, ), ); })); }), subMenu(Icons.home, "Addresses", () { Navigator.push(context, MaterialPageRoute( builder: (BuildContext context) { return BlocProvider( create: (context) => AddressBloc() ..add(GetAddress( addresses: state .profileInformation .basicInfo .addresses)), child: const AddressScreen(), ); })); }), subMenu(Icons.contact_mail, "Identifications", () { Navigator.push(context, MaterialPageRoute( builder: (BuildContext context) { return BlocProvider( create: (context) => IdentificationBloc() ..add(GetIdentifications( identificationInformation: state .profileInformation .basicInfo .identifications)), child: const IdentificationsScreen(), ); })); }), subMenu(Icons.contact_phone, "Contact Info", () { Navigator.push(context, MaterialPageRoute( builder: (BuildContext context) { return BlocProvider( create: (context) => ContactBloc() ..add(GetContacts( contactInformations: state .profileInformation .basicInfo .contactInformation)), child: const ContactInformationScreen(), ); })); }), subMenu(Icons.flag, "Citizenships", () { Navigator.push(context, MaterialPageRoute( builder: (BuildContext context) { return BlocProvider( create: (context) => CitizenshipBloc() ..add(GetCitizenship( citizenship: state .profileInformation .basicInfo .citizenships)), child: CitizenShipScreen( citizenships: state .profileInformation .basicInfo .citizenships, profileId: profileId!, token: token!), ); })); }), ]), const Divider(), MainMenu( icon: Elusive.group, title: "Family", onTap: () { Navigator.push(context, MaterialPageRoute( builder: (BuildContext context) { return BlocProvider( create: (context) => FamilyBloc() ..add(GetFamilies( profileId: profileId!, token: token!)), child: const FamilyBackgroundScreen(), ); })); }, ), const Divider(), MainMenu( icon: FontAwesome5.graduation_cap, title: "Education", onTap: () { Navigator.push(context, MaterialPageRoute( builder: (BuildContext context) { return BlocProvider( create: (context) => EducationBloc() ..add(GetEducationalBackground( profileId: profileId!, token: token!)), child: const EducationScreen(), ); })); }, ), const Divider(), MainMenu( icon: Icons.stars, title: "Eligibility", onTap: () { Navigator.push(context, MaterialPageRoute( builder: (BuildContext context) { return BlocProvider( create: (context) => EligibilityBloc() ..add(GetEligibilities( profileId: profileId!, token: token!)), child: const EligibiltyScreen(), ); })); }, ), const Divider(), MainMenu( icon: FontAwesome5.shopping_bag, title: "Work History", onTap: () { Navigator.push(context, MaterialPageRoute( builder: (BuildContext context) { return BlocProvider( create: (context) => WorkHistoryBloc() ..add(GetWorkHistories( profileId: profileId!, token: token!)), child: const WorkHistoryScreen(), ); })); }, ), const Divider(), MainMenu( icon: FontAwesome5.walking, title: "Voluntary Work & Civic Services", onTap: () { Navigator.push(context, MaterialPageRoute( builder: (BuildContext context) { return BlocProvider( create: (context) => VoluntaryWorkBloc() ..add(GetVoluntarWorks( profileId: profileId!, token: token!)), child: const VolunataryWorkScreen(), ); })); }, ), const Divider(), MainMenu( icon: Elusive.lightbulb, title: "Learning & Development", onTap: () { Navigator.push(context, MaterialPageRoute( builder: (BuildContext context) { return BlocProvider( create: (context) => LearningDevelopmentBloc() ..add(GetLearningDevelopments( profileId: profileId!, token: token!)), child: const LearningAndDevelopmentScreen(), ); })); }, ), const Divider(), MainMenu( icon: Brandico.codepen, title: "Personal References", onTap: () { Navigator.push(context, MaterialPageRoute( builder: (BuildContext context) { return BlocProvider( create: (context) => ReferencesBloc() ..add(GetReferences( profileId: profileId!, token: token!)), child: const ReferencesScreen(), ); })); }, ), ExpandableGroup( collapsedIcon: const Icon(Icons.keyboard_arrow_down), expandedIcon: const Icon(Icons.keyboard_arrow_up), header: const ListTile( leading: Icon( Icons.info, color: primary, ), title: Text( "Other Information", style: TextStyle(fontWeight: FontWeight.bold), ), ), items: [ subMenu( Icons.fitness_center, "Skills & Hobbies", () { Navigator.push(context, MaterialPageRoute( builder: (BuildContext context) { return BlocProvider( create: (context) => HoobiesBloc() ..add(GetSkillsHobbies( profileId: profileId!, token: token!)), child: const SkillHobbiesScreen(), ); })); }), subMenu(FontAwesome5.certificate, "Organization Memberships", () { Navigator.push(context, MaterialPageRoute( builder: (BuildContext context) { return BlocProvider( create: (context) => OrganizationMembershipBloc() ..add(GetOrganizationMembership( profileId: profileId!, token: token!)), child: const OrgMembershipsScreen(), ); })); }), subMenu(Entypo.doc_text, "Non-Academic Recognitions", () { Navigator.push(context, MaterialPageRoute( builder: (BuildContext context) { return BlocProvider( create: (context) => NonAcademicRecognitionBloc() ..add(GetNonAcademicRecognition( profileId: profileId!, token: token!)), child: const NonAcademicRecognitionScreen(), ); })); }), ]), ExpandableGroup( collapsedIcon: const Icon(Icons.keyboard_arrow_down), expandedIcon: const Icon(Icons.keyboard_arrow_up), header: const ListTile( leading: Icon( FontAwesome5.laptop_house, color: primary, ), title: Text( "Assets", style: TextStyle(fontWeight: FontWeight.bold), ), ), items: [ subMenu(ModernPictograms.home, "Real Property Tax", () {}), ]), ], ), ); } if (state is ProfileLoading) { return const LoadingScreen(); } if (state is ProfileErrorState) { return SomethingWentWrong( message: state.mesage, onpressed: () { BlocProvider.of(context).add( LoadProfile(token: token!, userID: profileId!)); }); } return Container(); }, ); } return Container(); }), )), ); } }