diff --git a/lib/bloc/profile/profile_bloc.dart b/lib/bloc/profile/profile_bloc.dart index 5db9328..d6c2c50 100644 --- a/lib/bloc/profile/profile_bloc.dart +++ b/lib/bloc/profile/profile_bloc.dart @@ -23,15 +23,20 @@ class ProfileBloc extends Bloc { List? eligibilities; ////========================================================================= on((event, emit) async { - // try { - emit(ProfileLoading()); - ProfileInformation? profileInformation = - await ProfileService.instance.getProfile(event.token, event.userID); - globalProfileInformation = profileInformation; - emit(ProfileLoaded(profileInformation: globalProfileInformation!)); - // } catch (e) { - // emit(ProfileErrorState(mesage: e.toString())); - // } + try { + emit(ProfileLoading()); + ProfileInformation? profileInformation = + await ProfileService.instance.getProfile(event.token, event.userID); + globalProfileInformation = profileInformation; + emit(ProfileLoaded(profileInformation: globalProfileInformation!)); + } catch (e) { + emit(ProfileErrorState(mesage: e.toString())); + } + }); + + on((event, emit) { + emit(const ProfileErrorState( + mesage: "Something went wrong. Please try again")); }); ////===================================================================== on((event, emit) { @@ -40,36 +45,121 @@ class ProfileBloc extends Bloc { emit(EligibilityLoaded(eligibilities: event.eligibilities)); }); ////==================================================================== - on((event, emit) async { - // try{ - emit(ProfileLoading()); - if (globalCountries == null) { - List countries = await LocationUtils.instance.getCountries(); - globalCountries = countries; - } - if (globalRegions == null) { - List regions = await LocationUtils.instance.getRegions(); - globalRegions = regions; - } - if (globalEligibilities == null) { - List eligibilities = - await ProfileUtilities.instance.getEligibilities(); - globalEligibilities = eligibilities; - } - bool? isOverseas = event.eligibityCert.overseas; +on((event,emit)async{ - emit(EditEligibilityState( - isOverseas: isOverseas!, - eligibityCert: event.eligibityCert, - countries: globalCountries!, - regions: globalRegions!, - eligibilities: globalEligibilities!)); + print(eligibilities?.length); + try{ + if(eligibilities != null){ + emit(EligibilityLoaded(eligibilities: eligibilities!)); + }else{ + emit(ProfileLoading()); + eligibilities = await EligibilityService.instance.getEligibilities(event.profileId, event.token); + emit(EligibilityLoaded(eligibilities: eligibilities!)); + } + + }catch(e){ + emit(ProfileErrorState(mesage: e.toString())); + } +}); +////==================================================================== + on((event, emit) async { + try { + emit(ProfileLoading()); + if (globalCountries == null) { + List countries = await LocationUtils.instance.getCountries(); + globalCountries = countries; + } + if (globalRegions == null) { + List regions = await LocationUtils.instance.getRegions(); + globalRegions = regions; + } + if (globalEligibilities == null) { + List eligibilities = + await ProfileUtilities.instance.getEligibilities(); + globalEligibilities = eligibilities; + } + Eligibility currentEligibility = globalEligibilities!.firstWhere( + (Eligibility eligibility) => + event.eligibityCert.eligibility!.id == eligibility.id); + bool? isOverseas = event.eligibityCert.overseas; + Country currentCountry = globalCountries!.firstWhere( + (Country country) => + event.eligibityCert.examAddress!.country!.code == country.code); + if (event.eligibityCert.examAddress?.cityMunicipality?.province + ?.region != + null) { + Region currrentRegion = globalRegions!.firstWhere((Region region) => + event.eligibityCert.examAddress!.cityMunicipality!.province! + .region!.code == + region.code); + List provinces = await LocationUtils.instance + .getProvinces(regionCode: currrentRegion.code.toString()); + Province currentProvince = provinces.firstWhere((Province province) => + event.eligibityCert.examAddress!.cityMunicipality!.province! + .code == + province.code); + List cities = await LocationUtils.instance + .getCities(code: currentProvince.code.toString()); + CityMunicipality currentCity = cities.firstWhere( + (CityMunicipality cityMunicipality) => + event.eligibityCert.examAddress!.cityMunicipality!.code == + cityMunicipality.code); - // }catch(e){ - // emit(ProfileErrorState(mesage: e.toString())); - // } - - ////==================================================================== + emit(EditEligibilityState( + currentCity: currentCity, + selectedCountry: currentCountry, + currentProvince: currentProvince, + currentRegion: currrentRegion, + currentEligibility: currentEligibility, + provinces: provinces, + cities: cities, + isOverseas: isOverseas!, + eligibityCert: event.eligibityCert, + countries: globalCountries!, + regions: globalRegions!, + eligibilities: globalEligibilities!)); + } else { + emit(EditEligibilityState( + selectedCountry: currentCountry, + currentCity: null, + currentProvince: null, + currentRegion: null, + provinces: null, + cities: null, + currentEligibility: currentEligibility, + isOverseas: isOverseas!, + eligibityCert: event.eligibityCert, + countries: globalCountries!, + regions: globalRegions!, + eligibilities: globalEligibilities!)); + } + } catch (e) { + emit(ProfileErrorState(mesage: e.toString())); + } + }); + ////==================================================================== + on((event, emit) async { + try { + emit(ProfileLoading()); + Map status = await EligibilityService.instance.update( + eligibityCert: event.eligibityCert, + token: event.token, + profileId: int.parse(event.profileId), + oldEligibility: event.oldEligibility); + if (status['success']) { + EligibityCert newEligibility = EligibityCert.fromJson(status['data']); + eligibilities!.removeWhere( + (EligibityCert element) => element.id == event.eligibityCert.id); + eligibilities!.add(newEligibility); + emit(EligibilityEditedState( + eligibilities: eligibilities!, response: status)); + } else { + emit(EligibilityEditedState( + eligibilities: eligibilities!, response: status)); + } + } catch (e) { + emit(ProfileErrorState(mesage: e.toString())); + } }); on((event, emit) async { emit(ProfileLoading()); @@ -113,6 +203,7 @@ class ProfileBloc extends Bloc { emit(ProfileErrorState(mesage: e.toString())); } }); + ////==================================================================== on( (event, emit) async { try { diff --git a/lib/bloc/profile/profile_event.dart b/lib/bloc/profile/profile_event.dart index 7d1b96e..5951ff8 100644 --- a/lib/bloc/profile/profile_event.dart +++ b/lib/bloc/profile/profile_event.dart @@ -27,9 +27,9 @@ class LoadEligibility extends ProfileEvent { List get props => []; } -class EditEligibility extends ProfileEvent { +class ShowEditEligibilityForm extends ProfileEvent { final EligibityCert eligibityCert; - const EditEligibility({required this.eligibityCert}); + const ShowEditEligibilityForm({required this.eligibityCert}); @override List get props => []; } @@ -51,6 +51,15 @@ class DeleteEligibility extends ProfileEvent { class ShowAddEligibilityForm extends ProfileEvent { } + +class GetEligibilities extends ProfileEvent{ + final int profileId; + final String token; + const GetEligibilities({required this.profileId, required this.token}); + @override + List get props => [profileId,token]; +} + class AddEligibility extends ProfileEvent{ final EligibityCert eligibityCert; final String profileId; @@ -59,3 +68,17 @@ class AddEligibility extends ProfileEvent{ @override List get props => [eligibityCert, profileId, token]; } +class UpdateEligibility extends ProfileEvent{ + final EligibityCert eligibityCert; + final String profileId; + final String token; + final int oldEligibility; + const UpdateEligibility({required this.eligibityCert, required this.oldEligibility,required this.profileId, required this.token}); + + @override + List get props =>[eligibityCert,profileId,token,oldEligibility]; +} + +class CallErrorState extends ProfileEvent{ + +} diff --git a/lib/bloc/profile/profile_state.dart b/lib/bloc/profile/profile_state.dart index d84f750..a311398 100644 --- a/lib/bloc/profile/profile_state.dart +++ b/lib/bloc/profile/profile_state.dart @@ -36,13 +36,27 @@ class EditEligibilityState extends ProfileState { final List eligibilities; final List countries; final List regions; + final List? provinces; + final List? cities; final bool isOverseas; + final Eligibility currentEligibility; + final Region? currentRegion; + final Province? currentProvince; + final CityMunicipality? currentCity; + final Country selectedCountry; const EditEligibilityState({ + required this.provinces, + required this.cities, + required this.currentProvince, + required this.currentCity, + required this.currentRegion, + required this.currentEligibility, required this.isOverseas, required this.eligibityCert, required this.eligibilities, required this.countries, required this.regions, + required this.selectedCountry, }); @override List get props => @@ -69,6 +83,13 @@ class AddEligibilityState extends ProfileState { @override List get props => [eligibilities,countries,regions]; } +class EligibilityEditedState extends ProfileState{ + final List eligibilities; + final Map response; + const EligibilityEditedState({required this.eligibilities, required this.response}); + @override + List get props =>[eligibilities, response]; +} class EligibilityAddedState extends ProfileState{ final List eligibilities; diff --git a/lib/model/profile/eligibility.dart b/lib/model/profile/eligibility.dart index 84566da..f57007d 100644 --- a/lib/model/profile/eligibility.dart +++ b/lib/model/profile/eligibility.dart @@ -52,7 +52,9 @@ class EligibityCert { examAddress: json['exam_address'] == null ? null : ExamAddress.fromJson(json["exam_address"]), - validityDate: json["validity_date"], + validityDate: json['validity_date'] == null + ? null + : DateTime.parse(json["validity_date"]), licenseNumber: json["license_number"], overseas: null, ); @@ -65,7 +67,7 @@ class EligibityCert { "attachments": attachments, "eligibility": eligibility!.toJson(), "exam_address": examAddress!.toJson(), - "validity_date": validityDate, + "validity_date": "${validityDate!.year.toString().padLeft(4, '0')}-${validityDate!.month.toString().padLeft(2, '0')}-${validityDate!.day.toString().padLeft(2, '0')}", "license_number": licenseNumber, }; @override diff --git a/lib/model/profile/profileInfomation.dart b/lib/model/profile/profileInfomation.dart index 37987fb..dc4e69c 100644 --- a/lib/model/profile/profileInfomation.dart +++ b/lib/model/profile/profileInfomation.dart @@ -10,14 +10,14 @@ import 'package:unit2/model/profile/voluntary_works.dart'; import 'package:unit2/model/profile/work_history.dart'; class ProfileInformation{ - BasicInfo basicInfo; - OtherInformation otherInformation; - List eligibilities; - List references; - List learningsAndDevelopment; - List educationalBackgrounds; - List families; - ListworkExperiences; - List voluntaryWorks; - ProfileInformation({required this.families, required this.otherInformation, required this.voluntaryWorks, required this.workExperiences, required this.basicInfo,required this.eligibilities,required this.references, required this.learningsAndDevelopment,required this.educationalBackgrounds}); + final BasicInfo basicInfo; + // OtherInformation otherInformation; + // List eligibilities; + // List references; + // List learningsAndDevelopment; + // List educationalBackgrounds; + // List families; + // ListworkExperiences; + // List voluntaryWorks; + ProfileInformation({required this.basicInfo}); } \ No newline at end of file diff --git a/lib/screens/profile/components/basic_information/address_screen.dart b/lib/screens/profile/components/basic_information/address_screen.dart index ffb8e61..3032355 100644 --- a/lib/screens/profile/components/basic_information/address_screen.dart +++ b/lib/screens/profile/components/basic_information/address_screen.dart @@ -4,7 +4,7 @@ import 'package:unit2/theme-data.dart/box_shadow.dart'; import 'package:unit2/theme-data.dart/colors.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/Leadings/add_leading.dart'; import 'package:unit2/widgets/empty_data.dart'; class AddressScreen extends StatelessWidget { diff --git a/lib/screens/profile/components/basic_information/contact_information_screen.dart b/lib/screens/profile/components/basic_information/contact_information_screen.dart index f89c626..7c54f71 100644 --- a/lib/screens/profile/components/basic_information/contact_information_screen.dart +++ b/lib/screens/profile/components/basic_information/contact_information_screen.dart @@ -3,7 +3,7 @@ import 'package:unit2/model/profile/basic_information/contact_information.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/add_leading.dart'; +import 'package:unit2/widgets/Leadings/add_leading.dart'; import 'package:unit2/widgets/empty_data.dart'; class ContactInformationScreen extends StatelessWidget { diff --git a/lib/screens/profile/components/basic_information/identification_information_screen.dart b/lib/screens/profile/components/basic_information/identification_information_screen.dart index a3584da..8f47db9 100644 --- a/lib/screens/profile/components/basic_information/identification_information_screen.dart +++ b/lib/screens/profile/components/basic_information/identification_information_screen.dart @@ -4,7 +4,7 @@ import 'package:unit2/theme-data.dart/box_shadow.dart'; import 'package:unit2/theme-data.dart/colors.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/Leadings/add_leading.dart'; import 'package:unit2/widgets/empty_data.dart'; class IdentificationsScreen extends StatelessWidget { diff --git a/lib/screens/profile/components/education_screen.dart b/lib/screens/profile/components/education_screen.dart index 99af383..6602b57 100644 --- a/lib/screens/profile/components/education_screen.dart +++ b/lib/screens/profile/components/education_screen.dart @@ -4,7 +4,7 @@ import 'package:unit2/model/profile/educational_background.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/add_leading.dart'; +import 'package:unit2/widgets/Leadings/add_leading.dart'; import 'package:unit2/widgets/empty_data.dart'; class EducationScreen extends StatelessWidget { diff --git a/lib/screens/profile/components/eligibility/add_modal.dart b/lib/screens/profile/components/eligibility/add_modal.dart index f0b247c..f57b2db 100644 --- a/lib/screens/profile/components/eligibility/add_modal.dart +++ b/lib/screens/profile/components/eligibility/add_modal.dart @@ -124,6 +124,8 @@ class _AddEligibilityScreenState extends State { Flexible( flex: 1, child: FormBuilderTextField( + keyboardType: const TextInputType + .numberWithOptions(), onChanged: (value) { rating = value; }, @@ -149,8 +151,8 @@ class _AddEligibilityScreenState extends State { use24HourFormat: false, icon: const Icon(Icons.date_range), controller: examDateController, - firstDate: DateTime(1970), - lastDate: DateTime(2100), + firstDate: DateTime(1970), + lastDate: DateTime(2100), timeHintText: "Date of Examination/Conferment", decoration: normalTextFieldStyle( @@ -222,8 +224,10 @@ class _AddEligibilityScreenState extends State { child: overseas == true ? FormBuilderDropdown( initialValue: null, - validator: (value) => - value == null ? 'required' : null, + validator: (value) => + value == null + ? 'required' + : null, items: state.countries.map< DropdownMenuItem< Country>>( @@ -249,8 +253,10 @@ class _AddEligibilityScreenState extends State { autovalidateMode: AutovalidateMode .onUserInteraction, - validator: (value) => - value == null ? 'required' : null, + validator: (value) => + value == null + ? 'required' + : null, onChanged: (Region? region) async { setState(() { @@ -283,14 +289,16 @@ class _AddEligibilityScreenState extends State { height: 70, child: ModalProgressHUD( color: Colors.transparent, - inAsyncCall: cityCall, + inAsyncCall: provinceCall, child: DropdownButtonFormField< Province?>( autovalidateMode: AutovalidateMode .onUserInteraction, - validator: (value) => - value == null ? 'required' : null, + validator: (value) => + value == null + ? 'required' + : null, isExpanded: true, value: selectedProvince, onChanged: (Province? @@ -325,40 +333,46 @@ class _AddEligibilityScreenState extends State { "Province")), ), ), - const SizedBox( - height: 20, - ), + + // CityMunicipalities dropdown SizedBox( height: 70, - child: - DropdownButtonFormField< - CityMunicipality>( - validator: (value) => - value == null ? 'required' : null, - isExpanded: true, - onChanged: - (CityMunicipality? - city) { - selectedMunicipality = - city; - }, - decoration: - normalTextFieldStyle( - "Municipality*", - "Municipality"), - value: selectedMunicipality, - items: citymuns == null - ? [] - : citymuns!.map< - DropdownMenuItem< - CityMunicipality>>( - (CityMunicipality - c) { - return DropdownMenuItem( - value: c, - child: Text(c - .description!)); - }).toList(), + child: ModalProgressHUD( + color: Colors.white, + inAsyncCall: cityCall, + child: + DropdownButtonFormField< + CityMunicipality>( + validator: (value) => + value == null + ? 'required' + : null, + isExpanded: true, + onChanged: + (CityMunicipality? + city) { + selectedMunicipality = + city; + }, + decoration: + normalTextFieldStyle( + "Municipality*", + "Municipality"), + value: + selectedMunicipality, + items: citymuns == null + ? [] + : citymuns!.map< + DropdownMenuItem< + CityMunicipality>>( + (CityMunicipality + c) { + return DropdownMenuItem( + value: c, + child: Text(c + .description!)); + }).toList(), + ), ), ), const SizedBox( @@ -380,9 +394,11 @@ class _AddEligibilityScreenState extends State { style: mainBtnStyle( primary, Colors.transparent, second), onPressed: () { + //rating double? rate = rating == null ? null : double.parse(rating!); + //lisence String? licenseNumber = license; CityMunicipality? cityMunicipality = selectedMunicipality; @@ -450,23 +466,32 @@ class _AddEligibilityScreenState extends State { } Future getProvinces() async { - List newProvinces = await LocationUtils.instance - .getProvinces(regionCode: selectedRegion!.code.toString()); - setState(() { - provinces = newProvinces; - selectedProvince = provinces![0]; - getCities(); - provinceCall = false; - }); + try { + List newProvinces = await LocationUtils.instance + .getProvinces(regionCode: selectedRegion!.code.toString()); + setState(() { + provinces = newProvinces; + selectedProvince = provinces![0]; + provinceCall = false; + cityCall = true; + getCities(); + }); + } catch (e) { + context.read().add(CallErrorState()); + } } Future getCities() async { - List newCities = await LocationUtils.instance - .getCities(code: selectedProvince!.code.toString()); - citymuns = newCities; - setState(() { - selectedMunicipality = newCities[0]; - cityCall = false; - }); + try { + List newCities = await LocationUtils.instance + .getCities(code: selectedProvince!.code.toString()); + citymuns = newCities; + setState(() { + selectedMunicipality = newCities[0]; + cityCall = false; + }); + } catch (e) { + context.read().add(CallErrorState()); + } } } diff --git a/lib/screens/profile/components/eligibility/edit_modal.dart b/lib/screens/profile/components/eligibility/edit_modal.dart index 2f3170a..6f32e97 100644 --- a/lib/screens/profile/components/eligibility/edit_modal.dart +++ b/lib/screens/profile/components/eligibility/edit_modal.dart @@ -2,13 +2,11 @@ import 'package:date_time_picker/date_time_picker.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_form_builder/flutter_form_builder.dart'; -import 'package:flutter_progress_hud/flutter_progress_hud.dart'; import 'package:intl/intl.dart'; import 'package:modal_progress_hud_nsn/modal_progress_hud_nsn.dart'; import 'package:unit2/bloc/profile/profile_bloc.dart'; import 'package:unit2/bloc/user/user_bloc.dart'; import 'package:unit2/model/location/city.dart'; -import 'package:unit2/model/login_data/employee_info/employee_info.dart'; import 'package:unit2/model/profile/eligibility.dart'; import 'package:unit2/model/utils/eligibility.dart'; import 'package:unit2/utils/location_utilities.dart'; @@ -33,18 +31,23 @@ class _EditEligibilityScreenState extends State { final formKey = GlobalKey(); final provinceKey = GlobalKey(); bool? overseas; + List? provinces; + List? citymuns; + List? regions; DateFormat dteFormat2 = DateFormat.yMMMMd('en_US'); Region? selectedRegion; Province? selectedProvince; CityMunicipality? selectedMunicipality; Country? selectedCountry; Eligibility? selectedEligibility; - List? provinces; - List? citymuns; bool provinceCall = false; bool cityCall = false; - // final examDateController = TextEditingController(); - // final validityDateController = TextEditingController(); + String? token; + String? profileId; + String? rating; + String? license; + final examDateController = TextEditingController(); + final validityDateController = TextEditingController(); @override Widget build(BuildContext context) { //USERBLOC @@ -53,6 +56,8 @@ class _EditEligibilityScreenState extends State { //LOGGED IN USER STATE if (state is UserLoggedIn) { //PROFIILE BLOC + token = state.userData!.user!.login!.token; + profileId = state.userData!.user!.login!.user!.profileId.toString(); return BlocBuilder( buildWhen: (previous, current) { if (state is EditEligibilityState) {} @@ -61,23 +66,38 @@ class _EditEligibilityScreenState extends State { builder: (context, state) { //EDIT ELIGIBILITY STATE if (state is EditEligibilityState) { - return ProgressHUD( - child: Center( - child: Padding( - padding: const EdgeInsets.symmetric( - vertical: 25, horizontal: 18), - child: FormBuilder( - key: formKey, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - //ELIGIBILITIES DROPDOWN - FormBuilderDropdown( + examDateController.text = state.eligibityCert.examDate == null?'': state.eligibityCert.examDate.toString(); + validityDateController.text = state.eligibityCert.validityDate == null?'': state.eligibityCert.validityDate.toString(); + + provinces = state.provinces; + citymuns = state.cities; + regions = state.regions; + overseas = state.isOverseas; + selectedRegion = state.currentRegion; + selectedProvince = state.currentProvince; + selectedMunicipality = state.currentCity; + selectedEligibility= state.currentEligibility; + rating = state.eligibityCert.rating?.toString(); + license = state.eligibityCert.licenseNumber; + return Center( + child: Padding( + padding: const EdgeInsets.symmetric( + vertical: 25, horizontal: 18), + child: FormBuilder( + key: formKey, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + //ELIGIBILITIES DROPDOWN + DropdownButtonFormField( + validator: (value) => + value == null ? 'required' : null, + isExpanded: true, onChanged: (Eligibility? eligibility) { selectedEligibility = eligibility; }, - initialValue: null, + value: selectedEligibility, items: state.eligibilities .map>( (Eligibility eligibility) { @@ -85,120 +105,116 @@ class _EditEligibilityScreenState extends State { value: eligibility, child: Text(eligibility.title)); }).toList(), - name: "eligibility", decoration: - normalTextFieldStyle("Eligibility", "") - .copyWith( - hintStyle: const TextStyle( - color: Colors.black, - ), - labelStyle: const TextStyle( - color: Colors.black)), - ), - const SizedBox( - height: 20, - ), + normalTextFieldStyle("Eligibility", "")), + const SizedBox( + height: 20, + ), - SizedBox( - width: screenWidth, - child: Row( - children: [ - //LICENSE NUMBER - Flexible( - flex: 1, - child: FormBuilderTextField( - name: 'license_number', - initialValue: - widget.eligibityCert.licenseNumber, - decoration: normalTextFieldStyle( - "license number", "license number"), - ), + SizedBox( + width: screenWidth, + child: Row( + children: [ + //LICENSE NUMBER + Flexible( + flex: 1, + child: FormBuilderTextField( + onChanged: (value) { + license = value; + }, + name: 'license_number', + initialValue: + license, + decoration: normalTextFieldStyle( + "license number", "license number"), ), - const SizedBox( - width: 12, + ), + const SizedBox( + width: 12, + ), + //RATING + Flexible( + flex: 1, + child: FormBuilderTextField( + keyboardType: const TextInputType + .numberWithOptions(), + onChanged: (value) { + rating = value; + }, + name: 'rating', + initialValue: rating == null + ? 'N/A' + : rating.toString(), + decoration: normalTextFieldStyle( + 'rating', 'rating'), ), - //RATING - Flexible( - flex: 1, - child: FormBuilderTextField( - name: 'rating', - - // ignore: prefer_null_aware_operators - initialValue: - widget.eligibityCert.rating == null - ? null - : widget.eligibityCert.rating - .toString(), - - decoration: normalTextFieldStyle( - 'rating', 'rating'), - ), - ), - ], - ), + ), + ], ), - const SizedBox( - height: 20, - ), - SizedBox( - width: screenWidth, - child: Row( - children: [ - //EXAM DATE - Flexible( - flex: 1, - child: DateTimePicker( - // controller: examDateController, - firstDate: DateTime(2000), - lastDate: DateTime(2100), - decoration: normalTextFieldStyle( - "Exam date", "Exam date"), - initialValue: - widget.eligibityCert.examDate == - null - ? '' - : dteFormat2.format(widget - .eligibityCert.examDate!), - )), - const SizedBox( - width: 12, - ), - //VALIDITY DATE - Flexible( + ), + const SizedBox( + height: 20, + ), + SizedBox( + width: screenWidth, + child: Row( + children: [ + //EXAM DATE + Flexible( flex: 1, child: DateTimePicker( - // controller: validityDateController, - firstDate: DateTime(2000), + use24HourFormat: false, + controller: examDateController, + firstDate: DateTime(1970), lastDate: DateTime(2100), decoration: normalTextFieldStyle( - "Validity date", "Validity date"), - initialValue: - widget.eligibityCert.validityDate == - null - ? '' - : dteFormat2.format(widget - .eligibityCert - .validityDate!), - ), + "Exam date", "") + .copyWith( + prefixIcon: const Icon( + Icons.date_range, + color: Colors.black87, + )), + )), + const SizedBox( + width: 12, + ), + //VALIDITY DATE + Flexible( + flex: 1, + child: DateTimePicker( + use24HourFormat: false, + controller: validityDateController, + firstDate: DateTime(1970), + lastDate: DateTime(2100), + decoration: normalTextFieldStyle( + "validity date", "") + .copyWith( + prefixIcon: const Icon( + Icons.date_range, + color: Colors.black87, + )), ), - ], - ), + ), + ], ), - const SizedBox( - height: 20, - ), - Text( - "Placement of Examination/Confinement", - style: Theme.of(context) - .textTheme - .displaySmall! - .copyWith(fontSize: blockSizeVertical * 2), - ), - const SizedBox( - height: 12, - ), - //OVERSEAS ADDRESS SWITCH - Column( + ), + const SizedBox( + height: 20, + ), + Text( + "Placement of Examination/Confinement", + style: Theme.of(context) + .textTheme + .displaySmall! + .copyWith(fontSize: blockSizeVertical * 2), + ), + const SizedBox( + height: 12, + ), + //OVERSEAS ADDRESS SWITCH + StatefulBuilder( + builder: (context, StateSetter setState) { + return Column( children: [ FormBuilderSwitch( initialValue: overseas, @@ -219,7 +235,12 @@ class _EditEligibilityScreenState extends State { SizedBox( child: overseas == true ? FormBuilderDropdown( - initialValue: null, + validator: (value) => + value == null + ? 'required' + : null, + initialValue: + state.selectedCountry, items: state.countries.map< DropdownMenuItem< Country>>( @@ -241,50 +262,96 @@ class _EditEligibilityScreenState extends State { : Column( children: [ //REGION DROPDOWN - FormBuilderDropdown( + DropdownButtonFormField< + Region?>( + validator: (value) => + value == null + ? 'required' + : null, + isExpanded: true, onChanged: (Region? region) async { setState(() { provinceCall = true; }); selectedRegion = region; - getProvinces(); + provinces = await LocationUtils + .instance + .getProvinces( + regionCode: + selectedRegion! + .code + .toString()); + selectedProvince = + provinces![0]; + setState(() { + provinceCall = false; + cityCall = true; + }); + citymuns = await LocationUtils + .instance + .getCities( + code: + selectedProvince! + .code!); + selectedMunicipality = + citymuns![0]; + setState(() { + cityCall = false; + }); }, - initialValue: selectedRegion, + value: selectedRegion, decoration: normalTextFieldStyle( "Region*", "Region"), - name: 'region', - items: state.regions.map< - DropdownMenuItem< - Region>>( - (Region region) { - return DropdownMenuItem< - Region>( - value: region, - child: Text(region - .description!)); - }).toList(), + items: regions == null + ? [] + : regions!.map< + DropdownMenuItem< + Region>>( + (Region region) { + return DropdownMenuItem< + Region>( + value: region, + child: Text(region + .description!)); + }).toList(), ), const SizedBox( height: 20, ), //PROVINCE DROPDOWN SizedBox( - height: 50, + height: 70, child: ModalProgressHUD( - inAsyncCall: cityCall, + color: Colors.transparent, + inAsyncCall: provinceCall, child: DropdownButtonFormField< Province?>( - isExpanded: true, + validator: (value) => + value == null + ? 'required' + : null, + isExpanded: true, value: selectedProvince, onChanged: (Province? - province) { + province) async { setState(() { - cityCall = true; + cityCall = true; + }); + selectedProvince = + province; + citymuns = await LocationUtils + .instance + .getCities( + code: selectedProvince! + .code + .toString()); + selectedMunicipality = + citymuns![0]; + setState(() { + cityCall = false; }); - selectedProvince = province; - getCities(); }, items: provinces == null ? [] @@ -296,7 +363,8 @@ class _EditEligibilityScreenState extends State { return DropdownMenuItem( value: province, - child: FittedBox( + child: + FittedBox( child: Text( province .description!), @@ -308,13 +376,21 @@ class _EditEligibilityScreenState extends State { "Province")), ), ), - const SizedBox( - height: 20, - ), + + // City municipality SizedBox( - height: 50, - child: DropdownButtonFormField< - CityMunicipality>( + height: 70, + child: ModalProgressHUD( + color: Colors.transparent, + inAsyncCall: cityCall, + child: + DropdownButtonFormField< + CityMunicipality>( + validator: (value) => + value == null + ? 'required' + : null, + isExpanded: true, onChanged: (CityMunicipality? city) { @@ -325,7 +401,8 @@ class _EditEligibilityScreenState extends State { normalTextFieldStyle( "Municipality*", "Municipality"), - value: selectedMunicipality, + value: + selectedMunicipality, items: citymuns == null ? [] : citymuns!.map< @@ -338,7 +415,8 @@ class _EditEligibilityScreenState extends State { child: Text(c .description!)); }).toList(), - ), + ), + ), ), const SizedBox( height: 20, @@ -346,26 +424,75 @@ class _EditEligibilityScreenState extends State { ], )), ], - ), + ); + }), - const Expanded( - child: SizedBox(), - ), + const Expanded( + child: SizedBox(), + ), - SizedBox( - width: screenWidth, - height: 60, - child: ElevatedButton( - style: mainBtnStyle( - primary, Colors.transparent, second), - onPressed: () {}, - child: const Text(submit)), - ), - const SizedBox( - height: 20, - ), - ]), - ), + SizedBox( + width: screenWidth, + height: 60, + child: ElevatedButton( + style: mainBtnStyle( + primary, Colors.transparent, second), + onPressed: () { + + //rating + double? rate = rating == null + ? null + : double.parse(rating!); + //license + String? newLicense = license; + //city municipality + CityMunicipality? cityMunicipality = + selectedMunicipality; + //exam date + DateTime? examDate = + examDateController.text.isEmpty + ? null + : DateTime.parse( + examDateController.text); + // validity date + DateTime? validityDate = + validityDateController.text.isEmpty + ? null + : DateTime.parse( + validityDateController.text); + // exam address + ExamAddress examAddress = ExamAddress( + barangay: state.eligibityCert.examAddress?.barangay, + id: state.eligibityCert.examAddress?.id, + addressCategory: state.eligibityCert.examAddress?.addressCategory, + examAddressClass: state.eligibityCert.examAddress?.examAddressClass, + country: selectedCountry ??= Country( + id: 175, + name: 'Philippines', + code: 'PH'), + cityMunicipality: cityMunicipality); + EligibityCert eligibityCert = + EligibityCert( + id: state.eligibityCert.id, + rating: rate, + examDate: examDate, + attachments: null, + eligibility: selectedEligibility, + examAddress: examAddress, + validityDate: validityDate, + licenseNumber: newLicense, + overseas: overseas); + if (formKey.currentState! + .saveAndValidate()) { + context.read().add(UpdateEligibility(eligibityCert: eligibityCert, oldEligibility: state.eligibityCert.eligibility!.id, profileId: profileId!, token: token!)); + } + }, + child: const Text(submit)), + ), + const SizedBox( + height: 20, + ), + ]), ), ), ); @@ -378,23 +505,4 @@ class _EditEligibilityScreenState extends State { }, ); } - - Future getProvinces() async { - List _provinces = await LocationUtils.instance - .getProvinces(regionCode: selectedRegion!.code.toString()); - setState(() { - provinces = _provinces; - selectedProvince = provinces![0]; - getCities(); - provinceCall = false; - }); - } - Future getCities()async{ - List _cities = await LocationUtils.instance.getCities(code: selectedProvince!.code.toString()); - citymuns = _cities; - setState(() { - selectedMunicipality = _cities[0]; - cityCall = false; - }); - } } diff --git a/lib/screens/profile/components/eligibility_screen.dart b/lib/screens/profile/components/eligibility_screen.dart index ba937eb..3e3623a 100644 --- a/lib/screens/profile/components/eligibility_screen.dart +++ b/lib/screens/profile/components/eligibility_screen.dart @@ -2,6 +2,7 @@ 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'; @@ -12,9 +13,9 @@ import 'package:unit2/theme-data.dart/box_shadow.dart'; import 'package:unit2/theme-data.dart/colors.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/Leadings/add_leading.dart'; +import 'package:unit2/widgets/Leadings/close_leading.dart'; import 'package:unit2/widgets/empty_data.dart'; - import '../../../utils/alerts.dart'; class EligibiltyScreen extends StatelessWidget { @@ -24,240 +25,298 @@ class EligibiltyScreen extends StatelessWidget { Widget build(BuildContext context) { String? token; String? profileId; - return Scaffold( - appBar: AppBar( - title: const Text(elibilityScreenTitle), - centerTitle: true, - backgroundColor: primary, - actions: [ - AddLeading(onPressed: () { - context.read().add(ShowAddEligibilityForm()); - }) - ], - ), - body: BlocBuilder( - builder: (context, state) { - if (state is UserLoggedIn) { - token = state.userData!.user!.login!.token; - profileId = - state.userData!.user!.login!.user!.profileId.toString(); - return ProgressHUD( - child: BlocConsumer( - listener: (context, state) { - if (state is EditEligibilityState) { - final progress = ProgressHUD.of(context); - progress!.dismiss(); - } - if (state is ProfileLoading) { - final progress = ProgressHUD.of(context); - progress!.showWithText("Loading"); - } - if (state is EligibilityLoaded || - state is AddEligibilityState || - state is ProfileErrorState) { - final progress = ProgressHUD.of(context); - progress!.dismiss(); - } - if (state is DeletedState) { - if (state.success) { - successAlert(context, "Deletion Successfull", - "Eligibility has been deleted successfully", () { - context.read().add(LoadEligibility( - eligibilities: state.eligibilities)); - }); - } else { - errorAlert(context, "Deletion Failed", - "Error deleting eligibility", () { - Navigator.of(context).pop(); - context.read().add(LoadEligibility( - eligibilities: state.eligibilities)); - }); + List? eligibilities; + return WillPopScope( + onWillPop: () async { + return true; + }, + child: Scaffold( + appBar: AppBar( + title: context.watch().state is AddEligibilityState + ? const Text("Add Eligiblity") + : context.watch().state is EditEligibilityState + ? const Text("Edit Eligibilty") + : const Text(elibilityScreenTitle), + centerTitle: true, + backgroundColor: primary, + actions: (context.watch().state is EligibilityLoaded || + context.watch().state is ProfileLoading) + ? [ + AddLeading(onPressed: () { + context.read().add(ShowAddEligibilityForm()); + }) + ] + : [ + CloseLeading(onPressed: () { + context + .read() + .add(GetEligibilities(profileId: int.parse(profileId!), token: token!)); + }) + ], + ), + body: BlocBuilder( + builder: (context, state) { + if (state is UserLoggedIn) { + token = state.userData!.user!.login!.token; + profileId = + state.userData!.user!.login!.user!.profileId.toString(); + return ProgressHUD( + padding: const EdgeInsets.all(24), + indicatorWidget: const SpinKitFadingCircle( + color: Colors.white, + ), + backgroundColor: Colors.black87, + child: BlocConsumer( + listener: (context, state) { + if (state is ProfileLoading) { + final progress = ProgressHUD.of(context); + progress!.showWithText("Loading"); } - } - if (state is EligibilityAddedState) { - if (state.response['success']) { - Navigator.of(context).pop(); - successAlert(context, "Adding Successfull!", - state.response['message'], () { - context.read().add(LoadEligibility( - eligibilities: state.eligibilities)); - }); - } else { - errorAlert(context, "Adding Failed", - "Something went wrong. Please try again.", () { - Navigator.of(context).pop(); - context.read().add(LoadEligibility( - eligibilities: state.eligibilities)); - }); + if (state is EligibilityLoaded || + state is AddEligibilityState || + state is ProfileErrorState || + state is EditEligibilityState || + state is DeletedState || + state is EligibilityAddedState || + state is EligibilityEditedState) { + final progress = ProgressHUD.of(context); + progress!.dismiss(); } - } - }, - builder: (context, state) { - return BlocBuilder( - builder: (context, state) { - if (state is EligibilityLoaded) { - if (state.eligibilities.isNotEmpty) { - 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()}", + //DELETED STATE + if (state is DeletedState) { + if (state.success) { + successAlert(context, "Deletion Successfull", + "Eligibility has been deleted successfully", () { + Navigator.of(context).pop(); + context.read().add(LoadEligibility( + eligibilities: state.eligibilities)); + }); + } else { + errorAlert(context, "Deletion Failed", + "Error deleting eligibility", () { + Navigator.of(context).pop(); + context.read().add(LoadEligibility( + eligibilities: state.eligibilities)); + }); + } + } + //ADDED STATE + if (state is EligibilityAddedState) { + if (state.response['success']) { + successAlert(context, "Adding Successfull!", + state.response['message'], () { + Navigator.of(context).pop(); + context.read().add(LoadEligibility( + eligibilities: state.eligibilities)); + }); + } else { + errorAlert(context, "Adding Failed", + "Something went wrong. Please try again.", () { + Navigator.of(context).pop(); + context.read().add(LoadEligibility( + eligibilities: state.eligibilities)); + }); + } + } + //UPDATED STATE + if (state is EligibilityEditedState) { + if (state.response['success']) { + successAlert(context, "Update Successfull!", + state.response['message'], () { + Navigator.of(context).pop(); + context.read().add(LoadEligibility( + eligibilities: state.eligibilities)); + }); + } else { + errorAlert(context, "Update Failed", + "Something went wrong. Please try again.", () { + Navigator.of(context).pop(); + context.read().add(LoadEligibility( + eligibilities: state.eligibilities)); + }); + } + } + }, + builder: (context, state) { + return BlocBuilder( + builder: (context, state) { + if (state is EligibilityLoaded) { + eligibilities = state.eligibilities; + if (state.eligibilities.isNotEmpty) { + 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 - .titleSmall), - const SizedBox( - height: 3, - ), - Text( - "Rating : ${state.eligibilities[index].rating ?? 'N/A'}.", - style: Theme.of(context) - .textTheme - .titleSmall) - ]), - ), - AppPopupMenu( - offset: const Offset(-10, -10), - elevation: 3, - onSelected: (value) { - if (value == 2) { - confirmAlert(context, () { - BlocProvider.of< - ProfileBloc>( - context) - .add(DeleteEligibility( - eligibilities: state - .eligibilities, - eligibilityId: state - .eligibilities[ - index] - .id!, - profileId: - profileId!, - token: token!)); - }, "Delete?", - "Confirm Delete?"); - } - if (value == 1) { - EligibityCert eligibityCert = - state - .eligibilities[index]; - bool overseas = eligibityCert - .examAddress! - .country! - .id - .toString() == - '175' - ? false - : true; - eligibityCert.overseas = - overseas; + .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( + "Rating : ${state.eligibilities[index].rating ?? 'N/A'}.", + style: + Theme.of(context) + .textTheme + .titleSmall) + ]), + ), + AppPopupMenu( + offset: const Offset(-10, -10), + elevation: 3, + onSelected: (value) { final progress = ProgressHUD.of(context); - eligibityCert.overseas = - overseas; progress!.showWithText( "Loading..."); - context - .read() - .add(EditEligibility( - eligibityCert: - eligibityCert)); - } - }, - 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", - ) - ], + ////delete eligibilty-= = = = = = = = =>> + if (value == 2) { + confirmAlert(context, () { + BlocProvider.of< + ProfileBloc>( + context) + .add(DeleteEligibility( + eligibilities: + state + .eligibilities, + eligibilityId: state + .eligibilities[ + index] + .id!, + profileId: + profileId!, + token: token!)); + }, "Delete?", + "Confirm Delete?"); + } + if (value == 1) { + ////edit eligibilty-= = = = = = = = =>> + EligibityCert + eligibityCert = + state.eligibilities[ + index]; + bool overseas = eligibityCert + .examAddress! + .country! + .id + .toString() == + '175' + ? false + : true; + eligibityCert.overseas = + overseas; + + eligibityCert.overseas = + overseas; + + context.read().add( + ShowEditEligibilityForm( + eligibityCert: + eligibityCert)); + } + }, + 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 { - return const EmptyData( - message: - "You don't have any eligibilities added. Please click + to add"); + const SizedBox( + height: 5, + ) + ], + ); + }); + } else { + return const EmptyData( + message: + "You don't have any eligibilities added. Please click + to add"); + } } - } - if (state is EditEligibilityState) { - return EditEligibilityScreen( - eligibityCert: state.eligibityCert); - } - if (state is AddEligibilityState) { - return const AddEligibilityScreen(); - } - if (state is ProfileErrorState) { - return Center( - child: Text(state.mesage), + if (state is EditEligibilityState) { + return EditEligibilityScreen( + eligibityCert: state.eligibityCert); + } + if (state is AddEligibilityState) { + return const AddEligibilityScreen(); + } + if (state is ProfileErrorState) { + return Center( + child: Text(state.mesage), + ); + } + return Container( + color: Colors.grey.shade200, ); - } - return Container(); - }, - ); - }, - ), - ); - } - return Container(); - }, - )); + }, + ); + }, + ), + ); + } + return Container(); + }, + )), + ); } PopupMenuItem popMenuItem({String? text, int? value, IconData? icon}) { diff --git a/lib/screens/profile/components/learning_and_development_screen.dart b/lib/screens/profile/components/learning_and_development_screen.dart index 5b53706..e7c9a4a 100644 --- a/lib/screens/profile/components/learning_and_development_screen.dart +++ b/lib/screens/profile/components/learning_and_development_screen.dart @@ -7,7 +7,7 @@ import 'package:unit2/theme-data.dart/box_shadow.dart'; import 'package:unit2/theme-data.dart/colors.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/Leadings/add_leading.dart'; import 'package:unit2/widgets/empty_data.dart'; class LearningAndDevelopmentScreen extends StatelessWidget { diff --git a/lib/screens/profile/components/other_information/non_academic_recognition_screen.dart b/lib/screens/profile/components/other_information/non_academic_recognition_screen.dart index a85f8ba..6aa6465 100644 --- a/lib/screens/profile/components/other_information/non_academic_recognition_screen.dart +++ b/lib/screens/profile/components/other_information/non_academic_recognition_screen.dart @@ -6,7 +6,7 @@ import 'package:unit2/theme-data.dart/box_shadow.dart'; import 'package:unit2/theme-data.dart/colors.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/Leadings/add_leading.dart'; import 'package:unit2/widgets/empty_data.dart'; class NonAcademicRecognitionScreen extends StatelessWidget { diff --git a/lib/screens/profile/components/other_information/org_membership_screen.dart b/lib/screens/profile/components/other_information/org_membership_screen.dart index 007c020..01b870f 100644 --- a/lib/screens/profile/components/other_information/org_membership_screen.dart +++ b/lib/screens/profile/components/other_information/org_membership_screen.dart @@ -3,7 +3,7 @@ import 'package:unit2/model/profile/other_information/organization_memberships.d 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/add_leading.dart'; +import 'package:unit2/widgets/Leadings/add_leading.dart'; import 'package:unit2/widgets/empty_data.dart'; import '../../../../utils/global.dart'; diff --git a/lib/screens/profile/components/other_information/skills_and_hobbies_screen.dart b/lib/screens/profile/components/other_information/skills_and_hobbies_screen.dart index cbc57e2..07f6455 100644 --- a/lib/screens/profile/components/other_information/skills_and_hobbies_screen.dart +++ b/lib/screens/profile/components/other_information/skills_and_hobbies_screen.dart @@ -5,7 +5,7 @@ import 'package:unit2/model/profile/other_information/skills_and_hobbies.dart'; import 'package:unit2/theme-data.dart/colors.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/Leadings/add_leading.dart'; import 'package:unit2/widgets/empty_data.dart'; class SkillHobbiesScreen extends StatelessWidget { diff --git a/lib/screens/profile/components/references_screen.dart b/lib/screens/profile/components/references_screen.dart index 319fd18..b02608e 100644 --- a/lib/screens/profile/components/references_screen.dart +++ b/lib/screens/profile/components/references_screen.dart @@ -5,7 +5,7 @@ import 'package:unit2/model/profile/references.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/add_leading.dart'; +import 'package:unit2/widgets/Leadings/add_leading.dart'; import 'package:unit2/widgets/empty_data.dart'; class ReferencesScreen extends StatelessWidget { diff --git a/lib/screens/profile/components/voluntary_works_screen.dart b/lib/screens/profile/components/voluntary_works_screen.dart index eebdaed..17c33b8 100644 --- a/lib/screens/profile/components/voluntary_works_screen.dart +++ b/lib/screens/profile/components/voluntary_works_screen.dart @@ -4,7 +4,7 @@ import 'package:unit2/model/profile/voluntary_works.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/add_leading.dart'; +import 'package:unit2/widgets/Leadings/add_leading.dart'; import 'package:unit2/widgets/empty_data.dart'; class VolunataryWorkScreen extends StatelessWidget { diff --git a/lib/screens/profile/components/work_history_screen.dart b/lib/screens/profile/components/work_history_screen.dart index 1d896dd..71deb9f 100644 --- a/lib/screens/profile/components/work_history_screen.dart +++ b/lib/screens/profile/components/work_history_screen.dart @@ -4,7 +4,7 @@ import 'package:unit2/model/profile/work_history.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/add_leading.dart'; +import 'package:unit2/widgets/Leadings/add_leading.dart'; import 'package:unit2/widgets/empty_data.dart'; import '../../../utils/global.dart'; diff --git a/lib/screens/profile/profile.dart b/lib/screens/profile/profile.dart index 1049507..2d305ed 100644 --- a/lib/screens/profile/profile.dart +++ b/lib/screens/profile/profile.dart @@ -2,6 +2,7 @@ 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'; @@ -38,6 +39,8 @@ class ProfileInfo extends StatefulWidget { } class _ProfileInfoState extends State { + int? profileId; + String? token; @override Widget build(BuildContext context) { return Scaffold( @@ -47,8 +50,12 @@ class _ProfileInfoState extends State { title: const Text('Profile'), ), body: ProgressHUD( + 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!; return BlocConsumer( listener: (context, state) { if (state is ProfileLoading) { @@ -57,7 +64,7 @@ class _ProfileInfoState extends State { 'Loading Profile', ); } - if (state is ProfileLoaded) { + if (state is ProfileLoaded || state is ProfileErrorState) { final progress = ProgressHUD.of(context); progress?.dismiss(); } @@ -141,12 +148,12 @@ class _ProfileInfoState extends State { icon: Elusive.group, title: "Family", onTap: () { - Navigator.push(context, MaterialPageRoute( - builder: (BuildContext context) { - return FamilyBackgroundScreen( - familyBackground: - state.profileInformation.families); - })); + // Navigator.push(context, MaterialPageRoute( + // builder: (BuildContext context) { + // return FamilyBackgroundScreen( + // familyBackground: + // state.profileInformation.families); + // })); }, ), const Divider(), @@ -154,13 +161,13 @@ class _ProfileInfoState extends State { icon: FontAwesome5.graduation_cap, title: "Education", onTap: () { - Navigator.push(context, MaterialPageRoute( - builder: (BuildContext context) { - return EducationScreen( - educationBackgrounds: state - .profileInformation - .educationalBackgrounds); - })); + // Navigator.push(context, MaterialPageRoute( + // builder: (BuildContext context) { + // return EducationScreen( + // educationBackgrounds: state + // .profileInformation + // .educationalBackgrounds); + // })); }, ), const Divider(), @@ -170,10 +177,11 @@ class _ProfileInfoState extends State { onTap: () { Navigator.push(context, MaterialPageRoute( builder: (BuildContext context) { - return BlocProvider.value(value: ProfileBloc()..add(LoadEligibility(eligibilities: state.profileInformation.eligibilities)), - - child: EligibiltyScreen( - ), + return BlocProvider.value( + value: ProfileBloc() + ..add(GetEligibilities( + profileId: profileId!, token: token!)), + child: const EligibiltyScreen(), ); })); }, @@ -183,12 +191,12 @@ class _ProfileInfoState extends State { icon: FontAwesome5.shopping_bag, title: "Work History", onTap: () { - Navigator.push(context, MaterialPageRoute( - builder: (BuildContext context) { - return WorkHistoryScreen( - workExperiences: state - .profileInformation.workExperiences); - })); + // Navigator.push(context, MaterialPageRoute( + // builder: (BuildContext context) { + // return WorkHistoryScreen( + // workExperiences: state + // .profileInformation.workExperiences); + // })); }, ), const Divider(), @@ -196,12 +204,12 @@ class _ProfileInfoState extends State { icon: FontAwesome5.walking, title: "Voluntary Work & Civic Services", onTap: () { - Navigator.push(context, MaterialPageRoute( - builder: (BuildContext context) { - return VolunataryWorkScreen( - voluntaryWorks: state - .profileInformation.voluntaryWorks); - })); + // Navigator.push(context, MaterialPageRoute( + // builder: (BuildContext context) { + // return VolunataryWorkScreen( + // voluntaryWorks: state + // .profileInformation.voluntaryWorks); + // })); }, ), const Divider(), @@ -209,13 +217,13 @@ class _ProfileInfoState extends State { icon: Elusive.lightbulb, title: "Learning & Development", onTap: () { - Navigator.push(context, MaterialPageRoute( - builder: (BuildContext context) { - return LearningAndDevelopmentScreen( - learningDevelopments: state - .profileInformation - .learningsAndDevelopment); - })); + // Navigator.push(context, MaterialPageRoute( + // builder: (BuildContext context) { + // return LearningAndDevelopmentScreen( + // learningDevelopments: state + // .profileInformation + // .learningsAndDevelopment); + // })); }, ), const Divider(), @@ -223,12 +231,12 @@ class _ProfileInfoState extends State { icon: Brandico.codepen, title: "Personal References", onTap: () { - Navigator.push(context, MaterialPageRoute( - builder: (BuildContext context) { - return ReferencesScreen( - references: - state.profileInformation.references); - })); + // Navigator.push(context, MaterialPageRoute( + // builder: (BuildContext context) { + // return ReferencesScreen( + // references: + // state.profileInformation.references); + // })); }, ), ExpandableGroup( @@ -249,32 +257,32 @@ class _ProfileInfoState extends State { subMenu( Icons.fitness_center, "Skills & Hobbies", () { - Navigator.push(context, MaterialPageRoute( - builder: (BuildContext context) { - return SkillHobbiesScreen( - skillsHobbies: state.profileInformation - .otherInformation.skillsAndHobbies); - })); + // Navigator.push(context, MaterialPageRoute( + // builder: (BuildContext context) { + // return SkillHobbiesScreen( + // skillsHobbies: state.profileInformation + // .otherInformation.skillsAndHobbies); + // })); }), subMenu(FontAwesome5.certificate, "Organization Memberships", () { - Navigator.push(context, MaterialPageRoute( - builder: (BuildContext context) { - return OrgMembershipsScreen( - orgMemberships: state.profileInformation - .otherInformation.orgMemberships); - })); + // Navigator.push(context, MaterialPageRoute( + // builder: (BuildContext context) { + // return OrgMembershipsScreen( + // orgMemberships: state.profileInformation + // .otherInformation.orgMemberships); + // })); }), subMenu(Entypo.doc_text, "Non-Academic Recognitions", () { - Navigator.push(context, MaterialPageRoute( - builder: (BuildContext context) { - return NonAcademicRecognitionScreen( - nonAcademicRecognitions: state - .profileInformation - .otherInformation - .nonAcademicRecognition); - })); + // Navigator.push(context, MaterialPageRoute( + // builder: (BuildContext context) { + // return NonAcademicRecognitionScreen( + // nonAcademicRecognitions: state + // .profileInformation + // .otherInformation + // .nonAcademicRecognition); + // })); }), ]), ExpandableGroup( @@ -302,6 +310,9 @@ class _ProfileInfoState extends State { if (state is ProfileLoading) { return const LoadingScreen(); } + if (state is ProfileErrorState) { + return Text(state.mesage); + } return Container(); }, diff --git a/lib/screens/unit2/login/login.dart b/lib/screens/unit2/login/login.dart index 317adbc..d59d3d7 100644 --- a/lib/screens/unit2/login/login.dart +++ b/lib/screens/unit2/login/login.dart @@ -1,6 +1,7 @@ import 'package:barcode_scan2/barcode_scan2.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:flutter_spinkit/flutter_spinkit.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_form_builder/flutter_form_builder.dart'; import 'package:fluttericon/font_awesome5_icons.dart'; @@ -38,29 +39,21 @@ class _UniT2LoginState extends State { onWillPop: pressAgainToExit, child: Scaffold( body: ProgressHUD( + backgroundColor: Colors.black87, + indicatorWidget: const SpinKitFadingCircle(color: Colors.white), child: BlocConsumer(listener: (context, state) { - if (state is UserLoggedIn) { + if (state is UserLoggedIn || + state is UuidLoaded || + state is UserError || + state is InternetTimeout) { final progress = ProgressHUD.of(context); progress!.dismiss(); Navigator.pushReplacementNamed(context, '/module-screen'); } - if (state is UuidLoaded) { - final progress = ProgressHUD.of(context); - progress!.dismiss(); - Navigator.pushNamed(context, '/qr-login'); - } - if (state is UserError) { - final progress = ProgressHUD.of(context); - progress!.dismiss(); - } - if (state is InternetTimeout) { - final progress = ProgressHUD.of(context); - progress!.dismiss(); - } if (state is InvalidCredentials) { final progress = ProgressHUD.of(context); progress!.dismiss(); - errorAlert(context, "Error Login", state.message,(){}); + errorAlert(context, "Error Login", state.message, () {}); context.read().add(LoadVersion()); } }, builder: (context, state) { @@ -321,8 +314,8 @@ class _UniT2LoginState extends State { } if (state is UserError) { return SomethingWentWrong( - message:onError , - onpressed:(){} , + message: onError, + onpressed: () {}, ); } if (state is InternetTimeout) { diff --git a/lib/sevices/profile/eligibility_services.dart b/lib/sevices/profile/eligibility_services.dart index fa24736..1c3e183 100644 --- a/lib/sevices/profile/eligibility_services.dart +++ b/lib/sevices/profile/eligibility_services.dart @@ -8,6 +8,34 @@ import 'package:http/http.dart' as http; class EligibilityService { static final EligibilityService _instance = EligibilityService(); static EligibilityService get instance => _instance; + + + Future> getEligibilities(int profileId, String token)async{ + List eligibilities = []; + String authToken = "Token $token"; + String path = "${Url.instance.getEligibilities()}$profileId/"; + Map headers = { + 'Content-Type': 'application/json; charset=UTF-8', + 'Authorization': authToken + + }; + + // try{ + http.Response response = await Request.instance.getRequest(path: path,headers: headers,param: {}); + if(response.statusCode == 200){ + Map data = jsonDecode(response.body); + if (data['data']!= null) { + data['data'].forEach((var cert) { + EligibityCert eligibility = EligibityCert.fromJson(cert); + eligibilities.add(eligibility); + }); + } + } + // }catch(e){ + // throw e.toString(); + // } + return eligibilities; + } Future delete( {required int eligibilityId, @@ -22,7 +50,7 @@ class EligibilityService { 'Content-Type': 'application/json; charset=UTF-8', 'Authorization': authtoken }; - // try{ + try{ http.Response response = await Request.instance .deleteRequest(path: path, headers: headers, body: body, param: params); if (response.statusCode == 200) { @@ -32,9 +60,9 @@ class EligibilityService { success = false; } - // }catch(e){ - // throw(e.toString()); - // } + }catch(e){ + throw(e.toString()); + } return success!; } @@ -43,7 +71,7 @@ class EligibilityService { required String token, required int profileId}) async { Map? _response={}; - String authtoken = "Token $token+1"; + String authtoken = "Token $token"; String path = '${Url.instance.addEligibility()}$profileId/'; Map headers = { 'Content-Type': 'application/json; charset=UTF-8', @@ -74,4 +102,42 @@ class EligibilityService { throw e.toString(); } } + + Future> update( + {required EligibityCert eligibityCert, + required String token, + required int profileId, required int oldEligibility}) async { + Map? response={}; + String authtoken = "Token $token"; + String path = '${Url.instance.addEligibility()}$profileId/'; + Map headers = { + 'Content-Type': 'application/json; charset=UTF-8', + 'Authorization': authtoken + }; + + Map body = { + 'eligibility_id': eligibityCert.eligibility!.id, + 'license_number': eligibityCert.licenseNumber, + 'exam_date': eligibityCert.examDate?.toString(), + 'validity_date': eligibityCert.validityDate?.toString(), + 'rating': eligibityCert.rating, + '_citymunCode': eligibityCert.examAddress?.cityMunicipality?.code, + '_countryId': eligibityCert.examAddress?.country!.id, + '_oldEligibilityId': oldEligibility + }; + try { + http.Response res = await Request.instance + .putRequest(path: path, body: body, headers: headers, param: {}); + if (res.statusCode == 200) { + Map data = jsonDecode(res.body); + response = data; + } else { + response.addAll({'success':false}); + } + + return response; + } catch (e) { + throw e.toString(); + } + } } diff --git a/lib/sevices/profile/profile_service.dart b/lib/sevices/profile/profile_service.dart index af76c43..b38bf79 100644 --- a/lib/sevices/profile/profile_service.dart +++ b/lib/sevices/profile/profile_service.dart @@ -37,7 +37,7 @@ class ProfileService { List addresses = []; List identificationInformation = []; List contactInformation = []; - List eligibilities = []; + List families = []; List citizenships = []; List learningsDevelopments = []; @@ -50,9 +50,10 @@ class ProfileService { 'Content-Type': 'application/json; charset=UTF-8', 'Authorization': "Token $token" }; + Map param={"basic":"true"}; // try{ http.Response response = await Request.instance - .getRequest(path: path, param: {}, headers: headers); + .getRequest(path: path, param: param, headers: headers); if (response.statusCode == 200) { Map data = jsonDecode(response.body); @@ -92,100 +93,100 @@ class ProfileService { } // get all family background - if(data['data']['family_background'] != null){ - data['data']['family_background'].forEach((var family){ - FamilyBackground familyBackground = FamilyBackground.fromJson(family); - families.add(familyBackground); - }); - } + // if(data['data']['family_background'] != null){ + // data['data']['family_background'].forEach((var family){ + // FamilyBackground familyBackground = FamilyBackground.fromJson(family); + // families.add(familyBackground); + // }); + // } //get all eligibilities - if (data['data']['eligibilities'] != null) { - data['data']['eligibilities']!.forEach((var cert) { - EligibityCert eligibility = EligibityCert.fromJson(cert); - eligibilities.add(eligibility); - }); - } + // if (data['data']['eligibilities'] != null) { + // data['data']['eligibilities']!.forEach((var cert) { + // EligibityCert eligibility = EligibityCert.fromJson(cert); + // eligibilities.add(eligibility); + // }); + // } // get all citizenships - if (data['data']['citizenship'] != null) { - data['data']['citizenships']!.forEach((var citizenship) { - Citizenship person = Citizenship.fromJson(citizenship); - citizenships.add(person); - }); - } + // if (data['data']['citizenship'] != null) { + // data['data']['citizenships']!.forEach((var citizenship) { + // Citizenship person = Citizenship.fromJson(citizenship); + // citizenships.add(person); + // }); + // } // get all references; - if (data['data']['personal_references'] != null) { - data['data']['personal_references'].forEach((var person) { - PersonalReference reference = PersonalReference.fromJson(person); - references.add(reference); - }); - } + // if (data['data']['personal_references'] != null) { + // data['data']['personal_references'].forEach((var person) { + // PersonalReference reference = PersonalReference.fromJson(person); + // references.add(reference); + // }); + // } //get all learning and developments - if (data['data']['learning_development'] != null) { - data['data']['learning_development'].forEach((var training) { - LearningDevelopement learnings = - LearningDevelopement.fromJson(training); - learningsDevelopments.add(learnings); - }); - } + // if (data['data']['learning_development'] != null) { + // data['data']['learning_development'].forEach((var training) { + // LearningDevelopement learnings = + // LearningDevelopement.fromJson(training); + // learningsDevelopments.add(learnings); + // }); + // } //get all educational background - if (data['data']['education_background'] != null) { - data['data']['education_background'].forEach((var education) { - EducationalBackground educationalBackground = - EducationalBackground.fromJson(education); - educationalBackgrounds.add(educationalBackground); - }); - } + // if (data['data']['education_background'] != null) { + // data['data']['education_background'].forEach((var education) { + // EducationalBackground educationalBackground = + // EducationalBackground.fromJson(education); + // educationalBackgrounds.add(educationalBackground); + // }); + // } // get all work history - if (data['data']['work_experiences'] != null) { - data['data']['work_experiences'].forEach((var work) { - WorkHistory experience = WorkHistory.fromJson(work); - workExperiences.add(experience); - }); - } + // if (data['data']['work_experiences'] != null) { + // data['data']['work_experiences'].forEach((var work) { + // WorkHistory experience = WorkHistory.fromJson(work); + // workExperiences.add(experience); + // }); + // } // get all voluntary works - if (data['data']['voluntary_works'] != null) { - data['data']['voluntary_works'].forEach((var work) { - VoluntaryWork vwork = VoluntaryWork.fromJson(work); - voluntaryWorks.add(vwork); - }); - } + // if (data['data']['voluntary_works'] != null) { + // data['data']['voluntary_works'].forEach((var work) { + // VoluntaryWork vwork = VoluntaryWork.fromJson(work); + // voluntaryWorks.add(vwork); + // }); + // } // get all hobbies - if (data['data']['other_information']['skills_hobbies'] != null) { - data['data']['other_information']['skills_hobbies'] - .forEach((var skills_hobbies) { - SkillsHobbies skillsAndHobbies = - SkillsHobbies.fromJson(skills_hobbies); - skillsHobbies.add(skillsAndHobbies); - }); - } + // if (data['data']['other_information']['skills_hobbies'] != null) { + // data['data']['other_information']['skills_hobbies'] + // .forEach((var skills_hobbies) { + // SkillsHobbies skillsAndHobbies = + // SkillsHobbies.fromJson(skills_hobbies); + // skillsHobbies.add(skillsAndHobbies); + // }); + // } //get all organization memberships - if (data['data']['other_information']['organization_memberships'] != - null) { - data['data']['other_information']['organization_memberships'] - .forEach((var org) { - OrganizationMembership organization = - OrganizationMembership.fromJson(org); - orgMemberships.add(organization); - }); - } + // if (data['data']['other_information']['organization_memberships'] != + // null) { + // data['data']['other_information']['organization_memberships'] + // .forEach((var org) { + // OrganizationMembership organization = + // OrganizationMembership.fromJson(org); + // orgMemberships.add(organization); + // }); + // } //get all non academic recognition - if (data['data']['other_information']['non_academic_records'] != null) { - data['data']['other_information']['non_academic_records'] - .forEach((var recognition) { - NonAcademicRecognition nonAcademicRecognition = - NonAcademicRecognition.fromJson(recognition); - nonAcademicRecognitions.add(nonAcademicRecognition); - }); - } + // if (data['data']['other_information']['non_academic_records'] != null) { + // data['data']['other_information']['non_academic_records'] + // .forEach((var recognition) { + // NonAcademicRecognition nonAcademicRecognition = + // NonAcademicRecognition.fromJson(recognition); + // nonAcademicRecognitions.add(nonAcademicRecognition); + // }); + // } BasicInfo basicInfo = BasicInfo( contactInformation: contactInformation, @@ -193,20 +194,21 @@ class ProfileService { identifications: identificationInformation, citizenships: citizenships, addresses: addresses); - OtherInformation otherInformation = OtherInformation( - skillsAndHobbies: skillsHobbies, - orgMemberships: orgMemberships, - nonAcademicRecognition: nonAcademicRecognitions); + // OtherInformation otherInformation = OtherInformation( + // skillsAndHobbies: skillsHobbies, + // orgMemberships: orgMemberships, + // nonAcademicRecognition: nonAcademicRecognitions); ProfileInformation profileInformation = ProfileInformation( - families: families, - otherInformation: otherInformation, - workExperiences: workExperiences, + // families: families, + // otherInformation: otherInformation, + // workExperiences: workExperiences, basicInfo: basicInfo, - eligibilities: eligibilities, - references: references, - learningsAndDevelopment: learningsDevelopments, - educationalBackgrounds: educationalBackgrounds, - voluntaryWorks: voluntaryWorks); + // eligibilities: eligibilities, + // references: references, + // learningsAndDevelopment: learningsDevelopments, + // educationalBackgrounds: educationalBackgrounds, + // voluntaryWorks: voluntaryWorks + ); profileInformation0 = profileInformation; } // }catch(e){ @@ -215,3 +217,5 @@ class ProfileService { return profileInformation0; } } + + diff --git a/lib/utils/alerts.dart b/lib/utils/alerts.dart index 0994f39..3517fb7 100644 --- a/lib/utils/alerts.dart +++ b/lib/utils/alerts.dart @@ -58,6 +58,6 @@ successAlert(context, title, description,Function() func) { headerAnimationLoop: false, title: title, desc: description, - btnOk: SizedBox(height: 50,child: ElevatedButton(style: mainBtnStyle(primary, Colors.transparent, second), onPressed: func, child: const Text("OK")), ) + btnOk: SizedBox(height: 50,child: ElevatedButton(style: mainBtnStyle(success2, Colors.transparent, success), onPressed: func, child: const Text("OK")), ) ).show(); } diff --git a/lib/utils/request.dart b/lib/utils/request.dart index b99eabf..c224af0 100644 --- a/lib/utils/request.dart +++ b/lib/utils/request.dart @@ -97,46 +97,86 @@ class Request { return response; } + Future putRequest( + {required String path, + required Map? headers, + required Map? body, + required Map? param}) async { + Response response; + try { + response =await put(Uri.http(host,path,param),headers: headers,body: jsonEncode(body)); + } on TimeoutException catch (_) { + Fluttertoast.showToast( + msg: timeoutError, + toastLength: Toast.LENGTH_LONG, + gravity: ToastGravity.BOTTOM, + backgroundColor: Colors.black, + ); + throw (timeoutError); + } on SocketException catch (_) { + Fluttertoast.showToast( + msg: timeoutError, + toastLength: Toast.LENGTH_LONG, + gravity: ToastGravity.BOTTOM, + backgroundColor: Colors.black, + ); + throw (timeoutError); + } on FormatException catch (_) { + throw const FormatException(formatError); + } on HttpException catch (_) { + throw const HttpException(httpError); + } on Error catch (e) { + debugPrint("post request error: $e"); + Fluttertoast.showToast( + msg: onError, + toastLength: Toast.LENGTH_LONG, + gravity: ToastGravity.BOTTOM, + backgroundColor: Colors.black, + ); + throw (e.toString()); + } + return response; + } + Future deleteRequest( {required String path, required Map? headers, required Map? body, required Map? param}) async { Response response; - // try { + try { response = await delete(Uri.http(host, path, param), headers: headers, body: jsonEncode(body)) .timeout(Duration(seconds: requestTimeout)); - // } on TimeoutException catch (_) { - // Fluttertoast.showToast( - // msg: timeoutError, - // toastLength: Toast.LENGTH_LONG, - // gravity: ToastGravity.BOTTOM, - // backgroundColor: Colors.black, - // ); - // throw (timeoutError); - // } on SocketException catch (_) { - // Fluttertoast.showToast( - // msg: timeoutError, - // toastLength: Toast.LENGTH_LONG, - // gravity: ToastGravity.BOTTOM, - // backgroundColor: Colors.black, - // ); - // throw (timeoutError); - // } on FormatException catch (_) { - // throw const FormatException(formatError); - // } on HttpException catch (_) { - // throw const HttpException(httpError); - // } on Error catch (e) { - // debugPrint("post request error: $e"); - // Fluttertoast.showToast( - // msg: onError, - // toastLength: Toast.LENGTH_LONG, - // gravity: ToastGravity.BOTTOM, - // backgroundColor: Colors.black, - // ); - // throw (e.toString()); - // } + } on TimeoutException catch (_) { + Fluttertoast.showToast( + msg: timeoutError, + toastLength: Toast.LENGTH_LONG, + gravity: ToastGravity.BOTTOM, + backgroundColor: Colors.black, + ); + throw (timeoutError); + } on SocketException catch (_) { + Fluttertoast.showToast( + msg: timeoutError, + toastLength: Toast.LENGTH_LONG, + gravity: ToastGravity.BOTTOM, + backgroundColor: Colors.black, + ); + throw (timeoutError); + } on FormatException catch (_) { + throw const FormatException(formatError); + } on HttpException catch (_) { + throw const HttpException(httpError); + } on Error catch (e) { + Fluttertoast.showToast( + msg: onError, + toastLength: Toast.LENGTH_LONG, + gravity: ToastGravity.BOTTOM, + backgroundColor: Colors.black, + ); + throw (e.toString()); + } return response; } } diff --git a/lib/utils/urls.dart b/lib/utils/urls.dart index 953752f..6182792 100644 --- a/lib/utils/urls.dart +++ b/lib/utils/urls.dart @@ -3,10 +3,11 @@ class Url { static Url get instance => _instance; String host() { - // return '192.168.10.221:3003'; + // // return '192.168.10.221:3003'; // return 'agusandelnorte.gov.ph'; // return "192.168.10.219:3000"; - return 'devweb.agusandelnorte.gov.ph'; + return "devweb.agusandelnorte.gov.ph"; + // return 'devapi.agusandelnorte.gov.ph:3004'; } String authentication() { @@ -14,23 +15,33 @@ class Url { } String profileInformation(){ - return '/api/jobnet_app/profile/pds/'; + return 'api/jobnet_app/profile/pds/'; } String latestApk(){ return "/api/system_app/apk_version/latest"; } +////ELIGIBILITIES PATHS String eligibilities(){ return "/api/jobnet_app/eligibilities/"; } +String getEligibilities(){ + return "/api/jobnet_app/profile/pds/eligibility/"; +} + String addEligibility(){ return "/api/jobnet_app/profile/pds/eligibility/"; } String deleteEligibility(){ return "/api/jobnet_app/profile/pds/eligibility/"; } + +String updateEligibility(){ + return "/api/jobnet_app/profile/pds/eligibility/"; +} + // location utils path String getCounties(){ return "/api/jobnet_app/countries/"; diff --git a/lib/widgets/add_leading.dart b/lib/widgets/Leadings/add_leading.dart similarity index 100% rename from lib/widgets/add_leading.dart rename to lib/widgets/Leadings/add_leading.dart diff --git a/lib/widgets/Leadings/close_leading.dart b/lib/widgets/Leadings/close_leading.dart new file mode 100644 index 0000000..f4ea312 --- /dev/null +++ b/lib/widgets/Leadings/close_leading.dart @@ -0,0 +1,13 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/src/widgets/framework.dart'; +import 'package:flutter/src/widgets/placeholder.dart'; + +class CloseLeading extends StatelessWidget { + final Function() onPressed; + const CloseLeading({super.key, required this.onPressed}); + + @override + Widget build(BuildContext context) { + return IconButton(onPressed: onPressed, icon: const Icon(Icons.close)); + } +} \ No newline at end of file diff --git a/macos/Podfile.lock b/macos/Podfile.lock index aa74d3f..42d76d9 100644 --- a/macos/Podfile.lock +++ b/macos/Podfile.lock @@ -3,6 +3,8 @@ PODS: - FMDB (2.7.5): - FMDB/standard (= 2.7.5) - FMDB/standard (2.7.5) + - modal_progress_hud_nsn (0.0.1): + - FlutterMacOS - package_info_plus (0.0.1): - FlutterMacOS - path_provider_foundation (0.0.1): @@ -17,6 +19,7 @@ PODS: DEPENDENCIES: - FlutterMacOS (from `Flutter/ephemeral`) + - modal_progress_hud_nsn (from `Flutter/ephemeral/.symlinks/plugins/modal_progress_hud_nsn/macos`) - package_info_plus (from `Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos`) - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/macos`) - shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/macos`) @@ -29,6 +32,8 @@ SPEC REPOS: EXTERNAL SOURCES: FlutterMacOS: :path: Flutter/ephemeral + modal_progress_hud_nsn: + :path: Flutter/ephemeral/.symlinks/plugins/modal_progress_hud_nsn/macos package_info_plus: :path: Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos path_provider_foundation: @@ -41,6 +46,7 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a + modal_progress_hud_nsn: 8099d46c2cf9de7af8fe0a3f8f5d2aa32cf956c3 package_info_plus: 02d7a575e80f194102bef286361c6c326e4c29ce path_provider_foundation: 37748e03f12783f9de2cb2c4eadfaa25fe6d4852 shared_preferences_foundation: 297b3ebca31b34ec92be11acd7fb0ba932c822ca