Skip to content

Instantly share code, notes, and snippets.

@WasimMemon
Created October 27, 2022 16:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save WasimMemon/3fa67ad821db2be90582bea3521c8afe to your computer and use it in GitHub Desktop.
Save WasimMemon/3fa67ad821db2be90582bea3521c8afe to your computer and use it in GitHub Desktop.
State dropdown using form builder
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;
}
}
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