getToken method

Future<String?> getToken({
  1. bool forceRefresh = false,
})

Implementation

Future<String?> getToken({bool forceRefresh = false}) async {
  // Return existing token if authenticated and not forcing refresh
  if (!forceRefresh && await isAuthenticated()) {
    return _store.authState?.accessToken;
  }

  // Proceed with token refresh
  final version = await _getVersion();
  final versionParam = 'Flutter/$version';
  try {
    if (authState?.refreshToken == null) {
      throw KindeError(
        code: KindeErrorCode.sessionExpiredOrInvalid.code,
      );
    }
    final data = await _tokenApi.retrieveToken(
        versionParam,
        _store.authState!.createRequestTokenParam()
          ..putIfAbsent(_clientIdParamName, () => _config!.authClientId));
    _store.authState = AuthState.fromJson(data as Map<String, dynamic>);
    _kindeApi.setBearerAuth(_bearerAuth, _store.authState?.accessToken ?? '');
    return _store.authState?.accessToken;
  } catch (e, st) {
    throw KindeError.fromError(e, st);
  }
}