country_search 2.6.6 copy "country_search: ^2.6.6" to clipboard
country_search: ^2.6.6 copied to clipboard

Fast and lightweight country selector for Flutter with localization, fuzzy search, and ISO 3166 support — only 113KB.

country_search 🚀 #

The Fastest, Most Customizable Country Picker for Flutter

Pub License Flutter

🌐 Live Demo: View on GitHub Pages

Country Picker Demo

  • 🌍 252+ Countries - Complete ISO 3166-1 standard with flags, codes & phone numbers
  • Blazing Fast - Search in 110μs, optimized for weak devices
  • 🎨 Fully Customizable - Colors, sizes, styles, themes - you name it!
  • 🌐 19 Languages - Automatic localization with fallback
  • 🧩 Zero Config - Works out of the box, just 1 line of code
  • 📱 Responsive - Perfect on mobile, tablet & desktop

🚀 Quick Start #

import 'package:country_search/country_search.dart';

CountryPicker(
  selectedCountry: selectedCountry,
  onCountrySelected: (Country country) {
    setState(() {
      selectedCountry = country;
    });
  },
)

That's it! Your country picker is ready to use. 🎉

📊 Performance Metrics #

Metric Value
Package Size ~113KB (19 languages)
Search Speed ~110 microseconds
Countries 252 (ISO 3166-1 compliant)
Languages 19 supported
Memory Optimized for weak devices

🎨 Features #

🌍 Complete Country Coverage #

  • 252 countries with ISO 3166-1 compliance
  • Flag emojis for every country
  • Phone codes with international format
  • Country codes (US, DE, RU, etc.)
  • Fuzzy search - find countries even with typos
  • Multi-field search - by name, code, or phone
  • Instant results - 110μs per query
  • Real-time filtering - as you type

🎨 Advanced Customization #

CountryPicker(
  // Colors
  backgroundColor: Colors.white,
  textColor: Colors.black87,
  accentColor: Colors.blue,
  
  // Sizes & Styles
  textStyle: TextStyle(fontSize: 16, fontWeight: FontWeight.w600),
  itemHeight: 72.0,
  flagSize: 28.0,
  
  // Visibility
  showFlags: true,
  showCountryCodes: true,
  showPhoneCodes: true,
)

🌓 Theme Support #

  • Dark theme - Beautiful default dark design
  • Light theme - Clean light appearance
  • Custom themes - Any color combination
  • Responsive - Adapts to any screen size

📱 Screenshots #

Dark Theme Chinese Language

🛠️ Installation #

Add to your pubspec.yaml:

dependencies:
  country_search: ^2.6.6

🧩 Usage Examples #

Basic Implementation #

CountryPicker(
  selectedCountry: selectedCountry,
  onCountrySelected: (Country country) {
    setState(() {
      selectedCountry = country;
    });
  },
)

Custom Labels #

CountryPicker(
  selectedCountry: selectedCountry,
  onCountrySelected: (Country country) {
    setState(() {
      selectedCountry = country;
    });
  },
  labelText: "Select your country",
  hintText: "Search countries...",
)

Display Country Name #

// Get localized country name
Text(country.getDisplayName(context))

Custom Theme #

CountryPicker(
  selectedCountry: selectedCountry,
  onCountrySelected: (Country country) {
    setState(() {
      selectedCountry = country;
    });
  },
  // Purple theme
  backgroundColor: Colors.purple.shade50,
  accentColor: Colors.purple,
  textStyle: const TextStyle(
    fontSize: 16,
    fontWeight: FontWeight.w600,
    color: Colors.purple,
  ),
  itemHeight: 72.0,
  flagSize: 28.0,
)

Minimal Theme #

CountryPicker(
  selectedCountry: selectedCountry,
  onCountrySelected: (Country country) {
    setState(() {
      selectedCountry = country;
    });
  },
  // Minimal design
  backgroundColor: Colors.grey.shade50,
  textColor: Colors.grey.shade800,
  textStyle: const TextStyle(fontSize: 12),
  itemHeight: 44.0,
  flagSize: 16.0,
  showCountryCodes: false,
)

🌐 Multi-language Support #

