Search code examples
flutterdio

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);
            }
          }
        },
      ),
    );
  }
}

this is my code. I dont know where's the problem. im gettin 401 from another requests but this interceptor not calls. I researched alot site but i never find any call method. Can anybody help me ? is my interceptor true ? if its true how can i use this ?


Solution

  • i fixed this. i add GetToken().yourInterceptor(); in main.dart initState. its can be help anybody.