Récemment, il y avait un article sur l'architecture propre dans Flutter. Je veux couvrir le sujet sous un angle légèrement différent et développer le sujet de la gestion de l'état global avec Redux.
Et un peu sur moi-même: je crée des produits commerciaux depuis environ 10 ans, dont je suis chez Flutter depuis presque 2 ans, et j'ai réussi à essayer tous les fameux State Managers. Certains évoquent des souvenirs neutres - BLoC, Provider, une classe de bloc globale avec leurs flux, et d'autres négatifs - MobX.
En conséquence, pour moi, j'ai opté pour Redux pour l'état global et les bibliothèques pour l'implémentation de la structure de l'application:
built_value
built_collection
rxdart (facultatif)
flutter_simple_dependency_injection (ou dioc)
construit _ redux
Ceci est mon ensemble minimal de bibliothèques pour la mise en œuvre de projets de tous niveaux.
Maintenant étape par étape
Structure générale de l'application
Structure générale de l'application
Les dossiers à la racine sont tous standard, créés automatiquement, mais il y en a d'autres:
go - hover. . , GoLang. , , , sqlite , . IDE, , SQLiteStudio. -
hover init
, -
build.yaml - built_value,
analysis_options.yaml - . .
scripts - /// : , , , Flutter, . -. : prepare_app - Flutter, prepare_app_hover - hover. , ( ) dartfix -
application_bundle - . , JSON - - "" , , ..
-
Flutter-
lib :
domain - : , , , , , ,
tools -
di - ,
features - UI , ,
services - , , ,
app - . MaterialApp CupertinoApp
app_routes.dart -
Domain
models/enums
“” , , quicktype. , JSON /, .. , built_value, :
-
actions
built_redux Redux-
-
middlewares
, built_redux
-
epics
. built_redux. rxdart
-
reducers
,
-
states
Redux. - - AppState, : , .. built_redux
-
DI
. flutter_simple_dependency_injection
Features
- , . - blocs, components, widgets, tools. - widgets . (BLoC) - , . - - . StatefulWidget’
initState
- StreamBuilder’
dispose
components - -,
BLoC
- -. , di-. , -
BLoC
- BaseBloc .
BLoC-
:
,
. / , , . , - (, , , ..), ( , , , nextSubstate)
-
StreamBuilder:
, , , .
:
. , . 300 2
Redux , ,
:
, , built_value “ ”
Redux
/
. , 13 Flutter ,
, UI - , ( Redux , )
Et je veux ajouter qu'il n'y a pas de projets simples. Parfois, un projet pour animaux de compagnie se transforme en produits commerciaux. Et puis, après une architecture mal conçue, un fonctionnement normal peut devenir impossible. J'ai un projet, également sur Flutter, que, par souci d'intérêt, j'ai essayé d'écrire à travers l'architecture MobX. Le projet a grandi. Il est devenu, pour le dire légèrement, inconfortable de travailler, j'ai dû tout réécrire sur Redux.
Le but de cet article était d'attirer l'attention des développeurs novices ou expérimentés sur une architecture Redux qui a bien fonctionné sur un très gros produit commercial avec des dizaines de milliers d'utilisateurs quotidiens. Elle a survécu et a résisté à l'arrivée / départ de collègues, à l'introduction / suppression de diverses fonctionnalités.