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/
Architecture branches
To experiment with project architecture, we are going to implement different approaches in different branches
Branch | Description |
---|---|
architecture/multiple_packages_mvp | Multiple packages, model view presenter |
architecture/multiple_packages_scoped_model | Multiple packages, scoped model |
architecture/multiple_packages_stream_builder | Multiple packages, stream builder |
architecture/single_package_stream_builder | Single package, stream_builder |
architecture/single_package_platform_channel | Single package, platform channel |
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!
Animation branches
To experiment with animations, we are going to create different branches
Branch | Description |
---|---|
animations/animated_builder | Experiment with animated builder widget |
TODO branches
- Flare
- Lottie
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/
. For instance, to run mock flavor, executeflutter 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
TODO
Thanks to:
- Thanks to @sergioch23 and @Dany4794, take a look to Votlin app -> https://github.com/sergiocasero/votlin-app
- Thanks to @GDGBarcelona and its organizers, Flutter meetups in Barcelona are really helpful
- Thanks to great people from Flutter Community:
- @brianegan -> https://github.com/brianegan
- @norbertkozsir -> https://github.com/Norbert515
- @ThomasBurkhartB -> https://github.com/escamoteur
- @DidierBoelens -> https://github.com/boeledi
- @SergiAndReplace -> https://github.com/sergiandreplace
Contributing
Feel free to open issues or make a pull request. All contributions are welcome!