Skip to content

🦊 Explore 800+ pokemon(s) across all 8 generations and elevate your Pokemon Trainer Level with Poké-Quiz and Poké-Scan features

License

Notifications You must be signed in to change notification settings

binaryshrey/Pokedex

Repository files navigation

Banner

Pokédex

Web API ktlint

Introducing the ultimate pokemon companion app with Poké-Scan feature that indentifies & provides in-depth information about any pokemon. Explore 800+ pokemon(s) across all 8 generations and elevate your Pokemon Trainer Level with Poké-Quiz and Poké-Scan features


Download the app today.

Pokedex App


Features


App Features


Built With 🛠

  • Kotlin - Official programming language for Android development.

  • Android Architecture Components - Collection of libraries that help you design robust, testable, and maintainable apps.

    • Coroutines : A coroutine is an instance of suspendable computation.
    • DataBinding : The Data Binding Library is a support library that allows you to bind UI components in your layouts to data sources in your app using a declarative format rather than programmatically.
    • DataStore : Jetpack DataStore is a data storage solution that allows you to store key-value pairs or typed objects with protocol buffers.
    • Firebase : Firebase is a set of backend cloud computing services and application development platforms provided by Google.
    • Glide : An image loading and caching library for Android focused on smooth scrolling.
    • Jetpack Navigation : Navigation refers to the interactions that allow users to navigate across, into, and back out from the different pieces of content within your app.
    • Jetpack Preference Setting : Settings allow users to change the functionality and behavior of an application.
    • LiveData : LiveData is an observable data holder class.
    • Lottie : Lottie is a library for Android, iOS, Web, and Windows that parses Adobe After Effects animations exported as JSON with Bodymovin and renders them natively on mobile and on the web.
    • ML-Kit : ML Kit brings Google's machine learning expertise to mobile developers in a powerful and easy-to-use package.
    • Moshi : A modern JSON library for Kotlin and Java.
    • RecyelerView : A flexible view for providing a limited window into a large data set.
    • Retrofit : A type-safe HTTP client for Android and Java.
    • Room : The Room persistence library provides an abstraction layer over SQLite to allow fluent database access while harnessing the full power of SQLite.
    • Safe Args : The recommended way to navigate between destinations.
    • Splash Screen API : Splash Screen is usually the first screen visible to the user when the application is launched.
    • Swipe Refresh Layout : The swipe-to-refresh user interface pattern is implemented entirely within the SwipeRefreshLayout widget, which detects the vertical swipe, displays a distinctive progress bar, and triggers callback methods in the app.
    • ViewModel : Stores UI-related data that isn't destroyed on UI changes.
  • Gatsby : Gatsby is a free and open source framework based on React that helps developers build blazing fast websites and apps.

  • Figma : Figma is a vector graphics editor and prototyping tool which is primarily web-based.

  • Material Components for Android : Modular and customizable Material Design UI components for Android.


Architecture

Pokedex is based on the MVVM architecture and the Repository pattern, which follows the Google's official architecture guidance. architecture

Pokedex was built with Guide to app architecture, so it would be a great sample to show how the architecture works in real-world projects.

The overall architecture of Pokedex is composed of three layers - the UI layer, the Domain layer and the Data layer. Each layer has dedicated components and they have each different responsibilities, as defined below.

Architecture Overview

architecture

  • Each layer follows unidirectional event/data flow; the UI layer emits user events to the data layer, and the data layer exposes data as a stream to other layers.
  • The data layer is designed to work independently from other layers and must be pure, which means it doesn't have any dependencies on the other layers.

With this loosely coupled architecture, you can increase the reusability of components and scalability of your app.

UI Layer

architecture

The UI layer consists of UI elements to configure screens that could interact with users and ViewModel that holds app states and restores data when configuration changes.

  • UI elements observe the data flow via DataBinding, which is the most essential part of the MVVM architecture.

Data Layer

architecture

The data Layer consists of repositories, which include business logic, such as querying data from the local database and requesting remote data from the network. It is implemented as an offline-first source of business logic and follows the single source of truth principle.


Find this repository useful? ❤️

Support it by joining stargazers for this repository. ⭐
Also, submit an issue on GitHub for my any bugs or to request new features!


App Development setup

git clone https://github.com/binaryshrey/Pokedex.git
cd Pokedex
  • Create a new Firebase project & add an android app with package name - dev.shreyansh.pokemon.pokedex
  • Enable Google as 'Login-Provider' under Firebase Authentication
  • Download the google-services.json file and place it under the app folder

Web Development setup

git clone https://github.com/binaryshrey/Pokedex.git
cd Pokedex
npm i
gatsby develop

Development server runs at http://localhost:8000.

Web Prod setup

gatsby build
gatsby serve

Production server runs at http://localhost:9000. Build is generated at public (which is deployable).


Web Lighthouse scores

Lighthouse metrics


License 🔖

MIT License

Copyright (c) 2023 Shreyansh Saurabh

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.