Created
October 27, 2022 16:23
-
-
Save WasimMemon/3fa67ad821db2be90582bea3521c8afe to your computer and use it in GitHub Desktop.
State dropdown using form builder
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'dart:convert'; | |
const String state_list_map = '{"states" : [{"id" : 1, "name": "Andaman and Nicobar Island"}, ' | |
'{"id" : 2, "name": "Andhra Pradesh"},' | |
'{"id" : 3, "name": "Arunachal Pradesh"},' | |
'{"id" : 4, "name": "Assam"},' | |
'{"id" : 5, "name": "Bihar"},' | |
'{"id" : 6, "name": "Chandigarh"},' | |
'{"id" : 7, "name": "Chhattisgarh"},' | |
'{"id" : 8, "name": "Dadra and Nagar Haveli"},' | |
'{"id" : 9, "name": "Daman and Diu"},' | |
'{"id" : 10, "name": "Delhi"},' | |
'{"id" : 11, "name": "Goa"},' | |
'{"id" : 12, "name": "Gujarat"},' | |
'{"id" : 13, "name": "Haryana"},' | |
'{"id" : 14, "name": "Himachal Pradesh"},' | |
'{"id" : 15, "name": "Jammu and Kashmir"},' | |
'{"id" : 16, "name": "Jharkhand"},' | |
'{"id" : 17, "name": "Karnataka"},' | |
'{"id" : 18, "name": "Kerala"},' | |
'{"id" : 19, "name": "Ladakh"},' | |
'{"id" : 20, "name": "Lakshadweep"},' | |
'{"id" : 21, "name": "Madhya Pradesh"},' | |
'{"id" : 22, "name": "Maharashtra"},' | |
'{"id" : 23, "name": "Manipur"},' | |
'{"id" : 24, "name": "Meghalaya"},' | |
'{"id" : 25, "name": "Mizoram"},' | |
'{"id" : 26, "name": "Nagaland"},' | |
'{"id" : 27, "name": "Odisha"},' | |
'{"id" : 28, "name": "Puducherry"},' | |
'{"id" : 29, "name": "Punjab"},' | |
'{"id" : 30, "name": "Rajasthan"},' | |
'{"id" : 31, "name": "Sikkim"},' | |
'{"id" : 32, "name": "Tamil Nadu"},' | |
'{"id" : 33, "name": "Telangana"},' | |
'{"id" : 34, "name": "Tripura"},' | |
'{"id" : 35, "name": "Uttar Pradesh"},' | |
'{"id" : 36, "name": "Uttarakhand"},' | |
'{"id" : 37, "name": "West Bengal"}]}'; | |
class AddressState { | |
late int? stateId; | |
late String? name; | |
late bool? isSelected; | |
AddressState( | |
{this.name, this.stateId, bool? isSelected}) { | |
isSelected = isSelected; | |
} | |
AddressState copyWith( | |
{String? name, int? stateId, bool? isSelected}) { | |
AddressState state = AddressState( | |
name: name ?? this.name, | |
stateId: stateId ?? this.stateId, | |
isSelected: isSelected ?? this.isSelected); | |
state.isSelected = isSelected ?? this.isSelected; | |
return state; | |
} | |
factory AddressState.fromJson(dynamic json) { | |
return AddressState(name: json['name'] as String, stateId: json['id'] as int); | |
} | |
bool isEqual(AddressState other) { | |
return name == other.name; | |
} | |
@override | |
String toString() { | |
return 'AddressState{stateId: $stateId, name: $name}'; | |
} | |
static List<AddressState> getStateList() { | |
var jsonObjectList = jsonDecode(state_list_map)["states"] as List; | |
List<AddressState> stats = jsonObjectList.map((e) => AddressState.fromJson(e)).toList(); | |
//print(stats); | |
return stats; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class StateWidget extends StatelessWidget { | |
StateWidget(required this.previousSelectedState); | |
final String previousSelectedState; | |
late AddressState _businessState; | |
@override | |
Widget build(BuildContext context) { | |
return Container(child: _buildStateDropdown(context)); | |
} | |
Widget _buildStateDropdown(BuildContext context) { | |
List<AddressState> stateList = AddressState.getStateList(); | |
if (CommonFunctions.isNullOrEmpty(previousSelectedState)) { | |
_businessState = stateList.first; | |
} else { | |
var tempState = AddressState(name: previousSelectedState); | |
_businessState = stateList.firstWhere( | |
(element) => element.isEqual(tempState), | |
orElse: null); | |
} | |
return FormBuilderDropdown<AddressState>( | |
items: stateList.map((e) { | |
return DropdownMenuItem( | |
child: Text(e.name!), | |
value: e, | |
); | |
}).toList(), | |
name: "addressState", | |
initialValue: _businessState, | |
isExpanded: true, | |
//style: Theme.of(context).textTheme.bodyMedium, | |
onChanged: (newValue) { | |
_businessState = newValue!; | |
}, | |
decoration: InputDecoration( | |
filled: true, | |
hintText: S.current.labelState, | |
contentPadding: EdgeInsets.only(left: 10, right: 12), | |
), | |
); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment