Skip to main content
CF

Flutter, TDD, Clean Architecture, SOLID e Design Patterns

39h 23m 38s
English
Paid

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.

Vamos criar um aplicativo completo com LoginCadastroLista de EnquetesResponder uma EnqueteResultado 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 onlineoffline.

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.

About the Author: Udemy

Udemy thumbnail

Udemy is the largest open marketplace for online courses on the internet. Founded in 2010 by Eren Bali, Oktay Caglar, and Gagan Biyani and headquartered in San Francisco, the company went public on the Nasdaq in 2021 under the ticker UDMY. The platform hosts well over two hundred thousand courses across software development, IT and cloud, data science, design, business, marketing, and creative skills, taught by tens of thousands of independent instructors. Roughly seventy million learners use it worldwide, and the corporate arm — Udemy Business — supplies a curated subset of that catalog to enterprise customers.

Because Udemy is a marketplace rather than a single editorial publisher, the catalog is uneven by design. The strongest material lives in the long-form, project-based courses authored by working engineers — full-stack JavaScript, React, Node.js, Python data science, AWS, Docker and Kubernetes, mobile development with Flutter and React Native, and cloud certification preparation. The CourseFlix listing under this source is the slice of that catalog that has been mirrored here for offline-friendly viewing, organized by topic and updated as new releases land. Pricing on Udemy itself swings dramatically with the site's near-permanent sales, which is why the platform is best treated as a deep reference catalog: pick instructors with strong reviews and a track record of updating their material rather than buying on the headline price alone.

Watch Online 133 lessons

This is a demo lesson (10:00 remaining)

You can watch up to 10 minutes for free. Subscribe to unlock all 133 lessons in this course and access 10,000+ hours of premium content across all courses.

View Pricing
0:00
/
#1: Pra quem é esse curso?
All Course Lessons (133)
#Lesson TitleDurationAccess
1
Pra quem é esse curso? Demo
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
Unlock unlimited learning

Get instant access to all 132 lessons in this course, plus thousands of other premium courses. One subscription, unlimited knowledge.

Learn more about subscription

Related courses

Frequently asked questions

What are the prerequisites for enrolling in this course?
The course is designed for students who are no longer beginners and are seeking to advance their understanding of software architecture principles. Familiarity with basic programming concepts and experience with Flutter will be helpful since the course covers advanced topics like Design Patterns, Clean Architecture, and SOLID principles.
What projects or applications will I be building during the course?
Throughout the course, you will build a Flutter application that incorporates a variety of advanced methodologies. You will engage in creating features like authentication with HttpClient, designing a LoginPage, and implementing a Splash Page. The course also includes composing a SignUp Page and integrating local storage solutions such as LocalStorageAdapter and Flutter Secure Storage.
Who is the target audience for this course?
This course is aimed at intermediate to advanced developers who want to deepen their understanding of modern software architecture principles. It's particularly beneficial for those aspiring to become technical leads or software architects, as it covers topics such as TDD, DDD, BDD, and principles like DRY, KISS, YAGNI, and SoC.
How does this course compare in depth and scope to other Flutter courses?
This course distinguishes itself by focusing on advanced concepts such as Clean Architecture and design patterns, which are not typically covered in basic Flutter courses. It explores complex scenarios including state management with GetX, use cases for account management, and implementing internationalization (i18n), providing a comprehensive learning experience for those seeking to master these advanced topics.
What specific tools and platforms will I be using in this course?
The course heavily utilizes Flutter for building mobile applications. You will also work with various tools and libraries like HttpClient, StreamController for managing streams, Provider for widget state, and GetX for state management. Additionally, you'll integrate with secure storage solutions such as Flutter Secure Storage.
What topics or areas are not covered in this course?
The course does not cover the fundamental basics of Flutter or introductory programming concepts. It assumes that students already have a working knowledge of Flutter and focuses on advanced architectural principles, testing frameworks, and design patterns. Additionally, it does not cover platforms outside of mobile application development with Flutter.
How much time should I expect to commit to complete this course?
While the total runtime of the course is not specified, it consists of 133 lessons, which indicates a significant time commitment. Students should be prepared to spend time not only watching lectures but also engaging with practical exercises, building projects, and performing tests to fully grasp the advanced concepts and methodologies presented.