MST

星途 面试题库

面试题:Flutter中Dio插件拦截器的基本使用场景

在Flutter开发中,阐述Dio插件拦截器在哪些常见场景下会被使用,例如请求拦截和响应拦截,分别说明它们的作用,并简单描述如何实现一个基础的请求拦截器。
49.7万 热度难度
前端开发Flutter

知识考点

AI 面试

面试题答案

一键面试

常见场景及作用

  1. 请求拦截
    • 作用:在请求发送之前对请求进行统一处理。例如,添加通用的请求头,如认证令牌(token),这样每个请求都能携带必要的身份验证信息;修改请求参数,根据不同环境或业务规则调整请求数据;对请求进行日志记录,方便跟踪和调试请求流程。
  2. 响应拦截
    • 作用:在接收到响应后,对响应进行统一处理。比如,检查响应状态码,若状态码表示未授权(如401),可以自动处理登录过期逻辑,引导用户重新登录;对响应数据进行统一格式化处理,如解析通用的数据结构,提取真正需要的数据部分;记录响应日志,监控响应时间、数据大小等信息,用于性能分析和问题排查。

实现基础请求拦截器

  1. 首先添加dio依赖到pubspec.yaml文件并获取依赖:
dependencies:
  dio: ^[具体版本号]

然后在终端运行flutter pub get。 2. 实现请求拦截器代码如下:

import 'package:dio/dio.dart';

void main() async {
  Dio dio = Dio();

  // 添加请求拦截器
  dio.interceptors.add(InterceptorsWrapper(
    onRequest: (Options options, RequestInterceptorHandler handler) {
      // 添加通用请求头
      options.headers['Authorization'] = 'Bearer your_token';
      // 记录请求日志
      print('请求URL: ${options.uri}');
      print('请求方法: ${options.method}');
      print('请求头: ${options.headers}');
      print('请求参数: ${options.data}');
      // 继续请求
      handler.next(options); 
    },
  ));

  try {
    Response response = await dio.get('https://example.com/api');
    print('响应数据: ${response.data}');
  } catch (e) {
    print('请求错误: $e');
  }
}

在上述代码中,InterceptorsWrapper类用于创建拦截器。onRequest回调函数在请求发送前被调用,在这里可以对Options进行修改,如添加请求头、记录日志等操作,最后通过handler.next(options)让请求继续执行。