Flutter 鸿蒙HTTP拦截器实现:拦截逻辑与链式处理
✅ 灵活的拦截器接口✅ 链式处理机制✅ 多种内置拦截器✅ 可配置的拦截器链✅ 完善的错误处理该功能为Flutter for OpenHarmony应用提供了强大的HTTP请求增强能力,适用于各种需要统一请求处理的场景。
·
Flutter 鸿蒙HTTP拦截器实现:拦截逻辑与链式处理
欢迎加入开源鸿蒙跨平台社区! https://openharmonycrossplatform.csdn.net
效果展示


HTTP拦截器演示
请求拦截
- 认证拦截器:自动添加Token
- 日志拦截器:记录请求信息
- 缓存拦截器:检查缓存
- 重试拦截器:失败自动重试
响应拦截
- 日志拦截器:记录响应信息
- 错误拦截器:统一错误处理
- 缓存拦截器:缓存响应数据
- 重试拦截器:检查重试条件
拦截器日志展示
日志类型
- 请求日志:蓝色,向上箭头
- 响应日志:绿色,向下箭头
- 错误日志:红色,错误图标
- 警告日志:橙色,警告图标
日志内容
- 拦截器名称
- 处理动作
- 时间戳
- 详细信息
实现步骤
1. 拦截器接口设计
基础拦截器
abstract class Interceptor {
Future<Request> onRequest(Request request) async {
return request;
}
Future<Response> onResponse(Response response) async {
return response;
}
Future<dynamic> onError(dynamic error) async {
return error;
}
}
2. 链式拦截器实现
拦截器链
class InterceptorChain {
final List<Interceptor> interceptors;
Future<Response> execute(Request request) async {
Request currentRequest = request;
// 请求拦截
for (var interceptor in interceptors) {
currentRequest = await interceptor.onRequest(currentRequest);
}
// 发送请求
Response response = await sendRequest(currentRequest);
// 响应拦截
for (var interceptor in interceptors.reversed) {
response = await interceptor.onResponse(response);
}
return response;
}
}
3. 具体拦截器实现
认证拦截器
class AuthInterceptor extends Interceptor {
final String token;
Future<Request> onRequest(Request request) async {
return request.copyWith(
headers: {
...request.headers,
'Authorization': 'Bearer $token',
},
);
}
}
日志拦截器
class LoggingInterceptor extends Interceptor {
Future<Request> onRequest(Request request) async {
print('Request: ${request.method} ${request.url}');
return request;
}
Future<Response> onResponse(Response response) async {
print('Response: ${response.statusCode}');
return response;
}
}
4. 拦截器配置
配置管理
class InterceptorConfig {
bool enableAuthInterceptor = true;
bool enableLoggingInterceptor = true;
bool enableRetryInterceptor = true;
bool enableCacheInterceptor = false;
List<Interceptor> buildInterceptors() {
final interceptors = <Interceptor>[];
if (enableAuthInterceptor) {
interceptors.add(AuthInterceptor());
}
if (enableLoggingInterceptor) {
interceptors.add(LoggingInterceptor());
}
// ...
return interceptors;
}
}
功能特性
1. 请求拦截
添加请求头
Future<Request> onRequest(Request request) async {
return request.copyWith(
headers: {
...request.headers,
'Authorization': 'Bearer $token',
'Content-Type': 'application/json',
},
);
}
参数处理
Future<Request> onRequest(Request request) async {
final params = {
...request.params,
'timestamp': DateTime.now().millisecondsSinceEpoch.toString(),
};
return request.copyWith(params: params);
}
2. 响应拦截
数据处理
Future<Response> onResponse(Response response) async {
if (response.statusCode == 200) {
final data = jsonDecode(response.body);
// 处理数据
return response.copyWith(body: jsonEncode(data));
}
return response;
}
错误处理
Future<dynamic> onError(dynamic error) async {
if (error is SocketException) {
return NetworkError('网络连接失败');
}
return error;
}
3. 缓存拦截
缓存检查
class CacheInterceptor extends Interceptor {
final CacheManager cacheManager;
Future<Request> onRequest(Request request) async {
if (request.method == 'GET') {
final cached = cacheManager.get(request.url);
if (cached != null) {
return CachedResponse(cached);
}
}
return request;
}
Future<Response> onResponse(Response response) async {
cacheManager.set(request.url, response.body);
return response;
}
}
4. 重试拦截
自动重试
class RetryInterceptor extends Interceptor {
final int maxRetries;
int _retryCount = 0;
Future<dynamic> onError(dynamic error) async {
if (_retryCount < maxRetries) {
_retryCount++;
await Future.delayed(Duration(seconds: 1));
return retry();
}
return error;
}
}
使用说明
基本使用
-
配置拦截器
- 开启需要的拦截器
- 设置拦截器参数
- 调整拦截器顺序
-
发送请求
- 请求自动通过拦截器链
- 观察拦截器日志
- 查看处理结果
-
查看日志
- 查看拦截器执行顺序
- 查看请求/响应信息
- 查看错误处理
高级功能
自定义拦截器
class CustomInterceptor extends Interceptor {
Future<Request> onRequest(Request request) async {
// 自定义请求处理
return request;
}
Future<Response> onResponse(Response response) async {
// 自定义响应处理
return response;
}
}
条件拦截
class ConditionalInterceptor extends Interceptor {
final bool Function(Request) condition;
Future<Request> onRequest(Request request) async {
if (condition(request)) {
// 执行拦截逻辑
}
return request;
}
}
技术要点
1. 拦截器顺序
执行顺序
- 请求拦截:按添加顺序执行
- 响应拦截:按添加顺序逆序执行
- 错误拦截:按添加顺序执行
顺序重要性
final interceptors = [
LoggingInterceptor(), // 最先记录日志
AuthInterceptor(), // 然后添加认证
CacheInterceptor(), // 最后检查缓存
];
2. 异步处理
异步拦截器
Future<Request> onRequest(Request request) async {
final token = await storage.getToken();
return request.copyWith(
headers: {'Authorization': 'Bearer $token'},
);
}
3. 错误传播
错误处理链
try {
final response = await chain.execute(request);
} on AuthError {
// 认证错误
} on NetworkError {
// 网络错误
} catch (e) {
// 其他错误
}
最佳实践
1. 单一职责
每个拦截器只做一件事
// 好的做法
class AuthInterceptor extends Interceptor {
// 只处理认证
}
class LoggingInterceptor extends Interceptor {
// 只处理日志
}
// 不好的做法
class AllInOneInterceptor extends Interceptor {
// 处理认证、日志、缓存...
}
2. 可配置性
参数化配置
class RetryInterceptor extends Interceptor {
final int maxRetries;
final Duration delay;
RetryInterceptor({
this.maxRetries = 3,
this.delay = const Duration(seconds: 1),
});
}
3. 性能考虑
避免重复处理
class CacheInterceptor extends Interceptor {
Future<Request> onRequest(Request request) async {
if (request.method != 'GET') {
return request; // 只缓存GET请求
}
// ...
}
}
应用场景
1. 统一认证
自动添加Token
class AuthInterceptor extends Interceptor {
Future<Request> onRequest(Request request) async {
final token = await getStoredToken();
request.headers['Authorization'] = 'Bearer $token';
return request;
}
}
2. 请求日志
统一日志记录
class LoggingInterceptor extends Interceptor {
Future<Request> onRequest(Request request) async {
logger.info('${request.method} ${request.url}');
return request;
}
}
3. 错误处理
统一错误处理
class ErrorInterceptor extends Interceptor {
Future<dynamic> onError(dynamic error) async {
if (error is TimeoutException) {
return TimeoutError();
}
return error;
}
}
总结
Flutter鸿蒙HTTP拦截器功能实现了完整的请求/响应拦截解决方案,包括:
- ✅ 灵活的拦截器接口
- ✅ 链式处理机制
- ✅ 多种内置拦截器
- ✅ 可配置的拦截器链
- ✅ 完善的错误处理
该功能为Flutter for OpenHarmony应用提供了强大的HTTP请求增强能力,适用于各种需要统一请求处理的场景。
更多推荐


所有评论(0)