apiarist 1.0.4
apiarist: ^1.0.4 copied to clipboard
Library for handling api responses in a more nuanced way
Apiarist #
AsyncValue
but for REST APIs.
Dart/Flutter library for interacting with an API, particularly a REST API.
The impetus for this was Riverpod's AsyncValue
. The idea was great. And it is
great for the usual things like reading from device storage. But using AsyncValue
for API calls breaks down because it can only handle loading, data, and exceptions.
If you get an HTTP 400 Bad Request or HTTP 401 Unauthorized, you have to shoehorn
the error response into either "data" or "error", neither of which are ideal.
Apiarist introduces the concept of an API response object (ApiResponse
) to handle
those situations better.
Getting Started #
Install the usual way
flutter pub get apiarist
Usage #
Widget build(BuildContext context) {
ApiResponse<MyModel> apiResponse = ref.watch(myModelProvider);
return apiResponse.when(
loading: () => CircularLoadingIndicator(),
data: (myModel) => Text(myModel.FullName),
error: (apiError) {
logger.warning("API ");
return Text("${apiError.statusCode} - ${apiError.parsedBody()['errorDesc']}");
},
unauthorized: (apiError) => context.go("/login"),
notFound: (apiError) => Text("Sorry, we couldn't find that one"),
failure: (apiFailure) {
logger.warning("API Failure: ${apiFailure.error}\n${apiFailure.stackTrace}");
return Text("Request failed");
},
);
}