passo_mobile_app/lib/screens/profile/components/eligibility/edit_modal.dart

467 lines
23 KiB
Dart
Raw Normal View History

2023-02-15 03:40:12 +00:00
import 'package:date_time_picker/date_time_picker.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
2023-02-15 03:40:12 +00:00
import 'package:flutter_form_builder/flutter_form_builder.dart';
import 'package:intl/intl.dart';
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';
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;
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> {
final formKey = GlobalKey<FormBuilderState>();
2023-02-20 07:48:24 +00:00
final countryKey = GlobalKey<FormBuilderState>();
bool? overseas;
DateFormat dteFormat2 = DateFormat.yMMMMd('en_US');
2023-02-20 07:48:24 +00:00
Country? selectedCountry;
2023-02-15 03:40:12 +00:00
@override
Widget build(BuildContext context) {
2023-02-16 07:10:54 +00:00
//USERBLOC
return BlocBuilder<UserBloc, UserState>(
builder: (context, state) {
2023-02-16 07:10:54 +00:00
//LOGGED IN USER STATE
if (state is UserLoggedIn) {
2023-02-16 07:10:54 +00:00
//PROFIILE BLOC
return BlocBuilder<ProfileBloc, ProfileState>(
builder: (context, state) {
2023-02-16 07:10:54 +00:00
//EDIT ELIGIBILITY STATE
2023-02-20 07:48:24 +00:00
if (state is EditNotOverseasEligibilityState) {
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,
2023-02-15 03:40:12 +00:00
children: [
2023-02-16 07:10:54 +00:00
//ELIGIBILITIES DROPDOWN
2023-02-20 07:48:24 +00:00
FormBuilderDropdown<Eligibility>(
initialValue: null,
2023-02-16 07:10:54 +00:00
items: state.eligibilities
2023-02-20 07:48:24 +00:00
.map<DropdownMenuItem<Eligibility>>(
(Eligibility eligibility) {
return DropdownMenuItem<Eligibility>(
2023-02-16 07:10:54 +00:00
value: eligibility,
child: Text(eligibility.title));
}).toList(),
name: "eligibility",
decoration: normalTextFieldStyle(
2023-02-20 07:48:24 +00:00
"Eligibility", "")
2023-02-16 07:10:54 +00:00
.copyWith(
hintStyle: const TextStyle(
color: Colors.black,
),
labelStyle:
const TextStyle(color: Colors.black)),
2023-02-15 03:40:12 +00:00
),
const SizedBox(
height: 20,
2023-02-15 03:40:12 +00:00
),
2023-02-16 07:10:54 +00:00
SizedBox(
width: screenWidth,
child: Row(
children: [
2023-02-16 07:10:54 +00:00
//LICENSE NUMBER
Flexible(
flex: 1,
child: FormBuilderTextField(
name: 'license number',
initialValue:
widget.eligibityCert.licenseNumber,
decoration: normalTextFieldStyle(
"license number", "license number"),
),
),
const SizedBox(
width: 12,
),
2023-02-16 07:10:54 +00:00
//RATING
Flexible(
flex: 1,
child: FormBuilderTextField(
name: 'rating',
initialValue: widget.eligibityCert.rating
.toString(),
decoration: normalTextFieldStyle(
'rating', 'rating'),
),
),
],
2023-02-15 03:40:12 +00:00
),
),
const SizedBox(
height: 20,
2023-02-15 03:40:12 +00:00
),
SizedBox(
width: screenWidth,
child: Row(
children: [
2023-02-16 07:10:54 +00:00
//EXAM DATE
Flexible(
flex: 1,
child: DateTimePicker(
firstDate: DateTime(2000),
lastDate: DateTime(2100),
2023-02-15 03:40:12 +00:00
decoration: normalTextFieldStyle(
"Exam date", "Exam date"),
2023-02-15 03:40:12 +00:00
initialValue: widget
.eligibityCert.examDate ==
2023-02-15 03:40:12 +00:00
null
? ''
: dteFormat2.format(
widget.eligibityCert.examDate!),
)),
const SizedBox(
width: 12,
),
2023-02-16 07:10:54 +00:00
//VALIDITY DATE
Flexible(
flex: 1,
child: DateTimePicker(
firstDate: DateTime(2000),
lastDate: DateTime(2100),
2023-02-15 03:40:12 +00:00
decoration: normalTextFieldStyle(
"Validity date", "Validity date"),
initialValue:
widget.eligibityCert.validityDate ==
null
? ''
: dteFormat2.format(widget
.eligibityCert.validityDate!),
2023-02-15 03:40:12 +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,
),
2023-02-16 07:10:54 +00:00
//OVERSEAS ADDRESS SWITCH
FormBuilderSwitch(
initialValue: overseas,
activeColor: second,
onChanged: (value) {
2023-02-20 07:48:24 +00:00
EligibityCert newEligibility =
state.eligibityCert;
newEligibility.overseas = value!;
context.read<ProfileBloc>().add(
EditEligibilityOverseas(
eligibityCert: newEligibility));
},
decoration: normalTextFieldStyle("", ''),
name: 'overseas',
title: const Text("Overseas Address?"),
),
const SizedBox(
height: 20,
),
2023-02-20 07:48:24 +00:00
Column(
children: [
//REGION DROPDOWN
FormBuilderDropdown<Region?>(
onChanged: (Region? region) {},
// initialValue:state.eligibityCert.examAddress!.cityMunicipality!.province!.description!,
2023-02-16 07:10:54 +00:00
2023-02-20 07:48:24 +00:00
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: null,
name: 'province',
items: state.provinces.isEmpty
? []
: 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>(
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<Eligibility>(
initialValue: null,
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,
),
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(
2023-02-20 07:48:24 +00:00
width: screenWidth,
child: Row(
children: [
//EXAM DATE
Flexible(
flex: 1,
child: DateTimePicker(
firstDate: DateTime(2000),
lastDate: DateTime(2100),
decoration: normalTextFieldStyle(
2023-02-20 07:48:24 +00:00
"Exam date", "Exam date"),
initialValue: widget
.eligibityCert.examDate ==
null
? ''
: dteFormat2.format(
widget.eligibityCert.examDate!),
)),
2023-02-20 07:48:24 +00:00
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,
),
2023-02-20 07:48:24 +00:00
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<ProfileBloc>().add(
EditEligibilityNotOverseas(
eligibityCert: newEligibility));
},
decoration: normalTextFieldStyle("", ''),
name: 'overseas',
title: const Text("Overseas Address?"),
),
const SizedBox(
height: 20,
),
FormBuilderDropdown<Country>(
key: countryKey,
onChanged: (Country? country) {
selectedCountry = country;
},
// initialValue:state.eligibityCert.examAddress!.cityMunicipality!.province!.description!,
initialValue:selectedCountry,
decoration:
normalTextFieldStyle("Country*", "country"),
name: 'country',
items: state.countries.isNotEmpty
? state.countries
.map<DropdownMenuItem<Country>>(
(Country country) {
return DropdownMenuItem<Country>(
value: country,
child: Text(country.name!));
}).toList()
: []),
SizedBox(
width: screenWidth,
height: 60,
child: ElevatedButton(
style: mainBtnStyle(
primary, Colors.transparent, second),
onPressed: () {},
child: const Text(submit)),
),
const SizedBox(
height: 20,
),
]),
),
),
);
}
2023-02-20 07:48:24 +00:00
return Container();
},
);
}
return Container();
},
);
2023-02-15 03:40:12 +00:00
}
}