DEV Community

Cover image for Get, Search, Filter Countries data using country_provider flutter plugin
Sonu Sharma 💙
Sonu Sharma 💙

Posted on

Get, Search, Filter Countries data using country_provider flutter plugin

Introduction

Hey Guys, Have you ever deal with managing countries data in your app like displaying countries name in dropdown menu, getting capital city, calling code, language, currency[name, code, symbol], filter information, etc. How you manage all these data?

If I talking of my self, I used to store these data either in a JSON file or created a list of map to display and manage countries info. Is it a correct approach?

There is a simple explanation, If you need to display only country name in a list or in the dropdown you can store countries name in a JSON file but when It comes to perform more operation like getting countries other information on the basis of one entity it is getting more complex and we have to write boilerplate code to filter data.

To keep code clean and avoid unnecessary boilerplate code I have develop a flutter plugin country_provider. This plugin provides countries info and several filters and search methods.

How country_provider plugin help you ?

The plugin provides several methods to fetch countries info, Apply filter, and perform search operations.

List of operations mentioned below:-

  • Fetch all countries info. ex. Name, capital city, currency(Name, code and symbol), Language(Name and Code), Native name, Borders, Timezone, Flag, etc.
  • Search by country name. It can be the native name or partial name.
  • Search country by country full name.
  • Search country by ISO 3166-1 2-letter or 3-letter country code.
  • Search country by list of ISO 3166-1 2-letter or 3-letter country codes.
  • Search country by ISO 4217 currency code.
  • Search country by ISO 639-1 language code.
  • Search country by capital city.
  • Search country by calling code.
  • Search country by continent: Africa, Americas, Asia, Europe, Oceania.

How plugin works

Country Provider is a flutter library wrapper around the API provided by REST Countries https://restcountries.eu Plugin gets countries information from rest API and provides search, filter mechanism.

How to use country_provider plugin in flutter app ?

1. Add library to your pubspec.yaml

dependencies:
  country_provider: ^0.0.1
Enter fullscreen mode Exit fullscreen mode

2. Import library in dart file

import 'package:country_provider/country_provider.dart';
Enter fullscreen mode Exit fullscreen mode

Note

Each method returns List of Country model.

Usage

  • Get all countries.
// Get all countries
List<Country> countries = await CountryProvider.getAllCountries();
Enter fullscreen mode Exit fullscreen mode
  • Search by country name. It can be the native name or partial name.
// Search by country name
List<Country> result = await CountryProvider.getCountriesByName("Ameri");
Enter fullscreen mode Exit fullscreen mode

If partial name, this method could return a list of countries. Else a List of one element.

  • Search by country full name.
// Search by country full name
Country result = await CountryProvider.getCountryByFullname("India")?.first;
Enter fullscreen mode Exit fullscreen mode
  • Search by ISO 3166-1 2-letter or 3-letter country code.
// Search by list of ISO 3166-1 2-letter or 3-letter country codes
Country result = await CountryProvider.getCountryByCode("Ind")?.first;
Enter fullscreen mode Exit fullscreen mode
  • Search by list of ISO 3166-1 2-letter or 3-letter country codes.
// Search by list of ISO 3166-1 2-letter or 3-letter country codes
List<Country> result = CountryProvider.getCountriesByListOfCodes(["Ind", "col", "ru"]);
Enter fullscreen mode Exit fullscreen mode
  • Search by ISO 4217 currency code.
// Search by ISO 4217 currency code
List<Country> result = await CountryProvider.getCountryByCurrencyCode("Inr")
Enter fullscreen mode Exit fullscreen mode
  • Search by ISO 639-1 language code.
// Search by ISO 639-1 language code
List<Country> result = await CountryProvider.getCountriesByLanguageCode(["Hin","en",]);
Enter fullscreen mode Exit fullscreen mode
  • Search by capital city.
// Search by capital city
var result = await CountryProvider.getCountryByCapitalCity("Delhi");
Enter fullscreen mode Exit fullscreen mode

You can use var instead of explicit types. I use explicit types to show you the return type of each method.

  • Search by calling code.
// Search by calling code
List<Country> result = await CountryProvider.getCountryByCallingCode(91);
Enter fullscreen mode Exit fullscreen mode
  • Search by continent: Africa, Americas, Asia, Europe, Oceania.
//  Search by continent: Africa, Americas, Asia, Europe, Oceania
List<Country> result = await CountryProvider.getcountryByRegionalBloc("Asia");
Enter fullscreen mode Exit fullscreen mode
  • Search by regional bloc: EU, EFTA, CARICOM, AU, USAN, EEU, AL, ASEAN , CAIS, CEFTA , NAFTA , SAARC.
//  Search by regional bloc
List<Country> result = await CountryProvider.getCountriesByContinent("ASEAN");
Enter fullscreen mode Exit fullscreen mode

