diff --git a/lib/bloc/profile/profile_bloc.dart b/lib/bloc/profile/profile_bloc.dart index 10a5515..0b755a6 100644 --- a/lib/bloc/profile/profile_bloc.dart +++ b/lib/bloc/profile/profile_bloc.dart @@ -5,7 +5,9 @@ import 'package:unit2/model/profile/basic_information/primary-information.dart'; import 'package:unit2/model/profile/eligibility.dart'; import 'package:unit2/model/profile/profileInfomation.dart'; import 'package:unit2/model/utils/eligibility.dart'; +import 'package:unit2/sevices/profile/eligibility_services.dart'; import 'package:unit2/sevices/profile/profile_service.dart'; +import 'package:unit2/test_data.dart'; import 'package:unit2/utils/location_utilities.dart'; import 'package:unit2/utils/profile_utilities.dart'; import '../../model/location/country.dart'; @@ -19,6 +21,12 @@ part 'profile_state.dart'; class ProfileBloc extends Bloc { ProfileBloc() : super(ProfileInitial()) { ProfileInformation? _profileInformation; + List? _countries; + List? _regions; + List? _eligibilities; + List? _provinces; + List? _cities; + ////========================================================================= on((event, emit) async { // try { emit(ProfileLoading()); @@ -30,58 +38,203 @@ class ProfileBloc extends Bloc { // emit(ProfileErrorState(mesage: e.toString())); // } }); - +////===================================================================== on((event, emit) { emit(ProfileLoading()); emit(EligibilityLoaded(eligibilities: event.eligibilities)); }); - - on((event, emit) async { +////==================================================================== + on((event, emit) async { + Region? currentRegion; + Province? currentProvince; + CityMunicipality? currentCity; // try{ - emit(ProfileLoading()); - List regions = await LocationUtils.instance.getRegions(); - List eligibilities = - await ProfileUtilities.instance.getEligibilities(); + emit(ProfileLoading()); + if (_countries == null) { + List countries = await LocationUtils.instance.getCountries(); + _countries = countries; + } + if (_regions == null) { + List regions = await LocationUtils.instance.getRegions(); + _regions = regions; + } + if (_eligibilities == null) { + List eligibilities = + await ProfileUtilities.instance.getEligibilities(); + _eligibilities = eligibilities; + } + +// get current country + Country? currentCountry = _countries!.firstWhere((Country country) => + country.code == event.eligibityCert.examAddress?.country!.code); +// get current eligibility + Eligibility currentEligibility = _eligibilities!.firstWhere( + (Eligibility eligibility) => + event.eligibityCert.eligibility!.id == eligibility.id); + bool? isOverseas = event.eligibityCert.overseas; - List provinces = - event.eligibityCert.examAddress?.cityMunicipality?.province?.region != null - ? await LocationUtils.instance.getProvinces( - regionCode: event.eligibityCert.examAddress!.cityMunicipality! - .province!.region!.code! - .toString()) - : []; - List citymuns = - event.eligibityCert.examAddress?.cityMunicipality != null - ? await LocationUtils.instance.getCities( + + if (event.selectedRegion != null) { + if (event.selectedProvince == null) { + currentRegion = event.selectedRegion; + List provinces = await LocationUtils.instance + .getProvinces(regionCode: event.selectedRegion!.code.toString()); + _provinces = provinces; + currentProvince = null; + currentCity = null; + } + if (event.selectedProvince != null) { + currentRegion = event.selectedRegion; + List provinces = await LocationUtils.instance + .getProvinces(regionCode: event.selectedRegion!.code.toString()); + _provinces = provinces; + currentProvince = _provinces!.firstWhere( + (Province p) => event.selectedProvince!.code == p.code); + List citymuns = await LocationUtils.instance + .getCities(code: currentProvince.code.toString()); + _cities = citymuns; + currentCity = null; + } + } else { + // if exam address region is not equal to null get the region, provinces and citymunicipalities + if (event.eligibityCert.examAddress?.cityMunicipality?.province + ?.region != + null) { + currentRegion = _regions!.firstWhere((Region r) => + event.eligibityCert.examAddress!.cityMunicipality!.province! + .region!.code == + r.code); + + List provinces = await LocationUtils.instance.getProvinces( + regionCode: event.eligibityCert.examAddress!.cityMunicipality! + .province!.region!.code! + .toString()); + _provinces = provinces; + + currentProvince = _provinces!.firstWhere((Province p) => + event.eligibityCert.examAddress!.cityMunicipality!.province! + .code == + p.code); + List citymuns = await LocationUtils.instance + .getCities( code: event.eligibityCert.examAddress!.cityMunicipality! - .province!.code!) - : []; - emit(EditNotOverseasEligibilityState( - currentEligibility: null, - currentRegion: null, + .province!.code!); + _cities = citymuns; + + currentCity = _cities!.firstWhere((CityMunicipality c) => + event.eligibityCert.examAddress!.cityMunicipality!.code == + c.code); + } + } + emit(EditEligibilityState( isOverseas: isOverseas!, - cityMuns: citymuns, - provinces: provinces, + currentEligibility: currentEligibility, + currentCountry: currentCountry, + currentRegion: currentRegion, + currentCity: currentCity, + cityMuns: _cities, + provinces: _provinces, eligibityCert: event.eligibityCert, - regions: regions, - eligibilities: eligibilities)); + countries: _countries!, + regions: _regions!, + currentProvince: currentProvince, + eligibilities: _eligibilities!)); // }catch(e){ // emit(ProfileErrorState(mesage: e.toString())); // } - });on((event,emit)async{ + + ////==================================================================== + }); + on((event, emit) async { + Region? currentRegion; + Province? currentProvince; + CityMunicipality? currentCity; + List? cities; + List? provinces; + Eligibility? currentEligibility; + final bool overseas = event.overseas; emit(ProfileLoading()); - List countries = await LocationUtils.instance.getCountries(); - List eligibilities = - await ProfileUtilities.instance.getEligibilities(); - bool? isOverseas = event.eligibityCert.overseas; - emit(EditOverseasEligibilityState( - countries: countries, - currentCOuntry: null, - currentEligibility: null, - isOverseas: isOverseas!, - eligibityCert: event.eligibityCert, - eligibilities: eligibilities)); + if (_regions == null) { + List regions = await LocationUtils.instance.getRegions(); + _regions = regions; + } + if (_eligibilities == null) { + List eligibilities = + await ProfileUtilities.instance.getEligibilities(); + _eligibilities = eligibilities; + } + if (_countries == null) { + List countries = await LocationUtils.instance.getCountries(); + _countries = countries; + } + + if(event.selectedEligibility != null){ + currentEligibility = _eligibilities!.firstWhere((Eligibility element) => element.id == event.selectedEligibility!.id); + }else{ + currentEligibility = null; + } + if (event.selectedRegion != null) { + if (event.selectedProvince == null) { + currentRegion = event.selectedRegion; + provinces = await LocationUtils.instance + .getProvinces(regionCode: event.selectedRegion!.code.toString()); + _provinces = provinces; + currentProvince = null; + currentCity = null; + } + if (event.selectedProvince != null) { + currentRegion = event.selectedRegion; + provinces = await LocationUtils.instance + .getProvinces(regionCode: event.selectedRegion!.code.toString()); + _provinces = provinces; + currentProvince = _provinces!.firstWhere( + (Province p) => event.selectedProvince!.code == p.code); + cities = await LocationUtils.instance + .getCities(code: currentProvince.code.toString()); + _cities = cities; + currentCity = null; + } + }else{ + print("executed"); + currentRegion = null; + currentProvince = null; + currentCity = null; + _provinces = null; + _cities = null; + } + + emit(AddEligibilityState( + cities: cities, + provinces: provinces, + currentEligibility: currentEligibility, + currentRegion: overseas? null: currentRegion, + currentProvince: currentProvince, + overseas: overseas, + eligibilities: _eligibilities!, + regions: _regions!, + countries: _countries!)); + }); + ////==================================================================== + on((event, emit) async { + emit(ProfileLoading()); + try { + final bool success = await EligibilityService.instance.delete( + eligibilityId: event.eligibilityId, + profileId: int.parse(event.profileId), + token: event.token); + if (success) { + event.eligibilities.removeWhere( + ((EligibityCert element) => element.id == event.eligibilityId)); + List eligibilities = event.eligibilities; + emit(DeletedState(success: success, eligibilities: eligibilities)); + } else { + emit(DeletedState( + success: success, eligibilities: event.eligibilities)); + } + } catch (e) { + emit(ProfileErrorState(mesage: e.toString())); + } }); } } diff --git a/lib/bloc/profile/profile_event.dart b/lib/bloc/profile/profile_event.dart index df9d027..ebb0beb 100644 --- a/lib/bloc/profile/profile_event.dart +++ b/lib/bloc/profile/profile_event.dart @@ -28,18 +28,35 @@ class LoadEligibility extends ProfileEvent{ List get props => []; } -class EditEligibilityOverseas extends ProfileEvent{ +class EditEligibility extends ProfileEvent{ final EligibityCert eligibityCert; - const EditEligibilityOverseas({required this.eligibityCert}); + final Region? selectedRegion; + final Province? selectedProvince; + const EditEligibility({required this.eligibityCert,this.selectedRegion, required this.selectedProvince}); @override List get props => []; } -class EditEligibilityNotOverseas extends ProfileEvent{ - final EligibityCert eligibityCert; - const EditEligibilityNotOverseas({required this.eligibityCert}); - @override - List get props => []; +class DeleteEligibility extends ProfileEvent{ + + final List eligibilities; + final String profileId; + final int eligibilityId; + final String token; +const DeleteEligibility({ required this.eligibilities, required this.eligibilityId, required this.profileId, required this.token}); + @override + List get props => [eligibilities,profileId,eligibilityId,token]; +} + +class AddEligibility extends ProfileEvent{ + + final bool overseas; + final Eligibility? selectedEligibility; + final Region? selectedRegion; + final Province? selectedProvince; + const AddEligibility({required this.selectedEligibility, required this.overseas, required this.selectedProvince,this.selectedRegion}); + @override + List get props => [overseas]; } diff --git a/lib/bloc/profile/profile_state.dart b/lib/bloc/profile/profile_state.dart index 4b38a3e..f8ef628 100644 --- a/lib/bloc/profile/profile_state.dart +++ b/lib/bloc/profile/profile_state.dart @@ -32,44 +32,63 @@ class EligibilityLoaded extends ProfileState { List get props => [eligibilities]; } -class EditNotOverseasEligibilityState extends ProfileState { +class EditEligibilityState extends ProfileState { final EligibityCert eligibityCert; final List eligibilities; - + final List countries; final List regions; - List provinces; - List cityMuns; + List? provinces; + List? cityMuns; Eligibility? currentEligibility; + Country? currentCountry; Region? currentRegion; Province? currentProvince; - bool? isOverseas; - EditNotOverseasEligibilityState( + CityMunicipality? currentCity; + bool isOverseas; + EditEligibilityState( {required this.currentEligibility, + required this.currentCountry, required this.currentRegion, required this.isOverseas, required this.cityMuns, required this.provinces, required this.eligibityCert, required this.eligibilities, - required this.regions}); - - -} - -class EditOverseasEligibilityState extends ProfileState { - final List eligibilities; - final EligibityCert eligibityCert; - final Eligibility? currentEligibility; - final List countries; - final Country? currentCOuntry; - bool? isOverseas; - - EditOverseasEligibilityState( - {required this.currentEligibility, - required this.eligibilities, - required this.isOverseas, - required this.eligibityCert, required this.countries, - required this.currentCOuntry}); - + required this.regions, + required this.currentProvince, + required this.currentCity}); +} + +class DeletedState extends ProfileState { + final List eligibilities; + final bool success; + const DeletedState({required this.eligibilities, required this.success}); + @override + List get props => [success, eligibilities]; +} + +class AddEligibilityState extends ProfileState { + bool overseas; + Eligibility? currentEligibility; + Region? currentRegion; + Province? currentProvince; + final List eligibilities; + final List countries; + final List regions; + final List? provinces; + final List? cities; + AddEligibilityState( + {required this.overseas, + required this.eligibilities, + required this.countries, + required this.regions, + required this.cities, + required this.provinces, + required this.currentEligibility, + required this.currentProvince, + required this.currentRegion, + }); + @override + List get props => [overseas]; } diff --git a/lib/screens/profile/components/eligibility/add_modal.dart b/lib/screens/profile/components/eligibility/add_modal.dart new file mode 100644 index 0000000..dc80a89 --- /dev/null +++ b/lib/screens/profile/components/eligibility/add_modal.dart @@ -0,0 +1,311 @@ +import 'package:date_time_picker/date_time_picker.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:flutter_form_builder/flutter_form_builder.dart'; +import 'package:flutter_progress_hud/flutter_progress_hud.dart'; +import 'package:unit2/bloc/profile/profile_bloc.dart'; +import 'package:unit2/bloc/user/user_bloc.dart'; + +import '../../../../model/location/city.dart'; +import '../../../../model/location/country.dart'; +import '../../../../model/location/provinces.dart'; +import '../../../../model/location/region.dart'; +import '../../../../model/utils/eligibility.dart'; +import '../../../../theme-data.dart/btn-style.dart'; +import '../../../../theme-data.dart/colors.dart'; +import '../../../../theme-data.dart/form-style.dart'; +import '../../../../utils/global.dart'; +import '../../../../utils/text_container.dart'; + +class AddEligibilityScreen extends StatefulWidget { + const AddEligibilityScreen({super.key}); + + @override + State createState() => _AddEligibilityScreenState(); +} + +class _AddEligibilityScreenState extends State { + @override + Widget build(BuildContext context) { + bool? overseas; + final formKey = GlobalKey(); + final regionKey = GlobalKey(); + Region? selectedRegion; + Province? selectedProvince; + Country? selectedCountry; + CityMunicipality selectedCity; + Eligibility? selectedEligibility; + return BlocBuilder( + builder: (context, state) { + if (state is UserLoggedIn) { + return BlocBuilder( + builder: (context, state) { + if (state is AddEligibilityState) { + overseas = state.overseas; + selectedEligibility = state.currentEligibility; + 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( + initialValue: selectedEligibility, + items: state.eligibilities + .map>( + (Eligibility eligibility) { + return DropdownMenuItem( + value: eligibility, + child: Text(eligibility.title)); + }).toList(), + name: "eligibility", + decoration: normalTextFieldStyle( + "Eligibility*", "Eligibility"), + ), + const SizedBox( + height: 20, + ), + SizedBox( + width: screenWidth, + child: Row( + children: [ + //LICENSE NUMBER + Flexible( + flex: 1, + child: FormBuilderTextField( + name: 'license number', + initialValue: "", + decoration: normalTextFieldStyle( + "license number", "license number"), + ), + ), + const SizedBox( + width: 12, + ), + //RATING + Flexible( + flex: 1, + child: FormBuilderTextField( + name: 'rating', + initialValue: "", + decoration: normalTextFieldStyle( + 'rating', 'rating'), + ), + ), + ], + ), + ), + const SizedBox( + height: 20, + ), + SizedBox( + width: screenWidth, + child: Row( + children: [ + //EXAM DATE + Flexible( + flex: 1, + child: DateTimePicker( + firstDate: DateTime(2000), + lastDate: DateTime(2100), + decoration: normalTextFieldStyle( + "Exam date", "Exam date"), + initialValue: "", + )), + const SizedBox( + width: 12, + ), + //VALIDITY DATE + Flexible( + flex: 1, + child: DateTimePicker( + firstDate: DateTime(2000), + lastDate: DateTime(2100), + decoration: normalTextFieldStyle( + "Validity date", "Validity date"), + initialValue: "", + ), + ), + ], + ), + ), + const SizedBox( + height: 20, + ), + Text( + "Placement of Examination/Confinement", + style: Theme.of(context) + .textTheme + .displaySmall! + .copyWith(fontSize: blockSizeVertical * 2), + ), + const SizedBox( + height: 12, + ), + FormBuilderSwitch( + initialValue: overseas, + activeColor: second, + onChanged: (value) { + overseas = value; + + regionKey.currentState?.fields['region']?.reset(); + + context.read().add(AddEligibility( + selectedEligibility: selectedEligibility, + overseas: overseas!, + selectedProvince: null, + selectedRegion: null)); + }, + decoration: normalTextFieldStyle("", ''), + name: 'overseas', + title: const Text("Overseas Address?"), + ), + const SizedBox( + height: 12, + ), + SizedBox( + child: overseas == true + ? FormBuilderDropdown( + initialValue: null, + items: state.countries + .map>( + (Country country) { + return DropdownMenuItem( + value: country, + child: FittedBox( + child: Text(country.name!))); + }).toList(), + name: 'country', + decoration: normalTextFieldStyle( + "Country*", "Country"), + onChanged: (Country? value) { + selectedCountry = value; + }, + ) + : Column( + children: [ + //REGION DROPDOWN + FormBuilderDropdown( + onChanged: (Region? region) { + selectedRegion = region; + context.read().add( + AddEligibility( + selectedEligibility: selectedEligibility, + overseas: overseas!, + selectedProvince: + null, + selectedRegion: + selectedRegion)); + }, + initialValue: state.currentRegion, + decoration: normalTextFieldStyle( + "Region*", "Region"), + name: 'region', + items: state.regions + .map>( + (Region region) { + return DropdownMenuItem( + value: region, + child: + Text(region.description!)); + }).toList(), + ), + const SizedBox( + height: 12, + ), + //PROVINCE DROPDOWN + FormBuilderDropdown( + initialValue: state.currentProvince, + name: 'province', + onChanged: (Province? province) { + selectedProvince = province; + context.read().add( + AddEligibility( + selectedEligibility: selectedEligibility, + overseas: overseas!, + selectedProvince: + selectedProvince, + selectedRegion: + state.currentRegion)); + }, + items: state.provinces == null + ? [] + : state.provinces!.map< + DropdownMenuItem< + Province>>( + (Province province) { + return DropdownMenuItem( + value: province, + child: Text(province + .description!)); + }).toList(), + + decoration: normalTextFieldStyle( + "Province*", "Province")), + const SizedBox( + height: 12, + ), + FormBuilderDropdown( + onChanged: + (CityMunicipality? city) { + selectedCity = city!; + }, + decoration: normalTextFieldStyle( + "Municipality*", + "Municipality"), + name: 'municipality', + items: state.cities == null + ? [] + : state.cities!.map< + DropdownMenuItem< + CityMunicipality>>( + (CityMunicipality c) { + return DropdownMenuItem( + value: c, + child: Text(c + .description!)); + }).toList(), + initialValue: null), + const SizedBox( + height: 20, + ), + ], + )), + 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, + ), + ], + ), + ), + ), + ), + ); + } + return Container(); + }); + } + return Container(); + }, + ); + } +} diff --git a/lib/screens/profile/components/eligibility/edit_modal.dart b/lib/screens/profile/components/eligibility/edit_modal.dart index bc76af6..ad6eb7e 100644 --- a/lib/screens/profile/components/eligibility/edit_modal.dart +++ b/lib/screens/profile/components/eligibility/edit_modal.dart @@ -2,6 +2,7 @@ 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:unit2/bloc/profile/profile_bloc.dart'; import 'package:unit2/bloc/user/user_bloc.dart'; @@ -9,6 +10,7 @@ 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'; import '../../../../model/location/country.dart'; import '../../../../model/location/region.dart'; import '../../../../model/location/provinces.dart'; @@ -28,10 +30,19 @@ class EditEligibilityScreen extends StatefulWidget { class _EditEligibilityScreenState extends State { final formKey = GlobalKey(); - final countryKey = GlobalKey(); bool? overseas; DateFormat dteFormat2 = DateFormat.yMMMMd('en_US'); + Region? selectedRegion; + Province? selectedProvince; + CityMunicipality? selectedMunicipality; + Region? regions; + Province? province; + CityMunicipality? city; Country? selectedCountry; + Eligibility? selectedEligibility; + List? provinces; + // final examDateController = TextEditingController(); + // final validityDateController = TextEditingController(); @override Widget build(BuildContext context) { //USERBLOC @@ -43,418 +54,301 @@ class _EditEligibilityScreenState extends State { return BlocBuilder( builder: (context, state) { //EDIT ELIGIBILITY STATE - if (state is EditNotOverseasEligibilityState) { + if (state is EditEligibilityState) { overseas = state.isOverseas; - 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 - FormBuilderDropdown( - initialValue: null, - items: state.eligibilities - .map>( - (Eligibility eligibility) { - return DropdownMenuItem( - 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, - ), - - 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"), - ), - ), - const SizedBox( - width: 12, - ), - //RATING - Flexible( - flex: 1, - child: FormBuilderTextField( - name: 'rating', - initialValue: 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( - 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( - flex: 1, - child: DateTimePicker( - firstDate: DateTime(2000), - lastDate: DateTime(2100), - decoration: normalTextFieldStyle( - "Validity date", "Validity date"), - initialValue: - widget.eligibityCert.validityDate == - null - ? '' - : dteFormat2.format(widget - .eligibityCert.validityDate!), - ), - ), - ], - ), - ), - 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 - FormBuilderSwitch( - initialValue: overseas, - activeColor: second, - onChanged: (value) { - EligibityCert newEligibility = - state.eligibityCert; - newEligibility.overseas = value!; - context.read().add( - EditEligibilityOverseas( - eligibityCert: newEligibility)); - }, - decoration: normalTextFieldStyle("", ''), - name: 'overseas', - title: const Text("Overseas Address?"), - ), - const SizedBox( - height: 20, - ), - Column( - children: [ - //REGION DROPDOWN - FormBuilderDropdown( - onChanged: (Region? region) {}, - // initialValue:state.eligibityCert.examAddress!.cityMunicipality!.province!.description!, - - decoration: - normalTextFieldStyle("Region*", "Region"), - - name: 'region', - items: state.regions - .map>( - (Region region) { - return DropdownMenuItem( - value: region, - child: Text(region.description!)); - }).toList(), - ), - const SizedBox( - height: 20, - ), - //PROVINCE DROPDOWN - FormBuilderDropdown( - initialValue: null, - name: 'province', - items: state.provinces.isEmpty - ? [] - : state.provinces - .map>( - (Province province) { - return DropdownMenuItem( - value: province, - child: Text( - province.description!)); - }).toList(), - decoration: normalTextFieldStyle( - "Province*", "Province")), - const SizedBox( - height: 20, - ), - FormBuilderDropdown( - decoration: normalTextFieldStyle( - "Municipality*", "Municipality"), - name: 'municipality', - items: state.cityMuns.isEmpty - ? [] - : state.cityMuns.map< - DropdownMenuItem< - CityMunicipality>>( - (CityMunicipality c) { - return DropdownMenuItem( - value: c, - child: Text(c.description!)); - }).toList(), - initialValue: null), - const SizedBox( - height: 20, - ), - ], - ), - - SizedBox( - width: screenWidth, - height: 60, - child: ElevatedButton( - style: mainBtnStyle( - primary, Colors.transparent, second), - onPressed: () {}, - child: const Text(submit)), - ), - const SizedBox( - height: 20, - ), - ]), - ), - ), - ); - } - //=========================================================================== - if (state is EditOverseasEligibilityState) { - overseas = state.isOverseas; - 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 - FormBuilderDropdown( - initialValue: null, - items: state.eligibilities - .map>( - (Eligibility eligibility) { - return DropdownMenuItem( - 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, - ), - - 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"), - ), - ), - const SizedBox( - width: 12, - ), - //RATING - Flexible( - flex: 1, - child: FormBuilderTextField( - name: 'rating', - initialValue: 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( - 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( - flex: 1, - child: DateTimePicker( - firstDate: DateTime(2000), - lastDate: DateTime(2100), - decoration: normalTextFieldStyle( - "Validity date", "Validity date"), - initialValue: - widget.eligibityCert.validityDate == - null - ? '' - : dteFormat2.format(widget - .eligibityCert.validityDate!), - ), - ), - ], - ), - ), - 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 - FormBuilderSwitch( - initialValue: overseas, - activeColor: second, - onChanged: (value) { - EligibityCert newEligibility = - state.eligibityCert; - newEligibility.overseas = value!; - // countryKey.currentState?.fields['country'] - // ?.reset(); - - - context.read().add( - EditEligibilityNotOverseas( - eligibityCert: newEligibility)); - }, - decoration: normalTextFieldStyle("", ''), - name: 'overseas', - title: const Text("Overseas Address?"), - ), - const SizedBox( - height: 20, - ), - - FormBuilderDropdown( - key: countryKey, - onChanged: (Country? country) { - - selectedCountry = country; + 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( + onChanged: (Eligibility? eligibility){ + selectedEligibility = eligibility; }, - // initialValue:state.eligibityCert.examAddress!.cityMunicipality!.province!.description!, - initialValue:selectedCountry, + initialValue: state.currentEligibility, + items: state.eligibilities + .map>( + (Eligibility eligibility) { + return DropdownMenuItem( + value: eligibility, + child: Text(eligibility.title)); + }).toList(), + name: "eligibility", decoration: - normalTextFieldStyle("Country*", "country"), - name: 'country', - items: state.countries.isNotEmpty - ? state.countries - .map>( - (Country country) { - return DropdownMenuItem( - value: country, - child: Text(country.name!)); - }).toList() - : []), + normalTextFieldStyle("Eligibility", "") + .copyWith( + hintStyle: const TextStyle( + color: Colors.black, + ), + labelStyle: const TextStyle( + color: Colors.black)), + ), + const SizedBox( + height: 20, + ), - 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, + child: Row( + children: [ + //LICENSE NUMBER + Flexible( + flex: 1, + child: FormBuilderTextField( + name: 'license_number', + initialValue: + widget.eligibityCert.licenseNumber, + decoration: normalTextFieldStyle( + "license number", "license number"), + ), + ), + const SizedBox( + width: 12, + ), + //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( + flex: 1, + child: DateTimePicker( + // controller: validityDateController, + firstDate: DateTime(2000), + lastDate: DateTime(2100), + decoration: normalTextFieldStyle( + "Validity date", "Validity date"), + initialValue: + widget.eligibityCert.validityDate == + null + ? '' + : dteFormat2.format(widget + .eligibityCert + .validityDate!), + ), + ), + ], + ), + ), + 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 + FormBuilderSwitch( + initialValue: overseas, + activeColor: second, + onChanged: (value) { + EligibityCert newEligibility = + state.eligibityCert; + newEligibility.overseas = value!; + // formKey.currentState!.reset(); + context.read().add( + EditEligibility( + selectedRegion: null, + selectedProvince: null, + eligibityCert: newEligibility)); + }, + decoration: normalTextFieldStyle("", ''), + name: 'overseas', + title: const Text("Overseas Address?"), + ), + const SizedBox( + height: 20, + ), + //COUNTRY DROPDOWN + SizedBox( + child: overseas == true + ? FormBuilderDropdown( + initialValue: state.currentCountry, + + items: state.countries + .map>( + (Country country) { + return DropdownMenuItem( + value: country, + child: FittedBox( + child: + Text(country.name!))); + }).toList(), + name: 'country', + decoration: normalTextFieldStyle( + "Country*", "Country"), + onChanged: (Country? value) { + selectedCountry = value; + }, + ) + : Column( + children: [ + //REGION DROPDOWN + FormBuilderDropdown( + onChanged: (Region? region) { + selectedRegion = region; + + context.read().add( + EditEligibility( + eligibityCert: + state.eligibityCert, + selectedProvince: null, + selectedRegion: + selectedRegion)); + }, + initialValue: state.currentRegion, + decoration: normalTextFieldStyle( + "Region*", "Region"), + name: 'region', + items: state.regions.map< + DropdownMenuItem>( + (Region region) { + return DropdownMenuItem( + value: region, + child: Text( + region.description!)); + }).toList(), + ), + const SizedBox( + height: 20, + ), + //PROVINCE DROPDOWN + FormBuilderDropdown( + initialValue:state.currentProvince, + name: 'province', + onChanged: + (Province? province) { + selectedProvince = province; + context + .read() + .add(EditEligibility( + eligibityCert: state + .eligibityCert, + selectedProvince: + selectedProvince, + selectedRegion: state + .currentRegion)); + }, + items: state.provinces == null + ? [] + : state.provinces!.map< + DropdownMenuItem< + Province>>( + (Province province) { + return DropdownMenuItem( + value: province, + child: Text(province + .description!)); + }).toList(), + decoration: + normalTextFieldStyle( + "Province*", + "Province")), + const SizedBox( + height: 20, + ), + FormBuilderDropdown< + CityMunicipality>( + onChanged: (CityMunicipality? city){ + selectedMunicipality = city; + }, + decoration: + normalTextFieldStyle( + "Municipality*", + "Municipality"), + name: 'municipality', + items: state.cityMuns == null + ? [] + : state.cityMuns!.map< + DropdownMenuItem< + CityMunicipality>>( + (CityMunicipality c) { + return DropdownMenuItem( + value: c, + child: Text(c + .description!)); + }).toList(), + initialValue: + state.currentCity), + const SizedBox( + height: 20, + ), + ], + )), + 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, + ), + ]), + ), ), ), ); } - return Container(); }, ); diff --git a/lib/screens/profile/components/eligibility/eligibility_screen.dart b/lib/screens/profile/components/eligibility/eligibility_screen.dart deleted file mode 100644 index 703629d..0000000 --- a/lib/screens/profile/components/eligibility/eligibility_screen.dart +++ /dev/null @@ -1,114 +0,0 @@ -// 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, -// }); - -// @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) -// ]), -// ), -// ] -// ), -// ), -// 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 257387d..8544444 100644 --- a/lib/screens/profile/components/eligibility_screen.dart +++ b/lib/screens/profile/components/eligibility_screen.dart @@ -1,20 +1,18 @@ 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:flutter_progress_hud/flutter_progress_hud.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/add_modal.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'; import 'package:unit2/utils/text_container.dart'; import 'package:unit2/widgets/add_leading.dart'; -import 'package:unit2/widgets/empty_data.dart'; import '../../../utils/alerts.dart'; @@ -23,33 +21,56 @@ class EligibiltyScreen extends StatelessWidget { @override Widget build(BuildContext context) { + String? token; + String? profileId; return Scaffold( appBar: AppBar( title: const Text(elibilityScreenTitle), centerTitle: true, backgroundColor: primary, - actions: [AddLeading(onPressed: () {})], + actions: [AddLeading(onPressed: () { + context.read().add(const AddEligibility(overseas: false,selectedProvince: null,selectedRegion: null,selectedEligibility: null)); + })], ), 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 ProfileLoading){ - final progress = ProgressHUD.of(context); - progress!.showWithText("Loading"); + if (state is EditEligibilityState) { + final progress = ProgressHUD.of(context); + progress!.dismiss(); } - if (state is EditNotOverseasEligibilityState) { + if (state is ProfileLoading) { + final progress = ProgressHUD.of(context); + progress!.showWithText("Loading"); + } + if (state is EligibilityLoaded) { final progress = ProgressHUD.of(context); progress!.dismiss(); - }if (state is EditOverseasEligibilityState) { - final progress = ProgressHUD.of(context); - progress!.dismiss(); - }if(state is EligibilityLoaded){ - final progress = ProgressHUD.of(context); + }if(state is AddEligibilityState){ + 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", () { + context.read().add(LoadEligibility( + eligibilities: state.eligibilities)); + }); + } + } // TODO: implement listener }, builder: (context, state) { @@ -62,7 +83,7 @@ class EligibiltyScreen extends StatelessWidget { itemCount: state.eligibilities.length, itemBuilder: (BuildContext context, int index) { String title = state - .eligibilities[index].eligibility!.title!; + .eligibilities[index].eligibility!.title; return Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, @@ -104,7 +125,7 @@ class EligibiltyScreen extends StatelessWidget { height: 3, ), Text( - "Rating : ${state.eligibilities[index].rating}.", + "Rating : ${state.eligibilities[index].rating ?? 'N/A'}.", style: Theme.of(context) .textTheme .titleSmall) @@ -115,10 +136,19 @@ class EligibiltyScreen extends StatelessWidget { elevation: 3, onSelected: (value) { if (value == 2) { - confirmAlert( - context, - () => null, - "Delete?", + 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) { @@ -140,17 +170,12 @@ class EligibiltyScreen extends StatelessWidget { overseas; progress! .showWithText("Loading..."); - if (eligibityCert.overseas!) { - context.read().add( - EditEligibilityOverseas( - eligibityCert: - eligibityCert)); - } else { - context.read().add( - EditEligibilityNotOverseas( - eligibityCert: - eligibityCert)); - } + context.read().add( + EditEligibility( + selectedProvince: null, + selectedRegion: null, + eligibityCert: + eligibityCert)); } }, menuItems: [ @@ -183,12 +208,22 @@ class EligibiltyScreen extends StatelessWidget { ); }); } - if (state is EditNotOverseasEligibilityState) { + if (state is EditEligibilityState) { return EditEligibilityScreen( eligibityCert: state.eligibityCert); - }if(state is EditOverseasEligibilityState){ - return EditEligibilityScreen( - eligibityCert: state.eligibityCert); + }if(state is AddEligibilityState){ + return const AddEligibilityScreen(); + } + if (state is DeletedState) { + return Center( + child: Container( + child: Text(state.success.toString())), + ); + } + if (state is ProfileErrorState) { + return Center( + child: Text(state.mesage), + ); } return Container(); }, diff --git a/lib/screens/unit2/login/login.dart b/lib/screens/unit2/login/login.dart index 045bcc6..317adbc 100644 --- a/lib/screens/unit2/login/login.dart +++ b/lib/screens/unit2/login/login.dart @@ -60,7 +60,7 @@ class _UniT2LoginState extends State { 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) { diff --git a/lib/sevices/profile/eligibility_services.dart b/lib/sevices/profile/eligibility_services.dart new file mode 100644 index 0000000..0f3cbda --- /dev/null +++ b/lib/sevices/profile/eligibility_services.dart @@ -0,0 +1,35 @@ +import 'dart:convert'; + +import 'package:unit2/utils/request.dart'; +import 'package:unit2/utils/urls.dart'; +import 'package:http/http.dart' as http; +class EligibilityService{ + static final EligibilityService _instance = EligibilityService(); + static EligibilityService get instance => _instance; + + Future delete({required int eligibilityId, required int profileId,required String token})async{ + bool? success; + String Authtoken = "Token $token"; + String path = "${Url.instance.deleteEligibility()}$profileId/"; + Map body = { "eligibility_id": eligibilityId}; + Map params ={"force_mode":"true"}; + Map headers = { + 'Content-Type': 'application/json; charset=UTF-8', + 'Authorization': "Token $token" + }; + // try{ + http.Response response = await Request.instance.deleteRequest(path: path, headers: headers, body: body, param: params); + if(response.statusCode == 200){ + Map data = jsonDecode(response.body); + success = data['success']; + }else{ + success = false; + } + + // }catch(e){ + // throw(e.toString()); + // } + return success!; + } + +} \ No newline at end of file diff --git a/lib/utils/alerts.dart b/lib/utils/alerts.dart index 2a39072..5257be1 100644 --- a/lib/utils/alerts.dart +++ b/lib/utils/alerts.dart @@ -36,7 +36,7 @@ confirmAlert(context, Function() yes,String title, String subtitle) { ).show(); } -errorAlert(context, title, description) { +errorAlert(context, title, description,Function() func) { AwesomeDialog( width: blockSizeHorizontal * 90, context: context, @@ -45,7 +45,20 @@ errorAlert(context, title, description) { headerAnimationLoop: false, title: title, desc: description, - btnOkOnPress: () {}, + btnOkOnPress: func, + btnOkColor: Colors.red, + ).show(); +} +successAlert(context, title, description,Function() func) { + AwesomeDialog( + width: blockSizeHorizontal * 90, + context: context, + dialogType: DialogType.success, + animType: AnimType.scale, + headerAnimationLoop: false, + title: title, + desc: description, + btnOkOnPress: func, btnOkColor: Colors.red, ).show(); } diff --git a/lib/utils/request.dart b/lib/utils/request.dart index 7d5e215..b99eabf 100644 --- a/lib/utils/request.dart +++ b/lib/utils/request.dart @@ -96,4 +96,47 @@ class Request { } return response; } + + Future deleteRequest( + {required String path, + required Map? headers, + required Map? body, + required Map? param}) async { + Response response; + // 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()); + // } + return response; + } } diff --git a/lib/utils/urls.dart b/lib/utils/urls.dart index f79b971..a954fda 100644 --- a/lib/utils/urls.dart +++ b/lib/utils/urls.dart @@ -18,6 +18,9 @@ class Url { String eligibilities(){ return "/api/jobnet_app/eligibilities/"; +} +String deleteEligibility(){ + return "/api/jobnet_app/profile/pds/eligibility/"; } // location utils path String getCounties(){