Flutter数据展示插件aerodatabox的使用

Flutter数据展示插件aerodatabox的使用

AeroDataBox API

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

info@aerodatabox.com


完整示例代码

以下是一个完整的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

1 回复

更多关于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 的 StatefulWidgetStatelessWidget 中使用 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(),
            ),
    );
  }
}
回到顶部