24
loading...
This website collects cookies to deliver better user experience
void _getRegionAndDistrictValue(String region, String district) {
farmer.saveRegion(region);
farmer.saveDistrict(district);
}
RegionDistrictDropdownFormField
widget (child widget). class RegionDistrictDropdownFormField extends StatefulWidget with Validation {
final Function getDistrictAndRegionValue;
const RegionDistrictDropdownFormField({
required this.getDistrictAndRegionValue,
Key? key,
}) : super(key: key);
@override
_RegionDistrictDropdownFormFieldState createState() =>
_RegionDistrictDropdownFormFieldState();
}
class _RegionDistrictDropdownFormFieldState
extends State<RegionDistrictDropdownFormField> {
late FocusNode regionFocusNode;
late FocusNode districtFocusNode;
List<DropdownMenuItem<String>>? districtDropdownMenuItems;
String? districtValue;
String? regionValue;
@override
void initState() {
regionFocusNode = FocusNode();
districtFocusNode = FocusNode();
super.initState();
}
@override
void dispose() {
regionFocusNode.dispose();
districtFocusNode.dispose();
super.dispose();
}
void _handleDropdownOnChanged(FocusNode focusNode) {
focusNode.requestFocus();
}
List<DropdownMenuItem<String>>? _getDistrictItems(String region) {
late List<DropdownMenuItem<String>> items;
items = District.byRegion(region)
.map((e) => DropdownMenuItem(
child: Text(e),
value: e,
))
.toList();
return items;
}
@override
Widget build(BuildContext context) {
return Row(
children: [
Expanded(
flex: 5,
child: DropdownButtonFormField(
focusNode: regionFocusNode,
decoration: FormStyles.textFieldDecoration(labelText: 'Region'),
onChanged: (String? value) {
setState(() {
districtDropdownMenuItems = _getDistrictItems(value!);
regionValue = value;
districtValue = districtDropdownMenuItems!.first.value;
});
},
validator: widget.validateRequiredField,
items: Region.all
.map((e) => DropdownMenuItem(
child: Text(e),
value: e,
))
.toList(),
),
),
Spacer(),
Expanded(
flex: 5,
child: DropdownButtonFormField(
focusNode: districtFocusNode,
decoration: FormStyles.textFieldDecoration(labelText: 'District'),
onChanged: (String? value) {
_handleDropdownOnChanged(districtFocusNode);
districtValue = value;
widget.getDistrictAndRegionValue(regionValue, districtValue);
},
validator: widget.validateRequiredField,
value: districtValue,
items: districtDropdownMenuItems,
),
)
],
);
}
}
widget.getDistrictAndRegionValue(regionValue, districtValue)
method will be called. This will allow the parent widget to get the region and district values selected by the user.24