flutter interceptor如何实现

在Flutter中,如何实现一个拦截器(interceptor)?我想在发送HTTP请求前和收到响应后统一处理一些逻辑,比如添加请求头、打印日志或处理错误。Dio库提供了拦截器功能,但不太清楚具体怎么配置和使用。能否提供一个简单的示例代码,说明如何自定义请求和响应拦截?

2 回复

Flutter拦截器可通过Dio库实现。创建拦截器类继承Interceptor,重写onRequest、onResponse、onError方法处理请求前、响应后和错误时的逻辑。使用dio.interceptors.add()添加拦截器即可。

更多关于flutter interceptor如何实现的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,可以通过拦截器(Interceptor)来拦截和处理HTTP请求和响应,常用于添加认证头、日志记录、错误处理等。以下是使用dio库实现拦截器的步骤:

1. 添加依赖

pubspec.yaml 中添加 dio 依赖:

dependencies:
  dio: ^5.0.0

2. 实现拦截器

创建一个自定义拦截器类,继承自 Interceptor,并重写 onRequestonResponseonError 方法。

import 'package:dio/dio.dart';

class CustomInterceptor extends Interceptor {
  @override
  void onRequest(RequestOptions options, RequestInterceptorHandler handler) {
    // 在请求发送前添加认证头或其他处理
    options.headers['Authorization'] = 'Bearer your_token_here';
    print('Request: ${options.method} ${options.uri}');
    handler.next(options); // 继续请求
  }

  @override
  void onResponse(Response response, ResponseInterceptorHandler handler) {
    // 处理响应数据
    print('Response: ${response.statusCode}');
    handler.next(response); // 继续响应
  }

  @override
  void onError(DioException err, ErrorInterceptorHandler handler) {
    // 处理错误
    print('Error: ${err.message}');
    handler.next(err); // 继续错误处理
  }
}

3. 使用拦截器

Dio 实例中添加拦截器:

void main() {
  final dio = Dio();
  dio.interceptors.add(CustomInterceptor()); // 添加自定义拦截器

  // 发送请求
  dio.get('https://api.example.com/data').then((response) {
    print('Data: ${response.data}');
  }).catchError((error) {
    print('Request failed: $error');
  });
}

4. 其他拦截器

dio 还提供内置拦截器,例如:

  • LogInterceptor:记录请求和响应日志。
  • QueuedInterceptor:处理请求队列。

示例添加日志拦截器:

dio.interceptors.add(LogInterceptor(
  requestBody: true,
  responseBody: true,
));

总结

通过自定义拦截器,可以统一管理请求和响应逻辑,提高代码复用性。根据需求在 onRequestonResponseonError 中添加处理逻辑即可。

回到顶部