Search packages, repositories and app categories

GitHub repositoryHarryHaiVn/Flutter-Clean-Architecture-MVVM

Flutter-Clean-Architecture-MVVM

In this article I will share a brief overview of how I implement Clean Architecture in my Flutter application.

Flutter-Clean-Architecture-MVVM project cover
Stars
100
Forks
42
Last push (UTC)
Jun 10, 2020
Project status
Active

Original README

English project snapshot. Visit GitHub for the latest content.

Flutter Clean Architecture MVVM sample.

Sample of flutter using Clean Architecture and MVVM.

In this article, we show you how MVVM with Flutter could look like.

We’ll create a functional reactive ViewModel using Darts Stream API.

MVVM

Before we look at any code, we should get a basic understanding of MVVM (Model-View-ViewModel).

How does this look for my Android project?

Module Structure

There are 3 main modules to help separate the code. They are Data, Domain, and Application.

  • Data contains Local Storage, APIs, Data objects (Request/Response object, DB objects), and the repository implementation.

  • Domain contains UseCases, Domain Objects/Models (Pojos/Kotlin Data Classes), and Repository Interfaces

  • Application contains UI, View Objects, Android components, etc. Can be split into separate modules itself if needed. For example, we could have a module called Device handling things like camera, location, etc.

Repository

  • Bridge between Data layer and Domain layer
  • Connects to data sources and returns mapped data
  • Data sources include DB, Api, and RxCache (Cache of data that is constantly emitting updates to subscribers. More on this in another post).
  • Always store mapped data. E.g. Store the domain objects in the RxCache.

UseCase

  • Responsible for connecting to repository to retrieve necessary data. Can either return a Flowable that will emit each update (from RxCache), or a Single/Completable that finishes after result is retrieved.
  • This is where the business logic takes place.
  • Returns data downstream.
  • Single use.
  • Lives in Domain (No Android dependencies. Very testable).

ViewModel

  • Organizes data and holds View state.
  • Talks to use cases.
  • Does not know about the View.

View

  • Updates UI
  • Knows about the ViewModel
  • Observes changes to ViewModel.

Router

  • I leave this open ended to suit each projects needs. The main point here is that it is important to consolidate navigation logic to one place. This helps with maintenance and unit testing.

New Feature

  • Multi Language
HarryHaiVn GitHub avatar
GitHub author

HarryHaiVn ↗

Hà Nội
LanguagesDartSwiftKotlinObjective-C

Categories

Dependencies used

Dependency list 10 items

Rankings

How do I choose a repository?

Start with your use case, compare repository activity, and check the original project before adopting it.

  1. Search by repository name, owner or description, then narrow the results by topic.
  2. Compare stars, forks and recent pushes. Stars show community interest, not a guarantee of quality.
  3. Read the README, license and issues on GitHub before using a project.

Sources and maintenance

“A repository is the most basic element of GitHub.”

GitHub Docs — About repositories ↗