setAccessToken method

Future<void> setAccessToken()

Implementation

Future<void> setAccessToken() async {
  /// This method ensures that the token is in place before any request is
  /// placed.
  /// When called, it first checks if the previous token exists, if so, is it valid?
  /// if still valid(by expiry time measure), terminates to indicate that
  /// the token is set and ready for usage.
  DateTime now = new DateTime.now();
  if (mAccessExpiresAt != null) {
    if (now.isBefore(mAccessExpiresAt!)) {
      return;
    }
  }

  // todo: handle exceptions
  HttpClient client = new HttpClient();
  HttpClientRequest req = await client.getUrl(getAuthUrl());
  req.headers.add("Accept", "application/json");
  req.headers.add("Authorization", "Basic " + b64keySecret);
  HttpClientResponse res = await req.close();

  // u should use `await res.drain()` if u aren't reading the body
  await res.transform(utf8.decoder).forEach((bodyString) {
    dynamic jsondecodeBody = jsonDecode(bodyString);
    mAccessToken = jsondecodeBody["access_token"].toString();
    mAccessExpiresAt = now.add(new Duration(
        seconds: int.parse(jsondecodeBody["expires_in"].toString())));
  });
}