Tão bom achar tutoriais que não temos que além de entender o vídeo, entender tbm o inglês indiano haha Me ajudou mtão, já to inscrito e em breve verei todos os vídeos do curso :)
Boa noite ,Prof. Diego Antunes. Fiquei com uma duvida relacionada seguranca da conexao do app com o firebase. Como o app conecta direto sem uso de uma api voce ve algum problema de seguranca? Eu entenid que a ponte de comunicacao é o json que fica na raiz do projeto. E se alguem decompilar o apk e pegar esse json e rodar em um projeto local com mesmo package?
Olá Mateus, não há problema **SE** o desenvolvedor configurar regras de segurança no Firebase para o Firestore, Storage, etc. firebase.google.com/docs/rules. Geralmente nos tutoriais apresenta-se apenas a configuração e uso do Firebase, mas para produção é necessário configurar as regras de segurança
Boa tarde, professor. Primeiramente parabéns pelo conteúdo. Ganhou um inscrito. Gostaria de saber qual é essa extensão que você usa no momento da codificação em que vai mostrando os erros enquanto digita. Outra dúvida é se você tem algum conteúdo falando das extensões que você usa ou as melhores extensões para usar no vs code. Abraço.
Olá, você já sabe que sou muito grato pelo seus videos, comentei muito aqui. Porem estou com uma pendencia. Fiz o AuthCheck identico ao seu, faço o registro não apresente erro algum, chama a tela HomePage, passa por todo o código e não troca para a HomePage, fica na RegisterPage. Sabe o que pode ser? Lembrando cria o usuário no Firebase e não apresente erro.
Teria que analisar o código... Quando você usa o hot reload, ele muda de página? Me parece que: a) o service de usuário não está chamando o notifyListeners ou b) algum erro na navegação.
Estou com o mesmo problema, quando uso o hot reload ele muda a página para a homepage mas sem o hot reload fica na página de login mostrando o CircularProgressIndicator infinitamente. Conseguiu corrigir esse problema?
@@drantunes o Hot reload funciona, ele chama a HomePage percorre todo o código da HomePage, não apresente erro mas não muda de fato para a HomePage. O notifyListeners esta identico ao seu. Unica diferença é que estou usando o Flutter 3.3.5.
Teacher uma pergunta: no firebase (free) e possivel criar um projeto e configurar o storage para arquivos e o firestorage database? para acesso de apenas um app flutter. Penso no seguinte cenario: app com perfil de usuario e que o usuario possa enviar sua foto para personalizar a tela durante o uso.
Quais as configurações de estilo que ele utiliza no vs code? o meu vs code vive dando problema ao codar flutter, principalmente na parte visual/plugins
@@drantunes Boa tarde, no meu fica aparecendo use "const" with the constructor to improve performance, em praticamente tudo, o problema é que as classes ficam sublinhadas em amarelo e me incomodam...
e nem estou com muitas extensões é apenas Aura Theme Dart Dart data class generator Docker Flutter Flutter Widget Snippets Live server vscode-icons Alguém tem alguma suspeita ou já passou por isso?
Você pode criar este campo de nome e, então, usar alguma abordagem para salvar o nome, por exemplo: a) você pode salvar o nome do usuário em uma collection 'users' no Firestore após a criação via Firebase Auth. O documento seria algo como users/UID onde UID é o id do usuário no Firebase Auth. Outra solução seria deixar o registro de login apenas com email e senha. Após o registro e o login, uma tela de boas vindas solicita dados adicionais como o nome. Então, você salva no Firestore também.
Se tive uma nova tela stateless denomidada 'homepage2' que é chamada a partir de 'homepage' por meio de um drawer. Como faz pra saber se esta logado nessa nova tela?
@@drantunes final auth = Provider.of(context).isAuthenticated; if (!auth) { Navigator.of(context).pushReplacementNamed('/'); } Onde colocar esse trecho? tentei no initState, DidChangesDependencies e metodo build, mas da um erro. O que está pegando é a reatividade, já que tem que se deslogar automaticamente quando clica no logout do drawer.
como eu faço para aparecer somente o formulário de email e senha pra tela de login, e quando eu mudar pra cadastrar aparecer campos de formulário nome, sobrenome, data de nascimento, email, senha e confirmar senha? já tentei fazer uma condicional mas não vai, não sei de outra alternativa. se possível, poderia me ajudar?
uma dúvida se eu quisesse usar essa mesma estrutura do video para de auto check porém, quando eu for cadastrar o usuario, eu gostaria que voltasse para tela de login, pra dai entrar com email e senha e ai sim depois de realizar o login desse jeito ficasse salvo os dados para entrar direto na proxima? coomo eu faria?
Você pode alterar o AuthService para não realizar o login do usuário. Quando você cria um usuário no Firebase, o login é automático no servidor. Quando fizer o login novamente, o próprio FIrebase faz um cache local da sessão do usuário, quando tentar entrar novamente já estará logado 👍
@@drantunes de acordo com o código que você usou no vídeo, qual parte seria? ou teria que incluir algo, pois tentei mexer no getuser e não rolou... estou quebrando a cabeça há dias... rs
@@silaspaesnomarketing você precisa deixar tudo manual pra fazer o que deseja. Remover o listen e remover o getUser do create… Pergunta: por que quer esse comportamento? Isso irá gerar mais fricção ao usuário …
@@drantunes veja.. no meu app tem uma pagina principal do perfil que mostra a foto, nome e status do usuarios e toda vez que ocorre o um cadastro e vai para essa pagina da erro, dizendo que não consegui criar um documento dentro da coleção e com isso não mostra as informações do perfil. estou usando esse código para pegar os dados.: StreamBuilder( stream: FirebaseFirestore.instance .collection("Colaboradores") .doc(auth.usuario?.uid) .snapshots(),
@@silaspaesnomarketing Pode corrigir isso criando a coleção antes de fazer o getUser de fato ou, para não dar impressão de travamento ou demora, pode exibir um placeholder nesta tela de perfil enquanto não há dados (tratando o erro)
professor, eu baixei o aplicativo de criptomoedas, mas ele está aparecendo muitos erros no codigo, eu não consegui rodar ele no emulador, oq eu devo fazer professor?
existe alguma forma de dividir os usuarios em grupos no firebase? por exemplo: eu quero que um determinado grupo x só tenha acesso a determinado conteudo, equanto um outro grupo y não tenha acesso a esse mesmo conteudo, porem tenha acesso a outro conteudo, se isso for possivel, como pode ser feito?
Você deve implementar essa lógica, pois é uma regra de negócio específica. Você pode criar os grupos com um determinado ID e criar regras de segurança para bloquear o acesso a algumas collections do Firestore (por exemplo).
Professor, como seria por exemplo ali no authCheck, para a primeira pagina ser uma página de bem vindo, com dois botões, Login e Registrar. Qnd o usuário clicar em login, ele vai para uma página de login e caso registrar, irá para uma página de registro. Tentei aqui porém não consegui. Tentei por exemplo mudando o child que está no main para esta pagina, ou então lá no authcheck, para no if ele retornar a página e tbm não deu certo.
O modelo que quer fazer é diferente do exemplo que dei. Cria páginas diferentes mesmo e em cada botão de cada uma dessas páginas chama o método de login ou registrar do AuthService. Retornando sucesso, você pode redirecionar para outra página manualmente usando o Navigator.of(context).pushAndReplacement...
Olá professor tudo bem? Primeiramente dizer que gostei muito da explicação e do conteúdo fácil de fazer e perceber... Parabéns 👌👌👏👏... Segundo queria pedir ajuda pois pra mim deu o seguinte erro " Error: [core/no-app] No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp()", tentei as soluções daqui do RUclips e do stack overflow mas infelizmente não funcionaram para mim. Pode me ajudar por favor?
Você precisa inicializar o projeto firebase e, então, chamar o initializeApp com as opções default. Veja esse video: Instalação do Firebase no Flutter em 2022 (FlutterFire e Realtime Database) ruclips.net/video/OjdGSoDntZQ/видео.html
Prof. @@drantunes implementei o que explicou na aula mas infelizmente não tive sucesso continuo com a mesma dificuldade... Vou continuar a tentar resolver... Muito obrigada pela ajuda e atenção... Ganhou +1 seguidora🙏🏾
@@drantunes na verdade gostaria de um suporte , tenho usado o flutterflow , e gostaria de criar funções usando a livraria pubdev, por isso perguntei se vc tem algum curso .
Você pode adicionar detalhes do usuário em uma collection no Firestore, inclusive outros dados que julgar necessário. O importante é ter em mãos o UID do usuário 👍
@@drantunes mais tem que ser manualmente? Não te como o usuário quando for cadastrar criar seu nome de usuário e o Firebase ver no banco se já existe esse nome?
@@rgomes6478 Isso mesmo que fará, apos o sign in você pode pedir dados adicionais do usuário e então salvar numa collection os dados que vc quer... Pense que podem ter dados como endereço, telefone, ou outras preferências (não é igual pra todo app)
Oi, estou tendo problema no meu App. Ele não desloga quando crio o botão, não acontece nada ao clicar nele. E também, quando implemento o progressindicator ele fica rodando infinito. Ficarei muito grato se conseguir me ajudar !
@@drantunes Ola obg pela resposta! Tem muitos problemas acontecendo , o primeiro é quando inicio o app pelo debug, a tela congela e nenhuma função funciona ou seja é necessário fechar o dar stop e abrir pelo app baixado. Depois, o snackbar não aparece como se não detectasse que ja tem um email cadastrado, por exemplo. Também o botão de sair não funciona. Mas quando crio uma conta por exemplo, ela aparece no firebase. O erro que da inicialmente no debug console na vdd não é um erro , aparece isso :"D/CompatibilityChangeReporter(23043): Compat change id reported: 3400644; UID 10186; state: DISABLED " Sendo necessário eu dar restart, eai abre normal. Porém da forma que te falei, com nada funcionando só após abrindo o app baixado. Se tiver alguma dica para que eu possa resolver esses erros ficaria muito grato! de extrema ajuda para meu Tcc, que é um app flutter.
Professor. Resolvi o erro, por incrível que pareça era problema apenas em um () que estava faltando... É aquela coisa, trabalhar cansado da nisso, acaba fazendo errado. De qlqer forma obrigado pela aula
Professor, estou com o problema de que independente da conta que uso para logar, ou mesmo se acabo de cadastrar a conta, todo o banco de dados fica disponível para o usuário como se ele tivesse registrado tais itens. Como faço para sincronizar o banco com a conta do usuário?
Olá Diogo, esta é uma questão comum. O que você pode fazer é o seguinte: 1) Ao registrar um novo usuário e o login, você deve salvar seus dados em um service ou algo similar; 2) , todo novo cadastro que fizer em outras collections que são "protegidas" você deve inserir o UID do usuário no documento; 3) para "filtrar" você deve usar uma cláusula where para o usuário logado, algo como ...collection('produtos').where(''user_uid', isEqual: user.uid).get(). Desta forma você garante que o usuário só acesse os seus dados... Além disso, antes de ir para produção, você deve configurar as regras de segurança no Firestore para proteger o banco de dados contra ataques externos
Professor, pode me auxiliar? acompanhei seu vídeo fiz tudo corretamente, mas quando faço o teste ele não mostra nenhuma das opções como: e-mail não encontrado ou senha incorreta... e caso eu coloco um ";" entre e-mail não encontrado ou senha incorreta... ele já utiliza a segunda opção independente se o email esta cadastrado ou não ele diz que a senha esta incorreta, isso é tanto para a tela de login quanto de cadastro. dessa forma ele não funciona: login(String email, String senha) async { try { await _auth.signInWithEmailAndPassword(email: email, password: senha); _getUser(); } on FirebaseAuthException catch (e) { if (e.code == 'user-not-found') { throw AuthException('E-mail não encontrado. Cadastre-se.'); } else if (e.code == 'wrong-password') { throw AuthException('Senha incorreta. Tente novamente.'); } } } dessa forma com a virgula ele já pula para o segundo argumento "senha incorreta..." login(String email, String senha) async { try { await _auth.signInWithEmailAndPassword(email: email, password: senha); _getUser(); } on FirebaseAuthException catch (e) { if (e.code == 'user-not-found') { throw AuthException('E-mail não encontrado. Cadastre-se.'); } else if (e.code == 'wrong-password') ; { throw AuthException('Senha incorreta. Tente novamente.'); } } } ponto e virgula entre else if (e.code == 'wrong-password') ; { throw AuthException('Senha incorreta. Tente novamente.'); Pode me ajudar?
Está inserindo um erro ao inserir esse ; pois ele pula a lógica do if-else. Perguntas: você habilitou a autenticação por email e senha no console do Firebase? Se sim, você registrou o usuário com quantos dígitos na senha? Outra dúvida para poder ajudar: quando você tenta chamar a função login o que aparece no debug console?
@@drantunes Fiz todos esses passos, quando eu digito e-mail e senha correto ele entra normalmente e quando tento testar com uma senha incorreta ele não mostra/faz nada e não aparece nada no console... somente isso (Performing hot restart... Waiting for connection from debug service on Chrome... Restarted application in 1.846ms.) mas é normal pois não apresenta nenhum erro...
Fala, pessoal e prof Diego, blz? Estava olhando aqui o código e fiquei com uma dúvida: onde está a lógica que manda o app abrir a página moedas_page após o login? Se entendi corretamente, o login chama o método de mesmo nome em AuthService, e lá há uma tentativa de login que, se bem sucedida, chama o _getUser(), que seta o usuário para currentuser e daí dá o notifylisteners. Mas por que a partir disso ele cai na moedas_page e não em outra qualquer? Obrigado.
Neste caso ao invés de fazer um push manual da rota após o login, nós usamos a reatividade do Firebase via Provider + Change Notifier. Repare que no MeuAplicativo a widget principal é a AuthCheck que é reativa as mudanças na autenticação. Logo, quando o status do usuário muda, nós mostramos a widget correspondente (neste caso, o login ou a home page (que contém a moedas_page) 👍
professor, sabe me dizer o pq desse erro? PlatformException (PlatformException(channel-error, Unable to establish connection on channel., null, null)) Da erro no meu firebase : await Firebase.initializeApp();
Caso esteja com o erro: "The supplied auth credential is incorrect, malformed or has expired", desative a enumeração de e-mails, no console do Firebase.
Tem haver com a versão do Flutter e do Dart. Quando você fizer o upgrade é importante reinstalar os packages do zero (comando flutter clean e depois flutter pub get). Depois de tudo atualizado é importante verificar o que a IDE e o console irão apontar como erro (provavelmente é relacionado ao null safety). Se der o erro, cola a mensagem aqui ou replica se for um erro da IDE...
Professor pode me ajudar _CastError (Null check operator used on a null value) onPressed: () { Nessa linha --> if (formKey.currentState!.validate()) { if (isLogin) { login(); } else { cadastrar(); } } },
@@drantunes Professor exatamente o que o senhor passou eu já ia apagar o comentário kkk o formKey não foi iniciado dentro do Form() mas não vou apagar caso alguem cometa o mesmo erro bobo q o meu, e professor muito obrigado por tudo!! O senhor tem me ajudado muito
Opa, no método await Firebase.inicializeApp(); mude para initializeApp. Já o HiveConfig é uma classe que foi criada no projeto, não é do package Hive. Caso não esteja funcionando, dá uma olhada no código-fonte github.com/drantunes/cripto_moedas/blob/semana5/lib/configs/hive_config.dart
Quando altero a lógica do AuthCheck para mostrar uma tela de introdução do aplicativo caso o usuário não esteja logado, a reatividade que manda de Login para Home para de funcionar, por quê? Nessa tela de introdução eu tenho dois botões: um que manda para um tela de login e outro que manda para a tela de Registro.
No exemplo eu utilizo uma logica de if else para login ou home. Uma vez que você navega para outra tela, a widget anterior sofre dispose. Para manter um listener global precisa fazer de alguma outra forma
Tão bom achar tutoriais que não temos que além de entender o vídeo, entender tbm o inglês indiano haha
Me ajudou mtão, já to inscrito e em breve verei todos os vídeos do curso :)
Valeu Marcus !!!
Teu canal muito top. Tava estudando react native, queria ver flutter acabei caindo de para-quedas, mais um inscrito
Seja bem vindo!!! 🚀
Estou aprendendo muito!!! Sua didática e explicações são simples e de fácil entendimento. Obrigado por compartilhar seu conhecimento
Muito obrigado Geovanni 😃 👍
Que aulas 10! 100! 1000!
Tudo muito claro, consigo ver todo código na tela e os resultados. Sua forma de explicar é direta e assertiva! Parabéns!
Muito obrigado Davi! Sucesso para você!!!
Congratulations teacher! Pessoal estou vendo muito pouco likes! Vamos fazer joia ai... Essas aulas free sao incriveis. Merecem.
Muito obrigado 😃
Parabéns, tu explica muito bem, entendi mais rápido do que quebrando a cabeça pela documentação oficial do flutterfire.
Obrigado Rafael
canal sensacional! Vou acompanhar sempre de agora em diante!
Show! Muito obrigado e seja bem vindo 😃
Obrigado, professor! Uma dúvida, fazer esse mesmo processo utilizando mobx é difícil ?
@@GustavoSilva-us8xp Bem tranquilo! Logo devo fazer um video com MobX, mas é bem simples ;)
@@drantunes Show! Vou tentar implementar aqui, estou usando mobx no projeto final do curso. Obrigado pela resposta!
Vídeo muito bom! Didática exemplar e de excelente qualidade. Obrigado por este Vídeo !!!!! Ganhou 1 inscrito!
caramba professor que top vou fazer a play list toda obrigadoooo muito bom super atualizado
Show Washiner!!! 💪
Muito bem explicado
Que aula incrível
Esse cara é muito fera!!!!
Aula incrível! Gosteii💗💗🥇🥇
Muito bom!!!
Aula muito top, só tive dificuldade no início, pois tenho pouca noção ainda. Não esquece dos nub rsrsrs, veleu pela aula.
Espero ter ajudado
Quero fazer o curso inteiro, único que mostra o gitignore, acho muito importante, porque senão a gente acaba subindo informações que não pode.
Sucesso!
Boa noite ,Prof. Diego Antunes. Fiquei com uma duvida relacionada seguranca da conexao do app com o firebase. Como o app conecta direto sem uso de uma api voce ve algum problema de seguranca? Eu entenid que a ponte de comunicacao é o json que fica na raiz do projeto. E se alguem decompilar o apk e pegar esse json e rodar em um projeto local com mesmo package?
Olá Mateus, não há problema **SE** o desenvolvedor configurar regras de segurança no Firebase para o Firestore, Storage, etc. firebase.google.com/docs/rules. Geralmente nos tutoriais apresenta-se apenas a configuração e uso do Firebase, mas para produção é necessário configurar as regras de segurança
bom video, bom video
Você tem algum curso online professor?
Ainda não, mas pretendo lançar esse ano. Se inscreva aqui no canal e ative as notificações para ficar por dentro quando lançar! Grande abraço
@@drantunes +1 inscrito com sucesso!
Muito obrigado por fazer essa aula
Tem algum video integrando google e apple Sigin ?
Infelizmente não
legal, só faltou separar os controllers
Boa tarde, professor. Primeiramente parabéns pelo conteúdo. Ganhou um inscrito. Gostaria de saber qual é essa extensão que você usa no momento da codificação em que vai mostrando os erros enquanto digita. Outra dúvida é se você tem algum conteúdo falando das extensões que você usa ou as melhores extensões para usar no vs code. Abraço.
Fala João, beleza? É a Error Lens. Não fiz um vídeo sobre isso ainda, mas é uma boa ideia, pois sempre me perguntam 👨💻
Opa, uma dúvida, se eu implementar autenticação com o google, eu preciso implementar autenticação com a apple para pulicar na apple store?
Não
Olá, você já sabe que sou muito grato pelo seus videos, comentei muito aqui. Porem estou com uma pendencia. Fiz o AuthCheck identico ao seu, faço o registro não apresente erro algum, chama a tela HomePage, passa por todo o código e não troca para a HomePage, fica na RegisterPage. Sabe o que pode ser? Lembrando cria o usuário no Firebase e não apresente erro.
Teria que analisar o código... Quando você usa o hot reload, ele muda de página? Me parece que: a) o service de usuário não está chamando o notifyListeners ou b) algum erro na navegação.
Estou com o mesmo problema, quando uso o hot reload ele muda a página para a homepage mas sem o hot reload fica na página de login mostrando o CircularProgressIndicator infinitamente. Conseguiu corrigir esse problema?
@@drantunes o Hot reload funciona, ele chama a HomePage percorre todo o código da HomePage, não apresente erro mas não muda de fato para a HomePage. O notifyListeners esta identico ao seu. Unica diferença é que estou usando o Flutter 3.3.5.
@@XstephanieXsilva qual versão do seu Flutter?
@@charlessantos4896 sobe pro git o código
Teacher uma pergunta: no firebase (free) e possivel criar um projeto e configurar o storage para arquivos e o firestorage database? para acesso de apenas um app flutter. Penso no seguinte cenario: app com perfil de usuario e que o usuario possa enviar sua foto para personalizar a tela durante o uso.
Sim, sem problemas. Apenas precisa se atentar ao limite do plano gratuito: no storage era 5GB para arquivos.
Quais as configurações de estilo que ele utiliza no vs code? o meu vs code vive dando problema ao codar flutter, principalmente na parte visual/plugins
Quais problemas? Uso apenas as extensões do Flutter, Dart e algumas extensões de snippets (existem várias, é bom olhar o que faz sentido para você)
@@drantunes
Boa tarde, no meu fica aparecendo use "const" with the constructor to improve performance, em praticamente tudo, o problema é que as classes ficam sublinhadas em amarelo e me incomodam...
e nem estou com muitas extensões é apenas
Aura Theme
Dart
Dart data class generator
Docker
Flutter
Flutter Widget Snippets
Live server
vscode-icons
Alguém tem alguma suspeita ou já passou por isso?
Não rpecisa mais, acabei de descobrir é só adicionar
rules:
prefer_const_constructors : false
em
analysis_options.yaml
@@gabrielpinheiro3895 isso mesmo
Sensacional, no meu caso preciso colocar um campo para o usuario colocar o '"NOME" quando for cadastrar, pode me ajudar?
Você pode criar este campo de nome e, então, usar alguma abordagem para salvar o nome, por exemplo:
a) você pode salvar o nome do usuário em uma collection 'users' no Firestore após a criação via Firebase Auth. O documento seria algo como users/UID onde UID é o id do usuário no Firebase Auth.
Outra solução seria deixar o registro de login apenas com email e senha. Após o registro e o login, uma tela de boas vindas solicita dados adicionais como o nome. Então, você salva no Firestore também.
Tem algum vídeo que faça recuperação de senhas?
Não Rafael
Se tive uma nova tela stateless denomidada 'homepage2' que é chamada a partir de 'homepage' por meio de um drawer. Como faz pra saber se esta logado nessa nova tela?
Você pode recuperar a instância de AuthService usando o Provider.of(context) e então verificar se o usuario != null
@@drantunes
final auth = Provider.of(context).isAuthenticated;
if (!auth) {
Navigator.of(context).pushReplacementNamed('/');
}
Onde colocar esse trecho? tentei no initState, DidChangesDependencies e metodo build, mas da um erro. O que está pegando é a reatividade, já que tem que se deslogar automaticamente quando clica no logout do drawer.
@@squallse4882 Você pode colocar no próprio método de logout ou em um controller de logout
como eu faço para aparecer somente o formulário de email e senha pra tela de login, e quando eu mudar pra cadastrar aparecer campos de formulário nome, sobrenome, data de nascimento, email, senha e confirmar senha? já tentei fazer uma condicional mas não vai, não sei de outra alternativa. se possível, poderia me ajudar?
Para o caso de dois formulários distintos, sugiro adicionar uma outra página, algo como CadastroPage e fazer um Navigate para ela.
Entendi, vou fazer
@@viniciomavel3194 Parceiro, caso encontre um método pode me auxiliar?
uma dúvida se eu quisesse usar essa mesma estrutura do video para de auto check porém, quando eu for cadastrar o usuario, eu gostaria que voltasse para tela de login, pra dai entrar com email e senha e ai sim depois de realizar o login desse jeito ficasse salvo os dados para entrar direto na proxima? coomo eu faria?
Você pode alterar o AuthService para não realizar o login do usuário. Quando você cria um usuário no Firebase, o login é automático no servidor. Quando fizer o login novamente, o próprio FIrebase faz um cache local da sessão do usuário, quando tentar entrar novamente já estará logado 👍
@@drantunes de acordo com o código que você usou no vídeo, qual parte seria? ou teria que incluir algo, pois tentei mexer no getuser e não rolou... estou quebrando a cabeça há dias... rs
@@silaspaesnomarketing você precisa deixar tudo manual pra fazer o que deseja. Remover o listen e remover o getUser do create… Pergunta: por que quer esse comportamento? Isso irá gerar mais fricção ao usuário …
@@drantunes veja.. no meu app tem uma pagina principal do perfil que mostra a foto, nome e status do usuarios e toda vez que ocorre o um cadastro e vai para essa pagina da erro, dizendo que não consegui criar um documento dentro da coleção e com isso não mostra as informações do perfil. estou usando esse código para pegar os dados.:
StreamBuilder(
stream: FirebaseFirestore.instance
.collection("Colaboradores")
.doc(auth.usuario?.uid)
.snapshots(),
@@silaspaesnomarketing Pode corrigir isso criando a coleção antes de fazer o getUser de fato ou, para não dar impressão de travamento ou demora, pode exibir um placeholder nesta tela de perfil enquanto não há dados (tratando o erro)
Tu tem um curso na Udemy de aplicativos com Flutter?
Ainda não, mas fica de olho aqui no canal, pois em breve devo lançar algo muito bom 👨💻
professor, eu baixei o aplicativo de criptomoedas, mas ele está aparecendo muitos erros no codigo, eu não consegui rodar ele no emulador, oq eu devo fazer professor?
Flutter pub get primeiro
Depois será necessário configurar o firebase nele
@@drantunes Oi professor, vc fez uma video aula ensinando a fazer essa configuração do firebase? Poderia me mandar essa vídeo aula para eu assirtir?
@@jojohgames6058 ruclips.net/video/OjdGSoDntZQ/видео.html&ab_channel=Prof.DiegoAntunes
@@drantunes muito obrigado professor Diego.
existe alguma forma de dividir os usuarios em grupos no firebase? por exemplo: eu quero que um determinado grupo x só tenha acesso a determinado conteudo, equanto um outro grupo y não tenha acesso a esse mesmo conteudo, porem tenha acesso a outro conteudo, se isso for possivel, como pode ser feito?
Você deve implementar essa lógica, pois é uma regra de negócio específica. Você pode criar os grupos com um determinado ID e criar regras de segurança para bloquear o acesso a algumas collections do Firestore (por exemplo).
E como eu faria para desktops? Utilizo web?
Precisa checar na documentação se já há suporte oficial para o SDK para Desktop, acredito que ainda não tem.
@@drantunes eu dei uma olhada na documentação e realmente não tem, o que tem são "gambiarras" que o pessoal desenvolveu.
Professor, como seria por exemplo ali no authCheck, para a primeira pagina ser uma página de bem vindo, com dois botões, Login e Registrar. Qnd o usuário clicar em login, ele vai para uma página de login e caso registrar, irá para uma página de registro. Tentei aqui porém não consegui. Tentei por exemplo mudando o child que está no main para esta pagina, ou então lá no authcheck, para no if ele retornar a página e tbm não deu certo.
O modelo que quer fazer é diferente do exemplo que dei. Cria páginas diferentes mesmo e em cada botão de cada uma dessas páginas chama o método de login ou registrar do AuthService. Retornando sucesso, você pode redirecionar para outra página manualmente usando o Navigator.of(context).pushAndReplacement...
Olá professor tudo bem? Primeiramente dizer que gostei muito da explicação e do conteúdo fácil de fazer e perceber... Parabéns 👌👌👏👏... Segundo queria pedir ajuda pois pra mim deu o seguinte erro " Error: [core/no-app] No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp()", tentei as soluções daqui do RUclips e do stack overflow mas infelizmente não funcionaram para mim. Pode me ajudar por favor?
Você precisa inicializar o projeto firebase e, então, chamar o initializeApp com as opções default. Veja esse video: Instalação do Firebase no Flutter em 2022 (FlutterFire e Realtime Database)
ruclips.net/video/OjdGSoDntZQ/видео.html
@@drantunes muito obrigada... Colocarei em prática a solução e darei o feedback 🙏🏾.
Prof. @@drantunes implementei o que explicou na aula mas infelizmente não tive sucesso continuo com a mesma dificuldade... Vou continuar a tentar resolver... Muito obrigada pela ajuda e atenção... Ganhou +1 seguidora🙏🏾
Tem link curso?
Este video está em uma playlist do curso aberto no RUclips 👍
@@drantunes na verdade gostaria de um suporte , tenho usado o flutterflow , e gostaria de criar funções usando a livraria pubdev, por isso perguntei se vc tem algum curso .
@@drantunes eu pagaria pelas aulas especificas
@@flutterflownapratica8499 Hoje não tenho turma aberta. Me envie um email para drantunes.services@gmail.com para ver se consigo te ajudar 👍
@@drantunes agradeço
sabe me informar se funciona pro FlutterWeb também?
Funciona sim, só precisa fazer um setup adicional para as dependências, conforme site do FlutterFire (firebase.flutter.dev/docs/installation/web)
Aquele Muttley no cantinho kkkkkkk
Ola e para adicionar um username para o usuario
Você pode adicionar detalhes do usuário em uma collection no Firestore, inclusive outros dados que julgar necessário. O importante é ter em mãos o UID do usuário 👍
@@drantunes mais tem que ser manualmente? Não te como o usuário quando for cadastrar criar seu nome de usuário e o Firebase ver no banco se já existe esse nome?
@@rgomes6478 Isso mesmo que fará, apos o sign in você pode pedir dados adicionais do usuário e então salvar numa collection os dados que vc quer... Pense que podem ter dados como endereço, telefone, ou outras preferências (não é igual pra todo app)
@@drantunes Professor estou usando o Flutter Flow, tem como fazer isso nele tbm?
@@rgomes6478 infelizmente não utilizo o FlutterFlow para te responder isso :/
Oi, estou tendo problema no meu App. Ele não desloga quando crio o botão, não acontece nada ao clicar nele. E também, quando implemento o progressindicator ele fica rodando infinito. Ficarei muito grato se conseguir me ajudar !
É preciso analisar o debug console e ver se aparece algum erro…
@@drantunes Ola obg pela resposta! Tem muitos problemas acontecendo , o primeiro é quando inicio o app pelo debug, a tela congela e nenhuma função funciona ou seja é necessário fechar o dar stop e abrir pelo app baixado. Depois, o snackbar não aparece como se não detectasse que ja tem um email cadastrado, por exemplo. Também o botão de sair não funciona. Mas quando crio uma conta por exemplo, ela aparece no firebase. O erro que da inicialmente no debug console na vdd não é um erro , aparece isso :"D/CompatibilityChangeReporter(23043): Compat change id reported: 3400644; UID 10186; state: DISABLED " Sendo necessário eu dar restart, eai abre normal. Porém da forma que te falei, com nada funcionando só após abrindo o app baixado. Se tiver alguma dica para que eu possa resolver esses erros ficaria muito grato! de extrema ajuda para meu Tcc, que é um app flutter.
Professor. Resolvi o erro, por incrível que pareça era problema apenas em um () que estava faltando... É aquela coisa, trabalhar cansado da nisso, acaba fazendo errado. De qlqer forma obrigado pela aula
Professor, estou com o problema de que independente da conta que uso para logar, ou mesmo se acabo de cadastrar a conta, todo o banco de dados fica disponível para o usuário como se ele tivesse registrado tais itens. Como faço para sincronizar o banco com a conta do usuário?
Olá Diogo, esta é uma questão comum. O que você pode fazer é o seguinte: 1) Ao registrar um novo usuário e o login, você deve salvar seus dados em um service ou algo similar; 2) , todo novo cadastro que fizer em outras collections que são "protegidas" você deve inserir o UID do usuário no documento; 3) para "filtrar" você deve usar uma cláusula where para o usuário logado, algo como ...collection('produtos').where(''user_uid', isEqual: user.uid).get(). Desta forma você garante que o usuário só acesse os seus dados... Além disso, antes de ir para produção, você deve configurar as regras de segurança no Firestore para proteger o banco de dados contra ataques externos
Professor, pode me auxiliar?
acompanhei seu vídeo fiz tudo corretamente, mas quando faço o teste ele não mostra nenhuma das opções como: e-mail não encontrado ou senha incorreta... e caso eu coloco um ";" entre e-mail não encontrado ou senha incorreta... ele já utiliza a segunda opção independente se o email esta cadastrado ou não ele diz que a senha esta incorreta, isso é tanto para a tela de login quanto de cadastro.
dessa forma ele não funciona:
login(String email, String senha) async {
try {
await _auth.signInWithEmailAndPassword(email: email, password: senha);
_getUser();
} on FirebaseAuthException catch (e) {
if (e.code == 'user-not-found') {
throw AuthException('E-mail não encontrado. Cadastre-se.');
} else if (e.code == 'wrong-password') {
throw AuthException('Senha incorreta. Tente novamente.');
}
}
}
dessa forma com a virgula ele já pula para o segundo argumento "senha incorreta..."
login(String email, String senha) async {
try {
await _auth.signInWithEmailAndPassword(email: email, password: senha);
_getUser();
} on FirebaseAuthException catch (e) {
if (e.code == 'user-not-found') {
throw AuthException('E-mail não encontrado. Cadastre-se.');
} else if (e.code == 'wrong-password') ; {
throw AuthException('Senha incorreta. Tente novamente.');
}
}
}
ponto e virgula entre else if (e.code == 'wrong-password') ; {
throw AuthException('Senha incorreta. Tente novamente.');
Pode me ajudar?
Está inserindo um erro ao inserir esse ; pois ele pula a lógica do if-else. Perguntas: você habilitou a autenticação por email e senha no console do Firebase? Se sim, você registrou o usuário com quantos dígitos na senha? Outra dúvida para poder ajudar: quando você tenta chamar a função login o que aparece no debug console?
@@drantunes Fiz todos esses passos, quando eu digito e-mail e senha correto ele entra normalmente e quando tento testar com uma senha incorreta ele não mostra/faz nada e não aparece nada no console... somente isso (Performing hot restart...
Waiting for connection from debug service on Chrome...
Restarted application in 1.846ms.) mas é normal pois não apresenta nenhum erro...
Fala, pessoal e prof Diego, blz? Estava olhando aqui o código e fiquei com uma dúvida: onde está a lógica que manda o app abrir a página moedas_page após o login? Se entendi corretamente, o login chama o método de mesmo nome em AuthService, e lá há uma tentativa de login que, se bem sucedida, chama o _getUser(), que seta o usuário para currentuser e daí dá o notifylisteners. Mas por que a partir disso ele cai na moedas_page e não em outra qualquer? Obrigado.
Neste caso ao invés de fazer um push manual da rota após o login, nós usamos a reatividade do Firebase via Provider + Change Notifier. Repare que no MeuAplicativo a widget principal é a AuthCheck que é reativa as mudanças na autenticação. Logo, quando o status do usuário muda, nós mostramos a widget correspondente (neste caso, o login ou a home page (que contém a moedas_page) 👍
@@drantunes excelente, entendido, muito obrigado, prof.
professor, sabe me dizer o pq desse erro?
PlatformException (PlatformException(channel-error, Unable to establish connection on channel., null, null))
Da erro no meu firebase : await Firebase.initializeApp();
Execute novamente os passos de configuração do FlutterFire configure
@@drantunes obrigado pela atenção! deu certo.
Esse código funciona para Android?
Sim
Caso esteja com o erro: "The supplied auth credential is incorrect, malformed or has expired", desative a enumeração de e-mails, no console do Firebase.
Oi professor, eu estou usando a versão do sdk: '>=2.11.9 =2.12.0
Tem haver com a versão do Flutter e do Dart. Quando você fizer o upgrade é importante reinstalar os packages do zero (comando flutter clean e depois flutter pub get). Depois de tudo atualizado é importante verificar o que a IDE e o console irão apontar como erro (provavelmente é relacionado ao null safety). Se der o erro, cola a mensagem aqui ou replica se for um erro da IDE...
Como se trata de um validador, é possível que ao tipar o value o erro desapareça. Tenta usar (String value) {....
Professor pode me ajudar _CastError (Null check operator used on a null value) onPressed: () {
Nessa linha --> if (formKey.currentState!.validate()) {
if (isLogin) {
login();
} else {
cadastrar();
}
}
},
Não parece ter nada errado, o formKey foi iniciado corretamente? O que o método login faz?
@@drantunes Professor exatamente o que o senhor passou eu já ia apagar o comentário kkk o formKey não foi iniciado dentro do Form() mas não vou apagar caso alguem cometa o mesmo erro bobo q o meu, e professor muito obrigado por tudo!! O senhor tem me ajudado muito
Alguém me uma luz?
await HiveConfig.start();
await Firebase.inicializeApp();
O Vs nao ta reconhecendo... ja atualizei tudo...
Opa, no método await Firebase.inicializeApp(); mude para initializeApp.
Já o HiveConfig é uma classe que foi criada no projeto, não é do package Hive. Caso não esteja funcionando, dá uma olhada no código-fonte github.com/drantunes/cripto_moedas/blob/semana5/lib/configs/hive_config.dart
@@drantunes obrigado!
Quando altero a lógica do AuthCheck para mostrar uma tela de introdução do aplicativo caso o usuário não esteja logado, a reatividade que manda de Login para Home para de funcionar, por quê? Nessa tela de introdução eu tenho dois botões: um que manda para um tela de login e outro que manda para a tela de Registro.
No exemplo eu utilizo uma logica de if else para login ou home. Uma vez que você navega para outra tela, a widget anterior sofre dispose. Para manter um listener global precisa fazer de alguma outra forma