Transcrições
1. INTRODUÇÃO DO CURSO: Um para criar um aplicativo
do mundo real usando arquitetura adequada, separando a
lógica de negócios e o quadro branco. Então este curso é
perfeito para você. Neste curso,
você criará
um aplicativo inteiro do zero usando arquitetura limpa com gerenciamento de bloco e
estado cúbico. Você também
incorporará a API rest em seu aplicativo usando dois pacotes
diferentes, HTTP. E você também aprenderá sobre injeção de dependência
usando o pacote getters. E o mais importante,
você aprenderá como separar seu telefone em
três camadas diferentes, camadas dados, domínio e apresentação e criar seu módulo. Meu nome é. E neste curso, seu instrutor será
enganado a seco. Espero que você goste. Então,
sem perder mais tempo, inscreva-se agora e
vamos começar.
2. Visão geral da arquitetura limpa: Bem-vindo ao primeiro vídeo do nosso curso que está
agitado em arquitetura. Neste vídeo,
aprenderemos sobre arquiteturas limpas. Portanto, antes de entrar na arquitetura
limpa, precisamos saber por que
usar a arquitetura em
primeiro lugar. Se você tem um aplicativo de pequena
ou média escala, digamos um aplicativo em que você
precisa apertar alguns botões. E na interface do usuário, haverá alguma
imagem exibida ou algum texto de exibição. Então você não precisa de
uma arquitetura, pois é um ato muito simples. E incorporar uma
arquitetura nesse tipo de aplicativo será um processo demorado. Mas digamos que você tenha um aplicativo muito grande,
onde não apenas você, mas muitos outros desenvolvedores estão
trabalhando no mesmo projeto. Por exemplo,
digamos que você esteja criando aplicativos
muito grandes como o
Uber ou um aplicativo muito grande. Zomato, aquela coisa. Não só você, mas
muitos outros desenvolvedores estão trabalhando em um único projeto. Dessa vez, ter uma arquitetura
adequada não só ajuda a
acelerar o desenvolvimento, mas também ajuda a padronizar um padrão de design em toda a equipe de
desenvolvimento de aplicativos. Além disso, ter uma arquitetura
estruturada muito adequada nos
ajuda a modularizar o código. Aí vem uma bela parte
da arquitetura limpa. A arquitetura limpa ajuda
os desenvolvedores de aplicativos a modularizar o código. O que quero dizer com modularização? Modularizar o
código significa ter seções
separadas para
cada conjunto independente. Agora, se você quiser mudar,
por exemplo, há um serviço de back-end que você está
usando, digamos que dispare isso. E, posteriormente, você
deseja alterá-lo para um back-end personalizado e, em seguida,
modularizar a arquitetura. Você pode fazer isso com muita facilidade
sem afetar outras camadas. Além disso, se você estiver
usando, digamos, um pacote que está
funcionando bem por enquanto. Mas mais tarde, você
deseja alterar o pacote para um pacote diferente para
facilitar seu uso, Andy, para a melhoria do
aplicativo que você tem, você pode usar essa arquitetura
modularizada para altere facilmente alguns arquivos. E então você pode executar novamente
o aplicativo como estava. Agora, como sabemos agora, essa arquitetura é
necessária no caso de fazer aplicativos de médio ou
grande porte. Então, por que devemos escolher uma arquitetura
limpa? Há muito mais opções de
arquitetura, como MVVM, MDD. Veja, por que devemos
usar o Clean Architect? Bem, para entender isso, precisamos conhecer a estrutura
fundamental básica da arquitetura limpa. A arquitetura limpa
separa o
código em três camadas diferentes. Uma é a camada de apresentação, segunda é a camada de domínio. O terceiro são os dados. camada de apresentação consiste na interface do usuário e na lógica da
apresentação. A lógica da apresentação
é a gestão do estado. Por exemplo,
gerenciamento estadual, como bloco,
bloco com côvado, provedor, febre, maconha, GetX e assim por diante. A camada de domínio é mais fina, onde nossa principal lógica
de negócios do aplicativo conterá. A camada de domínio
consiste em três seções. A seção de entidades,
a seção de casos de uso e os repositórios
contratam tal. Agora vamos entender um pouco
sobre cada uma dessas seções. A entidade faz parte, contém os objetos que
usaremos para mostrar
os dados em nossa interface do usuário. Os casos de uso
conterão a lógica principal, por exemplo, validação de senha e
validação de e-mail. E o
contrato de repositórios contém o contrato ou
a classe abstrata de onde
obteremos os dados. Agora, a camada de dados é a
camada de onde
obteremos os dados de fontes
externas, como APIs ou bancos de dados, ou mesmo ou falso. camada de dados
consiste em três seções. Repositórios, implementação, onde implementaremos os repositórios que estavam
no contrato de repositórios. Onde também está a seção do modelo
e as fontes de dados. Nada de modelos
se estenderá das entidades. As fontes anti-dados
buscarão os dados de APIs ou bancos de dados
ou até mesmo de nosso pessoal. Agora, como éramos
antes, essa arquitetura
limpa ajuda
a modularizar o código. Isso também significa que
cada seção é uma seção
independente, a camada de apresentação, B, camada de
domínio e os dados são todos independentes
entre si. Portanto, se mudarmos algo
na camada de dados, isso não deve afetar
a camada de apresentação. É camada de domínio. Da mesma forma,
se mudarmos algo na apresentação,
isso não deve afetar a camada de domínio
e os dados lá. Agora, como nosso aplicativo está tendo camadas separadas
para a interface do usuário e a lógica, ele também ajuda no
teste do código. Escrevendo testes unitários
para o, especificamente para a lógica. E o widget de escrita para DUIs
será feito com muita facilidade. Antes de entrar na parte de
codificação deste curso, vamos primeiro ver o que
realmente
fará para aprender a arquitetura
limpa. Então, faremos este
aplicativo que mostra novidades. E usaremos
uma notícia ou API, que é uma API de código aberto. Agora, quando clicarmos nesta notícia, uma nova página será aberta onde podemos ver o
resto das necessidades. Além disso, podemos pesquisar algumas novidades, digamos, eu
realmente não mostrei as notícias
que são pesquisadas. Agora vamos criar
um novo aplicativo. Vou nomear o
aplicativo de notícias do aplicativo, certo? E abriremos o
aplicativo no código VS. Ok. Agora vamos ver a estrutura
do arquivo. Primeiro, teremos uma
pasta chamada features. No aplicativo que mostramos. Só há um
recurso que está
exibindo as notícias, certo? Portanto, o novo recurso dentro desse recurso de notícias do programa
terá três seções. Primeiro, seção de apresentação. A segunda é a seção de domínio. O terceiro é a coleta de dados. Agora, além dos recursos, também
terá um arquivo principal. Agora, o conteúdo
do arquivo principal
não será usado apenas em
um ou dois recursos, mas em todo o
candidato deve. Uma pasta será constante. Outra pasta será fracassos e os sucessos chegarão a
essa parte mais tarde no curso. Outro serão os serviços. Esses são
serviços externos que
usaremos todos,
digamos, pacotes. Então, essa é a estrutura básica de
pastas. No próximo vídeo,
começaremos com a
interface do usuário do aplicativo. Então, obrigado por assistir. Nos vemos na próxima.
4. Entidades: Bem-vindo ao terceiro vídeo da nossa série de
arquitetura flutter clean, onde estamos criando
um aplicativo inteiro usando a arquitetura limpa. Neste vídeo, vamos
percorrer a camada de domínio. E na camada de domínio, como vimos, temos
três seções. Entidades, casos de uso e
repositório são contratos. Então, neste vídeo, vamos
dar uma olhada na parte das DTNs. Portanto, antes de pular para o código, vamos ver exatamente quais são os dados sobre os quais
criaremos a entidade. Assim, podemos obter os
dados em news api.org. Então, se você for para news api.org, lá você pode obter
a documentação, fará login e obterá a chave da API mais tarde
na seção de dados. Mas, por enquanto, vamos ver em que tipo de dados
estaremos trabalhando. Então vá para documentos,
documentação e clique em tudo. Portanto, essa é uma API, e essa API nos fornece, sempre que fazemos uma solicitação get, essa API nos fornece dados json. Será necessário
o nome do autor, o título, o autor
é um formato de string. Como você pode ver, o titin também
está em formato de string. E também precisamos do
URL da imagem, resulta em formato de string. E publicado em
também está em formato de string. Esta é a data e a hora. O conteúdo também está
em formato de string. Ok, agora vamos fazer nossa entidade. Então, vamos para a seção
Recursos. E dentro da
seção de domínio, criaremos uma nova pasta chamada entities. Dentro das entidades
fará uma nova entidade chamada News info dot, dot fará uma classe
conhecida como news info. E primeiro terá
uma sequência de títulos. O segundo será uma
sequência de alterações. terceiro será
uma sequência de imagens que você adicionou antes será
uma sequência de conteúdo. E o quinto seria
o tipo de estática pública. Agora, vamos adicionar tudo
dentro do nosso construtor. Agora, exceto data e hora. Tudo pode ser anulável. Por exemplo, um
artigo de notícias pode ter um título
ou, às vezes, até mesmo
não ter um título. Normalmente, todos os tipos de notícias para cada artigo de notícias
devem ter um título, mas pode haver algum erro no banco de dados,
talvez na parte de trás
da pessoa que está escrevendo o artigo de notícias possa ter
esqueci de adicionar o título. Portanto, temos que
considerar esses casos extremos. Então, precisamos tornar
o título anulável. Além disso, o autor também pode
ser anulável para que também imageUrl
possa ou não estar presente. Para que também o conteúdo também
possa ou não estar presente. Para que também nos seja dado, mas a data e hora será preservada porque sempre que uma
notícia é publicada, ela tem que estar presente. Então, além disso, além da data e hora,
não precisamos
fazer mais nada necessário. A palavra-chave necessária significa que sempre que estamos
ligando para as informações de notícias, precisamos adicionar a data e hora. Agora, quais são exatamente
os tipos anuláveis? Por exemplo, se
tivermos uma string de, digamos nome, e eu
dou um nome de RAM aqui. Estamos
dizendo especificamente às trevas lá. A variável name está usando
um tipo de dados de string e o valor da variável
name
sempre será uma string e nunca
poderá ser variável nula. Mas se a atribuirmos como
string com um ponto de interrogação
, estaremos dizendo ao dark que a variável name pode ser uma
string ou pode ser none. Por exemplo, o nome também pode não
ser. Isso também funcionará. Então, terminamos com a entidade que faz parte
do nosso aplicativo. No próximo vídeo,
aprenderemos sobre um pacote muito importante
que usaremos, que é o
localizador de serviços ou o pacote get it. Então, obrigado por
assistir a este vídeo. Vejo você na próxima.
5. Pacote de localizador de serviços: Olá e bem-vindo
ao quarto vídeo da série flutter clean
architecture, onde estamos criando um aplicativo inteiro usando arquitetura
limpa. Neste vídeo,
aprenderemos sobre um pacote muito importante
chamado pacote get it. Agora, o que esse
pacote get it nos ajuda a encaixar antes saber que
precisamos saber o que exatamente é injeção de dependência. Então, o que exatamente é injeção de
dependência? Vamos ver um exemplo. Então, faremos um novo arquivo. Você não precisa
criar esse arquivo. Este arquivo será
apenas para este vídeo. Pode ser o
exemplo DIE ponto, ponto. E aqui estamos importando nosso pacote de
material dot dot. E faremos
alguns widgets da lista de pulos. Vamos primeiro fazer isso,
depois eu explico. Ok. Então, como você pode ver, este
é um botão fictício, que leva um botão
elevado. E você pode ver que nossa caixa fictícia
depende do nosso botão fictício. Além disso. Podemos ver que
temos um botão fictício, que é um botão elevado. Temos uma caixa fictícia, que depende do botão de
determinação. Temos um cartão fictício, que
depende da caixa fictícia, que é novamente
dependente do botão fictício. E temos nossa página fictícia, que
depende do cartão fictício, que
depende da caixa fictícia e que
depende do botão fictício. Agora, se tivermos, digamos uma classe de informações de botão que armazena as
informações do botão. Por exemplo, digamos x aqui. E se quisermos
passar isso aqui, para que possamos usar
este aqui. Então, agora precisamos passar essas informações de botão em
todos esses widgets. Vamos ver como passamos em nosso
botão fictício na íntegra, em nossa caixa fictícia. Agora, precisamos passar
as informações do botão em nossos cartões fictícios para que
possamos usá-lo em nossa caixa fictícia. Agora, como estamos usando as informações do
botão em nosso cartão fictício, também
precisamos
passá-lo em nossa página fictícia. Então vimos que
estamos usando apenas informações
do botão em
nosso botão fictício. Mas como tudo
isso
é dependente, precisamos passar as informações do
botão no topo. Então, para evitar esse problema, vem D, pegue o pacote. Agora, para acessar isso, também
precisamos chamar
especificamente nossa função de serviços de configuração
no arquivo ponto ponto principal. Então, para fazer isso, primeiro, precisamos dar sua primeira
ligação de fator que garanta a inicialização. O que este faz é inicializar as coisas necessárias para
que as plataformas
nativas necessárias em nosso iOS e Android sejam construídas antes de executar
qualquer coisa no aplicativo. Agora vamos ligar para
os serviços de configuração e agora terminamos. Então foi isso para este vídeo. No próximo vídeo,
usaremos o pacote get it na parte Casos de uso
e repositórios. E também precisamos do localizador de serviços, por
enquanto você pode excluí-lo, criaremos isso
no próximo vídeo. Então, obrigado por assistir. Vejo você na próxima.
6. Usecases e repositórios: Olá e bem-vindo
ao quinto vídeo do nosso curso de
arquitetura flutter clean, onde estamos construindo
um aplicativo inteiro usando a arquitetura flutter
clean. No vídeo de hoje,
aprenderemos sobre
casos de uso e repolarização e repositórios na seção de
domínio. Então, vamos para nossos recursos. E dentro do domínio, vamos criar uma nova
pasta chamada casos de uso. E vamos criar outra
pasta chamada Repositórios. Dentro dos casos de uso, faremos um novo arquivo
chamado fetch News. Ponto. O Dot criará uma nova
classe chamada Fetch news. E dentro da
turma, escreveremos uma função chamada buscar notícias. Antes disso,
gostaria de falar sobre um pacote
chamado pacote de pontos. Vamos primeiro ver que o
pacote de pontos brancos será necessário. Vamos para pop dot diff
e pesquisar por pontos. Vamos importar esse
pacote em nosso projeto. Vamos para um arquivo YAML de ponto de
especificação de pub. Agora, geralmente quando
estamos buscando algo ou obtendo
algo ou de uma função, geralmente podemos retornar
apenas um único tipo de dados. Por exemplo, se tivermos um futuro de informações de notícias e eu estou
dizendo para buscar notícias. Portanto, essa função
só pode retornar informações de notícias. Mas pode haver
um caso em que, do nosso back-end, não estamos
recebendo algumas notícias e por aí, mas estamos recebendo um erro. Então, dessa vez, o que queremos
fazer não é devolver
as notícias na íntegra, mas retornar um fracasso. Como podemos fazer isso?
Podemos fazer isso usando pontos. Então, vamos importar os pontos primeiro. E usando isso começa, podemos fazer é
criar um qualquer um. Com qualquer um, podemos
retornar aos tipos de dados. Digamos que um seja int e o
outro seja string. Agora, o que realmente queremos
retornar é um fracasso. E há uma
lista de informações de notícias. Agora, vamos criar
essa classe de falha. E a falha será
usada em todo o nosso aplicativo. Então, para isso, precisamos
criá-lo no código. Já criamos um arquivo chamado fracassos
e sucessos. Aqui dentro,
criaremos um novo arquivo chamado failures dot, dot. Criamos uma classe abstrata. Fracasso. Haverá uma mensagem de string que conterá a
mensagem de falha, se houver alguma. Agora vamos criar uma nova
falha chamada Fetch. Buscar vídeo, o que
estenderá a falha. E aqui dentro faremos um construtor constante.
Qual falha? E já que estamos
estendendo a falha, precisamos passar a
mensagem neste super. Então, agora podemos voltar,
podemos excluir este. Agora podemos retornar a falha de
busca aqui. Se importarmos o Phineas. Ok? Agora, essa é a camada de domínio. Não queremos
escrever nenhum negócio,
nenhuma lógica de dados
dentro do nosso domínio. O domínio deve consistir
apenas na lógica de negócios, como senha, validação, validação de
e-mail, etc. etc. Então, para isso, para conectar a
camada de dados com a camada de domínio, precisamos usar repositórios. Agora, como podemos usar isso? Vamos aos nossos repositórios
e criar uma nova república. Em primeiro lugar, precisamos
mudar o nome das notícias falsas. Notícias falsas. Casos de uso, caso de uso, para que possamos segregar
que é um caso de uso. Agora, dentro de nossos repositórios,
criaremos um novo arquivo chamado Fetch repo contract dot, dot. Agora, como isso é um contrato, isso será apenas
uma aula abstrata. O que queremos dizer com classe
abstrata? Por exemplo, você
está dirigindo um carro. Você está girando o
volante, volante
na direção esquerda. O carro está indo
na direção esquerda. Você está olhando na
direção certa, o carro está indo
na direção certa. Você sabe que ao
dirigir o volante, o carro vai para a esquerda ou para a direita. Mas você sabe o que faz o funcionamento interno
do intestino que você não conhece? Então, as aulas abstratas
são exatamente assim. Isso nos dará funções
que farão o trabalho. Mas não precisamos
saber o que exatamente, como exatamente é a função, o trabalho feito na função criará uma classe abstrata fora do ventrículo de busca. Aqui teremos uma função
de falha futura. Mas vamos parar com o novo ZoomInfo. Não. Podemos acessar nossos
casos de uso e importar o Fed. Devo colocar aqui? Tudo bem, vou chamar o pólo vegetal aqui. Agora. Agora podemos simplesmente devolver as notícias fetch repo dot
fetch aqui. Então,
terminamos nosso caso de uso. E o que estamos fazendo
com nosso repositório. Mas também estamos tendo
um recurso de pesquisa aqui. Então, apenas ter as
notícias do PECC não funcionará. Também precisamos cor-de-rosa para
a funcionalidade de pesquisa. Por exemplo, sempre que você
estiver pesquisando algum texto, naquela vez que ele entrou, o que precisamos é retornar, procuramos textos, notícias aqui. Então, para fazer isso, também
precisamos passar por outro campo
chamado texto de pesquisa. Agora, isso pode ser nulo. Nós pesquisamos texto pode ser
feito quando é nulo, só
mostrará as notícias normais. E quando o
texto da pesquisa não for nulo, esse horário mostrará
as notícias da pesquisa. Agora também precisamos
adicioná-lo em nossos casos de uso. Aqui também adicionaremos uma sequência
de texto de pesquisa. Ok? Agora terminamos.
No próximo vídeo. Estaremos trabalhando
nos dados lá. Então, obrigado por assistir. Vejo você na próxima.
7. Modelos: Olá e bem-vindo
ao sexto vídeo da nossa série de
arquitetura flutter clean, onde estamos criando um aplicativo inteiro usando a arquitetura limpa. Nesta seção, vamos iniciar
a camada de dados. E dentro dos
dados,
começaremos com os modelos. Então, vamos primeiro criar uma pasta
na pasta de dados, modelos de
falha. Dentro dos modelos, vamos
criar um novo modelo chamado News info model dot, dot. E vamos criar uma classe
chamada News info model, que estenderá as informações de notícias. Agora, você precisa fazer um
construtor de classe modal e ser super super função. Agora vamos ver o que a super
função está pedindo. Pedir um
DateTime é obrigatório. O nome do autor, o conteúdo, imagem que você detectou. Sabíamos que o título imageURL
content e o autor são todos strings e o
datetime, datetime time. Mas os dados que obteremos
estarão no formato JSON. Tudo. Teremos
um tipo de dados diferente. Então, vamos primeiro ver qual
tipo de dados ficará feliz. Então, precisamos ir para news
api.org, ir para a documentação. Dentro da documentação,
vá para tudo. E vamos verificar qual
é o tipo de dados de nossos dados que estamos obtendo
de nossas notícias api.org. Apl é uma string, o que é bom. O título também é uma
string, o que é bom. Você é o suficiente. A imagem também
é uma string. Publicamos isso,
que é o DateTime. Também está em string,
o que é indesejável. Mas, para ser notável, o
conteúdo também está no Street. Ok, agora sabemos
quais tipos de dados estamos obtendo da nossa API. Então, vamos escrever aqui. Quando escrever. Primeiro, precisamos do título, depois do nome do autor, do URL da imagem, do conteúdo e dos dados. Dentro desse super
você vai definir o título, título? Já que o título em nossas informações de notícias também é uma
string que pode ser anulada. E aqui também o título é uma
corda que é maleável. Então está tudo bem. E nosso autor dentro de nossas informações de notícias é uma
string que é anulável. Aqui também está uma string
que é anulável. Então, podemos simplesmente passar por isso. O URL da nossa imagem também é uma
string que pode ser anulada. URL da imagem Hero, que é uma
string que é anulável. Nós apenas passamos aqui. E nosso conteúdo também é o mesmo que você pode ver
agora nossas informações de notícias, gesticulando, que é
anulável e heróis, então é uma string. A data e hora, no entanto,
dentro de nossas informações de notícias, é uma data e hora
que não é anulável. Mas em nosso modelo de informações de notícias, nós o definimos para uma string
que não está nivelada. O motivo é que os dados que estamos obtendo também
são uma string. E esperamos que, em alguns casos, isso possa ser nulo, então precisamos cuidar disso. Então, o que podemos fazer aqui é criar uma função chamada
Obter data, hora. No formato de data e hora. Estamos escrevendo uma função com. Então vamos remover
a constante aqui. Vamos pegar uma função estática e que
terá um tipo
de retorno de datetime com o mesmo nome. E aqui também passaremos
uma sequência de datetime, que nada mais é do que esta. Vamos passar por esse
fluxo aqui. Agora. Em primeiro lugar, diremos que
se o DateTime for igual a, igual a nulo, então não faça nada. Basta retornar uma data e hora
do ponto de data e hora atual. Agora podemos obter a função datetime,
datetime dot now
atual . E se o DateTime não for
nulo, o que fazer? Depois, há uma função muito
útil
da data que nos permite analisar a
string para o tipo de dados datetime. Vamos ver como podemos fazer isso. Escreveremos pela última vez. Data e hora,
formato de data e hora porque para
tripés de pontos de data e hora, usando datetime. Agora, os tripés fazem. O que os tripés fazem é
tentar converter a string date time, que é esta, em
um tipo de dados datetime. Também aqui, podemos apenas
dar um não anulável, o que significa que aqui a
data e hora nunca pode ser nula. A razão é que já
verificamos se a hora é nula, então retornaremos Ponto de
tempo agora. Então, dentro do outro, a data e hora nunca pode ser nula. Então, podemos dar esse ponto de
exclamação. E a mecânica
diz especificamente que dentro do outro, a data e hora não será nula. Além disso, os tripés
retornam a data e hora, mas que é anulável. Agora, por que é anulável? Se,
digamos que ele tente analisar. Não precisamos
fornecer especificamente o ponto de exclamação aqui, pois já estamos verificando se o
DateTime não está aqui. Agora, por que a função de tripés de
ponto datetime retorna uma data e hora
que é anulável. O motivo é que
os tripés
tentam passar o formato datetime ou a string datetime para
um tipo de dados datetime. Mas digamos que não consiga
converter isso. Digamos que temos uma corda
que é algo olá. Agora, este olá Não pode ser, este olá não pode ser
convertido em uma data e hora. Datetime pode ser convertido, digamos que algo
assim possa ser convertido, convertido em um datetime, mas hello não pode ser convertido. Então, o que acontece
quando estamos
nos dando alguns textos que não podem
ser convertidos em uma data e hora, ele apenas retorna um valor nulo. Vamos mudar o
olá para depender. Agora, se o formato
datetime, datetime for igual a null, então também
retornaremos o ponto datetime. Agora. Agora, isso significa que ele
tentou analisar o datetime, que está em formato de string, para um datetime que está no formato
datetime,
mas não conseguiu. Então, essa é a razão pela qual
estamos retornando a data e hora
daquela hora presente. Mas se não for nulo, se DateTime não for nulo, queremos dizer que ele
tem palavras analisadas. Se tiver, ele
foi capaz de analisar os dados que estão em
formato de string para Editar hora, que está no formato datetime. Então, dessa vez,
não fazemos nada além de voltar. Ok, então este está pronto. Agora, precisamos criar
outro método, que é um método muito útil. Estaremos criando um método de mapa de
trombos. Vamos criar e
depois explicarei. Agora, o que esse método
faz é na primeira semana, que tipo de dados estamos obtendo. Aqui, estamos obtendo
dados no formato JSON. Ou podemos dizer que
está em um formato de mapa, que é uma string, que é o nosso t. E o valor é dinâmico, que significa que pode ser uma string. Pode ser, pode ser
feito, pode ser qualquer coisa. Dinâmico significa
que pode ser string, pode ser, pode ser qualquer tipo de
dados ou política nula. Para converter este mapa
em um museu para modelo, precisamos de uma função e
essa função é de. Agora. Precisamos
dizer isso especificamente como um fato. Agora, expliquei no vídeo do localizador de
serviços, o que é uma fábrica e
o que é um singleton? Singleton. Instância
é um singleton onde estamos usando a mesma instância
em todo o aplicativo. Mas em um método de fábrica. O que é feito é criar uma nova instância desse objeto
sempre que estamos chamando. Então, quando, sempre que chamarmos
um método
from map em nosso aplicativo, dessa vez ele criará uma nova instância do modelo de informações de
notícias. Digamos que estamos ligando do
mapa cinco vezes em nosso aplicativo. Assim, cinco novas instâncias de notícias e para modem
serão criadas. Mas se fosse um singleton
, mesmo que seja lembrado
de cinco vezes, ele criará apenas
uma única instância. Ok? Agora também precisamos
fornecer os dados aqui, que o título seja mapeado. E se pudermos ver aqui, só
precisamos mapear
esses valores aqui. O título aqui, podemos
simplesmente copiá-lo aqui. E do mapa com o título, o autor será mapeado. E se verificarmos aqui, o autor é esse autor. Então, podemos copiar
este e colá-lo aqui. O URL da imagem será o
mapa e o URL da imagem. Url demais. Vamos copiar
este e colá-lo aqui. O conteúdo é mapeado. Vamos conferir aqui.
Este conteúdo e a data e hora que é publicado atuam com
este tópico, este aqui. E agora terminamos
as notícias em para model.fit do método map, que converte a
string do mapa notícias bidirecionais dinâmicas. E para o Senhor. Então, obrigado
por assistir a este vídeo. No próximo vídeo,
vamos nos aprofundar na seção de fontes de dados e repositórios.
Obrigado por assistir. Vejo você na próxima.
8. Fontes de dados e repositórios: Olá e bem-vindo
ao sétimo vídeo de nossa
série de arquitetura plana quando estamos fazendo um aplicativo inteiro
usando arquitetura enxuta. Neste vídeo, falaremos sobre
as fontes de dados e repositórios
na seção de dados. Então, primeiro vamos ao
nosso arquivo de dados e vamos criar uma nova pasta
chamada Repositórios. Dentro dos
repositórios criará um novo arquivo chamado Fetch report. No IMP, o que significa ponto de
implementação, ponto fará uma nova classe
chamada which report IMP, que implementará tal repo. Agora, também precisamos, já que estamos implementando
o repositório fetch, que estava presente
na camada de domínio. Portanto, precisamos substituir essa função dentro do IMP do repositório
buscado. Para substituir, você simplesmente não
pode fazer uma coisa. Clique aqui, pressione
Controle e pontos e crie, e toque aqui, crie um
sobrescrito ausente. Ele
criará automaticamente a função. Agora, não queremos
lançar um erro aqui, então vamos excluir isso.
Dentro dessa função. Ligaremos para
as fontes de dados. Então, antes disso, precisamos
criar a fonte de dados. Então, vamos criar uma
nova pasta dentro do arquivo de dados chamada fontes de
dados. E dentro da fonte de dados
criará um novo arquivo chamado de ds remoto. Ds significa
nomes de fontes de dados do que o, como o nome diz,
estamos buscando os dados da fonte de dados
remota, que é uma API externa. Então, nós o chamamos de fetch
de várias fontes. Vamos criar uma classe abstrata a
partir de uma fonte de dados remota. Dentro da aula abstrata, teremos um futuro
que retornará uma lista de informações de notícias. Modelo. O nome será buscar notícias. E também aqui
incorporaremos a funcionalidade de pesquisa
usando o texto de pesquisa. No último vídeo,
expliquei se o texto da pesquisa era nulo, então as notícias normais quando visuais e reinicia
textos não foram perdidas. Em seguida, as ferramentas de busca no bushel. Agora, dentro do uso de busca, o que precisamos fazer é
chamar um serviço externo, como o serviço HTTP
ou todo o serviço, usando o qual obteremos os dados de nossa API externa. Então, vamos fazer isso. Em primeiro lugar,
publicaremos antes de criarmos um mapa dinâmico de cordas. Isso conterá os dados que
nos são fornecidos pela API. Para fazer isso, precisamos
fazer o serviço. Mas neste vídeo, não
vamos fazer o serviço, então faremos apenas o
contrato do serviço. Portanto, dentro da pasta principal, temos uma pasta de
serviços de serviços. E dentro da
pasta de serviços, criaremos um novo arquivo chamado HTTP, ou digamos, API que iniciamos desde que estamos
obtendo os dados das APIs. Então, estamos escrevendo APIs. Se não for feito. Vamos
criar esse serviço de API. Crie um serviço de API de
classe abstrata. E dentro do serviço de API
criará uma nova pasta. String futura Dynamic get data. Agora podemos chamar esse. Aqui. O que podemos
fazer é criar o serviço de API. Como essa é uma classe abstrata, também
precisamos implementá-la
em uma classe separada. Vamos criar o copo. Proteção de vidro contra florescimento
remoto que estou
me dando até a condição
que implementa do suporte
remoto qual
é a função? E aqui dentro, aplicamos
provavelmente o serviço de API. Ok, agora
chamamos o serviço de API, e aqui chamaremos a função get data em
nossa superfície de API, certo? Não é extremo. Dinâmico é igual a dois. Ou podemos dizer que dados são iguais a
talvez começar, ficar diferente. Também precisamos esperar aqui, pois isso retorna um
futuro mapas e dinâmicos. E como estamos
usando nossa cadeira, precisamos fazer essa função. Ok, então estamos obtendo os dados, mas quais dados realmente
estamos obtendo, vamos para news api.org. documentação do Insight
abordará todos os dados que estamos obtendo
da API é um mapa. E dentro do mapa, quais são os dados reais que
queremos são esses artigos. Esses artigos contêm
uma lista de mapas. Então deixe-me primeiro codificar
e depois eu vou. Então, dentro dos dados,
obtendo uma lista, vamos chamá-la de lista de artigos. Podemos ver aqui que isso é, se assumirmos que tudo
isso são os dados, então dentro dos dados, se obtivermos os artigos, os artigos
conterão uma lista. Agora, esta é uma lista de mapas, mas os mapas dentro
deste e a demanda no coração são um
pouco diferentes. Então, para isso, o que
podemos fazer é criar uma nova lista fora do mapa,
string, lista dinâmica. Eu realmente não inicializei
para uma lista vazia. E iteramos todos
os itens dentro desta lista e convertemos cada item em
uma dinâmica de string de mapa. Vamos fazer isso. Então, chamaríamos de mapa. Será igual à lista. E diremos que esse
cara é tão dinâmico de mapas. Agora vamos adicionar esse mapa
dentro da nossa lista de mapas. Mapa totalmente abastecido em. Ok. Agora, o que podemos fazer é criar uma nova lista de modelos de informações de notícias. Vamos inicializá-lo
com uma lista vazia. E agora vamos percorrer todos
os itens na lista de mapas. Vamos converter cada uma
das listas
de mapas cada um dos mapas dentro do
mapa, este museu amanhã. Vamos fazer isso. Agora. Usaremos o método de mapa
forte que criamos na seção
do modelo. Vamos chamá-lo de perder
Phil Martin do mapa. E o mapa será cada um
dos itens dentro dos mapas D. Agora vamos adicionar o modelo
newsvendor dentro da lista de notícias
e depois retornar. Ok, feito aqui. Mas digamos que haja
algum erro ocorrendo aqui. Digamos que nossa
função get data mostre alguma exceção. Então, precisamos pegar
essas exceções aqui. Então, o que podemos fazer é copiar todo esse código e
colá-lo dentro de um bloco try catch. Então, se
obtivermos algum erro, lançaremos uma exceção. A exceção pode
ser qualquer extração. Mas o que realmente queremos
fazer é criar exceções personalizadas. Então, para fazer isso,
precisamos ir para fracassos
e sucessos, fazer um novo arquivo chamado
excepcional stark dark. E criaremos uma exceção
personalizada. Essa exceção
implementa exceção. Essa exceção aqui. Ele é uma vantagem dada pela escuridão e tem um construtor de
fábrica. Então, como vimos nos fracassos, estávamos estendendo o fracasso, mas este, não podemos fazer isso aqui porque não podemos
estender uma aula. Só temos um construtor de
fábrica, então precisamos implementá-lo. Então, vamos criar a
exceção de busca construída aqui. Ok? Agora podemos lançar essa exceção. Você pode escrever exceção. Vamos dar uma mensagem
também para começar. E vamos abri-la. Portanto, terminamos com a função
buscar notícias dentro nossa implementação de
fonte de dados remota. Além disso. Vamos chamar essa função
dentro do nosso repositório. Implementação Voltarei. Primeiro. Vamos começar a aula aqui. Mas da fonte de dados remota. Agora podemos usar esse aqui. Pesquisado. Diz que isso
retorna um valor de futuras notícias da lista em
formato que não pode ter um método, pois essa
função o retorna, seja uma falha
ou uma lista usando. Então, o que precisamos fazer é
devolvê-lo assim, certo? Ok? Então, o que está acontecendo aqui? Estamos dizendo que, uma vez que
a função fetch nice, return, retorna um futuro de falha ou
lista de informações de notícias. Então, estamos dizendo que essa função retornará o lado direito do valor either,
o que significa que o either tem
dois valores, ou falha, todas essas coisas se movem
para essa função, retornará o lado direito
dos itens listados. Ok? Mas também vimos que as fontes de dados estão
erradas aqui ou exceção aqui. Portanto, também precisamos capturar a
exceção em nosso repositório. Então, podemos fazer isso
tentando pegar o bloco. Mas também vimos que
estamos lançando uma
exceção personalizada da seção do projeto. Assim, podemos pegar a exceção do cliente
na exceção de argumento de venda. E agora podemos lançar
um fracasso também. Então, voltaremos à esquerda. Qual falha com uma
mensagem E dot message. Este E nada mais é do que um
objeto de exceção de busca. Também precisamos devolver a
baixa de seus dados
para essas notícias. Então, agora terminamos a implementação do
repositório, terminamos com
as fontes de dados. Vamos recapitular mais uma vez. Fizemos, implementamos o relatório de busca na aula de
implementação de nível
científico. Em seguida, examinamos
as fontes de dados e criamos a fonte de dados para
fazer o diagnóstico. Fizemos um resumo dos custos do serviço da
API, que implementaremos
no próximo vídeo. E então alteramos os tipos de
dados a serem necessários. Tipos de dados da
dinâmica da equipe do Maps para o museu para modelo
e, em seguida, retornam as notícias
ou três exceções de busca. E então, dentro do
repositório,
usamos outro bloco try-catch
onde, se não houvesse erro, retornaríamos o
direito da falha, que é lista,
informações de notícias e todas as exceções. Detectaremos a
exceção que foi
retornada dentro de
nossas fontes de dados. Aqui. Estamos pegando isso e depois retornando o lado esquerdo do, o que é uma falha,
que é buscada. Então é isso para este vídeo. No próximo vídeo, vamos nos aprofundar nos serviços. Então, obrigado por assistir. Vejo você na próxima.
9. serviços: Olá e bem-vindo
ao oitavo vídeo da série de
arquitetura limpa Flutter, onde estamos criando um aplicativo inteiro usando uma arquitetura
mais limpa. Neste vídeo,
vamos falar
sobre a parte de serviços. Então, primeiro, vamos
para a seção de código. E dentro dos serviços, já
criamos
uma classe abstrata chamada API service, que nos dá o,
que tem uma função, Get Data, que retorna uma
futura cadeia de caracteres de mapa dinâmica. Então, vamos implementar
a superfície da API aqui. Além disso, serviço de BI IMP. Imp são os termos de implementação que permanecerão se o serviço de BI. Agora vamos adicionar a função
aqui e substituí-la. Aqui,
usaremos um pacote e obteremos dados de nossa API externa. E o pacote se chama HTTP. Então, para isso, vamos prosseguir. E aqui escreveremos HTTP. Vamos pegar o pacote. Então, ao fazer isso, podemos copiar o nome do pacote. E aqui
vamos basicamente empacotar dentro do vetor I
look ups. Agora vamos importar o
pacote em nosso serviço de API. E diremos que
é importante HTTPS, HTP, HTTP. Podemos obter os dados do nosso
HTTP e como da nossa API. E como podemos fazer
isso é que existe uma função útil
chamada HTTP GET. E nesta função get, obteremos os dados
necessários da nossa API externa desta. Então, o que precisamos fazer é dar, vamos primeiro ver o que
essa função get leva. A função get recebe um
URI, como você pode ver aqui. E você obtém a função
também usa cabeçalhos, mas também exigirá parâmetros
de
consulta. Como podemos ver. Esta é a API principal que fornecerá
o q igual ao Bitcoin. chave API igual a F por meio de
uma chave de API vai para o GPI. Mantenha isso em nossos parâmetros
de
consulta que também
precisemos adicioná-lo aqui. Então, vamos ver como
vamos fazer isso. Ok, então vamos primeiro
adicionar o URL para isso. Precisamos fornecer
o URL aqui, certo? URL de streaming, e nós o
adicionaremos aqui também. Você também está, como você pode ver, que estamos precisando de parâmetros de
consulta. Então, teremos outro mapa. Corda, dinâmica. Pais prontos.
Precisamos adicioná-lo aqui. Ok? Agora, o URL não é um URL de string
real, URI. Precisamos analisar a string,
você a adiciona de qualquer maneira. Podemos fazer isso usando seus
caminhos de pensamento. E para fornecer os parâmetros de
consulta do Kusto, precisamos chamar uma função
replace. E aqui podemos adicionar os parâmetros usando
duas partículas gordurosas. Ok? Então, agora estamos obtendo
os dados do nosso intestino. Vamos armazenar os dados em algum lugar. Para fazer isso, precisamos fazer a função em uma função sinc. E o resultado aqui, teríamos a resposta final
igual a http.get. Vamos ver o que isso retorna. Ele retorna uma resposta. Escreva aqui. Ok, agora, se o
código de status da resposta for igual a 200, isso significa que
obtivemos sucesso,
obtivemos com sucesso
os dados da API. Então, agora podemos retornar os dados
aqui, retornar o corpo da resposta. O corpo está, na verdade,
em formato de string, que é Jason forward. Precisamos decodificar isso e
transformá-lo em um formato de mapa. Uma vez que estamos
retornando map string dynamic da função get. Então, no json dot
decode certo, e aqui dentro, obteremos a resposta
para o padrão, ok. Além disso, podemos escrever
como resposta
dinâmica Math String se o código de
status não for 200. Isso significa que
não conseguimos obter os dados da nossa API. Isso
foi um problema. Houve algum problema de rede. Dessa vez, lançaremos uma
exceção com alguma mensagem. Vamos ver. Status, status do
ponto de resposta . Nós conversamos. Ok. Então, o que estamos fazendo aqui é
obter os dados da nossa API usando um parâmetro de consulta
personalizado. E se obtivermos os dados, dessa vez estaremos
devolvendo-os em mapas em formato dinâmico. E se você não está
recebendo o retorno,
então, na verdade, somos uma exceção. Agora vamos examinar
a seção de dados dentro nossas fontes de dados e dentro da busca da implementação remota da
fonte de dados. Forneceremos o URL aqui
e o parâmetro de consulta. Agora, para fazer isso, você precisa ir aqui e obter a chave da API pressionada no botão
da tecla API do gate. Você precisa fornecer
seu primeiro nome, seu endereço de e-mail
e escolher uma senha. E enviado. Depois disso, você
receberá a chave da API. Mas aqui vou
apenas fazer login. Então, deixe-me entrar e
eu mostrarei a você. Ok, eu tenho
minha chave de API aqui. Acabei de copiar. Guarde-o em algum lugar seguro por enquanto, vamos criar uma nova pasta
chamada strings start. Isso não é string,
é strings. Cordas. E eu instalei a chave de API
aqui com uma variável estática. Além disso. Eu ainda serei URLs também aqui. Então eu tenho um, tudo o que você
adicionou, que é este. Eu copiaria este
e a estequiometria. Ok. Agora vamos para nossa função de
busca de notícias. Busque de dentro para fora de
dados remotos para alguma limitação. E veja que esses
URLs serão strings, API de
pontos de tudo o que você é e por que o
parâmetro de consulta será um mapa. E isso conterá cookies. Vamos verificar quais livros. Um deles será Q, o texto fonte. Se não tivermos
uma espécie de passos, podemos simplesmente dar
um texto concreto. Por exemplo, como linhas de cockpit. Ok, então o uso normal
que
teremos, será obtê-lo
nas principais manchetes. Então, se copiarmos este e precisarmos colar o KPI da
chave de API, você ainda não o fez. Todo o título que
usaremos quando estivermos
procurando por algumas notícias
de todos os artigos. E as principais manchetes
serão pesquisadas quando o, não
houver texto
dentro de nossa pesquisa. Ok? Então, o que podemos fazer isso, se o texto de pesquisa
não for igual a nulo, esse tempo começa a partir de
todos os artigos. Se nosso texto de pesquisa for
igual a, igual a nulo, esse tempo começará
a partir dos principais modelos. Este é o operador ternário, que estamos vendo
que, se X for nulo, faça a primeira coisa após
o ponto de interrogação. E se o texto de pesquisa não for
igual a se start for nulo. Aquela coisa com
a segunda coisa. Este é o operador ternário. Se o texto de pesquisa
não for igual a nulo, faça a primeira coisa que está presente após
o ponto de interrogação, que é strings,
API tudo. E se o texto de pesquisa for igual, igual a nulo, então
coloque o segundo, que talvez eu tenha
falado longamente. Então, quando houver algumas dicas de
pesquisa ao pesquisar algumas músicas
do nosso tudo. E se não houver tais etapas
, estamos apenas
retornando o tópico. E dentro do nosso
parâmetro de consulta cai. Então, escreveremos se o texto de
pesquisa for
igual, igual a nulo, dessa
vez que não o
fizermos, precisamos fornecer o
país. Então, certo. Ao contrário da Índia. Ou podemos descobrir os EUA-Soviéticos. E se o texto de pesquisa não for
igual a nulo, dessa vez, precisamos fornecer dentro
ou tudo, se virmos, precisamos fornecer uma sugestão de que é o texto de pesquisa que ainda recebe
Bitcoin, pode ser qualquer coisa. Então, escreveríamos cubo e
será igual ao texto de pesquisa. E, independentemente disso, o
texto fonte é nulo ou não, precisamos fornecer a chave da API, que é fornecida aqui também, que é fornecida aqui também, certo? Chave Api. A chave da API será exclusiva para
cada usuário. E você precisa
obtê-lo depois de fazer
login ou se inscrever
na música BI.com. Eu tenho meu rei do FBI e
guardei nas cordas. Além disso. Então, vamos usar essa API Scott
extrema. Ok, então implementamos nossos serviços dentro do arquivo ponto ponto do serviço da
API. E usamos esse serviço
em nosso arquivo de fontes de dados. Agora vem uma parte muito importante. Estamos chamando o serviço dentro do construído a partir da busca da fonte de dados remota. Em nosso vídeo do localizador de serviços, discutimos uma dica muito
útil sobre como podemos registrar esses serviços em uma única função e
chamá-los dentro do principal. E não precisamos nos
preocupar em inicializar
essas classes. Cada, vamos fazer. Primeiro, criaremos uma
nova pasta chamada ou um novo arquivo dentro de nossa própria
pasta chamada service. Serviços. Localize nossa escuridão escura. Aqui dentro
importamos o pacote, escreveremos o final, pegamos. Sl. Sl significa que o localizador de serviço
é igual a obter a instância. Faremos uma nova função
chamada configurar serviços. Aqui registramos nossos serviços. O primeiro serviço que
será registrado é o serviço de API,
Justin Sterling. Todos os serviços são singletons. Então registra o serviço de
API singleton. E aqui estaríamos fornecendo a implementação do
serviço de API de cluster implementado. Registraremos bem as fontes de
dados, então escreveríamos fetch
from remote, ds. Do controle remoto, sim, eu sou. Agora podemos ver que está dizendo que existe um parâmetro
aditivo k, então isso é necessário. Mas vamos para o nosso aqui. E agora podemos excluir este e obter o serviço de API de
nossos serviços ESL localizados. É importante continuar. Podemos chamá-lo de serviço de API. E wallah. Não precisamos chamar o serviço de API dentro do
nosso construtor. Podemos
obtê-lo diretamente de um serviço. Maravilhoso. Vamos novamente para nossa
pesquisa está localizado e registrado nosso repositório. Ligaremos para o relatório em lote. E registramos a implementação de
ondulação de efeitos. Aqui também, não exigimos
defeitos do corpo pois podemos obtê-lo de
nosso serviço com qualquer um, Vamos entrar em nossa implementação de
vegetais. Remova este e obtenha
do nosso serviço ou melhor. Ok, ótimo. Agora, como temos relatórios
adicionais de defeitos
da implementação, também
podemos acessar
nossos casos de uso phi. Remova este e obtenha o repositório em nosso localizador
de serviços. Agora, como discutimos em
nosso vídeo do localizador de serviços, apenas dando a classe do localizador de
serviços ou apenas escrevendo a função do localizador de
serviços. Isso não vai funcionar. Precisamos
de todas as funções dentro de p main.out fund. E para o, por
chamar a função. Também precisamos dar
a melhor inicialização do
seguro vinculativo. Isso garantirá
todas as coisas que eu
inicializei antes de chamar
a função na lacuna de Berlim. Agora vamos reconstruir a função que
escrevemos muito bem. Vamos ver se tudo
está funcionando bem ou não. Abrindo. Por enquanto, tudo
está funcionando bem. Vamos recapitular o que fizemos. Implementamos nosso serviço de
API aqui. Escrevemos os dados get
usando o pacote HTTP. E nós também, nós também fizemos foi se o
livro response.status é igual a 200, em
seguida, retornar o corpo da resposta como uma resposta dinâmica máxima para o código do sitters
não se opõe a 200, que significa que
há algum erro ao
obter os dados da API quando lançamos uma exceção. Então é isso para este vídeo. No próximo vídeo, vamos nos aprofundar na camada de
apresentação. Então, obrigado por assistir. Vejo você na próxima.
10. Bloc com visão geral de gerenciamento de estado do Cubit: Olá e bem-vindo
ao nono vídeo da nossa série de
arquitetura flutter clean. Estamos criando um aplicativo inteiro
usando arquitetura limpa. Neste vídeo,
aprenderemos sobre a gestão do
estado, que é bloqueada e cúbica. Neste vídeo,
aprenderemos a
gestão do estado usando um exemplo. E no próximo vídeo,
implementaremos nossa
gestão estadual dentro do nosso aplicativo. Portanto, antes de começar,
precisamos adicionar dois pacotes. Um deles é o pacote de blocos. Vamos adicionar o pacote de blocos em nosso arquivo YAML de pontos específicos do Pub. E os outros pacotes
flutuam bloco. Vamos adicionar o bloco de
vibração também. Você também pode instalar uma
extensão útil chamada block. Usando isso, você pode
criar facilmente blocos em
seu aplicativo. Deixe-me mostrar como. Basta ir para a pasta principal. Selecione a pasta
onde você deseja
criar o bloco ou o côvado. Aqui eu quero
criar um novo côvado, então eu vou clicar no cubo e
dar o nome. Digamos que eu vou nomear este em executado. Então eu posso ver que minha cúbica
é, foi criada. Também nomearei esse côvado
como texto sublinhado dois, mas agora também faremos
uma nova página chamada texto DAG. Agora você não precisa criar
a página de texto e detectar cúbico. Isso é apenas para
mostrar um exemplo dentro do texto que vou
importar um ponto material,
ponto e um apátrida com ele. Página de texto. A página de texto conterá
um andaime com nosso corpo. No centro. Ele terá um filho
de botão elevado. O botão elevado
assumirá pressionado. Vamos seguir, tenha uma função
vazia aqui e uma criança deve ser texto. Ok? Agora vamos ao nosso texto para isso. Esta jarda cúbica é
a cúbica real. E aqui estão as etapas. Vamos criar alguns novos estados. Esse é o estado inicial, que significa o estado que está presente quando o aplicativo está em execução. Se você for para o cubo,
nós estamos, podemos ver que sempre que
o cúbico foi criado, já
estamos
inicializando-o com o estado inicial. Então, dentro do nosso estado,
faremos algumas notícias para novos estados. Um é o carregamento do texto e o
outro é o texto. Dancei. Ok? Agora vamos criar uma nova função. Dentro da nossa função cúbica
será mostrada uma nova função de texto. E nesta função, o que eu quero fazer é deixar-me primeiro ir para o
nosso meio e mudar a página inicial para uma próxima página. O que eu realmente quero fazer é sempre que clico nesse botão, quero mostrar um indicador circular de
progresso. E depois de algum tempo,
eu quero mostrar aqui, preciso
isso, que é, digamos, feito ou concluído. Vamos fazer isso. Então, inicialmente,
vou emitir um novo estado, que é o estado de carregamento de texto. Depois de algum tempo, vamos
esperar por 1 segundo. E depois de esperar 1 segundo, quero emitir o
texto, dancei-o. Ok? Nossa função aqui está sendo feita. Vamos agora chamar essa função. Sempre que clicarmos
no botão de clique, iremos para nossa página de texto. E aqui, em vez de
pressionado, eu vou dar. Agora. Antes disso, também preciso importar os pacotes de
blocos flutter. Em seguida, podemos chamar a função
usando a leitura de ponto de contexto. E dentro de ler, vou nomear o côvado
de onde
vamos pegar a função ponto. Mostrar novo texto. Ok? Agora, o que eu quero fazer é criar um bloco aqui ou um construtor de
blocos aqui. Então, em vez do texto, mostrarei uma vez o indicador
circular de progresso e , em seguida, um texto que
está dizendo que não. O que queremos mostrar
em vez desse botão, quando clicamos no botão, queremos mostrar um indicador de
progresso circular e depois alguma textura. Então, o que precisamos fazer é mudar o botão elevado, queremos um
indicador de progresso circular e depois fazer isso. Vamos ver como
vamos fazer isso. Vamos fazer isso usando um widget chamado construção de blocos. Então, vamos escrever aqui. Este construtor de blocos
será de um côvado de texto. E o próximo estado dentro
do construtor de blocos, chamaremos um construtor, o que exigirá duas coisas. Se virmos. Um é o contexto construído e o
outro é o próximo estado. Então, vamos dar esses
contextos e estados. Agora. Se o estado for fixo,
inicial, não faça nada. E assim o botão,
como era antes, se o estado estiver carregando texto, então não faça nada além de um indicador de progresso
circular. Agora, se o texto for, se o estado não for texto
inicial ou não estiver carregando texto, então se você for para o
nosso texto e então ele tiver apenas um estado restante, esse é o texto em nosso else sempre
será o
texto downstate. Então, quando o estado for texto concluído, mostre um texto que
é concluído. Agora, para usar o bloco, precisamos fornecer o bloco a um widget que é o pai
dos textos com ele. Agora, se virmos que o
pai da página de texto rejeitada é o widget do aplicativo de
material. Portanto, precisamos fornecer nosso bloco, que é o texto úmido dentro de nossa métrica ou acima
do widget de aplicativo de material. Então, como poderia fazer isso? Vamos ver. Vamos cortá-lo a partir daqui e usaremos um widget
chamado bloco múltiplo. Fornecido. Aqui. Podemos ter vários fornecedores. Portanto, um provedor
será um provedor de bloqueio. E vamos criá-lo
usando um contexto, que retornará um côvado de texto. E a criança
será nosso material agora. Ok? Agora, se reiniciarmos o nosso,
vamos ver o que acontece. Ok? Assim, podemos ver que
nosso botão está aqui. Vamos ver o que acontece
quando clicamos nele. Clicamos no botão. Ele mostrou o indicador circular de
progresso e, em seguida, os detalhes da empresa. Vamos fazer o atraso para quatro segundos e
depois ver o aplicativo novamente. Ok? Assim, podemos ver quando
clicamos no botão,
o estado de carregamento do texto
está sendo inicializado. E depois de quatro segundos, o texto no estado negativo
foi inicializado. Então é assim que o bloco
com cúbico funciona. Portanto, esse é o entendimento
básico da gestão estadual
que usaremos. No próximo vídeo,
implementaremos a gestão estadual em nosso
aplicativo, o que significa aplicativo Notícias. Então, obrigado por assistir e
nos vemos no próximo.
11. Implementação de Bloc e Cubit em App: Olá e bem-vindo
ao décimo vídeo de nossa arquitetura flutter
clean que mostra onde estamos construindo um aplicativo inteiro usando
a arquitetura pain. Neste vídeo,
vamos incorporar nosso
gerenciamento de estado de bloco e qubit em nosso aplicativo. Então, primeiro exclua os côvados de
exemplo, que fizemos
no vídeo anterior. Então, podemos fazer isso, tudo bem. Podemos excluir a página de texto. Agora. Este também fará isso. E em vez disso,
forneceremos, forneceremos o côvado que será feito
neste vídeo. E aqui estaremos
escrevendo a página inicial. Em excluir as importações. Incrível. Vamos reiniciar o aplicativo. As crianças não podem
estar vazias até agora, vamos apenas remover esse objeto. Ok? Agora faremos um
novo Cupido. Iremos para a seção de
apresentação
e, dentro da pasta da
apresentação,
faremos uma nova chamada de côvado. Noticias. Então, como eu disse
no último vídeo, você pode ter uma extensão muito útil chamada
extensão de
bloco, usando a qual você pode
criar côvado facilmente,
como você pode clicar com o botão direito aqui e criar um bloco de auditoria de
côvado. Mas agora este é o côvado mais novo
e o novo estado que
chamarei de novo estúpido dobrado. Agora vamos para a nossa cúbica de notícias. Podemos ver que, por padrão, está tendo
a etapa inicial das notícias. E dentro dos novos estados, temos um passo inicial de notícias. Teremos mais dois estados. O primeiro estado será notícia. Vamos pular para a inicial das notícias. O segundo estado
será o carregamento de notícias, o terceiro estado
será o editor de notícias. Agora, dentro da etapa inicial das
notícias, teremos outra
coisa chamada D, lista de informações de notícias. Portanto, nossa iniciativa de notícias conterá as notícias que
serão exibidas aqui. Agora, nosso novo estado inicial conterá as notícias
que serão exibidas aqui. Vamos colocar nosso analito
inicial de notícias iniciaremos quando inicializarmos inicialmente as
notícias com uma lista vazia. Vamos dar uma olhada na constante. E então escreveremos uma
função chamada void fetch news function com
o texto de pesquisa aqui. E então chamaremos nossa função a partir dos casos de uso, que é essa função
fetch snooze função para que registrará esta dentro do nosso localizador de
serviços. Então, digamos que registre isso. Caso de uso de nus esticados. Fetch sabe. Ok. Agora vamos para nossa nova
habilidade, mas ponto ponto Phi. E aqui vamos receber
o caso de uso do News da geladeira. Vamos importar a célula aqui.
Esse é o localizador de serviços. E tudo bem, agora podemos
usar esse objeto fetch News, use case dentro da
nossa função fetch news. Então, vamos usar isso. Então,
vamos escrever fetch News. Use o kickstart, busque notícias
com o texto de pesquisa. Vamos ver o que
isso está retornando. Está nos devolvendo um futuro, seja um fracasso ou uma notícia
em uma lista de coisas. Então, vamos obter o resultado
de que estamos usando await. Agora, estaremos obtendo apenas
o quer depois da Terra. Então, vou escrever essas notícias finais. O resultado é igual a dois. E isso terá um tipo de dados de falha
ou
essa informação de notícias difíceis. Agora, temos o pacote tarts, que nos dá o
tipo de dados, também nos dá uma função muito
útil usando qual podemos
segregar nossas coisas, o que faremos quando
uma falha for obtida. E podemos segregar as coisas que faremos quando nossa lista de
informações de notícias estivermos recebendo. Então, como podemos fazer isso? Podemos fazer isso usando
a função completa que esquizo do DOD, certo? Obter resultado de notícias dot fold. E aqui podemos ver
que existem duas funções. Uma é a
função left que será invocada quando o
resultado esquerdo for retornado. E uma função correta que
será invocada quando o resultado correto
for retornado. Portanto, se o resultado à esquerda
tiver sido retornado, emitiremos o estado de erro de
notícias. E se o direito
tiver sido invocado, estará emitindo o estado inicial da
notícia. Mas com as novidades. Uma vez que esta função retorna uma lista de informações de notícias quando
o, quando não há erro. Portanto, este r também terá uma
lista de museus para isso, L terá um fracasso. Ok? Agora, antes de fazer qualquer coisa, também
precisamos emitir
o estado de carregamento de notícias. Porque sempre que
estamos buscando as notícias, primeiro ela mostrará
a tela de carregamento e depois buscará as notícias. Depois de buscar as notícias, se houver uma falha, ela
mostrará que o Dennett
terá o estado de erro. E se não houver falha e a função tiver retornado
a lista de informações de notícias
, teremos o estado
inicial da notícia com a música, com a lista de músicas para. Agora. Vamos usar essa função
em nossa página inicial. Então, para isso, precisamos tornar nossa página inicial um widget com estado. Vamos fazer isso. E dentro da nossa página inicial, ele terá uma função init. Agora, a função init é
uma função muito útil. Essa função só será chamada na primeira vez que a
página for inicializada. Portanto, essa função
só será chamada quando a página inicial
for inicializada pela primeira vez. Também não éramos isso apenas quando a primeira vez que a página inicial,
a nação inicializou, queremos chamar as
notícias de busca ou essa função. Então, vamos fazer isso. Para isso, precisamos importar
nosso pacote Better Block. E então
escreveremos notícias de ponto de contexto, leitura, notícias, côvado,
ponto fetch. E o
texto da pesquisa será nulo. Como inicialmente,
queremos apenas pesquisar os textos normais. Isso está nos dando um erro. A razão é que
não fornecemos a cuveta de notícias em nosso ponto
principal, ponto cinco. Então, vamos fazer isso. Nós até cortamos esse. Escreva um
provedor de vários blocos aqui. Teremos alguns fornecedores
ou uma lista de provedores. Podemos ter apenas uma lista de fornecedores ou até mesmo
um único provedor. Estaremos criando um provedor de
blocos. Por dentro do Create. Teremos uma função que retornará
o novo desvio. E a criança
será nosso material. Podemos importar a temperatura das
notícias. Ok, agora terminamos. Vamos reconstruí-lo
uma vez, reinicie o aplicativo. Ok? Agora podemos ver que
nosso bloco está funcionando, mas precisamos fazer mais algumas
alterações dentro da interface do usuário para que nosso bloco esteja conectado
aos cúbicos. Então, sempre que
houver uma mudança de estado, acordo com isso, a
DUI também mudará. Então, para fazer isso, precisamos
ir em nossa página inicial. Precisamos ir ao nosso ListView. Aqui dentro. Em vez do ListView
fará um bloco de bloco. O construtor de blocos estará fora
do côvado de notícias e do estado de notícias. Ele terá a
função de construtor aqui, o que levará um
contexto e o estado. Se o estado for notícia inicial, nada, mostre o ListView. E em vez da contagem de itens, agora
usaremos o estado DOT. Comprimento do ponto de notícias, que
estamos passando aqui. As novidades que são possivelmente, vamos mudar o
nome dos movimentos R2. Ok? Portanto, as notícias que
adicionarão passagem aqui dentro nosso novo estado inicial de notícias
que estamos usando aqui. Portanto, sempre que o estado
for novo veneziano, use as notícias fornecidas
no estado inicial da notícia. Então, nós o escrevemos e eles simplesmente contam para reafirmar o
comprimento do ponto da notícia. E tudo bem, por enquanto, que
seja isso. E se o estado
não for notícia inicial, se o estado estiver carregando notícias, dessa vez, ele
retornará um centro com um
indicador circular de progresso com uma cor de, digamos, se o estado não
for notícia inicial, se o estado não for
notícia e carregamento, então temos apenas mais
um estado restante. Essa é a era das notícias. Dessa vez, o que
podemos fazer é, por enquanto, mostraremos apenas um texto. Isso é um embrulho em uma frase. Ok, então
terminamos com nosso
construtor de blocos em nossa página inicial. Agora vamos para New scarred. O cartão de notícias é genérico
para cada cartão de notícias. Esta é uma notícia geral Scott, que estamos mostrando em
todos os cartões de notícias aqui. Mas precisamos ter informações
específicas para
cada jornal, que terá uma imagem única, um título exclusivo e assim por diante. Então, para fazer isso,
precisamos passar as informações de notícias dentro
de cada nova cicatriz. E de acordo com nossas novas informações, mudaremos a
imagem ou a maré. Então, vamos fazer isso. Em vez deste URL, agora
usaremos o URL da imagem do ponto de informações de notícias. Agora, à medida que acessamos nossas informações de notícias, podemos ver que o
URL da imagem pode ser anulável. Podemos ver que isso
é, isso pode ser o URL da imagem pode ser uma
string ou pode ser feito. Também queremos verificar se o
URL da imagem do ponto de informação de notícias não for igual a nulo, só então mostre a imagem. E também aqui podemos dar
um sinal de explicação, que será especificamente
durante isso, sim, se a imagem que você
adicionou não for nula, então aqui também o
adulto principal não pode ser nulo. Agora, aqui está o URL da
imagem é nulo. Não mostre nada, apenas uma caixa de tamanho
constante. Agora, vamos ao nosso título. Aqui. Mostrará o título do ponto de informação da
notícia. Agora, aqui também podemos, sabemos que o título
pode ser nulo ou uma string. Então, aqui também precisamos
dizer que, se a notícia não for igual a nula, então o título do ponto de informação da notícia. E se for igual a
mostrar um texto sem título. E precisamos remover
a constante
daqui e adicioná-las aqui. Desde antes, dissemos que a coisa
toda era constante, mas agora isso não é constante. Ele mudará de acordo com as informações de notícias que você está passando. Agora. Também terminamos
com nossa nova cicatriz. Vamos para a página de visualização de notícias. Aqui também,
passaremos as informações de notícias. E agora o que
precisamos fazer é definir nossa exibição de acordo com as informações de notícias que
estamos recebendo. Então, primeiro de tudo, nós
até mudamos o título para notícias no título do ponto da foto. Se não for igual a nulo, use as notícias na foto
intitulada loose is given. E se for igual a nulo, não
mostre nenhum título. Vamos remover a
constante daqui e adicionar a constante por toda parte. Extrato. A imagem
também mudará. Vamos alterá-lo para o URL da imagem do ponto de informações de
notícias. E diremos que, se o
URL da imagem do ponto de informação de notícias não for igual a nulo, use apenas o URL da imagem
na rede de pontos de imagem. E se for igual a,
igual a nulo, então tenha uma caixa de tamanho constante. Agora a dívida também
temos que dar, vamos fazer uma função. Digamos que obtenha a data na data no formato DD, MILÍMETROS, AA. Esta é uma função
que será criada, será constante a partir daqui. Vamos criar essa
função foster. Esta função retornará
null e escolherá uma data hora do nosso objeto news info. Então, o que retornaremos é datetime ponto d. Depois dessa barra, depois datetime ponto mês, depois uma barra,
depois ponto datetime. Então, agora usando dados dentro da string, usando o cifrão e
depois com chaves, isso é chamado de
interpolação de string. Isso mostrará os dados dentro dessa string junto com a outra string que
está presente aqui. Então, por exemplo, se você quiser mostrar o valor de 100
aqui, então alguma string. Você pode fazer assim. Vamos passar as informações de notícias
dot datetime dentro nossos dados em uma função de formato DD MM
AA. Então também precisamos dar
o nome do autor aqui. Autor de notícias em food dot. O autor também pode ser nulo. Então, para isso, vamos verificar se o autor não é igual a nulo, então use apenas o
ponto de informação de notícias de outra autoria, certo? Não. Autor. E o conteúdo também
excluirá esse Lorem. texto Ipsum terá conteúdo de pontos de informações de
notícias. O conteúdo também
pode ser nulo. Portanto, se o conteúdo
não for igual a nulo, use apenas o conteúdo. Outra coisa. Não mostre nenhuma rota local. Ok, acredito que terminamos
com nossa página de visualização de notícias também. Vamos para nossa página inicial. E como adicionamos
as informações de notícias aqui, precisamos adicioná-las
em nossa página inicial, também dentro do nosso cartão de notícias. Também adicionamos as informações de notícias. Então, também dissemos que
é parâmetro obrigatório, então precisamos
adicioná-lo em nossa página inicial dentro do nosso cartão de notícias. Objeto. Vamos adicioná-lo. As informações das notícias são
iguais às notícias do ponto do estado. Vamos remover a
constante deles. Ok? Então, se vimos que o state dot news contém
uma lista de informações de notícias. Assim, todas as informações de
notícias que podemos obter usando
notícias de ponto de estado com um índice. Agora, há boas notícias. Deus, estamos, podemos ver
que temos um erro. O motivo é
a página de visualização de notícias, precisamos fornecer
as informações sobre as refeições. Então, terminamos aqui. Vamos reiniciar o aplicativo e cruzar os dedos. Deveria ser. Ok. Nosso
indicador circular de progresso estava aparecendo e
podemos ver que também podemos ver as notícias. Vamos abrir uma notícia. Tudo bem. Podemos ver que as notícias que
estamos recebendo, a data, estamos recebendo os animais do
autor, estamos recebendo o conteúdo também. Estamos conseguindo, estamos
obtendo os otimistas do título. Vamos voltar e
abrir outra notícia. Ok, aqui também, a mesma coisa. Ok. Agora, vamos verificar se nosso texto de
pesquisa, o que
está funcionando ou não. Pesquise na Apple. Nada
está acontecendo com isso. O motivo é que não
adicionamos nossa
funcionalidade de pesquisa aqui. Então, vamos acrescentar isso. Precisamos ir à nossa
apresentação dentro de nossas páginas. Precisamos ir para a página inicial. E dentro da nossa página inicial, precisamos adicionar um parâmetro on
changed, que tomará a
constante daqui. Vamos adicionar a constante
nesses espaços. Agora, o que essa
função onChange fará é sempre que estivermos mudando, vamos mudar o onchange
para o próprio enviado. Então, sempre que, depois de escrever
algo, digamos laranja. E depois disso, estamos enviando clicando
neste botão. Estaremos pesquisando notícias relacionadas ao texto de pesquisa aqui, que é laranja e discutiremos. Então, vamos fazer isso. Como podemos fazer isso é
chamando a nova função. Então, escreveremos
contextos, ponto, leitura, notícias, côvado, notícias de busca de pontos, junto com os bastões de pesquisa
que estamos dando aqui. E também precisamos
especificar mais uma coisa. Mas vamos ver como
está funcionando ou não. Vamos pesquisar uma moeda pequena. Ok, então nossa
funcionalidade de pesquisa também está funcionando. Sempre que procuramos as notícias, era está nos mostrando algumas coisas boas. Vamos abrir as notícias. Ok, então isso está funcionando bem. Vamos pesquisar com
outros nomes. Digamos que a Apple. O, The Apple
News também é verdade. Vamos mergulhar em Mais um. Newton. Não é exatamente o Newton
que você está esperando, mas tudo bem, vamos digitar no Google. Estamos pesquisando o mecanismo de pesquisa mais
popular em nossa pesquisa. Mas vemos que nosso
recurso de pesquisa também é o que. Mas se removermos todo o texto
aqui e pressionarmos Enter, estamos recebendo um erro. Mas o que
realmente deveria estar acontecendo é que, se não houver texto presente
aqui, mostre o padrão. Portanto, também precisamos fazer isso
se o ponto do texto de pesquisa for cortado. Aparar significa que
mesmo que, mesmo que você tenha alguns, digamos espaços aqui, isso também será considerado como nada presente
dentro de nossa parte de armazenamento. Então, introduzimos uma guarnição. Se nosso corte for igual, igual a nada, nenhum texto
ou evitar texto. Dessa vez. Faça uma pesquisa e mostre
os meios padrão. E as notícias padrão por padrão, quero dizer que o texto de pesquisa será nulo. E se não for esse
o caso, então. Então, eles estão esticados.
Vamos agora verificar se não há textos presentes em
nossa barra de pesquisa. E então pressionamos Enter, devemos receber as notícias padrão e estamos obtendo o padrão. Mas se houver algum texto, então estamos obtendo
as ferramentas de pesquisa. Ok? Então, tudo está funcionando agora, mas também precisamos mudar
algumas coisas, alguns detalhes. As principais notícias devem ser mostradas quando estivermos
mostrando as notícias padrão. Mas quando estamos apenas mostrando
algumas buscas linchadas, dessa vez, as principais notícias devem ser pesquisadas. Então, vamos fazer isso. Para fazer isso, precisamos
criar um novo estado, que é chamado de estado de pesquisa
inicial de notícias. Agora, esse estado será invocado sempre que o texto de pesquisa não
for igual a nulo.
Então, escrevemos aqui. Se o texto da pesquisa
não for igual a nulo, emita a pesquisa inicial de notícias. Estado. Outra coisa. Basta inicializar
as iniciativas de notícias. Agora vamos para nossa página inicial. E agora aqui, se o estado for novo
inicial, mostre o ListView, e se o estado for pesquisa inicial de
notícias, esse tempo também
mostrará essa disputa. Ok, agora vamos às nossas principais notícias e esta
vamos mudar. Então, podemos embrulhar isso
com um acúmulo de blocos. Portanto, essa é a coisa muito
útil sobre o uso construtor de
blocos que
não precisamos alterar
a página inteira ou
reconstruir a página inteira. Sempre que houver
uma mudança de estado, podemos simplesmente alterar o widget específico
que queremos alterar. Essa é a beleza das
declarações, certo? Contexto, estado. E se o estado
for notícia inicial, esse tempo volta ao normal. Notícias principais. Caso contrário, se o estado for novo, pesquisa
inicial, esse tempo mostrou a pesquisa para notícias,
notícias para crédito. E se o estado
não for nem inicial de
notícias nem pesquisa inicial de notícias
, retorne um orçamento vazio
ou uma caixa de tamanho constante. Ok, vamos experimentar. Se tivéssemos em nossa tela inicial, quando havia um carregamento,
ele não estava mostrando nenhum widget. Novamente, se inserirmos novas mostrando
apenas o topo próximo a 0, quando as principais notícias estão mostrando,
o cabeçalho é a notícia principal. E se for um nome de pesquisa, as notícias de pesquisa tiveram um problema. Ok, ótimo. Agora também, faremos
algum tratamento de erros aqui. Vamos limpar tudo. Vamos comentar por enquanto. Vamos comentar essa parte por enquanto e emitir o estado de erro de notícias. Vamos ver o que está mostrando aqui. Vamos reiniciar o f. E quando há um estado de erro de
notícias, estamos apenas mostrando que
há um texto de erro na tela. O que devemos
fazer quando houver um estado de erro de notícias é
dar ao usuário um botão de recarga para que se houver um erro com
a chamada do APN
, possamos recarregar nosso e ele
chamará a API mais uma vez. Então, vamos fazer isso. Agora. Se houver um erro, em
vez de apenas o texto, queremos dar um botão de ícone. O botão do ícone
assumirá um pressionado. Por enquanto, vamos dar a ele uma função
vazia e um ícone. O ícone será, eu posso começar. Nós reproduzimos e
isso deve ficar bem. E a cor
será Deep Blue. O tamanho será, digamos, 24. E vamos dar
uma constante aqui. E o que realmente queremos
fazer com esse botão de recarga, queremos chamar novamente
a função buscar notícias
dentro de nossas notícias, boas notícias com o texto de pesquisa
nulo. Então, se fizermos isso por enquanto, nada acontecerá porque
acabamos de imitar
um erro de notícias aqui. Mas se removermos o erro de
notícias daqui, e se descomentarmos isso, e agora, se pressionarmos
o botão Carregar, ele deve nos mostrar
o normal, bom. Mas o padrão significa wallah assim que
a notícia padrão. Se reiniciarmos o
aplicativo repetidamente, testá-lo, vamos ver
o que está acontecendo. Nossas notícias iniciais
foram mostradas com o cabeçalho de notícias superior e
a imagem é mostrada, o título está sendo mostrado. As fotos estão carregando. E se formos ao noticiário, podemos ver que o
título está sendo exibido, as unidades estão sendo mostradas. A data está sendo mostrada
quando foi publicada, o autor Naomi tissue
e o conteúdo também
estamos agora se pesquisarmos algum texto,
pesquisa, alguma hora de notícias pesquisadas notícias também estão sendo mostradas com as notícias
de busca dirigidas. E se não houver texto
dentro do nosso campo de texto de pesquisa
, a instalação padrão. Por isso, implementamos
nosso bloco com gerenciamento de estado
qubit
dentro do nosso aplicativo. E nosso aplicativo é totalmente
completo e funcional. Então, no próximo vídeo, falarei sobre a parte modular da arquitetura
limpa. Veremos por que
é modular e como podemos. Também
mostrarei alterando um pacote muito importante
que estamos usando. E mostrarei
com que facilidade podemos alterar
o pacote sem afetar outros códigos presentes aqui usando essa arquitetura
limpa. Então, obrigado por assistir. Vejo você na próxima.
12. Teste de modularidade de arquitetura limpa: Olá e bem-vindo
ao 11º vídeo e ao vídeo final de nossa série de
arquitetura plana e limpa, onde estamos construindo um aplicativo inteiro usando arquitetura
verde. Neste vídeo,
testaremos a modularidade da arquitetura
limpa. Desde o primeiro vídeo, fingi que arquitetura
limpa
é muito modular. Com isso, quis dizer que podemos
facilmente mudar qualquer coisa em qualquer uma dessas seções sem afetar o código
de outras sessões. Portanto, neste exemplo, alteraremos
nosso pacote HTTP em nosso serviço de API para
outro novo pacote atualizado. Vamos ver qual pacote
usaremos. Usaremos um
pacote chamado dy. Vamos para a biografia e adicionar o pacote DO em nosso arquivo YAML de ponto de especificação de
pub. Adicionamos discagem em nosso arquivo YAML de ponto de especificação de
lâmpada. E vamos analisar nossa pesquisa localizada
e registrada. Registrou nosso diodo. Agora lembre-se de uma coisa. Você precisa se registrar
antes do serviço da API. O motivo é que você
usará o pacote de discagem
em nosso serviço de API. Portanto, precisamos registrar a morte primeiro e depois registrar
a superfície da API. Agora, apenas por esse motivo, estamos registrando
nosso serviço de API antes da busca da fonte de dados
remota. A razão é que estamos usando o serviço de API dentro de nossos
peixes a partir de uma fonte de dados remota. Agora vamos ao nosso serviço de API
e excluiremos. Essa linha. Escreverá a
resposta final igual a dois. Antes disso, também
precisamos pegar o diodo. Vamos importar nosso localizador de
serviços. Agora vamos escrever a função de obtenção de
ponto de diodo. Agora, a função get, vemos que ela pega o caminho e também leva
três parâmetros. A parte será a URL aqui, e os parâmetros serão
onde os pais, ok? E isso retorna um
futuro de resposta. A resposta terá
uma resposta a ela. Agora, o, isso será a
resposta ponto da, da dados. Como estamos usando a resposta
do descanso em forma de diapasão, tudo será salvo. Agora, vamos reiniciar
nosso candidato. Ok, então estamos recebendo um erro. Vamos ver qual erro
fomos criados. Se imprimirmos aqui, os dados de início da
resposta.
Podemos ver se, você sabe, response.data
é impresso. Se imprimirmos o response.data aqui, vamos ver o que acontece. Ok? Então, este está sendo impresso. Portanto, nosso erro deve estar em algum lugar dentro de nossas fontes de dados. Tudo bem. Vamos ao nosso arquivo de fontes de
dados. E dentro da nossa captura, vamos imprimir a edição. Assim, podemos ver que o HashMap
interno ou uma dinâmica de string de mapa
não é um subtipo de string. Isso está aparecendo porque, se
formos ao nosso serviço de API, estamos usando JSONData chamado código dentro de nosso response.body dentro do
nosso pacote HTTP. Isso nos dá uma versão
neófita de
cordas da coisa dinâmica da pedra do mapa. Mas aqui estamos
obtendo diretamente os tipos
dinâmicos máximos, então não precisamos
usar esse. Para que possamos excluí-lo aqui. E se executarmos de novo, vamos ver o que acontece. Ok? Então, estamos obtendo nossos dados por algum minuto e ver
se isso também está funcionando. Vamos pesquisar. Ok. Portanto, a funcionalidade de pesquisa também
está funcionando. Essa é a facilidade com que podemos mudar as coisas em nossa arquitetura limpa sem mudar nada. Se você visse,
só precisávamos alterar duas a três linhas em nosso serviço de
API ponto, arquivo ponto. O resto, todo e qualquer arquivo estava dizendo que
tem o mesmo código. Não precisávamos alterar nenhum outro arquivo, exceto
o serviço da API. Então essa é a beleza
da arquitetura limpa. Isso é tão útil
que podemos facilmente mudar qualquer coisa sem alterar ou alterar outras lutas. Então é isso para este vídeo. Neste curso, fizemos um aplicativo inteiro do zero usando
arquitetura limpa. Espero que você também consiga criar o
aplicativo comigo. E obrigado por assistir a série inteira até o final.