我试图调用 dio 拦截器 class 但是当我收到 401 时什么也没有发生

Im trying to call dio interceptor class but when im gettin 401 nothing happens

class RefreshToken extends Interceptor {
  
  Future<void> tryGetToken() async {
    
    print("asd");
    Dio dio = Dio();
    SharedPreferences pref = await SharedPreferences.getInstance();
    final token = pref.getString("access_token");
    final refreshtoken = pref.getString("refresh_token");
    dio.interceptors.add(
      InterceptorsWrapper(
        onRequest: (request, handler) {
          if (token != null && token != '') {
            request.headers['Authorization'] = 'Bearer $token';
          }
          return handler.next(request);
        },
        onError: (e, handler) async {
          if (e.response?.statusCode == 401) {
            try {
              var headers = {
                //my header
              };
              var bodyFields = {
                //my body
              };
              await dio
                  .post(globals.apiUrl + "connect/token",
                      data: bodyFields,
                      options: Options(
                        headers: headers,
                        validateStatus: (status) {
                          return status! < 501;
                        },
                      ))
                  .then((value) async {
                if (value.statusCode! < 300) {
                  //get new tokens ...
                  print("access token" + token!);
                  print("refresh token" + refreshtoken!);
                  //set bearer
                  e.requestOptions.headers["Authorization"] = "Bearer " + token;
                  //create request with new access token
                  final opts = new Options(
                      method: e.requestOptions.method,
                      headers: e.requestOptions.headers);
                  final cloneReq = await dio.request(e.requestOptions.path,
                      options: opts,
                      data: e.requestOptions.data,
                      queryParameters: e.requestOptions.queryParameters);

                  return handler.resolve(cloneReq);
                }
              });
            } catch (e, st) {
              print(e);
            }
          }
        },
      ),
    );
  }
}

这是我的代码。我不知道问题出在哪里。我从另一个请求中得到 401,但这个拦截器没有调用。我研究了很多网站,但我从未找到任何调用方法。有谁能够帮助我 ?我的拦截器是真的吗?如果它是真的,我该如何使用它?

我解决了这个问题。我添加 GetToken().yourInterceptor();在 main.dart 初始化状态。它可以帮助任何人。

status code 404不是dio错误,dio错误与连接状态和连接超时方式有关,这种拦截会在您请求失败时启动,您要做的是拦截响应。 .. 当你得到 404 时,意味着你得到了服务器的响应,现在你可以处理它了