Created
September 9, 2023 09:31
-
-
Save fpatelm/4d56f2d324d9f512664f06b72b8d3cb1 to your computer and use it in GitHub Desktop.
Country Code Selector Screen
This file contains hidden or 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 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