onInit method
Called immediately after the widget is allocated in memory. You might use this to initialize something for the controller.
Implementation
@override
void onInit() {
super.onInit();
bool isAuthenticating = false;
httpClient.addResponseModifier<Object?>((request, response) {
final model = response.bodyString;
printLogs("RES refreshToken -> ${model != null} ** ${model != null}");
if (model != null) {
final jsonData = json.decode(model);
if (jsonData["accessToken"] != null) {
printLogs("RES accessToken -> ${jsonData["accessToken"]}");
controller.saveAccessToken(value: jsonData["accessToken"]);
}
if (jsonData["refreshToken"] != null) {
printLogs("RES refreshToken -> ${jsonData["refreshToken"]}");
controller.saveRefreshToken(value: jsonData["refreshToken"]);
}
}
return response;
});
httpClient.addAuthenticator<Object?>((request) async {
if (isAuthenticating) {
// Authentication is already in progress, avoid recursive call
return request;
}
isAuthenticating = true;
try {
printLogs("addAuthCalled");
// Check if there's an existing access token
String refreshToken = await GetStorageController().getRefreshToken();
printLogs("addAuth RT -> $refreshToken");
// ignore: unnecessary_null_comparison
if (refreshToken == null || refreshToken == "") {
refreshToken = AppInfo.secretKey;
}
final response = await httpClient.post(
"${AppInfo.kAppBaseUrl}getAccessToken",
contentType: 'application/json',
query: _query(),
body: {},
headers: {'Authorization': refreshToken},
);
String newAccessToken = response.body["accessToken"]?.toString() ?? '';
printLogs("getPassengerToken called new : $newAccessToken");
controller.saveAccessToken(value: newAccessToken);
request.headers['Authorization'] = newAccessToken;
} finally {
isAuthenticating = false;
}
return request;
});
httpClient.maxAuthRetries = 2;
httpClient.baseUrl = "";
}