flutter_architecture_samples

TodoMVC for Flutter!
Flutter provides a lot of flexibility in deciding how to organize and architect
your apps. While this freedom is very valuable, it can also lead to apps with
large classes, inconsistent naming schemes, as well as mismatching or missing
architectures. These types of issues can make testing, maintaining and extending
your apps difficult.
The Flutter Architecture Samples project demonstrates strategies to help solve
or avoid these common problems. This project implements the same app using
different architectural concepts and tools.
You can use the samples in this project as a learning reference, as a roughly
apples-to-apples comparison of different approaches, or as a starting point for
creating your own apps. The focus of this project is on demonstrating how to
structure your code, design your architecture, and the eventual impact of
adopting these patterns on testing and maintaining your app. You can use the
techniques demonstrated here in many different ways to build apps. Your own
particular priorities will impact how you implement the concepts in these
projects, so you should not consider these samples to be canonical examples. To
ensure the focus is kept on the aims described above, the app uses a simple UI.
Current Samples
Supporting Code
- integration_tests - Demonstrates how to write
selenium-style integration (aka end to end) tests using the Page Object Model.
This test suite is run against all samples.
- todos_repository_core - Defines the core abstract
classes for loading and saving data so that storage can be implemented in
various ways, such as file storage or firebase for mobile projects, or
window.localStorage for web projects.
- todos_repository_local_storage - Implements
the todos repository using the file system, window.localStorage, and
SharedPreferences as the data source.
Running the samples
cd <sample_directory>
flutter run
Why a todo app?
The app in this project aims to be as simple as possible while still showcasing
different design decisions and testing scenarios. For more information, see the
app’s specification.
Be excellent to each other
This Repo is meant as a discussion platform for various architectures. Let us
debate these ideas vigorously, but let us be excellent to each other in the
process!
While healthy debate and contributions are very welcome, trolls are not. Read
the code of conduct for detailed information.
Contributing
Feel free to join in the discussion, file issues, and we’d love to have more
samples added! Please read the CONTRIBUTING file for guidance
:)
License
All code in this repo is MIT licensed.
Attribution
All of these ideas and even some of the language are directly influenced by two
projects:
Contributors
I’d like to thank all of the folks who have helped write new samples, improve
the current implementations, and added documentation! You’re amazing! :)
评论