MST
星途 面试题库

面试题:Flutter Dio插件拦截器下如何处理不同类型响应码的统一逻辑

当使用Flutter的Dio插件进行网络请求时,对于常见的响应码如401(未授权)、500(服务器内部错误)等,如何在拦截器中进行统一处理,并且根据不同的响应码进行相应的页面跳转或提示操作?详细说明实现思路并给出部分关键代码。
34.8万 热度难度
前端开发Flutter

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 创建拦截器:使用Dio的拦截器功能,在请求发出前或响应返回后进行处理。
  2. 判断响应码:在拦截器的响应处理回调中,获取响应码并根据不同的响应码进行不同的处理。
  3. 页面跳转或提示:对于不同的响应码,使用Navigator进行页面跳转或使用Toast等方式进行提示。

关键代码

import 'package:dio/dio.dart';
import 'package:flutter/material.dart';

class ResponseInterceptor extends Interceptor {
  @override
  void onResponse(Response response, ResponseInterceptorHandler handler) {
    switch (response.statusCode) {
      case 401:
        // 未授权,跳转到登录页面
        Navigator.pushReplacementNamed(response.requestOptions.context!, '/login');
        break;
      case 500:
        // 服务器内部错误,显示提示
        ScaffoldMessenger.of(response.requestOptions.context!)
          ..hideCurrentSnackBar()
          ..showSnackBar(const SnackBar(content: Text('服务器内部错误')));
        break;
      default:
        break;
    }
    super.onResponse(response, handler);
  }
}

使用拦截器

void main() {
  Dio dio = Dio();
  dio.interceptors.add(ResponseInterceptor());
  // 发起网络请求
  dio.get('your_api_url');
}