Art Catalog App is an app that allows users to navigate the catalog of artworks exposed by the Art Institute of Chicago API.
The app runs from API 24 and above, just clone the project and run it as you normally run an Flutter project.
The architecture used for the application consists of the following:
- Clean Architecture.
- Repository pattern.
- BLoC pattern using Cubit.
- Http: A composable, Future-based library for making HTTP requests
- Get It: A simple Service Locator for Dart and Flutter projects with some additional goodies.
- Freezed: Code generator for data-classes/unions/pattern-matching/cloning.
- Equatable: A Dart package that helps to implement value based equality without needing to explicitly
override == and hashCode
. - Json Annotation:Defines the annotations used by json_serializable to create code for JSON serialization and deserialization.
- Build Runner: A build system for Dart code generation and modular compilation.
- Isar: Extremely fast, easy to use, and fully async NoSQL database for Flutter.
- Auto route: A declarative routing solution, where everything needed for navigation is automatically generated for you.
- Flutter Bloc: Widgets that make it easy to integrate blocs and cubits into Flutter.
- Flutter local notifications: A cross-platform plugin for displaying local notifications.
- Shimmer: A package provides an easy way to add shimmer effect.
- Mocktail: Mock library for Dart inspired by mockito.
- Bloc test:A Dart package that makes testing blocs and cubits easy.
.
├── data
│ ├── db
│ ├── mappers
│ ├── models
│ ├── network
│ ├── repository
│ └── utils
├── di
├── domain
│ ├── models
│ └── repository
├── helpers
└── ui
├── navigation
├── screens
└── widgets
db
contains the class related to local storage with Isar.mappers
as the name suggests, this folder contains the required files to pass the info from the API response to the domain models in the project.models
data class files for the API call response.network
representation for the API Network client calls.repository
class implementation for each interface call declared inDomain package
.utils
contains a Result Wrapper(CallResponse) and constant values used innetwork
.
- contains the
injection_container
class related to dependency injection.
models
data class files for the API call response as we need it in the app.repository
interfaces that define the use case to be performed byData package
.
navigation
holds the navigation logic used on the app.screens
contains files that represents each screen, includes screen, cubit and state.widgets
reusable UI components that can be used throughout the application.
- contains the
notification_helper
which is a class to handle notifications.
This project includes unit tests for:
- Cubits
- Mappers
- Repository
And UI tests with Maestro