Flutter Votlin App
Flutter clone of Kotlin Multiplatform Votlin App -> https://github.com/sergiocasero/votlin-app
Kotlin multiplatform is great, but Flutter can be a fantastic alternative!
This is a small petshop with a master/detail structure. It lists the talks from Extremadura Digital Day event.
Getting Started with Flutter
For help getting started with Flutter, view the online documentation.
If you want to find how amazing is Flutter, take a look at this repo -> https://github.com/Solido/awesome-flutter
Project architecture
There are some architectures and patterns that are followed by the great community of Flutter:
- Redux
- Bloc pattern
- Scope Model
- Inherited Widget
- Model View Controller
- Model View Intent
A great resource related to flutter architectures -> https://github.com/brianegan/flutter_architecture_samples
Flutter community, for some reason, by the moment, is ignoring Clean Architecture… so, why not give a oportunity to clean architecture in flutter?
This project try to follow the clean architecture structure. Some related resources:
http://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html
https://fernandocejas.com/2014/09/03/architecting-android-the-clean-way/
In this project we have three modules:
flutter_votlin_app -> Flutter main module. Also contains the user interface.
domain -> Business layer. Flutter dependences not allowed! Only dart dependencies allowed!
data -> Data sources layer. Flutter dependences not allowed! Only dart dependencies allowed!
But… is Clean Architecture the best architecture for Flutter?
Absolutely not. This is only a petshop project for experiment with Clean Architecture and with Flutter framework. We don’t know what is the best architecture for Flutter. The only way to find it is experimenting!
How to build and run
Building the code
- Use your favorite IDE. Flutter supports different IDE
- If you don’t have Flutter installed, follow the official docs: https://flutter.io/docs/get-started/install
- If your IDE shows some errors, don’t forget to execute command flutter packages get in domain and data modules
Running the Android app
We have created some kind of flavors in flutter app, inspired by this post
Actually, we have added configuration for each flavor in data layer
Probably we can find better ways, but this is only the beginning.
To run the android app:
- Execute flutter run lib/<main_file>. For instance, to run mock flavor, execute flutter run lib/main-mock.dart.
- If you execute flutter run, mock flavor is executed
|
Flavor |
Description |
Main file |
|
MOCK |
Offline version, mocked with a json file |
main-mock.dart |
|
LOCALHOST_EMULATOR |
Online version, against localhost, running in the emulator. Json server required |
main-localhost_emulator.dart |
Running the iOS app
TODO
Running the backend
Mock flavor does not backend, because we get the information from hardcoded json.
MOCK
No backend required, we get the information from hardcoded json
LOCALHOST
- Install node and json-server
- Copy this file to arbitrary folder
- Run ./json-server schedule.json
Running tests
Credit (github url) : https://github.com/worldline-spain/flutter_votlin_app
Next Article : https://flutterappdev.com/2019/01/18/contains-screenshot-blur-flutter-mobile-app-development/








