airport_data 1.0.2
airport_data: ^1.0.2 copied to clipboard
A comprehensive Dart library for retrieving airport information by IATA codes, ICAO codes, country, continent, timezone, and more. Includes geographic proximity search, distance calculation, bulk oper [...]
Airport Data Dart #
A comprehensive Dart library for retrieving airport information by IATA codes, ICAO codes, and various other criteria. This library provides easy access to a large dataset of airports worldwide with detailed information including coordinates, timezone, type, and external links.
Installation #
Add this to your pubspec.yaml:
dependencies:
airport_data: ^1.0.0
Then run:
dart pub get
Platform Support #
| Platform | Supported |
|---|---|
| Flutter Android | Yes |
| Flutter iOS | Yes |
| Flutter macOS | Yes |
| Flutter Windows | Yes |
| Flutter Linux | Yes |
| Flutter Web | Yes |
| Dart CLI / Server | Yes |
On dart:io platforms (mobile, desktop, CLI), gzip decompression uses the native codec for maximum performance. On web, a pure-Dart fallback from package:archive is used automatically — no configuration needed.
Features #
- Comprehensive airport database with worldwide coverage
- Works on all Flutter platforms including web
- Search by IATA codes, ICAO codes, country, continent, and more
- Geographic proximity search with customizable radius
- External links to Wikipedia, airport websites, and flight tracking services
- Distance calculation between airports
- Filter by airport type (large_airport, medium_airport, small_airport, heliport, seaplane_base)
- Timezone-based airport lookup
- Autocomplete suggestions for search interfaces
- Advanced multi-criteria filtering
- Statistical analysis by country and continent
- Bulk operations for multiple airports
- Code validation utilities
- Airport ranking by runway length and elevation
Airport Data Structure #
Each Airport object contains the following fields:
Airport(
iata: 'SIN', // 3-letter IATA code
icao: 'WSSS', // 4-letter ICAO code
time: 'Asia/Singapore', // Timezone identifier
utc: 8, // UTC offset
countryCode: 'SG', // 2-letter country code
continent: 'AS', // 2-letter continent code (AS, EU, NA, SA, AF, OC, AN)
airport: 'Singapore Changi Airport', // Airport name
latitude: 1.35019, // Latitude coordinate
longitude: 103.994003, // Longitude coordinate
elevationFt: '22', // Elevation in feet
type: 'large_airport', // Airport type
scheduledService: true, // Has scheduled commercial service
wikipedia: 'https://en.wikipedia.org/wiki/Singapore_Changi_Airport',
website: 'https://www.changiairport.com',
runwayLength: '13200', // Longest runway in feet
flightradar24Url: 'https://www.flightradar24.com/airport/SIN',
radarboxUrl: 'https://www.radarbox.com/airport/WSSS',
flightawareUrl: 'https://www.flightaware.com/live/airport/WSSS',
)
Basic Usage #
import 'package:airport_data/airport_data.dart';
// Get airport by IATA code
final airports = AirportData.getAirportByIata('SIN');
print(airports.first.airport); // "Singapore Changi Airport"
// Get airport by ICAO code
final airports = AirportData.getAirportByIcao('WSSS');
print(airports.first.countryCode); // "SG"
// Search airports by name
final airports = AirportData.searchByName('Singapore');
print(airports.length); // Multiple airports matching "Singapore"
// Find nearby airports (within 50km of coordinates)
final nearby = AirportData.findNearbyAirports(1.35019, 103.994003, 50);
print(nearby); // Airports near Singapore Changi
API Reference #
Core Search Functions #
AirportData.getAirportByIata(String iataCode)
Finds airports by their 3-letter IATA code.
final airports = AirportData.getAirportByIata('LHR');
// Returns list of airports with IATA code 'LHR'
AirportData.getAirportByIcao(String icaoCode)
Finds airports by their 4-character ICAO code.
final airports = AirportData.getAirportByIcao('EGLL');
// Returns list of airports with ICAO code 'EGLL'
AirportData.searchByName(String query)
Searches for airports by name (case-insensitive, minimum 2 characters).
final airports = AirportData.searchByName('Heathrow');
// Returns airports with 'Heathrow' in their name
Geographic Functions #
AirportData.findNearbyAirports(double lat, double lon, double radiusKm)
Finds airports within a specified radius of given coordinates.
final nearby = AirportData.findNearbyAirports(51.5074, -0.1278, 100);
// Returns airports within 100km of London coordinates
AirportData.calculateDistance(String code1, String code2)
Calculates the great-circle distance between two airports using IATA or ICAO codes.
final distance = AirportData.calculateDistance('LHR', 'JFK');
// Returns distance in kilometers (approximately 5541)
Filtering Functions #
AirportData.getAirportByCountryCode(String countryCode)
Finds all airports in a specific country.
final usAirports = AirportData.getAirportByCountryCode('US');
AirportData.getAirportByContinent(String continentCode)
Finds all airports on a specific continent.
final asianAirports = AirportData.getAirportByContinent('AS');
// Continent codes: AS, EU, NA, SA, AF, OC, AN
AirportData.getAirportsByType(String type)
Finds airports by their type.
final largeAirports = AirportData.getAirportsByType('large_airport');
// Available types: large_airport, medium_airport, small_airport, heliport, seaplane_base
// Convenience search for all airports
final allAirports = AirportData.getAirportsByType('airport');
// Returns large_airport, medium_airport, and small_airport
AirportData.getAirportsByTimezone(String timezone)
Finds all airports within a specific timezone.
final londonAirports = AirportData.getAirportsByTimezone('Europe/London');
Advanced Functions #
AirportData.findAirports(AirportFilter filters)
Finds airports matching multiple criteria.
// Find large airports in Great Britain with scheduled service
final airports = AirportData.findAirports(const AirportFilter(
countryCode: 'GB',
type: 'large_airport',
hasScheduledService: true,
));
// Find airports with minimum runway length
final longRunwayAirports = AirportData.findAirports(const AirportFilter(
minRunwayFt: 10000,
));
AirportData.getAutocompleteSuggestions(String query)
Provides autocomplete suggestions for search interfaces (returns max 10 results).
final suggestions = AirportData.getAutocompleteSuggestions('Lon');
// Returns up to 10 airports matching 'Lon' in name or IATA code
AirportData.getAirportLinks(String code)
Gets external links for an airport using IATA or ICAO code.
final links = AirportData.getAirportLinks('SIN');
// Returns AirportLinks with:
// website, wikipedia, flightradar24, radarbox, flightaware
Statistical & Analytical Functions #
AirportData.getAirportStatsByCountry(String countryCode)
Gets comprehensive statistics about airports in a specific country.
final stats = AirportData.getAirportStatsByCountry('US');
print(stats.total); // Total airport count
print(stats.byType['large_airport']); // Count of large airports
print(stats.averageRunwayLength); // Average runway length in feet
print(stats.timezones); // List of timezones
AirportData.getAirportStatsByContinent(String continentCode)
Gets comprehensive statistics about airports on a specific continent.
final stats = AirportData.getAirportStatsByContinent('AS');
print(stats.total);
print(stats.byCountry); // Breakdown by country code
AirportData.getLargestAirportsByContinent(String continentCode, [int limit, String sortBy])
Gets the largest airports on a continent by runway length or elevation.
// Get top 5 airports in Asia by runway length
final airports = AirportData.getLargestAirportsByContinent('AS', 5, 'runway');
// Get top 10 airports in South America by elevation
final highAltitude = AirportData.getLargestAirportsByContinent('SA', 10, 'elevation');
Bulk Operations #
AirportData.getMultipleAirports(List<String> codes)
Fetches multiple airports by their IATA or ICAO codes in one call.
final airports = AirportData.getMultipleAirports(['SIN', 'LHR', 'JFK', 'WSSS']);
// Returns list of Airport? (null for codes not found)
AirportData.calculateDistanceMatrix(List<String> codes)
Calculates distances between all pairs of airports in a list.
final matrix = AirportData.calculateDistanceMatrix(['SIN', 'LHR', 'JFK']);
print(matrix.distances['SIN']!['LHR']); // Distance in km
print(matrix.distances['LHR']!['JFK']); // Distance in km
AirportData.findNearestAirport(double lat, double lon, [AirportFilter? filters])
Finds the single nearest airport to given coordinates, optionally with filters.
// Find nearest airport to coordinates
final nearest = AirportData.findNearestAirport(1.35019, 103.994003);
print(nearest.airport); // Airport name
print(nearest.distance); // Distance in km
// Find nearest large airport with scheduled service
final nearestHub = AirportData.findNearestAirport(1.35019, 103.994003, const AirportFilter(
type: 'large_airport',
hasScheduledService: true,
));
Validation & Utilities #
AirportData.validateIataCode(String code)
Validates if an IATA code exists in the database.
AirportData.validateIataCode('SIN'); // true
AirportData.validateIataCode('XYZ'); // false
AirportData.validateIataCode('ABCD'); // false (wrong format)
AirportData.validateIcaoCode(String code)
Validates if an ICAO code exists in the database.
AirportData.validateIcaoCode('WSSS'); // true
AirportData.validateIcaoCode('XXXX'); // false
AirportData.getAirportCount([AirportFilter? filters])
Gets the count of airports matching the given filters.
final total = AirportData.getAirportCount();
final usLargeCount = AirportData.getAirportCount(const AirportFilter(
countryCode: 'US',
type: 'large_airport',
));
AirportData.isAirportOperational(String code)
Checks if an airport has scheduled commercial service.
AirportData.isAirportOperational('SIN'); // true
Error Handling #
Functions throw exceptions for invalid input or when no data is found:
try {
AirportData.getAirportByIata('XYZ');
} on StateError catch (e) {
print(e.message); // "No data found for IATA code: XYZ"
}
Data Source #
This library uses a comprehensive dataset of worldwide airports with regular updates to ensure accuracy and completeness.
License #
This project is licensed under the Creative Commons Attribution 4.0 International (CC BY 4.0) - see the LICENSE file for details.
Contributing #
Contributions, issues, and feature requests are welcome! Feel free to check the issues page.