Flutter数据展示插件aerodatabox的使用
Flutter数据展示插件aerodatabox的使用
Summary
AeroDataBox API 是一个面向航空爱好者和开发者设计的最佳努力型航空和飞行数据API,适合小型旅行、酒店或航空应用、研究人员、小团队和个人开发者。此API包含用于航空相关应用程序的功能:航班、航班状态、航班延误、航班时刻表、机场、机场时刻表、机场延误指数、机场目的地统计数据、机场本地时间、飞机、飞机图像、按注册号识别飞机图像等。更多内容可访问 https://aerodatabox.com。
Availability
目前,AeroDataBox API 可通过以下平台获得:
Legend
- 🤖 - 端点可能使用AI/ML算法
<TIER 1..TIER 4>
- 端点的层级,TIER 4是最高的,TIER 1是最低的。层级用于确定端点的价格。根据市场不同,可能会有不同的定价模型,但可以预期更高的层级端点会比低层级端点更昂贵。<FREE TIER>
- 此端点在所有市场上都是免费的。
此Dart包由 OpenAPI Generator 项目自动生成:
- API版本: 1.6.0.0
- 构建包: org.openapitools.codegen.languages.DartClientCodegen
Requirements
- Dart 2.12 或更高版本
Installation & Usage
GitHub
如果此Dart包发布在GitHub上,将以下依赖项添加到您的 pubspec.yaml
文件中:
dependencies:
aerodatabox:
git: https://github.com/GIT_USER_ID/GIT_REPO_ID.git
Local
要在本地驱动器中使用该包,将以下依赖项添加到您的 pubspec.yaml
文件中:
dependencies:
aerodatabox:
path: /path/to/aerodatabox
Tests
TODO
Getting Started
请按照 安装说明 进行操作,然后运行以下代码:
import 'package:aerodatabox/api.dart';
// TODO 配置 API 密钥授权: X-RapidAPI-Host
// defaultApiClient.getAuthentication<ApiKeyAuth>('X-RapidAPI-Host').apiKey = 'YOUR_API_KEY';
// 未启用时设置前缀(例如 Bearer)以供 API 密钥使用,如果需要的话
// defaultApiClient.getAuthentication<ApiKeyAuth>('X-RapidAPI-Host').apiKeyPrefix = 'Bearer';
// TODO 配置 API 密钥授权: X-RapidAPI-Key
// defaultApiClient.getAuthentication<ApiKeyAuth>('X-RapidAPI-Key').apiKey = 'YOUR_API_KEY';
// 未启用时设置前缀(例如 Bearer)以供 API 密钥使用,如果需要的话
// defaultApiClient.getAuthentication<ApiKeyAuth>('X-RapidAPI-Key').apiKeyPrefix = 'Bearer';
final api_instance = AircraftAPIApi();
final searchBy = ; // AircraftSearchByEnum | 搜索飞机的条件
final searchParam = searchParam_example; // String | 搜索条件的值。如果 `searchBy` 是:
// * `id`:则此字段应为API数据库中的飞机ID;
// * `reg`:则此字段应为飞机的尾号(带或不带空格或连字符,任何大小写格式都可以接受,例如PH-BXO, DeMhJ),可能有多个匹配项 - 详见下文;
// * `icao24`:则此字段应为指定为十六进制格式的飞机ICAO 24位Mode-S地址(例如484161, 483EFD),可能有多个匹配项 - 详见下文。
// * 如果可能存在多个匹配项:
// 不能同时存在两架飞机使用相同的尾号或ICAO 24位Mode-S地址。然而,历史上飞机的尾号或地址可能会被不同的飞机多次使用。此端点旨在返回**单一**飞机数据。如果多个飞机满足搜索条件,则最佳匹配将按照以下方式选择:
// * 如果根据请求的标准找到了一架活跃的飞机,则返回该飞机。
// * 否则,返回最近使用请求的尾号/地址的飞机。
// * 如果无法确定使用时间,则返回数据库中最近期存储的飞机。
final withImage = true; // bool | 是否应包括飞机图像(默认值:false)。
final withRegistrations = true; // bool | 是否应包括飞机注册历史记录(默认值:false)。
try {
final result = api_instance.getAircraft(searchBy, searchParam, withImage, withRegistrations);
print(result);
} catch (e) {
print('Exception when calling AircraftAPIApi->getAircraft: $e\n');
}
Documentation for API Endpoints
所有URI相对于以下地址:
https://aerodatabox.p.rapidapi.com
Class | Method | HTTP 请求 | 描述 |
---|---|---|---|
AircraftAPIApi | getAircraft | GET /aircrafts/{searchBy}/{searchParam} | 单架飞机(按尾号、Mode-S或ID)[TIER 1] |
AircraftAPIApi | getAircraftImageByRegistration | GET /aircrafts/reg/{reg}/image/beta | 尾号飞机图像(BETA)[TIER 2] |
AircraftAPIApi | getAircraftRegistrations | GET /aircrafts/{searchBy}/{searchParam}/registrations | 单架飞机注册历史(按尾号、Mode-S或ID)[TIER 1] |
AircraftAPIApi | getAirlineFleet | GET /airlines/{airlineCode}/aircrafts | 航空公司机队/按航空公司代码列出的飞机列表(BETA)[TIER 3] |
AircraftAPIApi | getAllAircraft | GET /aircrafts/{searchBy}/{searchParam}/all | 所有飞机(按尾号、Mode-S或ID)[TIER 1] |
AircraftAPIApi | recognizeAircraft | POST /aircrafts/recognize/beta | 飞机图像识别(BETA)[TIER 3] |
AirportAPIApi | getAirport | GET /airports/{codeType}/{code} | 按机场代码查询机场[TIER 1] |
AirportAPIApi | getAirportRunways | GET /airports/{codeType}/{code}/runways | 查询机场跑道[TIER 1] |
AirportAPIApi | searchAirportByTerm | GET /airports/search/term | 按自由文本搜索机场[TIER 2] |
AirportAPIApi | searchAirportsByIpGeoLocation | GET /airports/search/ip | 按IP地址地理位置搜索机场[TIER 2] |
AirportAPIApi | searchAirportsByLocation | GET /airports/search/location | 按位置搜索机场[TIER 2] |
FlightAPIApi | getAirportFlights | GET /flights/airports/{codeType}/{code}/{fromLocal}/{toLocal} | FIDS(机场离港和到港)- 按本地时间范围[TIER 2] |
FlightAPIApi | getAirportFlightsRelative | GET /flights/airports/{codeType}/{code} | FIDS(机场离港和到港)- 按相对时间/当前时间[TIER 2] |
FlightAPIApi | getFlight | GET /flights/{searchBy}/{searchParam}/{dateLocal} | 航班状态[TIER 2] |
FlightAPIApi | getFlightDates | GET /flights/{searchBy}/{searchParam}/dates/{fromLocal}/{toLocal} | 航班出发日期[TIER 2] |
FlightAlertAPIApi | getWebhook | GET /subscriptions/webhook/{subscriptionId} | 获取webhook订阅[FREE TIER] |
FlightAlertAPIApi | getWebhookList | GET /subscriptions/webhook | 列出webhook订阅[FREE TIER] |
FlightAlertAPIApi | refreshWebhook | PATCH /subscriptions/webhook/{subscriptionId}/refresh | 刷新webhook订阅[TIER 4] |
FlightAlertAPIApi | subscribeWebhook | POST /subscriptions/webhook/{subjectType}/{subjectId} | 创建webhook订阅[TIER 4] |
FlightAlertAPIApi | unsubscribeWebhook | DELETE /subscriptions/webhook/{subscriptionId} | 删除webhook订阅[FREE TIER] |
HealthcheckAPIApi | getAirportFeedStatus | GET /health/services/airports/{icao}/feeds | 按ICAO代码获取数据源服务状态[FREE TIER] |
HealthcheckAPIApi | getFeedAirports | GET /health/services/feeds/{service}/airports | 支持数据源服务的机场[FREE TIER] |
HealthcheckAPIApi | getFeedServiceStatus | GET /health/services/feeds/{service} | 数据源服务的总体状态[FREE TIER] |
MiscellaneousAPIApi | getAirportDistanceTime | GET /airports/{codeType}/{codeFrom}/distance-time/{codeTo} | 🤖 机场之间的距离和飞行时间[TIER 2] |
MiscellaneousAPIApi | getAirportLocalTime | GET /airports/{codeType}/{code}/time/local | 当前机场的本地时间[TIER 1] |
MiscellaneousAPIApi | getAirportSolarTime | GET /airports/{codeType}/{code}/time/solar/{dateLocal} | 机场的太阳时间和白天[TIER 1] |
MiscellaneousAPIApi | getAirportWeather | GET /airports/{codeType}/{code}/weather/{fromLocal}/{toLocal} | 机场天气/预报[TIER 2] |
StatisticalAPIApi | getAirportDelay | GET /airports/{codeType}/{code}/delays/{dateLocal} | 机场延误(当前或历史时刻)[TIER 3] |
StatisticalAPIApi | getAirportDelays | GET /airports/{codeType}/{code}/delays/{dateFromLocal}/{dateToLocal} | 机场延误(历史时期)[TIER 3] |
StatisticalAPIApi | getAllAirportDelays | GET /airports/delays/{dateUtc} | 全球延误(当前或历史时刻)[TIER 3] |
StatisticalAPIApi | getFlightDelays | GET /flights/{number}/delays | 按航班号统计航班延误情况[TIER 3] |
StatisticalAPIApi | getRouteDailyStatistics | GET /airports/{codeType}/{code}/stats/routes/daily/{dateLocal} | 机场航线和每日航班目的地[TIER 3] |
Documentation For Models
- AircraftContract
- AircraftContractImage
- AircraftContractPagedCollectionContract
- AircraftRecognitionResultContract
- AircraftRegistrationContract
- AircraftSearchByEnum
- AirportCodesByEnum
- AirportContinentContract
- AirportContract
- AirportContractCurrentTime
- AirportContractUrls
- AirportCountryContract
- AirportDelayContract
- AirportDistanceTimeContract
- AirportFeedServiceStatusContract
- AirportFidsContract
- AirportFlightContract
- AirportFlightContractAircraft
- AirportFlightContractAirline
- AirportFlightContractArrival
- AirportFlightContractDeparture
- AirportFlightContractLocation
- AirportFlightContractMovement
- AirportLocalTimeContract
- Angle
- Azimuth
- CloudCover
- CodeshareStatus
- CreateWebHookSubscription
- DailyRouteStatContract
- DailyRouteStatRecordContract
- DateTimeContract
- DayTime
- DelayBracketContract
- Distance
- EngineType
- ErrorContract
- FeedServiceEnum
- FeedServiceStatus
- FeedServiceStatusContract
- FlightAircraftContract
- FlightAircraftContractImage
- FlightAirlineContract
- FlightAirportMovementContract
- FlightAirportMovementContractRevisedTime
- FlightAirportMovementContractRunwayTime
- FlightAirportMovementContractScheduledTime
- FlightAirportMovementQualityEnum
- FlightBatchDelayContract
- FlightContract
- FlightContractGreatCircleDistance
- FlightDataGeneralAvailabilityContract
- FlightDelayContract
- FlightDirection
- FlightLegDelayContract
- FlightLocationContract
- FlightNotificationContract
- FlightNotificationContractSubscription
- FlightSearchByEnum
- FlightStatus
- GeoCoordinatesContract
- GeoCoordinatesContractListingAirportContractSearchResultCollectionContract
- LicenseType
- ListingAirportContract
- ListingAirportContractLocation
- ModelFlightTimeEnum
- PercentileBracketContract
- PhenomenaGroup
- Pressure
- ResourceContract
- RunwayContract
- RunwayContractDisplacedThreshold
- RunwayContractLength
- RunwayContractLocation
- RunwayContractWidth
- SolarStateContract
- SolarStateContractDawnAstronomical
- SolarStateContractDawnCivil
- SolarStateContractDawnNautical
- SolarStateContractDuskAstronomical
- SolarStateContractDuskCivil
- SolarStateContractDuskNautical
- SolarStateContractNoonTrue
- SolarStateContractSunrise
- SolarStateContractSunset
- Speed
- StatisticClass
- StringCollectionContract
- StringListingAirportContractSearchResultCollectionContract
- SubscriberContract
- SubscriptionContract
- SubscriptionSubjectContract
- SubscriptionSubjectType
- SurfaceType
- Temperature
- WeatherStateContract
- WeatherStateContractAirTemperature
- WeatherStateContractCloudBase
- WeatherStateContractDewPoint
- WeatherStateContractPressure
- WeatherStateContractVisibility
- WeatherStateContractWind
- WindContract
- WindContractGusts
Documentation For Authorization
API定义了以下身份验证方案:
X-RapidAPI-Key
- 类型:API密钥
- API密钥参数名称:X-RapidAPI-Key
- 位置:HTTP头
X-RapidAPI-Host
- 类型:API密钥
- API密钥参数名称:X-RapidAPI-Host
- 位置:HTTP头
Author
完整示例代码
以下是一个完整的Flutter示例,演示如何使用AeroDataBox API获取特定机场的航班信息。
1. 添加依赖项
在 pubspec.yaml
中添加以下依赖项:
dependencies:
aerodatabox: ^1.0.0
2. 初始化API客户端
创建一个简单的Flutter应用程序来调用API:
import 'package:flutter/material.dart';
import 'package:aerodatabox/api.dart'; // 引入AeroDataBox API包
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('AeroDataBox API Example')),
body: Center(
child: ElevatedButton(
onPressed: () async {
// 初始化API客户端
final api_instance = FlightAPIApi();
try {
// 调用API获取机场航班信息
final result = await api_instance.getAirportFlights(
'iata',
'LAX', // 洛杉矶国际机场
DateTime.now().subtract(Duration(hours: 2)).toString(),
DateTime.now().add(Duration(hours: 2)).toString(),
);
// 打印结果
print(result);
} catch (e) {
print('Exception: $e');
}
},
child: Text('Fetch Airport Flights'),
),
),
),
);
}
}
3. 运行应用
运行上述代码后,点击按钮即可调用AeroDataBox API并获取洛杉矶国际机场的航班信息。
4. 示例输出
成功调用API后,您将在控制台中看到类似以下的JSON格式输出:
{
"departures": [
{
"flightNumber": "AA100",
"departureTime": "2023-10-10T12:00:00Z",
"arrivalTime": "2023-10-10T15:00:00Z",
"status": "scheduled"
}
],
"arrivals": [
{
"flightNumber": "DL200",
"departureTime": "2023-10-10T08:00:00Z",
"arrivalTime": "2023-10-10T11:00:00Z",
"status": "delayed"
}
]
}
更多关于Flutter数据展示插件aerodatabox的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter数据展示插件aerodatabox的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
AeroDataBox
是一个提供航空数据的 API 服务,它可以帮助开发者获取航班、机场、航空公司等相关信息。在 Flutter 中使用 AeroDataBox
API 来展示数据,通常需要以下几个步骤:
1. 获取 API 密钥
首先,你需要在 AeroDataBox 官网上注册并获取 API 密钥。
2. 添加依赖
在 pubspec.yaml
文件中添加 http
依赖,用于发送 HTTP 请求:
dependencies:
flutter:
sdk: flutter
http: ^0.13.3
然后运行 flutter pub get
来安装依赖。
3. 创建 API 服务类
创建一个类来处理与 AeroDataBox API 的交互。例如:
import 'dart:convert';
import 'package:http/http.dart' as http;
class AeroDataBoxService {
final String apiKey;
AeroDataBoxService(this.apiKey);
Future<Map<String, dynamic>> getFlightData(String flightNumber) async {
final url = Uri.parse('https://aerodatabox.p.rapidapi.com/flights/number/$flightNumber');
final response = await http.get(url, headers: {
'X-RapidAPI-Host': 'aerodatabox.p.rapidapi.com',
'X-RapidAPI-Key': apiKey,
});
if (response.statusCode == 200) {
return json.decode(response.body);
} else {
throw Exception('Failed to load flight data');
}
}
}
4. 在 Flutter 中使用 API 服务
在 Flutter 的 StatefulWidget
或 StatelessWidget
中使用 AeroDataBoxService
来获取数据并展示。
import 'package:flutter/material.dart';
import 'aero_data_box_service.dart';
class FlightInfoScreen extends StatefulWidget {
[@override](/user/override)
_FlightInfoScreenState createState() => _FlightInfoScreenState();
}
class _FlightInfoScreenState extends State<FlightInfoScreen> {
final AeroDataBoxService _aeroDataBoxService = AeroDataBoxService('YOUR_API_KEY');
Map<String, dynamic>? _flightData;
[@override](/user/override)
void initState() {
super.initState();
_loadFlightData('BA123'); // Replace with your flight number
}
Future<void> _loadFlightData(String flightNumber) async {
try {
final data = await _aeroDataBoxService.getFlightData(flightNumber);
setState(() {
_flightData = data;
});
} catch (e) {
print('Error: $e');
}
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flight Information'),
),
body: _flightData == null
? Center(child: CircularProgressIndicator())
: ListView(
children: _flightData!['data'].map<Widget>((flight) {
return ListTile(
title: Text(flight['flight']['number']),
subtitle: Text('${flight['departure']['airport']['name']} to ${flight['arrival']['airport']['name']}'),
);
}).toList(),
),
);
}
}