Recentemente, houve um artigo sobre arquitetura limpa no Flutter. Eu quero cobrir o tópico de um ângulo ligeiramente diferente e desenvolver o tópico de gerenciamento de estado global com Redux.
E um pouco sobre mim: venho criando produtos comerciais há cerca de 10 anos, dos quais estou na Flutter há quase 2 anos, e tive tempo de experimentar todos os gestores estaduais famosos. Alguns evocam memórias neutras - BLoC, Provider, um bloco de classe global com seus próprios streams, e alguns negativos - MobX.
Como resultado, para mim, decidi pelo Redux para o estado global e bibliotecas para implementar a estrutura do aplicativo:
valor_construído
built_collection
rxdart (opcional)
flutter_simple_dependency_injection (ou dioc)
construído _ redux
Este é o meu conjunto mínimo de bibliotecas para implementar projetos de qualquer nível.
Agora passo a passo
Estrutura geral da aplicação
Estrutura geral da aplicação
As pastas na raiz são todas padrão, criadas automaticamente, mas existem outras adicionais:
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 , )
E quero acrescentar que não existem projetos simples. Às vezes, um projeto de estimação se transforma em produtos comerciais. E então, após uma arquitetura projetada incorretamente, a operação normal pode se tornar impossível. Tenho um projeto, também no Flutter, que, por uma questão de interesse, tentei escrever através da arquitetura MobX. O projeto cresceu. Tornou-se, para dizer o mínimo, desconfortável trabalhar, tive que reescrever tudo no Redux.
O objetivo deste artigo era chamar a atenção de desenvolvedores novatos ou experientes para uma arquitetura Redux que teve um bom desempenho em um produto comercial muito grande com dezenas de milhares de usuários diários. Ela sobreviveu e resistiu à chegada / saída de colegas, à introdução / remoção de vários recursos.