apiarist 1.0.4 copy "apiarist: ^1.0.4" to clipboard
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");
    },
  );
}
1
likes
130
points
38
downloads

Publisher

unverified uploader

Weekly Downloads

Library for handling api responses in a more nuanced way

Repository (GitHub)

Documentation

API reference

License

BSD-3-Clause (license)

Dependencies

http, riverpod

More

Packages that depend on apiarist