Flutter中如何使用pigeon生成http服务的代码

我在Flutter项目中需要调用原生平台的HTTP服务,听说可以用pigeon生成跨平台代码。请问具体该如何配置pigeon来实现这个功能?是否需要额外依赖库,能否提供一个从定义接口到生成代码的完整示例?特别是如何处理异步请求和错误回调这些常见场景?

2 回复

在Flutter中使用Pigeon生成HTTP服务代码,需先定义Dart接口,然后运行Pigeon命令生成平台代码。最后在原生端实现该接口并注册,即可在Flutter中调用。

更多关于Flutter中如何使用pigeon生成http服务的代码的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中使用Pigeon生成HTTP服务代码,可以通过以下步骤实现:

1. 添加依赖

pubspec.yaml 中添加:

dev_dependencies:
  pigeon: ^13.0.0

2. 创建Pigeon定义文件

新建 pigeons/api.dart

import 'package:pigeon/pigeon.dart';

class HttpRequest {
  String url;
  String method;
  Map<String?, String?>? headers;
  Uint8List? body;
}

class HttpResponse {
  int statusCode;
  Map<String?, String?>? headers;
  Uint8List? body;
}

@HostApi()
abstract class HttpService {
  @async
  HttpResponse sendRequest(HttpRequest request);
}

3. 生成代码

运行命令:

flutter pub run pigeon \
  --input pigeons/api.dart \
  --dart_out lib/api/http_service.dart \
  --objc_header_out ios/Runner/HttpService.h \
  --objc_source_out ios/Runner/HttpService.m \
  --java_out android/app/src/main/java/com/example/app/HttpService.java \
  --java_package "com.example.app"

4. 实现平台代码

Android (HttpService.java):

import io.flutter.plugin.common.BinaryMessenger;

public class HttpServiceImpl extends HttpService {
  @Override
  public HttpResponse sendRequest(HttpRequest request) {
    // 实现HTTP请求逻辑,使用OkHttp或HttpURLConnection
    // 返回HttpResponse对象
  }
}

iOS (HttpService.m):

#import "HttpService.h"

@implementation HttpServiceImpl
- (void)sendRequest:(HttpRequest *)request completion:(void(^)(HttpResponse *_Nullable, FlutterError *_Nullable))completion {
  // 使用NSURLSession实现HTTP请求
  // 调用completion返回结果
}
@end

5. 注册平台实现

在Flutter中注册:

import 'package:flutter/services.dart';

void setupHttpService() {
  HttpService.setup(HttpServiceImpl());
}

6. 在Flutter中使用

final response = await HttpService().sendRequest(
  HttpRequest(
    url: 'https://api.example.com/data',
    method: 'GET',
  ),
);

注意事项:

  • 主要用于需要平台特定实现的HTTP操作
  • 简单HTTP请求推荐直接使用httpdio
  • 确保处理平台线程和异常情况

这样可以通过Pigeon自动生成类型安全的跨平台HTTP服务接口代码。

回到顶部