Kürzlich gab es einen Artikel über saubere Architektur in Flutter. Ich möchte das Thema aus einem etwas anderen Blickwinkel behandeln und das Thema der Verwaltung des globalen Zustands mit Redux entwickeln.
Und ein wenig über mich selbst: Ich habe seit ungefähr 10 Jahren kommerzielle Produkte entwickelt, von denen ich seit fast 2 Jahren bei Flutter bin, und ich habe es geschafft, alle berühmten Staatsmanager auszuprobieren. Einige rufen neutrale Erinnerungen hervor - BLoC, Provider, eine globale Blockklasse mit ihren Streams, andere negative - MobX.
Aus diesem Grund habe ich mich für den globalen Status und die Bibliotheken für die Implementierung der Anwendungsstruktur für Redux entschieden:
built_value
built_collection
rxdart (optional)
flutter_simple_dependency_injection (oder Diözese)
gebaut _ Redux
Dies ist meine minimale Anzahl von Bibliotheken für die Implementierung von Projekten jeder Ebene.
Nun Schritt für Schritt
Allgemeine Struktur der Anwendung
Allgemeine Struktur der Anwendung
Die Ordner im Stammverzeichnis sind alle Standardordner. Sie werden automatisch erstellt, es gibt jedoch weitere:
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 , )
Und ich möchte hinzufügen, dass es keine einfachen Projekte gibt. Manchmal wächst ein Haustierprojekt zu kommerziellen Produkten. Und dann kann nach einer falsch gestalteten Architektur ein normaler Betrieb unmöglich werden. Ich habe ein Projekt, auch über Flutter, das ich aus Interesse versucht habe, durch die MobX-Architektur zu schreiben. Das Projekt ist gewachsen. Es wurde, gelinde gesagt, unangenehm zu arbeiten, ich musste alles auf Redux umschreiben.
Der Zweck dieses Artikels war es, Anfänger oder erfahrene Entwickler auf eine Redux-Architektur aufmerksam zu machen, die bei einem sehr großen kommerziellen Produkt mit Zehntausenden von täglichen Benutzern gute Ergebnisse erzielt hat. Sie überlebte und widerstand der Ankunft / Abreise von Kollegen, der Einführung / Entfernung verschiedener Merkmale.