Este desafio foi proposto pela equipe da VR Software, e se trata de um CRUD de um sistema academico. É possível consultar, criar, excluir e editar tanto alunos quanto cursos. Além disso há uma parte que é possível matricular um aluno a um curso e também remover esse vínculo.
- Página Inicial: Tela principal onde é possível escolher uma ação a ser realizada.
- Alunos: Na página de alunos há uma listagem dos alunos matriculados assim que a tela é iniciada. Além disso, também é mostrado em baixo as as ações de excluir, cadastrar e editar aluno.
- Cursos: Na página de cursos há uma listagem dos cursos registrados assim que a tela é iniciada. Além disso, também é mostrado em baixo as as ações de excluir, cadastrar e editar um curso.
- Matrícula: Na página de matrícula há dois campos de texto com um toggle button onde é possível selecionar a ação de víncular ou apagar aluno de um curso. Com uma SnackBar indicando se a ação foi realizada com sucesso ou não.
- Flutter - v3.24.0
- PostgreSQL 17
- Java 23
- Spring v3.3.4
- Bloc: Uma biblioteca para implementar o padrão BLoC.
- Bloc_test: Pacote usado para testar eventos e estados BLoC.
- Equatable: Pacote usado para comparação entre objetos.
- Flutter_bloc: Fornece integração entre Flutter e BLoC para gerenciamento de estado.
- HTTP: Pacote utilizado para criar requisições web.
- Mocktail: Um pacote usado para criar mocks para testes unitários.
- Gerenciamento de Estado: Foi utilizado BLoC e Flutter BLoC para gerenciar o estado do aplicativo.
- Injeção de Dependência: Gerenciado através do próprio Provider que já vem incluso com o pacote Flutter BLoC.
- Solicitações de API: HTTP para comunicação de rede.
- Testes: Mocktail, Bloc Test para testes unitários e de widgets.
Esta combinação de pacotes e práticas garante uma arquitetura de aplicativo robusta, manutenível e testável.
- Neste projeto, escolhi usar cubits para gerenciamento de estado. Minha escolha foi motivada por vários motivos: cubits/BLoC é um padrão bem definido, altamente testável, amplamente adotado no mercado e oferece flexibilidade para ajustar a interface do usuário.
- Testes de widget da home_page e students_page e save_student_widget, além do testes do students_cubit.
- Data: Lidar com a comunicação com fontes externas e gerenciamento de dados.
- Domain: Lida com as abstrações criada que devem mostrar como a camada de Data deve implementar os métodos criados.
- Presentation: Representação visual das telas do aplicativo, junto com os states e cubits.
- Utils: Classes que ajudam/encapsulam alguma lógica para ajudar a implementaçào de algo no app.
- Controllers: Recebem os dados vindos do app e se comunica com o a API.
- DTOs: Representação de um objeto de transferência de dados.
- Models: Representação de entidades no banco de dados.
- Repositories: Repositories Spring Data JPA para uma entendidade.
- Home page
- Student page
- Courses Page
- Enroll Page