2023-02-15 03:40:12 +00:00
|
|
|
import 'package:date_time_picker/date_time_picker.dart';
|
|
|
|
import 'package:flutter/material.dart';
|
2023-02-15 08:48:34 +00:00
|
|
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
2023-02-15 03:40:12 +00:00
|
|
|
import 'package:flutter_form_builder/flutter_form_builder.dart';
|
2023-02-23 00:53:14 +00:00
|
|
|
import 'package:flutter_progress_hud/flutter_progress_hud.dart';
|
2023-02-15 03:40:12 +00:00
|
|
|
import 'package:intl/intl.dart';
|
2023-02-15 08:48:34 +00:00
|
|
|
import 'package:unit2/bloc/profile/profile_bloc.dart';
|
|
|
|
import 'package:unit2/bloc/user/user_bloc.dart';
|
2023-02-20 07:48:24 +00:00
|
|
|
import 'package:unit2/model/location/city.dart';
|
|
|
|
import 'package:unit2/model/login_data/employee_info/employee_info.dart';
|
2023-02-15 03:40:12 +00:00
|
|
|
import 'package:unit2/model/profile/eligibility.dart';
|
2023-02-20 07:48:24 +00:00
|
|
|
import 'package:unit2/model/utils/eligibility.dart';
|
2023-02-23 00:53:14 +00:00
|
|
|
import 'package:unit2/utils/location_utilities.dart';
|
2023-02-20 07:48:24 +00:00
|
|
|
import '../../../../model/location/country.dart';
|
|
|
|
import '../../../../model/location/region.dart';
|
|
|
|
import '../../../../model/location/provinces.dart';
|
2023-02-15 03:40:12 +00:00
|
|
|
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 EditEligibilityScreen extends StatefulWidget {
|
|
|
|
final EligibityCert eligibityCert;
|
2023-02-15 08:48:34 +00:00
|
|
|
const EditEligibilityScreen({super.key, required this.eligibityCert});
|
2023-02-15 03:40:12 +00:00
|
|
|
|
|
|
|
@override
|
|
|
|
State<EditEligibilityScreen> createState() => _EditEligibilityScreenState();
|
|
|
|
}
|
|
|
|
|
|
|
|
class _EditEligibilityScreenState extends State<EditEligibilityScreen> {
|
2023-02-15 08:48:34 +00:00
|
|
|
final formKey = GlobalKey<FormBuilderState>();
|
2023-02-20 07:48:24 +00:00
|
|
|
bool? overseas;
|
2023-02-15 08:48:34 +00:00
|
|
|
DateFormat dteFormat2 = DateFormat.yMMMMd('en_US');
|
2023-02-23 00:53:14 +00:00
|
|
|
Region? selectedRegion;
|
|
|
|
Province? selectedProvince;
|
|
|
|
CityMunicipality? selectedMunicipality;
|
|
|
|
Region? regions;
|
|
|
|
Province? province;
|
|
|
|
CityMunicipality? city;
|
2023-02-20 07:48:24 +00:00
|
|
|
Country? selectedCountry;
|
2023-02-23 00:53:14 +00:00
|
|
|
Eligibility? selectedEligibility;
|
|
|
|
List<Province>? provinces;
|
|
|
|
// final examDateController = TextEditingController();
|
|
|
|
// final validityDateController = TextEditingController();
|
2023-02-15 03:40:12 +00:00
|
|
|
@override
|
|
|
|
Widget build(BuildContext context) {
|
2023-02-16 07:10:54 +00:00
|
|
|
//USERBLOC
|
2023-02-15 08:48:34 +00:00
|
|
|
return BlocBuilder<UserBloc, UserState>(
|
|
|
|
builder: (context, state) {
|
2023-02-16 07:10:54 +00:00
|
|
|
//LOGGED IN USER STATE
|
2023-02-15 08:48:34 +00:00
|
|
|
if (state is UserLoggedIn) {
|
2023-02-16 07:10:54 +00:00
|
|
|
//PROFIILE BLOC
|
2023-02-15 08:48:34 +00:00
|
|
|
return BlocBuilder<ProfileBloc, ProfileState>(
|
|
|
|
builder: (context, state) {
|
2023-02-16 07:10:54 +00:00
|
|
|
//EDIT ELIGIBILITY STATE
|
2023-02-23 00:53:14 +00:00
|
|
|
if (state is EditEligibilityState) {
|
2023-02-20 07:48:24 +00:00
|
|
|
overseas = state.isOverseas;
|
2023-02-23 00:53:14 +00:00
|
|
|
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<Eligibility>(
|
|
|
|
onChanged: (Eligibility? eligibility){
|
|
|
|
selectedEligibility = eligibility;
|
|
|
|
},
|
|
|
|
initialValue: state.currentEligibility,
|
|
|
|
items: state.eligibilities
|
|
|
|
.map<DropdownMenuItem<Eligibility>>(
|
|
|
|
(Eligibility eligibility) {
|
|
|
|
return DropdownMenuItem<Eligibility>(
|
|
|
|
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,
|
|
|
|
),
|
2023-02-16 07:10:54 +00:00
|
|
|
|
2023-02-23 00:53:14 +00:00
|
|
|
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"),
|
|
|
|
),
|
2023-02-15 08:48:34 +00:00
|
|
|
),
|
2023-02-23 00:53:14 +00:00
|
|
|
const SizedBox(
|
|
|
|
width: 12,
|
2023-02-15 08:48:34 +00:00
|
|
|
),
|
2023-02-23 00:53:14 +00:00
|
|
|
//RATING
|
|
|
|
Flexible(
|
2023-02-15 08:48:34 +00:00
|
|
|
flex: 1,
|
2023-02-23 00:53:14 +00:00
|
|
|
child: FormBuilderTextField(
|
|
|
|
name: 'rating',
|
|
|
|
|
|
|
|
// ignore: prefer_null_aware_operators
|
2023-02-15 03:40:12 +00:00
|
|
|
initialValue: widget
|
2023-02-23 00:53:14 +00:00
|
|
|
.eligibityCert.rating== null?null:widget.eligibityCert.rating.toString(),
|
|
|
|
|
|
|
|
decoration: normalTextFieldStyle(
|
|
|
|
'rating', 'rating'),
|
2023-02-20 07:48:24 +00:00
|
|
|
),
|
|
|
|
),
|
2023-02-23 00:53:14 +00:00
|
|
|
],
|
|
|
|
),
|
2023-02-20 07:48:24 +00:00
|
|
|
),
|
2023-02-23 00:53:14 +00:00
|
|
|
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(
|
2023-02-20 07:48:24 +00:00
|
|
|
flex: 1,
|
|
|
|
child: DateTimePicker(
|
2023-02-23 00:53:14 +00:00
|
|
|
// controller: validityDateController,
|
2023-02-20 07:48:24 +00:00
|
|
|
firstDate: DateTime(2000),
|
|
|
|
lastDate: DateTime(2100),
|
2023-02-15 08:48:34 +00:00
|
|
|
decoration: normalTextFieldStyle(
|
2023-02-23 00:53:14 +00:00
|
|
|
"Validity date", "Validity date"),
|
|
|
|
initialValue:
|
|
|
|
widget.eligibityCert.validityDate ==
|
|
|
|
null
|
|
|
|
? ''
|
|
|
|
: dteFormat2.format(widget
|
|
|
|
.eligibityCert
|
|
|
|
.validityDate!),
|
|
|
|
),
|
2023-02-20 07:48:24 +00:00
|
|
|
),
|
2023-02-23 00:53:14 +00:00
|
|
|
],
|
|
|
|
),
|
2023-02-20 07:48:24 +00:00
|
|
|
),
|
2023-02-23 00:53:14 +00:00
|
|
|
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<ProfileBloc>().add(
|
|
|
|
EditEligibility(
|
|
|
|
selectedRegion: null,
|
|
|
|
selectedProvince: null,
|
|
|
|
eligibityCert: newEligibility));
|
2023-02-20 07:48:24 +00:00
|
|
|
},
|
2023-02-23 00:53:14 +00:00
|
|
|
decoration: normalTextFieldStyle("", ''),
|
|
|
|
name: 'overseas',
|
|
|
|
title: const Text("Overseas Address?"),
|
|
|
|
),
|
|
|
|
const SizedBox(
|
|
|
|
height: 20,
|
|
|
|
),
|
|
|
|
//COUNTRY DROPDOWN
|
|
|
|
SizedBox(
|
|
|
|
child: overseas == true
|
|
|
|
? FormBuilderDropdown<Country>(
|
|
|
|
initialValue: state.currentCountry,
|
|
|
|
|
|
|
|
items: state.countries
|
|
|
|
.map<DropdownMenuItem<Country>>(
|
|
|
|
(Country country) {
|
|
|
|
return DropdownMenuItem<Country>(
|
|
|
|
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<Region?>(
|
|
|
|
onChanged: (Region? region) {
|
|
|
|
selectedRegion = region;
|
|
|
|
|
|
|
|
context.read<ProfileBloc>().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 region) {
|
|
|
|
return DropdownMenuItem<Region>(
|
|
|
|
value: region,
|
|
|
|
child: Text(
|
|
|
|
region.description!));
|
|
|
|
}).toList(),
|
|
|
|
),
|
|
|
|
const SizedBox(
|
|
|
|
height: 20,
|
|
|
|
),
|
|
|
|
//PROVINCE DROPDOWN
|
|
|
|
FormBuilderDropdown<Province?>(
|
|
|
|
initialValue:state.currentProvince,
|
|
|
|
name: 'province',
|
|
|
|
onChanged:
|
|
|
|
(Province? province) {
|
|
|
|
selectedProvince = province;
|
|
|
|
context
|
|
|
|
.read<ProfileBloc>()
|
|
|
|
.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(),
|
|
|
|
),
|
2023-02-20 07:48:24 +00:00
|
|
|
|
2023-02-23 00:53:14 +00:00
|
|
|
SizedBox(
|
|
|
|
width: screenWidth,
|
|
|
|
height: 60,
|
|
|
|
child: ElevatedButton(
|
|
|
|
style: mainBtnStyle(
|
|
|
|
primary, Colors.transparent, second),
|
|
|
|
onPressed: () {},
|
|
|
|
child: const Text(submit)),
|
|
|
|
),
|
|
|
|
const SizedBox(
|
|
|
|
height: 20,
|
|
|
|
),
|
|
|
|
]),
|
|
|
|
),
|
2023-02-15 08:48:34 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
return Container();
|
|
|
|
},
|
|
|
|
);
|
|
|
|
}
|
|
|
|
return Container();
|
|
|
|
},
|
|
|
|
);
|
2023-02-15 03:40:12 +00:00
|
|
|
}
|
2023-02-15 08:48:34 +00:00
|
|
|
}
|