diff --git a/lib/bloc/profile/profile_bloc.dart b/lib/bloc/profile/profile_bloc.dart index bd28a2e..d0cc5bf 100644 --- a/lib/bloc/profile/profile_bloc.dart +++ b/lib/bloc/profile/profile_bloc.dart @@ -14,20 +14,22 @@ class ProfileBloc extends Bloc { ProfileInformation? _profileInformation; on((event, emit) async { // try { - emit(ProfileLoading()); - ProfileInformation? profileInformation = - await ProfileService.instance.getProfile(event.token, event.userID); - _profileInformation = profileInformation; - emit(ProfileLoaded( - profileInformation: _profileInformation!)); + emit(ProfileLoading()); + ProfileInformation? profileInformation = + await ProfileService.instance.getProfile(event.token, event.userID); + _profileInformation = profileInformation; + emit(ProfileLoaded(profileInformation: _profileInformation!)); // } catch (e) { // emit(ProfileErrorState(mesage: e.toString())); // } }); - on((event,emit){ - emit(ProfileLoading()); - emit(EligibilityLoaded(eligibilities: event.eligibilities)); + on((event, emit) { + emit(ProfileLoading()); + emit(EligibilityLoaded(eligibilities: event.eligibilities)); + }); + on((event, emit) { + emit(EditEligibilityState(eligibityCert: event.eligibityCert)); }); } } diff --git a/lib/bloc/profile/profile_event.dart b/lib/bloc/profile/profile_event.dart index 83d1f28..0548743 100644 --- a/lib/bloc/profile/profile_event.dart +++ b/lib/bloc/profile/profile_event.dart @@ -28,3 +28,11 @@ class LoadEligibility extends ProfileEvent{ List get props => []; } +class EditEligibility extends ProfileEvent{ + final EligibityCert eligibityCert; + const EditEligibility({required this.eligibityCert}); + @override + List get props => []; +} + + diff --git a/lib/bloc/profile/profile_state.dart b/lib/bloc/profile/profile_state.dart index fd1f36a..f81cf60 100644 --- a/lib/bloc/profile/profile_state.dart +++ b/lib/bloc/profile/profile_state.dart @@ -34,3 +34,9 @@ class EligibilityLoaded extends ProfileState{ List get props => [eligibilities]; } +class EditEligibilityState extends ProfileState{ + final EligibityCert eligibityCert; + const EditEligibilityState({required this.eligibityCert}); + @override + List get props => [eligibityCert]; +} diff --git a/lib/screens/profile/components/eligibility/eligibility_screen.dart b/lib/screens/profile/components/eligibility/eligibility_screen.dart index 19f1d39..703629d 100644 --- a/lib/screens/profile/components/eligibility/eligibility_screen.dart +++ b/lib/screens/profile/components/eligibility/eligibility_screen.dart @@ -1,182 +1,114 @@ -import 'package:app_popup_menu/app_popup_menu.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/src/widgets/framework.dart'; -import 'package:flutter/src/widgets/placeholder.dart'; -import 'package:flutter_bloc/flutter_bloc.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/eligibility.dart'; -import 'package:unit2/screens/profile/components/eligibility/edit_modal.dart'; -import 'package:unit2/theme-data.dart/box_shadow.dart'; -import 'package:unit2/theme-data.dart/colors.dart'; -import 'package:unit2/utils/alerts.dart'; -import 'package:unit2/utils/global.dart'; -import 'package:unit2/utils/text_container.dart'; -import 'package:unit2/widgets/add_leading.dart'; -import 'package:unit2/widgets/empty_data.dart'; +// import 'package:app_popup_menu/app_popup_menu.dart'; +// import 'package:flutter/material.dart'; +// import 'package:flutter/src/widgets/framework.dart'; +// import 'package:flutter/src/widgets/placeholder.dart'; +// import 'package:flutter_bloc/flutter_bloc.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/eligibility.dart'; +// import 'package:unit2/screens/profile/components/eligibility/edit_modal.dart'; +// import 'package:unit2/theme-data.dart/box_shadow.dart'; +// import 'package:unit2/theme-data.dart/colors.dart'; +// import 'package:unit2/utils/alerts.dart'; +// import 'package:unit2/utils/global.dart'; +// import 'package:unit2/utils/text_container.dart'; +// import 'package:unit2/widgets/add_leading.dart'; +// import 'package:unit2/widgets/empty_data.dart'; -class EligibiltyScreen extends StatefulWidget { - const EligibiltyScreen({super.key,}); +// class EligibiltyScreen extends StatefulWidget { +// const EligibiltyScreen({ +// super.key, +// }); - @override - State createState() => _EligibiltyScreenState(); -} +// @override +// State createState() => _EligibiltyScreenState(); +// } -class _EligibiltyScreenState extends State { - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: const Text(elibilityScreenTitle), - centerTitle: true, - backgroundColor: primary, - actions: context.read()[AddLeading( - onPressed: () => () {}, - )], - ), - body: BlocBuilder( - builder: (context, state) { - return BlocBuilder( - builder: (context, state) { - if(state is EligibilityLoaded){ -return ListView.builder( - padding: - const EdgeInsets.symmetric(vertical: 8, horizontal: 10), - itemCount: state.eligibilities.length, - itemBuilder: (BuildContext context, int index) { - String title = - state.eligibilities[index].eligibility!.title!; - return Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Container( - width: screenWidth, - padding: const EdgeInsets.symmetric( - horizontal: 12, vertical: 8), - decoration: box1(), - child: Row( - children: [ - Expanded( - child: Column( - mainAxisAlignment: - MainAxisAlignment.start, - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - Text( - title, - style: Theme.of(context) - .textTheme - .titleMedium! - .copyWith( - fontWeight: FontWeight.w500), - ), - const Divider(), - const SizedBox( - height: 5, - ), - Text( - "$licenseNumber: ${state.eligibilities[index].licenseNumber == null ? 'N/A' : state.eligibilities[index].licenseNumber.toString()}", - style: Theme.of(context) - .textTheme - .titleSmall), - const SizedBox( - height: 3, - ), - Text( - " : ${state.eligibilities[index].rating ?? 'N/A'}.", - style: Theme.of(context) - .textTheme - .titleSmall) - ]), - ), - AppPopupMenu( - offset: const Offset(-10, -10), - elevation: 3, - onSelected: (value) { - // if (value == 1) { - // confirmAlert(context, () => null, - // "Delete?", "Confirm Delete?"); - // } - // if (value == 2) { - // context.read().add( - // EditEligibility( - // eligibityCert: widget - // .eligibilities[index])); - // } - }, - menuItems: [ - PopupMenuItem( - value: 1, - child: Row( - children: const [ - Icon( - Icons.delete, - ), - SizedBox( - width: 10, - ), - Text( - 'Delete', - ), - ], - ), - ), - PopupMenuItem( - value: 2, - child: Row( - children: const [ - Icon( - Icons.edit, - ), - SizedBox( - width: 10, - ), - Text( - 'Edit', - ), - ], - ), - ), - PopupMenuItem( - value: 2, - child: Row( - children: const [ - Icon( - FontAwesome.attach, - ), - SizedBox( - width: 10, - ), - Text( - 'Attachment', - ), - ], - ), - ), - ], - icon: const Icon( - Icons.more_vert, - color: Colors.grey, - ), - tooltip: "Options", - ) - ], - ), - ), - const SizedBox( - height: 5, - ) - ], - ); - }); - } - return Container(); - }, - ); - }, - )); - } -} +// class _EligibiltyScreenState extends State { +// @override +// Widget build(BuildContext context) { +// return Scaffold( +// appBar: AppBar( +// title: const Text(elibilityScreenTitle), +// centerTitle: true, +// backgroundColor: primary, +// actions: context.read()[AddLeading( +// onPressed: () => () {}, +// )], +// ), +// body: BlocBuilder( +// builder: (context, state) { +// return BlocBuilder( +// builder: (context, state) { +// if (state is EligibilityLoaded) { +// return ListView.builder( +// padding: const EdgeInsets.symmetric( +// vertical: 8, horizontal: 10), +// itemCount: state.eligibilities.length, +// itemBuilder: (BuildContext context, int index) { +// String title = +// state.eligibilities[index].eligibility!.title!; +// return Column( +// mainAxisAlignment: MainAxisAlignment.start, +// crossAxisAlignment: CrossAxisAlignment.start, +// children: [ +// Container( +// width: screenWidth, +// padding: const EdgeInsets.symmetric( +// horizontal: 12, vertical: 8), +// decoration: box1(), +// child: Row( +// children: [ +// Expanded( +// child: Column( +// mainAxisAlignment: +// MainAxisAlignment.start, +// crossAxisAlignment: +// CrossAxisAlignment.start, +// children: [ +// Text( +// title, +// style: Theme.of(context) +// .textTheme +// .titleMedium! +// .copyWith( +// fontWeight: +// FontWeight.w500), +// ), +// const Divider(), +// const SizedBox( +// height: 5, +// ), +// Text( +// "$licenseNumber: ${state.eligibilities[index].licenseNumber == null ? 'N/A' : state.eligibilities[index].licenseNumber.toString()}", +// style: Theme.of(context) +// .textTheme +// .titleSmall), +// const SizedBox( +// height: 3, +// ), +// Text( +// " : ${state.eligibilities[index].rating ?? 'N/A'}.", +// style: Theme.of(context) +// .textTheme +// .titleSmall) +// ]), +// ), +// ] +// ), +// ), +// const SizedBox( +// height: 5, +// ) +// ], +// ); +// }); +// } +// return Container(); +// }, +// ); +// }, +// )); +// } +// } diff --git a/lib/screens/profile/components/eligibility_screen.dart b/lib/screens/profile/components/eligibility_screen.dart index 6f5148f..74af261 100644 --- a/lib/screens/profile/components/eligibility_screen.dart +++ b/lib/screens/profile/components/eligibility_screen.dart @@ -1,7 +1,13 @@ +import 'package:app_popup_menu/app_popup_menu.dart'; import 'package:flutter/material.dart'; import 'package:flutter/src/widgets/framework.dart'; import 'package:flutter/src/widgets/placeholder.dart'; +import 'package:flutter_bloc/flutter_bloc.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/eligibility.dart'; +import 'package:unit2/screens/profile/components/eligibility/edit_modal.dart'; import 'package:unit2/theme-data.dart/box_shadow.dart'; import 'package:unit2/theme-data.dart/colors.dart'; import 'package:unit2/utils/global.dart'; @@ -9,61 +15,151 @@ import 'package:unit2/utils/text_container.dart'; import 'package:unit2/widgets/add_leading.dart'; import 'package:unit2/widgets/empty_data.dart'; -class EligibiltyScreen extends StatelessWidget { - final List eligibilities; - const EligibiltyScreen({super.key, required this.eligibilities}); +import '../../../utils/alerts.dart'; +class EligibiltyScreen extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: const Text(elibilityScreenTitle), - centerTitle: true, - backgroundColor: primary, - actions: [AddLeading(onPressed: (){})], - ), - body: eligibilities.isNotEmpty? ListView.builder( - padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 10), - itemCount: eligibilities.length, - itemBuilder: (BuildContext context, int index) { - String title = eligibilities[index].eligibility!.title!; - return Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Container( - width: screenWidth, - padding: - const EdgeInsets.symmetric(horizontal: 12, vertical: 8), - decoration: box1(), - child: Row( - children: [ - Expanded( - child: Column( + appBar: AppBar( + title: const Text(elibilityScreenTitle), + centerTitle: true, + backgroundColor: primary, + actions: [AddLeading(onPressed: () {})], + ), + body: BlocBuilder( + builder: (context, state) { + if (state is UserLoggedIn) { + return BlocBuilder( + builder: (context, state) { + if (state is EligibilityLoaded) { + return ListView.builder( + padding: const EdgeInsets.symmetric( + vertical: 8, horizontal: 10), + itemCount: state.eligibilities.length, + itemBuilder: (BuildContext context, int index) { + String title = + state.eligibilities[index].eligibility!.title!; + return Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text( - title,style: Theme.of(context).textTheme.titleMedium!.copyWith(fontWeight: FontWeight.w500), - ), - const Divider(), - const SizedBox(height: 5,), - Text( - "$licenseNumber: ${eligibilities[index].licenseNumber == null ? 'N/A' : eligibilities[index].licenseNumber.toString()}",style: Theme.of(context).textTheme.titleSmall), - const SizedBox(height: 3,), - Text( - "$rating : ${eligibilities[index].rating}.",style: Theme.of(context).textTheme.titleSmall) - ]), - ), - IconButton( - onPressed: () {}, icon: const Icon(Icons.more_vert,color: Colors.grey,)) - ], - ), - ), - const SizedBox(height: 5,) - ], - ); - }):const EmptyData(message: "You don't have any Eligibility added. Please click + to add."), + Container( + width: screenWidth, + padding: const EdgeInsets.symmetric( + horizontal: 12, vertical: 8), + decoration: box1(), + child: Row( + children: [ + Expanded( + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Text( + title, + style: Theme.of(context) + .textTheme + .titleMedium! + .copyWith( + fontWeight: + FontWeight.w500), + ), + const Divider(), + const SizedBox( + height: 5, + ), + Text( + "$licenseNumber: ${state.eligibilities[index].licenseNumber == null ? 'N/A' : state.eligibilities[index].licenseNumber.toString()}", + style: Theme.of(context) + .textTheme + .titleSmall), + const SizedBox( + height: 3, + ), + Text( + " : ${state.eligibilities[index].rating}.", + style: Theme.of(context) + .textTheme + .titleSmall) + ]), + ), + AppPopupMenu( + offset: const Offset(-10, -10), + elevation: 3, + onSelected: (value) { + if (value == 2) { + confirmAlert(context, () => null, + "Delete?", "Confirm Delete?"); + } + if (value == 1) { + context.read().add( + EditEligibility( + eligibityCert: state + .eligibilities[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, + ) + ], + ); + }); + } + if (state is EditEligibilityState) { + return EditEligibilityScreen( + eligibityCert: state.eligibityCert); + } + 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!, + ), + ], + ), ); } } diff --git a/lib/screens/profile/profile.dart b/lib/screens/profile/profile.dart index db097ad..1049507 100644 --- a/lib/screens/profile/profile.dart +++ b/lib/screens/profile/profile.dart @@ -173,8 +173,7 @@ class _ProfileInfoState extends State { return BlocProvider.value(value: ProfileBloc()..add(LoadEligibility(eligibilities: state.profileInformation.eligibilities)), child: EligibiltyScreen( - eligibilities: state - .profileInformation.eligibilities), + ), ); })); }, diff --git a/lib/screens/unit2/homepage.dart/components/menu.dart b/lib/screens/unit2/homepage.dart/components/menu.dart index b26cafe..17922a4 100644 --- a/lib/screens/unit2/homepage.dart/components/menu.dart +++ b/lib/screens/unit2/homepage.dart/components/menu.dart @@ -20,7 +20,8 @@ Widget getTile( if (title.toLowerCase() == "logout") { confirmAlert(context, () { Navigator.pushReplacementNamed (context,"/"); - }); + + },"Logout","Are You sure you want to logout?"); }if(title.toLowerCase() == 'profile'){ ProfileArguments profileArguments = ProfileArguments(token: userData.user!.login!.token!, userID:userData.user!.login!.user!.profileId!); Navigator.pushNamed(context, route,arguments: profileArguments); diff --git a/lib/utils/alerts.dart b/lib/utils/alerts.dart index a9d488d..2a39072 100644 --- a/lib/utils/alerts.dart +++ b/lib/utils/alerts.dart @@ -3,7 +3,7 @@ import 'package:flutter/material.dart'; import 'package:unit2/theme-data.dart/colors.dart'; import 'package:unit2/utils/global.dart'; -confirmAlert(context, Function() yes) { +confirmAlert(context, Function() yes,String title, String subtitle) { AwesomeDialog( context: context, dialogType: DialogType.question, @@ -26,8 +26,8 @@ confirmAlert(context, Function() yes) { // }, headerAnimationLoop: false, animType: AnimType.bottomSlide, - title: 'LOGOUT!', - desc: 'Are you sure you want to logout?', + title: title, + desc: subtitle, btnOkText: "Yes", btnCancelText: "No", showCloseIcon: false,