safeExecute static method

Future<ApiResult> safeExecute({
  1. required Future<Response> func(),
  2. dynamic onOverrideData(
    1. dynamic data
    )?,
  3. dynamic onSuccess(
    1. dynamic data
    )?,
  4. String? responseDataPropPath,
})

Implementation

static Future<ApiResult> safeExecute({
  required Future<http.Response> Function() func,
  dynamic Function(dynamic data)? onOverrideData,
  dynamic Function(dynamic data)? onSuccess,
  String? responseDataPropPath,
}) async {
  ApiResult result;

  try {
    final response = await func();

    if (response.statusCode == 200) {
      var responsebody = jsonDecode(response.body);

      var data = responseDataPropPath != null && responsebody is Map<String, dynamic> ? responsebody[responseDataPropPath] : responsebody;
      if (onOverrideData != null) {
        data = onOverrideData(data);
      }

      result = ApiResult(
        success: true,
        data: data,
        message: 'Operação realizada com sucesso.',
      );

      if (onSuccess != null) {
        onSuccess(data);
      }
    } else {
      Map<String, dynamic> error = jsonDecode(response.body);

      result = ApiResult(
        success: false,
        message:
            'Erro na operação. ${HttpUtils.getErrorMsgFromApi(error)}',
      );
    }
  } catch (error) {
    result = ApiResult(
      success: false,
      message: 'Erro na operação. ${error.toString()}',
    );
  }

  return result;
}