refreshToken method

  1. @override
Future<Response<AuthenticationResponse>> refreshToken()
override

Implementation

@override
Future<Response<AuthenticationResponse>> refreshToken() async {
  try {
    var authDataResponse = await getAuthData();
    if (!authDataResponse.isSuccess!)
      return Response.error(authDataResponse.errorMessage);

    var data = {"RefreshToken": authDataResponse.value!.refreshToken};

    final http.Response refreshTokenResponse = await http.post(
      Uri.parse(config.refreshTokenUrl),
      headers: {
        "content-type": "application/json",
        "Authorization": "Bearer ${authDataResponse.value!.token}"
      },
      body: jsonEncode(data),
    );

    if (refreshTokenResponse.statusCode != 200)
      return Response.error(
        "Unexpected Error Has Occured!\n" +
            "STATUS CODE: ${refreshTokenResponse.statusCode}\n" +
            "${refreshTokenResponse.reasonPhrase}",
      );

    var response = RefreshTokenResponse.fromJson(
      jsonDecode(refreshTokenResponse.body),
    );

    await _secureStorage.write(key: _tokenKey, value: response.token);
    await _secureStorage.write(
      key: _refreshTokenKey,
      value: response.refreshToken,
    );
    await _secureStorage.write(
      key: _tokenExpireDateKey,
      value: response.tokenExpireDate!.millisecondsSinceEpoch.toString(),
    );

    authDataResponse.value!.token = response.token!;
    authDataResponse.value!.refreshToken = response.refreshToken!;
    authDataResponse.value!.tokenExpireDate = response.tokenExpireDate!;

    return authDataResponse;
  } catch (e) {
    return Response.error(e.toString());
  }
}