refreshAccount method

  1. @override
Future<bool> refreshAccount(
  1. Account _account
)
override

Implementation

@override
Future<bool> refreshAccount(Account _account) async {
  try {
    var account = _account as OAuthAccount?;
    if (account == null) throw new Exception("Invalid Account");
    var postData = await getRefreshTokenPostData(account);

    var resp = await httpClient.post(Uri.parse(tokenUrl!),
        headers: {
          "Accept": "application/json",
          "Content-Type": "application/x-www-form-urlencoded"
        },
        body: postData);
    var map = convert.json.decode(resp.body);
    var result = OAuthResponse.fromJson(map);
    if (result.error?.isNotEmpty ?? false) {
      if ((account.refreshToken?.isEmpty ?? true) ||
          result.error == "invalid_grant" ||
          (result.errorDescription?.contains("revoked") ?? false)) {
        account.token = "";
        account.refreshToken = "";
        saveAccountToCache(account);
        return await performAuthenticate() != null;
      } else
        throw new Exception("${result.error} : ${result.errorDescription}");
    }
    if (result.refreshToken?.isNotEmpty ?? false)
      account.refreshToken = result.refreshToken;
    account.tokenType = result.tokenType;
    account.token = result.accessToken;
    account.expiresIn = result.expiresIn;
    account.created = DateTime.now().toUtc();
    currentAccount = account;
    saveAccountToCache(account);
    return true;
  } catch (exception) {}
  return false;
}