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
└── widgetsdbcontains the class related to local storage with Isar.mappersas the name suggests, this folder contains the required files to pass the info from the API response to the domain models in the project.modelsdata class files for the API call response.networkrepresentation for the API Network client calls.repositoryclass implementation for each interface call declared inDomain package.utilscontains a Result Wrapper(CallResponse) and constant values used innetwork.
- contains the
injection_containerclass related to dependency injection.
modelsdata class files for the API call response as we need it in the app.repositoryinterfaces that define the use case to be performed byData package.
navigationholds the navigation logic used on the app.screenscontains files that represents each screen, includes screen, cubit and state.widgetsreusable UI components that can be used throughout the application.
- contains the
notification_helperwhich is a class to handle notifications.
This project includes unit tests for:
- Cubits
- Mappers
- Repository
And UI tests with Maestro
















