onInit method

  1. @override
void onInit()
override

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 = "";
}