Skip to content

Application that shows pokemon list from PokeApi built with Flutter

License

Notifications You must be signed in to change notification settings

FarhanFDjabari/PokedexF

Repository files navigation

Pokedex F

License API Build Status
Profile

Application that shows pokemon list from PokeApi built with Flutter that demonstrates clean architecture using BLoC pattern and motion layout

screenshot

app-preview

Open Source Libraries

  • Minimum SDK level 16
  • Architecture
    • BLoC (Business Logic Component)
    • Kiwi: A simple yet efficient dependency injection container for Dart and Flutter.
    • Repository pattern
  • Retrofit: Retrofit is an dio client generator to generate api services module.
  • Dio: A powerful HTTP package for Dart/Flutter
  • Custom Views
    • Animations: Fancy pre-built animations that can easily be integrated into any Flutter application.
    • Animation Progress Bar: Show an animation progress bar in reactive style.
  • Floor: The typesafe, reactive, and lightweight runtime dependency SQLite abstraction for Flutter applications.
  • Infinite Scroll Pagination: Lazily load and display pages of items as the user scrolls down your screen
  • Go Router: A declarative router for Flutter based on Navigation 2
  • Lottie: Render After Effects animations natively on Flutter.
  • Freezed: Code generation for immutable classes that has a simple syntax/API without compromising on the features.
  • ScreenUtil: A flutter plugin for adapting screen and font size.
  • Dartz: Functional Programming in Dart using efficient immutable data structures, monads, lenses and other FP tools.

Architecture

Pokedex F is based on the BLoC architecture that implements the Repository pattern, which follows the Official BLoC architecture documentation

architecture

The overall architecture of this app is composed of Presentation/App layer, Domain layer, and Data layer. Each layer has its dedicated components and responsibilities.

Presentation / App Layer

Presentation / App layer consists of UI elements such as widgets to configure screens that can interact with the users and state management BLoC as app logic and states holder.

Domain Layer

Domain layer consists of core elements that are related to the business processes of the app. These elements include business data (entities) and business logic (use cases), as well as the abstraction of repository objects that communicate with other layers to obtain data from data sources and provide it to the users.

Data Layer

Data layer consists of the repository implementation and the data sources, which include local (database) and remote (API) data sources. This layer communicates with the domain layer to send response data to the presentation layer using the Dependency Inversion Principle.

REST API

Pokedex using the PokeAPI for constructing RESTful API.
PokeAPI provides a RESTful API interface to highly detailed objects built from thousands of lines of data related to Pokémon.

Installation Guide

  • Check if the flutter SDK and the version is v3.7.3 or higher. Instruction to change flutter channel.

  • Clone the repo

    git clone https://github.com/FarhanFDjabari/PokedexF.git
    
  • Get the pubspec packages

    flutter pub get
  • Some files like *.freezed.dart, *.g.dart are auto generated. If there is any issue from these files just run this command to regenerate them.

    flutter pub run build_runner build --delete-conflicting-outputs
  • Run the app

    flutter run

Special Thanks

  • I want to mention Jaewoong Eum (skydoves) for inspiring me to work on this repository. His project has been a huge inspiration and learning experience for me. Please check out his repo too! I'm sure you'll find it helpful.
  • Authors of all the packages I have used, who made our lives easier.

Like This Repository?

If you found my work helpful, please consider supporting me by starring this repository and follow my GitHub. Your support will motivate me to create more project and improve my skills. Thanks!

License

Designed and developed by 2023 FarhanFDjabari

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.