Recientemente apareció un artículo sobre arquitectura limpia en Flutter. Quiero cubrir el tema desde un ángulo ligeramente diferente y desarrollar el tema de la gestión del estado global con Redux.
Y un poco sobre mí: he estado creando productos comerciales durante unos 10 años, de los cuales he estado en Flutter durante casi 2 años, y logré probar a todos los gerentes estatales famosos. Algunos evocan recuerdos neutrales: BLoC, Provider, una clase de bloque global con sus transmisiones, y algunos negativos: MobX.
Como resultado, para mí, me decidí por Redux para el estado global y las bibliotecas para implementar la estructura de la aplicación:
valor_construido
built_collection
rxdart (opcional)
flutter_simple_dependency_injection (o dioc)
construido _ redux
Este es mi conjunto mínimo de bibliotecas para implementar proyectos de cualquier nivel.
Ahora paso a paso
Estructura general de la aplicación
Estructura general de la aplicación
Las carpetas en la raíz son todas estándar, se crean automáticamente, pero hay otras adicionales:
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 , )
Y quiero agregar que no hay proyectos simples. A veces, un proyecto favorito se convierte en productos comerciales. Y luego, después de una arquitectura diseñada incorrectamente, el funcionamiento normal puede volverse imposible. Tengo un proyecto, también en Flutter, que, por interés, traté de escribir a través de la arquitectura MobX. El proyecto ha crecido. Se volvió, por decirlo suavemente, incómodo trabajar, tuve que reescribir todo en Redux.
El propósito de este artículo era llamar la atención de desarrolladores novatos o experimentados sobre una arquitectura Redux que ha funcionado bien en un producto comercial muy grande con decenas de miles de usuarios diarios. Ella sobrevivió y resistió la llegada / salida de colegas, la introducción / eliminación de varias funciones.