Flutter, TDD, Clean Architecture, SOLID e Design Patterns
Nesse curso irei demonstrar na prática como criar um aplicativo com Flutter seguindo as melhores metodologias do mercado. Se você está cansado de cursos básicos e quer realmente aprender sobre conteúdos avançados e relevantes como: Design Patterns, Clean Architecture, SOLID, DRY, KISS, YAGNI, SoC, TDD, DDD, BDD, você está no lugar certo. O objetivo maior desse treinamento é fazer você sair da sua zona de conforto e ver que existem muitas coisas a serem estudadas para se tornar um líder técnico ou um arquiteto de software.
More
Vamos criar um aplicativo completo com Login, Cadastro, Lista de Enquetes, Responder uma Enquete e Resultado da Enquete.
Vamos aprender a fazer gerenciamento de estado de forma simples e efetiva com testes e utilizando a biblioteca GetX.
Vamos aprender como manter um usuário logado gravando seu token de acesso de forma segura.
Vamos fazer o aplicativo ficar funcional online e offline.
Vamos tornar o aplicativo multi-idioma.
Esse curso fará você evoluir mais do que anos de faculdade. Mostrarei pra você, de forma objetiva, todos os conhecimentos que obtive ao longo dos anos de minha carreira. Você terá a oportunidade de evoluir em semanas ou meses (dependendo do seu nível e de sua disponibilidade em estudar) o que um programador sênior leva anos para aprender.
Watch Online Flutter, TDD, Clean Architecture, SOLID e Design Patterns
# | Title | Duration |
---|---|---|
1 | Pra quem é esse curso? | 02:45 |
2 | Configurando o Git | 17:31 |
3 | Ajuste da aula anterior | 01:05 |
4 | Dica para o treinamento | 14:53 |
5 | BDD, UseCase e Diagrama de Dependências | 16:15 |
6 | Criando o Authentication UseCase | 05:43 |
7 | Criando o RemoteAuthentication e integrando com o HttpClient | 18:03 |
8 | Testando o body do request | 21:40 |
9 | Testando casos de exceção do HttpClient | 16:52 |
10 | Testando caso de sucesso | 27:46 |
11 | Criando o HttpAdapter e testando o post | 22:59 |
12 | Testando casos de sucesso | 17:11 |
13 | Testando casos de erro | 21:25 |
14 | Criando os Widgets da tela de Login | 13:51 |
15 | Criando estilo para os Widgets | 21:17 |
16 | Criando Ãcone para o aplicativo | 08:32 |
17 | MVC vs MVVM vs MVP vs BLOC | 27:14 |
18 | Testando estado inicial do LoginPage | 17:11 |
19 | Testando estados do formulário no LoginPage | 37:47 |
20 | Testando estados da ação de fazer login | 26:03 |
21 | Reutilizando o presenter nos Widgets com Provider | 19:12 |
22 | Criando o LoginPresenter com StreamController | 29:18 |
23 | Integrando o StreamLoginPresenter com o Validation | 25:57 |
24 | Integrando o StreamLoginPresenter com o Authentication | 28:54 |
25 | Criando o RequiredFieldValidation | 15:20 |
26 | Criando o EmailValidation | 13:02 |
27 | Criando o ValidationComposite | 23:13 |
28 | Fazendo a composição da tela de Login | 27:20 |
29 | Aplicando o Design Pattern Builder | 15:49 |
30 | Tornando o construtor do ValidationBuilder privado | 02:18 |
31 | Refatorando para usar o GetX como gerenciador de estado | 42:09 |
32 | Criando caso de uso para gravar o token de acesso no cache | 12:49 |
33 | Criando o LocalSaveCurrentAccount | 25:43 |
34 | Criando o LocalStorageAdapter e integrando com o Flutter Secure Storage | 19:46 |
35 | Integrando o LoginPresenter ao SaveCurrentAccount | 35:33 |
36 | Criando o caso de uso para carregar os dados da conta do usuário | 08:30 |
37 | Criando o LocalLoadCurrentAccount | 23:55 |
38 | Integrando o FetchSecureCacheStorage ao LocalStorageAdapter | 12:26 |
39 | Criando a tela de Splash | 23:52 |
40 | Criando o Presenter para o Splash Page com GetX | 20:34 |
41 | Fazendo a composição do Splash Page | 12:04 |
42 | Aplicando i18n | 18:46 |
43 | Refatorando o projeto para centralizar as traduções na UI Layer | 46:44 |
44 | Criando o UseCase do AddAccount | 07:25 |
45 | Testando a implementação do AddAccount UseCase voltado para API | 26:42 |
46 | Testando o estado inicial do SignUp Page | 12:20 |
47 | Testando a validação do formulário do SignUp Page | 22:19 |
48 | Finalizando os testes do SignUp Page | 18:32 |
49 | Testando o Validation no SignUpPresenter | 12:18 |
50 | Testando o AddAccount no SignUpPresenter | 28:53 |
51 | Testando navegação entre as telas de Login e SignUp | 13:44 |
52 | Criando o MinLengthValidation | 14:08 |
53 | Criando o CompareFieldsValidation | 06:14 |
54 | Refatorando o projeto por conta de uma modelagem errada | 30:34 |
55 | Fazendo a composição do SignUp | 12:24 |
56 | Correção de bug encontrado | 08:51 |
57 | Criando o LoadSurveys UseCase | 11:26 |
58 | Testando a integração do RemoteLoadSurveys com o HttpClient | 08:57 |
59 | Testando casos de sucesso da API | 29:00 |
60 | Testando casos de exceção da API | 10:14 |
61 | Implementando o Get no HttpAdapter | 14:14 |
62 | Criando a interface da tela de Surveys | 17:10 |
63 | Testando o estado inicial e a stream de loading | 21:33 |
64 | Testando a stream de dados da enquete | 19:42 |
65 | Testando dados corretos das enquetes | 06:28 |
66 | Criando o GetxSurveysPresenter e testando suas streams | 32:48 |
67 | Movendo o GetxSurveysPresenter para produção | 03:10 |
68 | Fazendo a composição do Surveys Page | 15:24 |
69 | Adicionando headers no HttpClient | 11:33 |
70 | Aplicando o Design Pattern Decorator | 35:49 |
71 | Alterando a composição para usar o Decorator | 08:07 |
72 | Correção de bug encontrado | 08:55 |
73 | Criando os requerimentos para listar enquetes offline | 10:47 |
74 | Testando o caso de sucesso do LocalLoadSurveys | 21:09 |
75 | Testando casos de erro do LoadLocalSurveys | 17:20 |
76 | Fazendo o LocalLoadSurveys implementar o Validate | 20:30 |
77 | Fazendo o LocalLoadSurveys implementar o Save | 21:00 |
78 | Separando a implementação do cache e do cache seguro | 08:21 |
79 | Testando o Save do LocalStorageAdapter | 16:32 |
80 | Testando o Delete do LocalStorageAdapter | 07:32 |
81 | Testando o Fetch do LocalStorageAdapter | 09:51 |
82 | Movendo o ValidationComposite para o Main Layer | 08:11 |
83 | Testando caso de sucesso do Composite | 14:47 |
84 | Testando casos de exceção do Composite | 17:00 |
85 | Fazendo a composição com o novo Composite | 21:03 |
86 | Criando o caso de uso do LoadSurveyResult | 12:49 |
87 | Criando a implementação do LoadSurveyResult com API | 27:59 |
88 | Criando a estrutura de arquivos | 05:32 |
89 | Criando o layout da tela de resultado da enquete | 19:39 |
90 | Testando o estado inicial e a stream de loading | 17:56 |
91 | Testando casos de erro | 19:39 |
92 | Testando caso de sucesso | 25:15 |
93 | Refatorando o código | 11:34 |
94 | Criando o GetxSurveyResultPresenter e testando suas streams | 19:30 |
95 | Adicionando link entre Survey e SurveyResult | 15:51 |
96 | Criando a composição da tela de resultado da enquete | 11:30 |
97 | Limpando o token de acesso do Cache no erro 403 | 24:34 |
98 | Deslogando o usuário em caso de acesso negado | 23:03 |
99 | Aplicando o DRY com o uso de Mixins nos Presenters | 13:34 |
100 | Aplicando o DRY com o uso de Mixins nos Widgets | 18:58 |
101 | Evitando Memory Leaks | 05:21 |
102 | Implementando o método de Load | 28:34 |
103 | Implementando o método de Validate | 06:17 |
104 | Implementando o método de Save | 18:49 |
105 | Aplicando o Design Pattern Composite 1/2 | 21:39 |
106 | Aplicando o Design Pattern Composite 2/2 | 21:27 |
107 | Alterando a composição do SurveyResult para usar o Composite | 09:42 |
108 | Ajuste no save do LocalLoadSurveyResult | 05:51 |
109 | Domain Layer | 07:18 |
110 | Data Layer | 18:31 |
111 | Infra Layer | 05:26 |
112 | UI Layer | 10:30 |
113 | Presentation Layer | 16:40 |
114 | Main Layer | 08:21 |
115 | Correção de bugs encontrados | 21:51 |
116 | Fazendo reload de uma tela após o evento de back do navigation | 15:38 |
117 | Simplificando os testes de UI com helpers | 15:30 |
118 | Refatorando os Mocks 1/3 | 30:05 |
119 | Refatorando os Mocks 2/3 | 21:01 |
120 | Refatorando os Mocks 3/3 | 08:11 |
121 | Migrando para a versão nova do Flutter com FVM | 13:37 |
122 | Migrando mockito para mocktail | 19:23 |
123 | Removendo meta.dart | 24:24 |
124 | Corrigindo erros da pasta lib | 18:04 |
125 | Corrigindo erros da pasta test | 08:17 |
126 | Refatorando os mocks | 27:11 |
127 | Corrigindo bug do mocktail que retorna null pra todos os mocks (até para void) | 15:47 |
128 | Extraindo mocks do Data Layer | 19:31 |
129 | Extraindo mocks do Infra Layer | 26:31 |
130 | Extraindo mocks do Main Layer | 30:29 |
131 | Extraindo mocks do Presentation Layer | 30:37 |
132 | Extraindo mocks do UI Layer | 35:54 |
133 | Ajustes finais | 07:34 |