Skip to content

Flutter app that allows users to navigate the catalog of artworks exposed by the Art Institute of Chicago API

Notifications You must be signed in to change notification settings

alejandro-rios/Art-Catalog-App-Flutter

Repository files navigation

Art Catalog App 🎉🎉

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.

⚙️ Architecture

The architecture used for the application consists of the following:

  • Clean Architecture.
  • Repository pattern.
  • BLoC pattern using Cubit.

📚 Tech stack

  • 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.

🧱 Project Structure

.
├── data
│   ├── db
│   ├── mappers
│   ├── models
│   ├── network
│   ├── repository
│   └── utils
├── di
├── domain
│   ├── models
│   └── repository
├── helpers
└── ui
    ├── navigation
    ├── screens
    └── widgets

Data Package

  • 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 in Domain package.
  • utils contains a Result Wrapper(CallResponse) and constant values used in network.

Di Package

  • contains the injection_container class related to dependency injection.

Domain Package

  • 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 by Data package.

UI 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.

Helper Package

  • contains the notification_helper which is a class to handle notifications.

🧪 Testing

This project includes unit tests for:

  • Cubits
  • Mappers
  • Repository

unit_tests

And UI tests with Maestro

🖼️ Android Images

android_home_screen android_home_screen_pagination android_favorites_screen android_favorites_empty_screen android_artwork_detail android_artwork_detail_saved android_artwork_detail_removed android_error_view

🖼️ iOS Images

ios_home_screen ios_home_screen_pagination ios_favorites_screen ios_favorites_empty_screen ios_artwork_detail ios_artwork_detail_saved ios_artwork_detail_removed ios_error_view

📓 Notes and considerations

  • Most of the colors where taken from the original website, but I'm not an expert 😅.
  • warning image taken from here
  • placeholder image taken from here
  • empty_box image taken from here
  • logo image taken from here
  • no_image icon taken from here

About

Flutter app that allows users to navigate the catalog of artworks exposed by the Art Institute of Chicago API

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages