https://github.com/nicosnicolaou16/pokedex_compose_multi_module
This Pokedex Pokémon app is a project that incorporates the latest Android technologies recommended by Google, such as Multi-Module Architecture and Jetpack Compose, the new standard for building UI.
https://github.com/nicosnicolaou16/pokedex_compose_multi_module
android android-application coroutines-android hilt-dependency-injection-android jetpack-compose kotlin kotlin-android ksp multi-module percentages pokedex pokemon repository-pattern retrofit2 room-database shared-element-transition ui-state view-model viewmodel
Last synced: 4 months ago
JSON representation
This Pokedex Pokémon app is a project that incorporates the latest Android technologies recommended by Google, such as Multi-Module Architecture and Jetpack Compose, the new standard for building UI.
- Host: GitHub
- URL: https://github.com/nicosnicolaou16/pokedex_compose_multi_module
- Owner: NicosNicolaou16
- License: apache-2.0
- Created: 2024-08-24T21:56:54.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2025-05-31T19:53:52.000Z (about 1 year ago)
- Last Synced: 2025-06-01T05:36:55.582Z (about 1 year ago)
- Topics: android, android-application, coroutines-android, hilt-dependency-injection-android, jetpack-compose, kotlin, kotlin-android, ksp, multi-module, percentages, pokedex, pokemon, repository-pattern, retrofit2, room-database, shared-element-transition, ui-state, view-model, viewmodel
- Language: Kotlin
- Homepage:
- Size: 21.7 MB
- Stars: 4
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Pokedex Compose Multi-Module
[](https://linktr.ee/nicos_nicolaou)
[](https://nicosnicolaou16.github.io/)
[](https://twitter.com/nicolaou_nicos)
[](https://linkedin.com/in/nicos-nicolaou-a16720aa)
[](https://medium.com/@nicosnicolaou)
[](https://androiddev.social/@nicolaou_nicos)
[](https://bsky.app/profile/nicolaounicos.bsky.social)
[](https://dev.to/nicosnicolaou16)
[](https://www.youtube.com/@nicosnicolaou16)
[](https://g.dev/nicolaou_nicos)
A modern Pokédex app for Android built with the latest technologies recommended by Google. This project showcases a clean, scalable multi-module architecture and a fluid user interface using Jetpack Compose.
> [!IMPORTANT]
> A similar project is also available in Flutter (Dart)!
> 👉 **[Pokedex_Flutter](https://github.com/NicosNicolaou16/Pokedex_Flutter)** 👈
## ✨ Features
* **Modern UI:** Built entirely with **Jetpack Compose** for a declarative and intuitive UI.
* **Dynamic Theming:** Extracts prominent colors from Pokémon images using the **Palette API** to create dynamic and immersive detail screens.
* **Seamless Transitions:** Implements the new **Shared Element Transition** for smooth navigation between the list and detail views.
* **Offline Support:** Caches Pokémon data using **Room Database**, allowing the app to work offline.
* **Efficient Networking:** Fetches data from the [PokéAPI](https://pokeapi.co/) using **Retrofit**.
* **Optimized Performance:** Leverages **Coroutines** for asynchronous operations, **KSP** for faster annotation processing, and **R8** for code shrinking.
* **Scalable Architecture:** Follows the **MVVM** pattern with a repository, ensuring a clean separation of concerns and maintainable code.
* **Type-Safe Navigation:** Utilizes **Navigation 3** for robust, compile-time checked, and error-free navigation.
## 📸 Screenshots & Demos
## 🛠️ Tech Stack & Libraries
This project is built with **[Kotlin](https://kotlinlang.org/docs/getting-started.html)** and utilizes a variety of modern Android libraries and tools:
- **UI:** [Jetpack Compose](https://developer.android.com/develop/ui/compose), [Coil](https://coil-kt.github.io/coil/compose/) (Image Loading), [Palette API](https://developer.android.com/develop/ui/views/graphics/palette-colors)
- **Architecture:** [MVVM](https://developer.android.com/topic/architecture#recommended-app-arch), [UI State Management](https://developer.android.com/topic/architecture/ui-layer/events#handle-viewmodel-events)
- **Asynchronicity:** [Kotlin Coroutines](https://kotlinlang.org/docs/coroutines-overview.html), [Kotlin KTX](https://developer.android.com/kotlin/ktx)
- **Navigation:** [Navigation Compose 3](https://developer.android.com/guide/navigation/navigation-3), [Navigation Type Safety](https://medium.com/androiddevelopers/navigation-compose-meet-type-safety-e081fb3cf2f8), [Shared Element Transition](https://developer.android.com/develop/ui/compose/animation/shared-elements)
- **Data:** [Retrofit](https://square.github.io/retrofit/) (Networking), [Room](https://developer.android.com/training/data-storage/room) (Database)
- **Dependency Injection:** [Hilt](https://dagger.dev/hilt/)
- **Build & Optimization:** [KSP](https://developer.android.com/build/migrate-to-ksp), [R8](https://developer.android.com/build/shrink-code)
- **Custom Components:** [PercentageWithAnimation](https://github.com/NicosNicolaou16/PercentagesWithAnimationCompose) for displaying Pokémon stats built by [@NicosNicolaou16](https://github.com/NicosNicolaou16).
## 📦 Modules Overview
This project follows a multi-module architecture to promote separation of concerns, scalability, and improved build times.
- **`:app`**
- The main application module that integrates all other modules.
- **`:compose_ui` (Feature Module)**
- Contains all UI-related components, screens, and utilities. This module is responsible for everything the user sees and interacts with.
- **`:core` (Core Module)**
- Holds the business logic and data models (domain models) for the entire application, ensuring that core functionalities are decoupled from the UI and data layers.
- **`:database` (Core Module)**
- Manages the local database using Room, including entity definitions, DAOs, Mappers, and repository implementations for data persistence.
- **`:navigation` (Core Module)**
- Handles all navigation logic, defining screen destinations and ensuring a consistent and type-safe flow throughout the app.
- **`:network` (Core Module)**
- Responsible for all remote data operations, including API services (Retrofit), data transfer objects (DTOs), and network-related dependency injection.
## 🔧 How to Create an Android Library Module
To add a new library module in Android Studio, follow these steps:
1. Go to `File` -> `New` -> `New Module...`
2. Select `Android Library` from the list.
3. Provide a name for your module (e.g., `feature_new`).
4. Click `Finish`.
## ⚙️ Versioning
- **Target SDK:** `36`
- **Minimum SDK:** `29`
- **Kotlin Version:** `2.3.10`
- **Gradle Version:** `9.0.0`
## 📚 APIs & References
### Data Sources
- **Primary API:** [PokéAPI (pokeapi.co)](https://pokeapi.co/)
- **Image Sprites:** [PokeAPI/sprites on GitHub](https://github.com/PokeAPI/sprites)
### Articles & Inspiration
- **Shared Element Transitions:**
- [Shared Element Transitions in Jetpack Compose](https://fvilarino.medium.com/shared-element-transitions-in-jetpack-compose-8f553078101e)
- [Building a Shared Element Transition in Jetpack Compose](https://getstream.io/blog/shared-element-compose/)
- **Type-Safe Navigation:**
- [Navigation-Compose meets Type-Safety](https://medium.com/androiddevelopers/navigation-compose-meet-type-safety-e081fb3cf2f8)
- **UI/UX Design Inspiration:**
- [Dribbble - Pokedex App by Alexandr](https://dribbble.com/shots/6540871-Pokedex-App) (Note: Used as inspiration, not a direct copy)
- **App Icon:**
- Derived from [Fandom Ideas Wiki](https://ideas.fandom.com/wiki/Pok%C3%A9_Ball_Pok%C3%A9mon_Ideas_(Super_Smash_Bros._series)?file=Pok%C3%A9_Ball_Redraw_by_oykawoo.png)