Este repositório contém exemplos práticos de implementações das arquiteturas MVC, MVP, MVVM e Bloc/Cubit no Flutter. Ele foi criado para ajudar desenvolvedores a entender como essas arquiteturas podem ser aplicadas em aplicativos Flutter e como organizar melhor o código para diferentes cenários.
O padrão MVC divide o aplicativo em três camadas principais:
- Model: Gerencia os dados e a lógica de negócios.
- View: Responsável por renderizar a interface do usuário e exibir os dados.
- Controller: Atua como intermediário entre a View e o Model, processando as interações do usuário e atualizando a UI.
No padrão MVP, a lógica de apresentação é gerenciada pelo Presenter, que atua como um intermediário entre a View e o Model:
- Model: Fornece os dados e a lógica de negócios.
- View: Exibe a interface do usuário e interage com o Presenter por meio de um contrato.
- Presenter: Contém toda a lógica de apresentação e atualiza a View diretamente.
A arquitetura MVVM utiliza bindings reativos para conectar a View ao ViewModel:
- Model: Gerencia os dados e a lógica de negócios.
- View: Representa a interface do usuário e exibe os dados provenientes do ViewModel.
- ViewModel: Expõe dados da lógica de negócios em um formato que a View consegue consumir facilmente. A comunicação é feita de forma reativa, utilizando ferramentas como
ChangeNotifiereProvider.
O padrão Bloc/Cubit é uma abordagem de gerenciamento de estado que separa a lógica de negócios da interface do usuário:
- Cubit: Uma versão simplificada do Bloc que usa funções em vez de eventos para alterar o estado.
- Bloc: Utiliza fluxos de eventos e estados para gerenciar o estado da aplicação de forma reativa.
- A UI se reconstrui em resposta às mudanças de estado emitidas pelo Cubit/Bloc.
➡️ Código de Exemplo - Bloc/Cubit
/
├── mvc/
│ ├── data/
│ │ ├── models/
│ │ ├── repositories/
│ │ └── services/
│ ├── controllers/
│ ├── views/
│ └── main.dart
├── mvp/
│ ├── data/
│ │ ├── models/
│ │ ├── repositories/
│ │ └── services/
│ ├── presentation/
│ │ ├── presenters/
│ │ └── views/
│ └── main.dart
├── mvvm/
│ ├── data/
│ │ ├── models/
│ │ ├── repositories/
│ │ └── services/
│ ├── presentation/
│ │ ├── viewmodels/
│ │ ├── views/
│ │ └── widgets/
│ └── main.dart
├── bloc_cubit/
│ ├── data/
│ │ ├── models/
│ │ ├── repositories/
│ │ └── services/
│ ├── presentation/
│ │ ├── cubits/
│ │ ├── screens/
│ │ └── widgets/
│ └── main.dart
└── README.md
git clone https://github.com/BrendoKatagi/flutter_design_patterns.git
Acesse a pasta do exemplo desejado (MVC, MVP, MVVM ou Bloc/Cubit):
cd mvvm
Execute o projeto:
flutter run
Este repositório tem como objetivo:
- Demonstrar como organizar projetos Flutter utilizando diferentes arquiteturas.
- Ajudar desenvolvedores a entender as vantagens e desvantagens de cada abordagem.
- Servir como base para novos projetos.
Contribuições são bem-vindas! Sinta-se à vontade para abrir issues ou enviar um pull request com melhorias, novos exemplos ou dúvidas.
Este projeto está licenciado sob a licença MIT.