library country_code_picker; import 'package:country_code_picker/country_codes.dart'; import 'package:flutter/material.dart'; import 'package:country_code_picker/selection_dialog.dart'; import 'package:country_code_picker/celement.dart'; class CountryCodePicker extends StatefulWidget { final Function(String) onChanged; final String initialSelection; final List favorite; CountryCodePicker({this.onChanged, this.initialSelection, this.favorite}); @override State createState() { List jsonList = codes; List elements = jsonList .map((s) => new CElement( name: s['name'], code: s['code'], dialCode: s['dial_code'], flag: s['flag'], )) .toList(); return new _CountryCodePickerState(elements); } } class _CountryCodePickerState extends State { CElement selectedItem; List elements = []; List favoriteElements = []; _CountryCodePickerState(this.elements); @override Widget build(BuildContext context) => new GestureDetector( child: new Text("${selectedItem.toString()}"), onTap: _showSelectionDialog, ); @override initState() { if (widget.initialSelection != null) { selectedItem = elements.firstWhere((e) { e.code.toUpperCase() == widget.initialSelection.toUpperCase() || e.dialCode == widget.initialSelection.toString(); }, orElse: () => elements[0]); } else { selectedItem = elements[0]; } favoriteElements = elements .where((e) => widget.favorite.firstWhere( (f) => e.code == f.toUpperCase() || e.dialCode == f.toString(), orElse: () => null) != null) .toList(); print(favoriteElements); super.initState(); } void _showSelectionDialog() { showDialog( context: context, child: new SelectionDialog(elements, favoriteElements), ).then((e) { if (e != null) { setState(() { selectedItem = e; }); if (widget.onChanged != null) { widget.onChanged(e.dialCode); } } }); } }