EU (European Union), EFTA (European Free Trade Association), CARICOM (Caribbean Community), PA (Pacific Alliance), AU (African Union), USAN (Union of South American Nations), EEU (Eurasian Economic Union), AL (Arab League), ASEAN (Association of Southeast Asian Nations), CAIS (Central American Integration System), CEFTA (Central European Free Trade Agreement), NAFTA (North American Free Trade Agreement), SAARC (South Asian Association for Regional Cooperation).

Apply filters

To get filtered country data pass CountryFilter model as argument in search countries method.

// Get all countries name only 
var countries = await CountryProvider.getAllCountries(filter: CountryFilter(isName: true));
List<string> countriesInSpanish = countries.map((e) => e.name).toList();

// Get all countries name only in Spanish
var countries = await CountryProvider.getAllCountries(filter: CountryFilter(isName: true));
List<string> countriesInSpanish = countries.map((e) => e.translations.es).toList();

// Get Europe countries in French language
var europeCountries = await CountryProvider.getcountryByRegionalBloc("Europe",filter: CountryFilter(isName: true));
List<string> europeCountriesInFrench = europeCountries.map((e) => e.translations.fr).toList();

// Get all countries name with their capital city only
var countries = await CountryProvider.getAllCountries(filter: CountryFilter(isName: true,isCapital:true));

// Get all countries name with country code and their capital city only
var countries = await CountryProvider.getAllCountries(filter: CountryFilter(isName: true,isCapital:true,isAlpha2Code:true,isAlpha3Code: true));


// Fell free to aplly filters 🤓
Enter fullscreen mode Exit fullscreen mode

The default language for country name is English, but you can also get the name in other languages such as: de(German language), es(Spanish language), fr(French language), ja(Japanese language), it(Italian language), br(Breton language), pt(Portuguese language), nl(Dutch language), hr(Croatian language) and fa(Persian language).

Country class

Each method return List of Country. You will get the exact idea of what country info includes by looking into the country model below.

class Country
{     
    // Get Country name
    String name;

    // Gets  Top Level Domain
    List<String> topLevelDomain;

    // Gets Alpha2 Code
    String alpha2Code;

    // Gets Alpha3 Code
    String alpha3Code;

    // Gets Calling Code
    List<String> callingCodes;

    // Gets Capital City
    String capital;

    // Get AltSpelling
    List<String> altSpellings;

    // Get Region
    String region;

    // Get SubDomain
    String subregion;

    // Get Population
    int population;

    // Get Latlng(Latitude and Longitude)
    List<double> latlng;

    // Get Demonym
    String demonym;

    // Get Area
    double area;

    // Get Gini
    double gini;

    // Get Timezone
    List<String> timezones;

    // Get Borders
    List<String> borders;

    // Get Native Name
    String nativeName;

    // Get Numeric Code
    String numericCode;

    // Get Currencies
    List<Currency> currencies;

     // Get Languages
    List<Language> languages;

    // Gets Translations
    Translations translations;

    // Get Flag
    String flag;

    // Get Regional Blocs
    List<RegionalBloc> regionalBlocs;

    // Get  Cioc(International Olympic Committee Code)
    String cioc;
}
Enter fullscreen mode Exit fullscreen mode

Links

  • Get country_provider plugin from Here.
  • Click here to get Demo App

  • Plugin source code

    GitHub logo TheAlphamerc / country_provider

    A flutter plugin to provide information about countries.

    country_provider Flutter Plugin Twitter URL GitHub stars GitHub forks

    pub package GitHub last commit GitHub pull requests GitHub closed pull requests GitHub issues GitHub closed issues Open Source Love

    Country Provider is a flutter library wrapper around the API provided by REST Countries https://restcountries.eu (Get information about countries via a RESTful API)

    Download App GitHub All Releases

    Getting Started

    1. Add library to your pubspec.yaml

    dependencies
      country_provider: ^0.0.2
    
    Enter fullscreen mode Exit fullscreen mode

    2. Import library in dart file

    import 'package:country_provider/country_provider.dart';
    Enter fullscreen mode Exit fullscreen mode

    Note

    Each method return a List of Country.

    Usage

    • Get all countries.
    // Get all countries
    List<Country>? countries = await CountryProvider.getAllCountries();
    Enter fullscreen mode Exit fullscreen mode
    • Search by country name. It can be the native name or partial name.
    // Search by country name
    List<Country>? result = await CountryProvider.getCountriesByName("Ameri");
    Enter fullscreen mode Exit fullscreen mode

    If partial name, this method could return a list of countries. Else a List of one element.

    • Search by country full name.
    // Search by country full name
    Country result = await CountryProvider.getCountryByFullname("India")?
    …
    Enter fullscreen mode Exit fullscreen mode

Wrapping it up

While there is much more you can do with country_provider plugin, this tutorial should help you get set up and ready to go with some basic operations. Be sure to check out the latest plugin version to get updated and more features. Code from this tutorial can be found on project repository on github.

If you have any questions or if this tutorial inspires you to build anything interesting let me know in comments. If you have any ideas for new features or wants to contribute in project be sure to send a pull request.

Top comments (0)