The widget automatically detects your app's language. Add localization delegates:

MaterialApp(
  locale: const Locale('de'), // Your app's language
  localizationsDelegates: [
    CountryLocalizations.delegate, // Our country picker localization
    GlobalMaterialLocalizations.delegate,
    GlobalWidgetsLocalizations.delegate,
    GlobalCupertinoLocalizations.delegate,
  ],
  supportedLocales: [
    const Locale('en'),
    const Locale('de'),
    const Locale('ru'),
    // Add your languages
  ],
)

Supported Languages: 🇺🇸 English, 🇷🇺 Russian, 🇪🇸 Spanish, 🇫🇷 French, 🇩🇪 German, 🇮🇹 Italian, 🇯🇵 Japanese, 🇰🇷 Korean, 🇵🇹 Portuguese, 🇨🇳 Chinese, 🇸🇦 Arabic, 🇮🇳 Hindi, 🇮🇩 Indonesian, 🇵🇱 Polish, 🇹🇷 Turkish, 🇺🇦 Ukrainian, 🇻🇳 Vietnamese, 🇹🇭 Thai, 🇳🇱 Dutch

🔍 Fuzzy Search Examples #

Find countries even with typos:

  • "germny" → finds "Germany"
  • "japn" → finds "Japan"
  • "united sttes" → finds "United States"
  • "russi" → finds "Russia"

📚 API Reference #

CountryPicker Properties #

Property Type Default Description
selectedCountry Country? null Currently selected country
onCountrySelected Function(Country) Required Selection callback
labelText String? null Custom label text
hintText String? null Custom hint text
showPhoneCodes bool true Show phone codes
backgroundColor Color? Dark theme Modal background
headerColor Color? Dark theme Header background
textColor Color? Dark theme Text color
accentColor Color? Green Accent color
searchFieldColor Color? Dark theme Search field background
searchFieldBorderColor Color? Dark theme Search field border
cursorColor Color? White Text cursor color
hintTextColor Color? Dark theme Hint text color
hoverColor Color? Dark theme Hover color
borderRadius double? 8.0 Border radius
textStyle TextStyle? 14px Custom text style
itemHeight double? 56.0 Item height
itemPadding EdgeInsets? 12x8 Item padding (horizontal: 12, vertical: 8)
flagSize double? 20.0 Flag size
showFlags bool true Show flags
showCountryCodes bool true Show country codes

Country Object #

class Country {
  final String code;      // "US", "DE", "RU"
  final String flag;      // "🇺🇸", "🇩🇪", "🇷🇺"
  final String phoneCode; // "+1", "+49", "+7"
  
  String getDisplayName(BuildContext context); // Get localized name
}

🚀 Performance Tips #

Remove Unused Languages #

To reduce package size, remove language files you don't need:

rm lib/src/flutter_country_picker/localizations/country_localizations_es.dart

Then update the localization files accordingly.

Optimize for Weak Devices #

CountryPicker(
  // Use smaller sizes for better performance
  itemHeight: 44.0,
  flagSize: 16.0,
  textStyle: const TextStyle(fontSize: 12),
)

🎯 Use Cases #

  • User Registration - Country selection for new users
  • Phone Number Input - Country code selection
  • Language Settings - Country-based language detection
  • Shipping Address - Country selection for delivery
  • Analytics - Track user countries
  • Localization - Country-specific content

🤝 Contributing #

We welcome contributions! Please feel free to submit a Pull Request.

📄 License #

MIT License - see LICENSE for details.

👨‍💻 Author #

Stanislav Bozhko
Email: [email protected]
GitHub: @stanislavworldin

☕ Support #

If this package helps you, consider buying me a coffee! ☕

ko-fi


⭐ Star this repository if you find it useful!

1
likes
0
points
46
downloads

Publisher

verified publisherworldin.net

Weekly Downloads

Fast and lightweight country selector for Flutter with localization, fuzzy search, and ISO 3166 support — only 113KB.

Repository (GitHub)
View/report issues

Topics

#flags #country #picker #search #selector

Documentation

Documentation

License

unknown (license)

Dependencies

flutter, flutter_localizations

More

Packages that depend on country_search