Flutter快递物流插件easypost的使用

发布于 1周前 作者 bupafengyu 来自 Flutter

Flutter快递物流插件easypost的使用

本SDK允许您在Dart应用程序中与EasyPost API进行交互。

安装

该插件可在 pub.dev 上获取。

dependencies:
  easypost: ^x.x.x

pubspec.yaml文件中添加依赖项后,运行以下命令以安装依赖项:

flutter pub get

使用

完整的文档可以在 Pub.devGitHub 上找到。

示例

以下是一个完整的示例,展示了如何使用EasyPost插件创建地址、包裹、运输,并购买最低费率的运输服务。

import 'package:easypost/easypost.dart';

Future<void> example() async {
  // 设置API客户端
  ClientConfiguration configuration = ClientConfiguration(
    "TEST_API_KEY", // 请替换为您的测试API密钥
    "PRODUCTION_API_KEY", // 请替换为您的生产API密钥
    apiVersion: ApiVersion.v2,
  );
  Client client = Client(configuration);
  
  // 启用测试模式(默认)
  client.enableTestMode();

  // 创建收货地址
  CreateAddress addressCreateParams = CreateAddress();
  addressCreateParams.street1 = "388 Townsend St";
  addressCreateParams.city = "San Francisco";
  addressCreateParams.state = "CA";
  addressCreateParams.zip = "94107";
  addressCreateParams.country = "US";
  
  Address toAddress = await client.addresses.create(addressCreateParams);
  
  // 创建发货地址
  addressCreateParams = CreateAddress();
  addressCreateParams.street1 = "388 Townsend St";
  addressCreateParams.city = "San Francisco";
  addressCreateParams.state = "CA";
  addressCreateParams.zip = "94107";
  addressCreateParams.country = "US";
  
  Address fromAddress = await client.addresses.create(addressCreateParams);
  
  // 创建包裹
  CreateParcel parcelsCreateParams = CreateParcel();
  parcelsCreateParams.length = 10.2;
  parcelsCreateParams.width = 7.8;
  parcelsCreateParams.height = 4.3;
  parcelsCreateParams.weight = 21.2;
  
  Parcel parcel = await client.parcels.create(parcelsCreateParams);
  
  // 创建运输
  CreateShipment shipmentsCreateParams = CreateShipment();
  shipmentsCreateParams.toAddress = toAddress;
  shipmentsCreateParams.fromAddress = fromAddress;
  shipmentsCreateParams.parcel = parcel;
  
  Shipment shipment = await client.shipments.create(shipmentsCreateParams);
  
  // 获取运输的最低费率
  ShipmentRate rate = client.shipments.getLowestRateFor(shipment);
  
  // 使用最低费率购买运输服务
  BuyShipment shipmentBuyParams = BuyShipment();
  shipmentBuyParams.rate = rate;
  
  Shipment purchasedShipment = await client.shipments.buy(shipment.id, shipmentBuyParams);
}

开发

所有消息都使用 json_serializable 编写,因此在进行更改并希望测试时,请确保运行以下命令生成文件:

dart run build_runner build

更多关于Flutter快递物流插件easypost的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter快递物流插件easypost的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter应用中使用EasyPost插件的示例代码。EasyPost是一个流行的快递物流API,可以帮助你集成多种物流服务。为了在Flutter中使用EasyPost,你需要先通过Dart的HTTP库与EasyPost的API进行交互。由于Flutter本身没有官方的EasyPost插件,我们需要手动实现API调用。

首先,确保你已经在Flutter项目中添加了http依赖。在pubspec.yaml文件中添加以下依赖:

dependencies:
  flutter:
    sdk: flutter
  http: ^0.13.3  # 请检查最新版本号

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

接下来,你需要创建一个服务类来处理与EasyPost API的交互。以下是一个简单的示例,展示了如何获取运输费率(Rates)。

  1. 创建EasyPostService类
import 'dart:convert';
import 'package:http/http.dart' as http;

class EasyPostService {
  String apiKey = 'YOUR_EASYPOST_API_KEY'; // 请替换为你的EasyPost API密钥

  Future<Map<String, dynamic>> getRates(String fromZip, String toZip, String weight) async {
    String url = 'https://api.easypost.com/v2/shipments';

    Map<String, dynamic> body = {
      "from_address": {
        "name": "John Doe",
        "street1": "123 Main St",
        "city": "Anytown",
        "state": "CA",
        "zip": fromZip,
        "country": "US",
        "phone": "555-555-5555",
        "email": "john@example.com"
      },
      "to_address": {
        "name": "Jane Doe",
        "street1": "456 Other St",
        "city": "Othertown",
        "state": "NY",
        "zip": toZip,
        "country": "US",
        "phone": "555-555-5556",
        "email": "jane@example.com"
      },
      "parcel": {
        "length": 20.0,
        "width": 10.0,
        "height": 5.0,
        "weight": double.parse(weight)
      }
    };

    final response = await http.post(
      Uri.parse(url),
      headers: {
        'Content-Type': 'application/json',
        'Authorization': 'Bearer $apiKey',
      },
      body: jsonEncode(body),
    );

    if (response.statusCode == 200) {
      Map<String, dynamic> data = jsonDecode(response.body);
      return data['rates'];
    } else {
      throw Exception('Failed to fetch rates');
    }
  }
}
  1. 在Flutter UI中使用EasyPostService
import 'package:flutter/material.dart';
import 'easy_post_service.dart'; // 导入你创建的EasyPostService类

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter EasyPost Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  EasyPostService _easyPostService = EasyPostService();
  List<Map<String, dynamic>> _rates = [];

  Future<void> _fetchRates() async {
    try {
      String fromZip = '94101'; // 起始邮编
      String toZip = '10001'; // 目的邮编
      String weight = '5.0'; // 重量,单位磅

      _rates = await _easyPostService.getRates(fromZip, toZip, weight);

      setState(() {});
    } catch (e) {
      print(e);
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter EasyPost Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: _fetchRates,
              child: Text('Fetch Rates'),
            ),
            SizedBox(height: 20),
            if (_rates.isNotEmpty)
              Expanded(
                child: ListView.builder(
                  itemCount: _rates.length,
                  itemBuilder: (context, index) {
                    Map<String, dynamic> rate = _rates[index];
                    return Card(
                      child: ListTile(
                        title: Text('Carrier: ${rate['carrier'] ?? 'Unknown'}'),
                        subtitle: Text('Service: ${rate['service'] ?? 'Unknown'}'),
                        trailing: Text('Rate: \$${rate['rate'] ?? '0.00'}'),
                      ),
                    );
                  },
                ),
              ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个EasyPostService类来处理与EasyPost API的交互,并在Flutter UI中通过点击按钮来获取运输费率。注意,你需要替换YOUR_EASYPOST_API_KEY为你的实际EasyPost API密钥。

这个示例只是一个基本的实现,实际应用中你可能需要处理更多的错误情况,并根据你的需求调整API请求的参数。

回到顶部