Flutter出租车费用估算插件taxifarefinder的使用

Flutter出租车费用估算插件taxifarefinder的使用

taxifarefinder 是一个用于包裹 TaxiFareFinder API 的插件。

TaxiFareFinder API 的文档可以在以下链接找到: https://www.taxifarefinder.com/api.php

要获取所需的 TaxiFareFinder API 密钥,可以前往: https://www.taxifarefinder.com/contactus.php

使用

import 'package:taxifarefinder/taxifarefinder.dart';

var taxiFareFinder = TaxiFareFinder('<YOUR API KEY>');

// 查找由 TaxiFareFinder API 支持的最近城市
// 完整的支持实体列表可以在以下链接找到:
// https://www.taxifarefinder.com/api.php#entities
TffCity nearestCity = await taxiFareFinder.getNearestCity(13.736717, 100.523186);

// 获取费用信息,如总费用、距离或小费信息
TffFare fare = await taxiFareFinder.getFare(
    3.147948, 101.710347, 3.144169, 101.718519,
    traffic: TffTraffic.light);

// 在支持的城市中检索出租车公司列表
List<TffTaxiCompany> companies = await taxiFareFinder.getTaxiCompanies('London');

完整示例 Demo

以下是一个完整的示例代码,演示如何使用 taxifarefinder 插件来查找最近的城市、计算费用并获取出租车公司的信息。

import 'package:taxifarefinder/taxifarefinder.dart';

void main() async {
  // 初始化 TaxiFareFinder 实例,并传入你的 API 密钥
  final taxiFareFinder = TaxiFareFinder('<YOUR API KEY>');

  try {
    // 查找最近的城市
    final TffCity nearestCity = await taxiFareFinder.getNearestCity(42.356261, -71.065334);

    // 打印城市信息
    print('Distance: ${nearestCity.distance}');
    print('Full Name: ${nearestCity.fullName}');
    print('Handle: ${nearestCity.handle}');
    print('How Found: ${nearestCity.howFound}');
    print('Locale: ${nearestCity.locale}');
    print('Name: ${nearestCity.name}');

    // 计算费用
    final TffFare fare = await taxiFareFinder.getFare(
      3.147948,
      101.710347,
      3.144169,
      101.718519,
      traffic: TffTraffic.light,
    );

    // 打印费用信息
    print('Currency Symbol: ${fare.currencySymbol}');
    print('Distance: ${fare.distance}');
    print('Duration: ${fare.duration}');
    print('Initial Fare: ${fare.initialFare}');
    print('Locale: ${fare.locale}');
    print('Metered Fare: ${fare.meteredFare}');
    print('Rate Area: ${fare.rateArea}');
    print('Tip Amount: ${fare.tipAmount}');
    print('Tip Percentage: ${fare.tipPercentage}');
    print('Total Fare: ${fare.totalFare}');
    print('Total Fare Without Tip: ${fare.totalFareWithoutTip}');

    // 打印额外费用信息
    for (final extraCharge in fare.extraCharges) {
      print('Extra Charge: ${extraCharge.charge}');
      print('Description: ${extraCharge.description}');
    }

    // 打印固定费用信息
    for (final flatRate in fare.flatRates) {
      print('Flat Rate Charge: ${flatRate.charge}');
      print('Description: ${flatRate.description}');
    }

    // 获取伦敦的出租车公司列表
    final List<TffTaxiCompany> taxiCompanies = await taxiFareFinder.getTaxiCompanies('London');

    // 打印出租车公司信息
    for (final taxiCompany in taxiCompanies) {
      print('Company Name: ${taxiCompany.name}');
      print('Phone: ${taxiCompany.phone}');
      print('Type: ${taxiCompany.type}');
    }
  } on TffException catch (e) {
    // 处理 TaxiFareFinder 特定异常
    print('TffException: ${e.message()}');
  } catch (e) {
    // 处理其他异常
    print('Exception: $e');
  }
}

更多关于Flutter出租车费用估算插件taxifarefinder的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter出租车费用估算插件taxifarefinder的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


TaxiFareFinder 是一个用于估算出租车费用的服务,你可以在 Flutter 应用中使用它来为用户提供出租车费用估算功能。虽然 TaxiFareFinder 本身不是一个 Flutter 插件,但你可以通过 HTTP 请求与它的 API 进行交互。

以下是如何在 Flutter 应用中使用 TaxiFareFinder API 的步骤:

1. 获取 API 密钥

首先,你需要在 TaxiFareFinder 网站上注册并获取 API 密钥。

2. 添加 HTTP 依赖

在你的 pubspec.yaml 文件中添加 http 依赖,用于发送 HTTP 请求。

dependencies:
  flutter:
    sdk: flutter
  http: ^0.13.3

然后运行 flutter pub get 来安装依赖。

3. 创建 API 请求

你可以创建一个函数来发送请求到 TaxiFareFinder API 并获取费用估算。

import 'dart:convert';
import 'package:http/http.dart' as http;

class TaxiFareFinder {
  final String apiKey;

  TaxiFareFinder(this.apiKey);

  Future<double> estimateFare({
    required String startLat,
    required String startLng,
    required String endLat,
    required String endLng,
    String? currency,
  }) async {
    final url = Uri.parse('https://api.taxifarefinder.com/fare');
    final response = await http.post(
      url,
      headers: {
        'Content-Type': 'application/json',
      },
      body: jsonEncode({
        'key': apiKey,
        'start_latitude': startLat,
        'start_longitude': startLng,
        'end_latitude': endLat,
        'end_longitude': endLng,
        'currency': currency ?? 'USD',
      }),
    );

    if (response.statusCode == 200) {
      final data = jsonDecode(response.body);
      return data['fare'];
    } else {
      throw Exception('Failed to load fare estimate');
    }
  }
}

4. 在 UI 中使用

你可以在 Flutter 应用中使用这个类来获取并显示费用估算。

import 'package:flutter/material.dart';
import 'taxi_fare_finder.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: TaxiFareEstimator(),
    );
  }
}

class TaxiFareEstimator extends StatefulWidget {
  [@override](/user/override)
  _TaxiFareEstimatorState createState() => _TaxiFareEstimatorState();
}

class _TaxiFareEstimatorState extends State<TaxiFareEstimator> {
  final TaxiFareFinder taxiFareFinder = TaxiFareFinder('YOUR_API_KEY');
  double? fare;
  bool isLoading = false;

  Future<void> estimateFare() async {
    setState(() {
      isLoading = true;
    });

    try {
      final estimatedFare = await taxiFareFinder.estimateFare(
        startLat: '37.7749', // 起点纬度
        startLng: '-122.4194', // 起点经度
        endLat: '34.0522', // 终点纬度
        endLng: '-118.2437', // 终点经度
        currency: 'USD', // 货币
      );

      setState(() {
        fare = estimatedFare;
      });
    } catch (e) {
      print(e);
    } finally {
      setState(() {
        isLoading = false;
      });
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Taxi Fare Estimator'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            if (isLoading)
              CircularProgressIndicator()
            else if (fare != null)
              Text('Estimated Fare: \$${fare!.toStringAsFixed(2)}')
            else
              Text('Press the button to estimate fare'),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: estimateFare,
              child: Text('Estimate Fare'),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部