Skip to content

Instantly share code, notes, and snippets.

@dev4jam
Created March 21, 2022 06:49
Show Gist options
  • Save dev4jam/c43cc38e1b97d01f80d482f75dd9b611 to your computer and use it in GitHub Desktop.
Save dev4jam/c43cc38e1b97d01f80d482f75dd9b611 to your computer and use it in GitHub Desktop.
Isolate function
Future<NetworkResponse<Model>> executeRequest<Model>(
_PreparedNetworkRequest request,
) async {
try {
dynamic body = request.request.data.whenOrNull(
json: (data) => data,
text: (data) => data,
);
final response = await request.dio.request(
request.request.path,
data: body,
queryParameters: request.request.queryParams,
options: Dio.Options(
method: request.request.type.name,
headers: request.headers,
),
onSendProgress: request.onSendProgress,
onReceiveProgress: request.onReceiveProgress,
);
return NetworkResponse.ok(request.parser(response.data));
} on Dio.DioError catch (error) {
final errorText = error.toString();
if (error.requestOptions.cancelToken!.isCancelled) {
return NetworkResponse.noData(errorText);
}
switch (error.response?.statusCode) {
case 400:
return NetworkResponse.badRequest(errorText);
case 401:
return NetworkResponse.noAuth(errorText);
case 403:
return NetworkResponse.noAccess(errorText);
case 404:
return NetworkResponse.notFound(errorText);
case 409:
return NetworkResponse.conflict(errorText);
default:
return NetworkResponse.noData(errorText);
}
} catch (error) {
return NetworkResponse.noData(error.toString());
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment