Skip to content

Instantly share code, notes, and snippets.

@fpatelm
Created September 9, 2023 09:31
Show Gist options
  • Save fpatelm/4d56f2d324d9f512664f06b72b8d3cb1 to your computer and use it in GitHub Desktop.
Save fpatelm/4d56f2d324d9f512664f06b72b8d3cb1 to your computer and use it in GitHub Desktop.
Country Code Selector Screen
class SelectCountry extends StatefulWidget {
const SelectCountry({Key? key}) : super(key: key);
@override
_SelectCountryState createState() => _SelectCountryState();
}
class _SelectCountryState extends State<SelectCountry> {
List<dynamic>? dataRetrieved; // data decoded from the json file
List<dynamic>? data; // data to display on the screen
var _searchController = TextEditingController();
var searchValue = "";
@override
void initState() {
_getData();
}
Future _getData() async {
final String response =
await rootBundle.loadString('assets/CountryCodes.json');
dataRetrieved = await json.decode(response) as List<dynamic>;
setState(() {
data = dataRetrieved;
});
}
@override
Widget build(BuildContext context) {
return CupertinoPageScaffold(
child: CustomScrollView(
slivers: [
CupertinoSliverNavigationBar(
largeTitle: Text("Select Country"),
previousPageTitle: "Edit Number",
),
SliverToBoxAdapter(
child: CupertinoSearchTextField(
onChanged: (value) {
setState(() {
searchValue = value;
});
},
controller: _searchController,
),
),
SliverList(
delegate: SliverChildListDelegate((data != null)
? data!
.where((e) => e['name']
.toString()
.toLowerCase()
.contains(searchValue.toLowerCase()))
.map((e) => CupertinoListTile(
onTap: () {
print(e['name']);
Navigator.pop(context,
{"name": e['name'], "code": e['dial_code']});
},
title: Text(e['name']),
trailing: Text(e['dial_code']),
))
.toList()
: [Center(child: Text("Loading"))]),
)
],
),
);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment