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 ?
i fixed this. i add GetToken().yourInterceptor(); in main.dart initState. its can be help anybody.