Após 1 ano desse vídeo, eu, iniciante em Flutter, tive a imensa facilidade em utilizar o ChangeNotifier a partir dessa explicação! Uma excelente didática. Obrigado, professor!
De todos os conteúdos sobre Flutter que procurei as suas aulas são as melhores!! Parabéns professor, está me ajudando bastante e sua didática é muito boa. Com certeza irei indicar aos amigos seus vídeos!! Abraço.
Se uma pessoa iniciante, tem o mínimo de conhecimento de programação, tipagem, poo e logica, essa playlist é um gps para aprender a essência do flutter e já criar sua primeira aplicação, fico grato por disponibilizar esse conteúdo vc está sendo de grande valia para os iniciantes em flutter igual a mim, obrigado
Boa noite Prof. Os conteúdos os vídeos são ótimos. A didática é ótima. Indique para alguns amigos, e eles também acharam bacana os vídeos. Uma dúvida tem como definir uma color em um lado da borda de um widget? A ideia seria definir a cor da borda da esquerda do Card (outro widget)
Depende de como deseja implementar isso. Mas pode usar uma row com um container de width fixo com a cor que deseja e basta fazer o alinhamento correto da row. Outra forma seria encapsular a widget que deseja com um Container, dentro dele você pode fazer um padding somente na esquerda (assim criaria-se uma borda). Outra forma seria especificar a borda do próprio container com a propriedade boxDecoration
@@drantunes A minha ideia é no ListView com ListTile onde teria um widget com a borda esquerda uma cor. Assim conforme o tipo de um campo. A borda da esquerda teria uma cor diferente ou não teria cor nem uma. Obrigado pela dica, se pensar em algo diferente.
Boa. Eu ia fazer essa mesma pergunta. Kkkkkkkk Teria como o senhor ensinar justamente com o provider? Assisti alguns vídeos e conversei com o Renato Motta(ele tem um canal no Yt e também trabalha no Nubank), e ele me informou que só usa o que o senhor ensinou no vídeo. Na empresa onde trabalho usamos o get_it, mas eu gostaria de aprender utilizando o provider, já que ele é o recomendado pelo Google. Muito obrigado pela aula professor. Que Deus sempre continue te iluminando e que Ele te dê em dobro toda a ajuda que o senhor nos oferece.
Excelente Diego, como você faz ficar mais fácil o desenvolvimento, ótima didática, parabéns. Achei muito mais fácil que o GetX, mas fica uma dúvida, existe algum cenário que é melhor o GetX ao Provider ou os dois trazem o mesmo resultado?
Muito obrigado 😃 Recomendo sempre usar os padrões de mercado e o Provider é um deles. A única "desvantagem" do Provider é se você quiser recuperar uma instância em uma classe, onde não existe o context, ou seja, se você trabalhar com service locator (como o Get.find). Se você trabalhar corretamente com Injeção de Dependência via Provider, não será necessário o padrão Service Locator. Um substituto para isso seria o GetIt. Se você usa o GetX por conta da reatividade, você pode substituir eles por valuenotifiers ou streams do próprio Dart e criar seus próprios Obx e .obs (alias, pretendo fazer um vídeo mostrando como construir essa reatividade transparente). Espero ter ajudado ;)
Obrigado pelo vídeo, me ajudou muito. Só tenho uma dúvida, como q eu posso usar o provider com a dependência do mysql1? Tem algum exemplo ou algum livro que posso estar entendendo isso.
Não recomendo esse caso de uso, a menos que esteja no backend, pois neste caso suas credenciais de acesso podem ficar expostas no front. Sugiro usar uma API como intermediário entre app e mysql
Excelente video Prof. Uma duvida: Como eu faço para acessar e disparar um metodo do Provider a partir de um metodo de uma classe Helper por exemplo que nao tem context ?
Uma dúvida ... to desenvolvendo um app onde o usuario ao se cadastrar no auth do firebase... ele abre uma collection com suas informações no firestore.... qual seria a melhor forma de jogar a uid gerada no auth na coleção e posteriormente puxada as informações desse usuario em em outras telas do app. Parabéns pelo vídeo!!!!
Valeu!!! Você pode fazer de várias formas: 1) após o registro mesmo, via Flutter, você cria uma classe para fazer isso; 2) você pode criar uma callable function que executa no servidor essa lógica (um pouco mais lento); 3) você cria uma cloud function que responde ao evento de registro do usuário (assíncrono, pode ter problema se já precisa do dado logo após o registro).
Uma duvida, uso Go Router, teria como ter uma classe que retorna Widget e nela ter um método static, onde teria o meu ChangeNotifierProvider, nele instanciar o provider no create e dai a page abaixo, assim quando esta rota não mais for necessário o changeNotfiierProvider faz o seu dispose automático certo? Assim posso ter para minha splash page, e outras pages algo gerenciavel na chamada e não na árvore da main
Sim, pode trabalhar em um conceito de módulo, tendo um provider carregando as dependências e o child carrega a página. Ao invés de passar a página para o GoRouter, passa o o módulo.
Muito bom o video, professor em relação a perfomace eu posso criar um provider para o dabatase(firestore) e um para um auth service , tipo manter uma classe sibgleton e só uma instancia de database e auth service isso é uma boa pratica ?, tipo isso consome memoria ?
Te dar uma ideia, beleza? Existem vários tipos de inteligência, mas a maioria se beneficia muito de um esboço. É a ideia do "Quer que eu desenhe?" sim! De preferência no início do vídeo, mostrando por alto quais classes fazem o que e com quem. Dai em diante, entendido o macro, a pessoa se ocupa apenas de compreender a implementação da ideia e fica tudo encaixado na mente. Curti o vídeo, só dando as ideia.
Sim, existem várias metodologias de ensino... Essa playlist tentei ser mais prático quanto possível, que é a preferência da maioria por aqui. No meu curso presencial acabo usando outras abordagens também para complementar. Obrigado pela sugestão
Poderia explicar melhor pq utilizou UnmodifiableListView e não o list, uma outra duvida que vive é, a variavel favoritas tem que esta dentro do metodo build, ou posso criar fora. Agradeço
UnmodifiableListView não permite você modificar a lista manualmente, então todo mundo que usar o get da lista só consegue ler os dados e não consegue manipular, para isso usamos algum método da classe (que tem acesso a versão privada da lista). Pode declarar fora do build sim.
O ideal é separar as responsabilidades, logo, o SharedPreferences deve ser separado da aplicação. O Provider vai te ajudar a gerenciar e recuperar a instância onde você precisar. Aí a reatividade que você irá usar e como irá utilizar vai depender de você e do seu caso de uso.
Quando eu tenho diversas telas e subtelas, onde cada uma delas usam dependencias diferentes, não tem como eu declarar todas dentro do MultiProvider, até porque tem dependencia que eu quero que instancie somente no momento que eu vou usar, a lib GetX trabalha bem com isso usando Bindings, como é possível fazer isso no provider? Porque se eu declarar tudo no main, vai criar instância de todas as dependencias de uma só vez, certo?
Você pode usar a mesma estratégia, pode criar uma classe de rota onde instancia o provider para a pagina qie deseja (fazendo o wrap no metodo build) - ou faz o wrap com provider em cada rota 👍
@@drantunes Entendi, obrigado professor. Não sei se você ja testou, mas no GetX fica bem clean, cria-se uma classe separada que extende Bindings e registra as dependencias, fica lindão e bem organizado, eu particarmente não gosto muito de recuperar dependencias dentro do build, no GetX da pra recuperar fora ou dentro.
Como que faz com.o changeNotifier para trabalhar com objetos personalizados? Não consigo fazer ele refletir quando altero uma propriedade do objeto....
Professor, estou tentando implementar no botão FloatingButton de favoritos, pra quando clicar, além de add a moeda, ser direcionado para a tela de favoritos, mas não tá dando certo... tava tentando reaproveitar a função abrirDetalhes(), do jeito abaixo: onPressed: () { favoritas.saveAll(selecionadas); limparSelecionadas(); abrirDetalhes(tabela[moeda]); }, Mas dá esse erro: Undefined name 'moeda' >> como faço pra resgatar esse valor?
Então, o problema é que a variável tabela está definida no escopo do body, e o FloatingActionButton está em outro escopo. Também, como é possível selecionar mais de uma moeda, daria para navegar somente para uma delas. Uma opção seria fazer abrirDetalhes(selecionadas.first), mas como falei não tem como abrir todas as selecionadas
Após 1 ano desse vídeo, eu, iniciante em Flutter, tive a imensa facilidade em utilizar o ChangeNotifier a partir dessa explicação! Uma excelente didática. Obrigado, professor!
De todos os conteúdos sobre Flutter que procurei as suas aulas são as melhores!! Parabéns professor, está me ajudando bastante e sua didática é muito boa. Com certeza irei indicar aos amigos seus vídeos!! Abraço.
Valeu William! Feedback é importante para ir melhorando! Grande abraço.
Concordo demais
Se uma pessoa iniciante, tem o mínimo de conhecimento de programação, tipagem, poo e logica, essa playlist é um gps para aprender a essência do flutter e já criar sua primeira aplicação, fico grato por disponibilizar esse conteúdo vc está sendo de grande valia para os iniciantes em flutter igual a mim, obrigado
Muito obrigado!!!
Muito obrigado pela excelente e simples explicação, professor... ganhaste uma maçã! 🍎
Ótima explicação, consegui entender a lógica para criar um repositório de captura de imagens para utilizar em outras telas a partir deste vídeo.
Cara to aprendendo flutter.... como n tenho grana pra cusos isso ta me ajudando muito HAAAA VLWWWW
Cara, já vi tuas aulas de Bloc e agora essa, mds, vc é top
Muito obrigado 😁
Rapaz, suas aulas são demais. É muito pratica e dinamica. Estou gostando muito. Doido para ver as partes de consumo de API e capitura de dados....
Vamos ate recursos nativos, continua que a playlist é introdutória mas ajuda bastante nessa visão geral ;)
Com certeza. Hoje estou na aula 21... Estou seguindo sem pressa... Muito top.
Muito boas as suas aulas, está de parabéns, explica muito bem!
obrigado professor, eu estava travado em um projetinho e seu vídeo me ajudou a resolver o problema! obrigado e um abraço :)
Sensacional Diego. Parabens pelo trabalho. Estou acompanhando sua playlist completa e está me ajudando muito nos estudos. Abraços!!
Muito obrigado Ricardo! Vai ser sucesso, essa playlist chega até recursos nativos e animações!!!!! 🚀
Obrigado professor, você é muito claro, didático e direto. Está me ajudando muito
Obrigado! Bons estudos!!!
Muito top suas aulas. Parabéns!
Testei o riverpod e gostei, um "provider evoluido", como o criador chama, com o estado imutável.
Parece bem promissor o Riverpod, tomara que ganhe mercado no próximo ano !!!!
Que Aula Incrível
Boa noite Prof.
Os conteúdos os vídeos são ótimos. A didática é ótima. Indique para alguns amigos, e eles também acharam bacana os vídeos.
Uma dúvida tem como definir uma color em um lado da borda de um widget? A ideia seria definir a cor da borda da esquerda do Card (outro widget)
Depende de como deseja implementar isso. Mas pode usar uma row com um container de width fixo com a cor que deseja e basta fazer o alinhamento correto da row. Outra forma seria encapsular a widget que deseja com um Container, dentro dele você pode fazer um padding somente na esquerda (assim criaria-se uma borda). Outra forma seria especificar a borda do próprio container com a propriedade boxDecoration
@@drantunes A minha ideia é no ListView com ListTile onde teria um widget com a borda esquerda uma cor. Assim conforme o tipo de um campo. A borda da esquerda teria uma cor diferente ou não teria cor nem uma. Obrigado pela dica, se pensar em algo diferente.
Show... Seria legal também um exemplo com array de povider
É uma boa ideia!!!
show
Professor, poderia fazer um vídeo sobre injeção de dependências para flutter ? Obrigado por seus conteúdos.
Fala Eduardo, visão geral ou algum conteúdo específico?
Boa.
Eu ia fazer essa mesma pergunta.
Kkkkkkkk
Teria como o senhor ensinar justamente com o provider?
Assisti alguns vídeos e conversei com o Renato Motta(ele tem um canal no Yt e também trabalha no Nubank), e ele me informou que só usa o que o senhor ensinou no vídeo.
Na empresa onde trabalho usamos o get_it, mas eu gostaria de aprender utilizando o provider, já que ele é o recomendado pelo Google.
Muito obrigado pela aula professor.
Que Deus sempre continue te iluminando e que Ele te dê em dobro toda a ajuda que o senhor nos oferece.
Cara que vídeo perfeito, Muito bom Diego, Poderia fazer um com o multiporvider?
Acredito que uso nessa série;)
Excelente Diego, como você faz ficar mais fácil o desenvolvimento, ótima didática, parabéns. Achei muito mais fácil que o GetX, mas fica uma dúvida, existe algum cenário que é melhor o GetX ao Provider ou os dois trazem o mesmo resultado?
Muito obrigado 😃
Recomendo sempre usar os padrões de mercado e o Provider é um deles.
A única "desvantagem" do Provider é se você quiser recuperar uma instância em uma classe, onde não existe o context, ou seja, se você trabalhar com service locator (como o Get.find). Se você trabalhar corretamente com Injeção de Dependência via Provider, não será necessário o padrão Service Locator. Um substituto para isso seria o GetIt. Se você usa o GetX por conta da reatividade, você pode substituir eles por valuenotifiers ou streams do próprio Dart e criar seus próprios Obx e .obs (alias, pretendo fazer um vídeo mostrando como construir essa reatividade transparente).
Espero ter ajudado ;)
@@drantunes Ajudou demais, e seria um ótimo vídeo... Vlw e sucesso
Obrigado pelo vídeo, me ajudou muito. Só tenho uma dúvida, como q eu posso usar o provider com a dependência do mysql1? Tem algum exemplo ou algum livro que posso estar entendendo isso.
Não recomendo esse caso de uso, a menos que esteja no backend, pois neste caso suas credenciais de acesso podem ficar expostas no front. Sugiro usar uma API como intermediário entre app e mysql
Excelente video Prof. Uma duvida: Como eu faço para acessar e disparar um metodo do Provider a partir de um metodo de uma classe Helper por exemplo que nao tem context ?
Você precisa injetar ( passar como parâmetro no construtor) esse objeto
@@drantunes nao entendi, injetar o que no construtor de quem?
Uma dúvida ... to desenvolvendo um app onde o usuario ao se cadastrar no auth do firebase... ele abre uma collection com suas informações no firestore.... qual seria a melhor forma de jogar a uid gerada no auth na coleção e posteriormente puxada as informações desse usuario em em outras telas do app. Parabéns pelo vídeo!!!!
Valeu!!! Você pode fazer de várias formas: 1) após o registro mesmo, via Flutter, você cria uma classe para fazer isso; 2) você pode criar uma callable function que executa no servidor essa lógica (um pouco mais lento); 3) você cria uma cloud function que responde ao evento de registro do usuário (assíncrono, pode ter problema se já precisa do dado logo após o registro).
Uma duvida, uso Go Router, teria como ter uma classe que retorna Widget e nela ter um método static, onde teria o meu ChangeNotifierProvider, nele instanciar o provider no create e dai a page abaixo, assim quando esta rota não mais for necessário o changeNotfiierProvider faz o seu dispose automático certo? Assim posso ter para minha splash page, e outras pages algo gerenciavel na chamada e não na árvore da main
Sim, pode trabalhar em um conceito de módulo, tendo um provider carregando as dependências e o child carrega a página. Ao invés de passar a página para o GoRouter, passa o o módulo.
Muito bom o video, professor em relação a perfomace eu posso criar um provider para o dabatase(firestore) e um para um auth service , tipo manter uma classe sibgleton e só uma instancia de database e auth service isso é uma boa pratica ?, tipo isso consome memoria ?
Duas classes não irão consumir tanta memória, não se preocupe 👍
Professor, o senhor indica o Provider para projetos com muitas telas e objetos que devem ser observáveis?
O que seriam muitas telas? Indico sim, o Provider é uma abordagem sólida, desde que usado de forma correta 👍
Te dar uma ideia, beleza? Existem vários tipos de inteligência, mas a maioria se beneficia muito de um esboço. É a ideia do "Quer que eu desenhe?" sim! De preferência no início do vídeo, mostrando por alto quais classes fazem o que e com quem. Dai em diante, entendido o macro, a pessoa se ocupa apenas de compreender a implementação da ideia e fica tudo encaixado na mente. Curti o vídeo, só dando as ideia.
Sim, existem várias metodologias de ensino... Essa playlist tentei ser mais prático quanto possível, que é a preferência da maioria por aqui. No meu curso presencial acabo usando outras abordagens também para complementar. Obrigado pela sugestão
Poderia explicar melhor pq utilizou UnmodifiableListView e não o list, uma outra duvida que vive é, a variavel favoritas tem que esta dentro do metodo build, ou posso criar fora. Agradeço
UnmodifiableListView não permite você modificar a lista manualmente, então todo mundo que usar o get da lista só consegue ler os dados e não consegue manipular, para isso usamos algum método da classe (que tem acesso a versão privada da lista). Pode declarar fora do build sim.
@@drantunes Entendi... Agradeço 🙏🏼 e sucesso.
Professor, caso eu use o SharePreferences, o ideal seria provider ou apenas um setstate?
O ideal é separar as responsabilidades, logo, o SharedPreferences deve ser separado da aplicação. O Provider vai te ajudar a gerenciar e recuperar a instância onde você precisar. Aí a reatividade que você irá usar e como irá utilizar vai depender de você e do seu caso de uso.
Quando eu tenho diversas telas e subtelas, onde cada uma delas usam dependencias diferentes, não tem como eu declarar todas dentro do MultiProvider, até porque tem dependencia que eu quero que instancie somente no momento que eu vou usar, a lib GetX trabalha bem com isso usando Bindings, como é possível fazer isso no provider? Porque se eu declarar tudo no main, vai criar instância de todas as dependencias de uma só vez, certo?
Você pode usar a mesma estratégia, pode criar uma classe de rota onde instancia o provider para a pagina qie deseja (fazendo o wrap no metodo build) - ou faz o wrap com provider em cada rota 👍
No main geralmente declaramos apenas os estados globais, exemplo serviço de autenticação
@@drantunes Entendi, obrigado professor. Não sei se você ja testou, mas no GetX fica bem clean, cria-se uma classe separada que extende Bindings e registra as dependencias, fica lindão e bem organizado, eu particarmente não gosto muito de recuperar dependencias dentro do build, no GetX da pra recuperar fora ou dentro.
o meu da erro 'Field 'favoritas' has not been initialized.)' como resolvo?
inicializa com lista vazia [ ]
@@drantunes resolvido, muito obrigado
isso substitui as rotas nomeadas?
As rotas nomeadas facilitam a navegação apenas (para identificar cada rota)
Como que faz com.o changeNotifier para trabalhar com objetos personalizados? Não consigo fazer ele refletir quando altero uma propriedade do objeto....
Qual o tipo de objeto? Como você está fazendo essa operação…
Eu to cm um problema pq meu list não re-renderiza quando atualiza os dados, parece que ele não ta atualizando os dados :(
Você está usando um ListView.builder e acessando os dados via Provider?
@@drantunes eu consegui, muito obrigado
Professor, estou tentando implementar no botão FloatingButton de favoritos, pra quando clicar, além de add a moeda, ser direcionado para a tela de favoritos, mas não tá dando certo... tava tentando reaproveitar a função abrirDetalhes(), do jeito abaixo:
onPressed: () {
favoritas.saveAll(selecionadas);
limparSelecionadas();
abrirDetalhes(tabela[moeda]);
},
Mas dá esse erro: Undefined name 'moeda' >> como faço pra resgatar esse valor?
Então, o problema é que a variável tabela está definida no escopo do body, e o FloatingActionButton está em outro escopo. Também, como é possível selecionar mais de uma moeda, daria para navegar somente para uma delas. Uma opção seria fazer abrirDetalhes(selecionadas.first), mas como falei não tem como abrir todas as selecionadas
Qual esse tema do vs code?
Dracula