实现思路
- 创建拦截器:使用
Dio
的拦截器功能,在请求发出前或响应返回后进行处理。
- 判断响应码:在拦截器的响应处理回调中,获取响应码并根据不同的响应码进行不同的处理。
- 页面跳转或提示:对于不同的响应码,使用
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');
}