import 'package:app_popup_menu/app_popup_menu.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/font_awesome_icons.dart'; import 'package:unit2/bloc/profile/profile_bloc.dart'; import 'package:unit2/bloc/user/user_bloc.dart'; import 'package:unit2/model/profile/educational_background.dart'; import 'package:unit2/screens/profile/components/education/add_modal.dart'; import 'package:unit2/theme-data.dart/box_shadow.dart'; import 'package:unit2/theme-data.dart/colors.dart'; import 'package:unit2/utils/text_container.dart'; import 'package:unit2/widgets/Leadings/add_leading.dart'; import 'package:unit2/widgets/empty_data.dart'; import 'package:unit2/widgets/error_state.dart'; import '../../../bloc/profile/education/education_bloc.dart'; import '../../../utils/alerts.dart'; import '../../../widgets/Leadings/close_leading.dart'; import 'education/edit_modal.dart'; class EducationScreen extends StatelessWidget { const EducationScreen({super.key}); @override Widget build(BuildContext context) { int profileId; String? token; return Scaffold( appBar: AppBar( title: const Text(educationScreenTitle), centerTitle: true, backgroundColor: primary, actions: context.watch().state is EducationalBackgroundLoadedState?[ AddLeading(onPressed: () { context.read().add(ShowAddEducationForm()); }) ]:(context.watch().state is AddEducationState || context.watch().state is EditEducationState)?[ CloseLeading(onPressed: () { context.read().add( LoadEducations()); }) ]:[], ), //userbloc 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) { token = state.userData!.user!.login!.token; profileId = state.userData!.user!.login!.user!.profileId!; //profilebloc return BlocBuilder( builder: (context, state) { if (state is ProfileLoaded) { //education bloc return BlocConsumer( listener: (context, state) { if (state is EducationalBackgroundLoadingState) { final progress = ProgressHUD.of(context); progress!.showWithText("Please wait..."); } if (state is EducationalBackgroundLoadedState || state is EducationalBackgroundErrorState || state is AddEducationState || state is EditEducationState || state is EducationDeletedState || state is EditedEducationState) { final progress = ProgressHUD.of(context); progress!.dismiss(); } ////ADDED STATE if (state is EducationAddedState) { if (state.response['success']) { successAlert(context, "Adding Successfull!", state.response['message'], () { Navigator.of(context).pop(); context .read() .add(LoadEducations()); }); } else { errorAlert(context, "Adding Failed", "Something went wrong. Please try again.", () { Navigator.of(context).pop(); context .read() .add(LoadEducations()); }); } } ////EDITED STATE if (state is EditedEducationState) { if (state.response['success']) { successAlert(context, "Update Successfull!", state.response['message'], () { Navigator.of(context).pop(); context .read() .add(LoadEducations()); }); } else { errorAlert(context, "Updated Failed", "Something went wrong. Please try again.", () { Navigator.of(context).pop(); context .read() .add(LoadEducations()); }); } } ////DELETED STATE if (state is EducationDeletedState) { if (state.success) { successAlert(context, "Deletion Successfull", "Educational Background has been deleted successfully", () { Navigator.of(context).pop(); context .read() .add(LoadEducations()); }); } else { errorAlert(context, "Deletion Failed", "Error deleting Education Background", () { Navigator.of(context).pop(); context .read() .add(LoadEducations()); }); } } }, builder: (context, state) { if (state is EducationalBackgroundLoadedState) { if (state.educationalBackground.isNotEmpty) { return ListView.builder( padding: const EdgeInsets.symmetric( vertical: 8, horizontal: 10), itemCount: state.educationalBackground.length, itemBuilder: (BuildContext context, int index) { String level = state .educationalBackground[index] .education! .level!; String periodFrom = state .educationalBackground[index] .periodFrom!; String periodTo = state .educationalBackground[index].periodTo!; String? program = state .educationalBackground[index] .education! .course == null ? null : state.educationalBackground[index] .education!.course!.program!; List? honors = state .educationalBackground[index].honors! .toList(); String school = state .educationalBackground[index] .education! .school! .name!; return Column( children: [ Container( decoration: box1(), padding: const EdgeInsets.symmetric( horizontal: 12, vertical: 8), child: Row( children: [ Expanded( child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment .start, children: [ Row( children: [ Expanded( child: Text( level, style: Theme.of( context) .textTheme .titleMedium! .copyWith( fontWeight: FontWeight .w500), )), Text( "$periodFrom - ", style: Theme.of( context) .textTheme .bodyMedium, ), ], ), const SizedBox( height: 5, ), Text( school, style: Theme.of(context) .textTheme .titleSmall, ), Container( padding: const EdgeInsets .only(top: 8), child: honors .isNotEmpty ? Column( mainAxisAlignment: MainAxisAlignment .start, crossAxisAlignment: CrossAxisAlignment .start, children: [ const Text( " : ", style: TextStyle( fontWeight: FontWeight.w600), ), Column( children: honors .map((Honor honor) => Text(" - ${honor.name!}")) .toList(), ), ], ) : const SizedBox()), program == null ? const SizedBox() : Column( mainAxisAlignment: MainAxisAlignment .start, crossAxisAlignment: CrossAxisAlignment .start, children: [ const SizedBox( height: 5, ), Text(program), ], ), ]), ), AppPopupMenu( offset: const Offset(-10, -10), elevation: 3, onSelected: (value) { ////delete -= = = = = = = = =>> if (value == 2) { confirmAlert(context, () { final progress = ProgressHUD.of( context); progress!.showWithText( "Loading..."); context .read() .add(DeleteEducation( educationalBackground: state.educationalBackground[ index], profileId: profileId, token: token!)); }, "Delete?", "Confirm Delete?"); } if (value == 1) { ////edit -= = = = = = = = =>> final progress = ProgressHUD.of(context); progress!.showWithText( "Loading..."); context .read() .add(ShowEditEducationForm( profileId: profileId, token: token!, educationalBackground: state.educationalBackground[ index])); } }, menuItems: [ popMenuItem( text: "Edit", value: 1, icon: Icons.edit), popMenuItem( text: "Delete", value: 2, icon: Icons.delete), popMenuItem( text: "Attachment", value: 3, icon: FontAwesome.attach) ], icon: const Icon( Icons.more_vert, color: Colors.grey, ), tooltip: "Options", ) ], ), ), const SizedBox( height: 5, ), ], ); }); } else { const EmptyData( message: "You don't have any Educational Background added. Please click + to add."); } } if (state is EducationalBackgroundErrorState) { return SomethingWentWrong( message: state.message, onpressed: () {}); } if (state is AddEducationState) { return AddEducationScreen( token: token!, profileId: profileId, ); } if (state is EditEducationState) { return EditEducationScreen( token: token!, profileId: profileId, ); } return Container(); }, ); } return Container(); }, ); } return Container(); }, ), )); } PopupMenuItem popMenuItem({String? text, int? value, IconData? icon}) { return PopupMenuItem( value: value, child: Row( children: [ Icon( icon, ), const SizedBox( width: 10, ), Text( text!, ), ], ), ); } }