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请求推荐直接使用
http或dio包 - 确保处理平台线程和异常情况
这样可以通过Pigeon自动生成类型安全的跨平台HTTP服务接口代码。

