Skip to content

NicosNicolaou16/Pokedex_Compose

Repository files navigation

Pokedex Compose

Linktree Site X LinkedIn Medium Mastodon Bluesky Dev.to blog YouTube Google Developer Profile

A modern Pokédex app for Android built with the latest technologies recommended by Google. This project showcases a clean, scalable architecture and a fluid user interface using Jetpack Compose.

Important

A similar project is also available in Flutter (Dart)!
👉 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 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.
  • Navigation: Leverages Navigation 3 and its Type Safety features for robust, compile-time checked, and error-free navigation.

📸 Screenshots & Demos

Pokemon List Screen Pokemon Detail Screen Pokemon Stats List to Detail Transition Scrolling and Searching

Landscape Detail View   Landscape to Portrait Transition

🛠️ Tech Stack & Libraries

This project is built with Kotlin and utilizes a variety of modern Android libraries and tools:

🏗️ Architecture

The project follows Clean Architecture principles combined with MVVM (Model-View-ViewModel) and Unidirectional Data Flow (UDF). This ensures a clean separation of concerns, making the codebase scalable, maintainable, and testable.

Project Structure

├── data/
│   ├── di/                 # Hilt Modules
│   ├── network/            # Retrofit DTOs and API Service
│   ├── room_database/      # Room Entities and DAOs
│   ├── repository_impl/    # Repository Implementations
│   └── mappers/            # Data transformation logic
├── domain/
│   └── repositories/       # Repository Interfaces
├── presentation/
│   ├── navigation/         # Navigation 3 setup and Navigator
│   ├── pokemon_list/       # List feature (Screen, ViewModel, State)
│   └── pokemon_details/    # Detail feature (Screen, ViewModel, State)
├── ui/
│   └── theme/              # Compose Theme (Color, Type, etc.)
└── utils/                  # Extension functions and generic classes

🔧 Versioning

  • Target SDK: 36
  • Minimum SDK: 29
  • Kotlin Version: 2.3.21
  • Gradle Version: 9.2.1

📚 APIs & References

Data Sources

Articles & Inspiration

⭐ Stargazers

If you enjoy this project, please give it a star! Check out all the stargazers here: Stargazers on GitHub

🙏 Support & Contributions

This project is actively maintained. Feedback, bug reports, and feature requests are welcome! Please feel free to open an issue or submit a pull request.