Supabase para desenvolvedores do flutter - autenticação, banco de dados e armazenamento | Rahul Agarwal | Skillshare
Pesquisar

Velocidade de reprodução


1.0x


  • 0.5x
  • 0.75x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Supabase para desenvolvedores do flutter - autenticação, banco de dados e armazenamento

teacher avatar Rahul Agarwal, Flutter Developer & Trainer

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Aulas neste curso

    • 1.

      INTRODUÇÃO DO CURSO

      1:09

    • 2.

      Por que usar o Supabase

      5:23

    • 3.

      Crie um projeto

      13:55

    • 4.

      Configurar a tela do auth

      12:25

    • 5.

      Trabalhe na interface do StartPage

      16:46

    • 6.

      Implementar inscrição e sinalização

      10:25

    • 7.

      Funcionalidade de saída

      5:16

    • 8.

      Integração de link profundo

      5:15

    • 9.

      Configurar o Google Oauth

      7:09

    • 10.

      Implementar o Google login

      12:00

    • 11.

      Trabalhando na interface de usuário cruel

      15:46

    • 12.

      Implementando funcionalidade de criação

      14:13

    • 13.

      Implementar funcionalidade de leitura

      9:03

    • 14.

      Filtros e modificadores

      14:25

    • 15.

      Implementar banco de dados em tempo real

      7:12

    • 16.

      Funcionalidade de atualização e exclusão

      10:59

    • 17.

      Habilitando a segurança do nível da fileira

      8:55

    • 18.

      Escrever políticas de CRUD

      3:26

    • 19.

      Configuração de armazenamento

      6:47

    • 20.

      Implementar a funcionalidade do upload

      16:57

    • 21.

      Imagens enviadas pela Fetch

      17:17

    • 22.

      Excluir funcionalidade de imagem

      6:54

  • --
  • Nível iniciante
  • Nível intermediário
  • Nível avançado
  • Todos os níveis

Gerado pela comunidade

O nível é determinado pela opinião da maioria dos estudantes que avaliaram este curso. Mostramos a recomendação do professor até que sejam coletadas as respostas de pelo menos 5 estudantes.

48

Estudantes

1

Projeto

Sobre este curso

"Supabase for Flutter Developers," é o ponto de partida perfeito para iniciantes que querem aprender a usar a plataforma Supabase em seus projetos do Flutter. O Supabase é um back-end em tempo real que facilita a adição de funcionalidade poderosa ao seu aplicativo. Com este curso, você aprenderá como configurar um projeto do Supabase, autenticar usuários usando e-mail e senha, bem como o Google Sign-in, realizar operações de CRUD no banco de dados, implementar segurança de nível de linha e enviar arquivos para o armazenamento.

O curso foi projetado para ser fácil de seguir, com explicações claras e exercícios práticos que o ajudarão a aplicar o que você aprendeu. Começando com os princípios básicos da configuração do Supabase, você aprenderá como criar um novo projeto, instalar os pacotes necessários e se conectar à API do Supabase. A partir daí, você vai passar para a autenticação do usuário, onde você aprenderá como criar um sistema de login básico para seu aplicativo.

Depois de dominar o básico, você mergulhará mais profundamente na funcionalidade do Supabase's Você aprenderá como executar operações de CRUD no banco de dados, incluindo adicionamento, atualização e exclusão de dados. Você também aprenderá como implementar segurança ao nível da linha, o que permitirá que você controle quem pode acessar e modificar dados específicos em seu banco de dados.

Além disso, você também aprenderá como fazer upload de arquivos para o armazenamento, que é um recurso essencial para muitos aplicativos. Você aprenderá a lidar com upload de arquivos, armazená-los na nuvem, recuperá-los e excluí-los mais tarde.

No final deste curso, você terá uma sólida compreensão de como usar o Supabase em seus próprios projetos de inicialização ou flutter. Inscreva-se agora e comece a criar aplicativos poderosos com o Supabase e o Flutter.

Conheça seu professor

Teacher Profile Image

Rahul Agarwal

Flutter Developer & Trainer

Professor

Hello, I'm Rahul. I am skilled in building cross platform application using Flutter. I am freelance developer as well as conduct workshops to share my knowledge with the community.

Visualizar o perfil completo

Level: Beginner

Nota do curso

As expectativas foram atingidas?
    Superou!
  • 0%
  • Sim
  • 0%
  • Um pouco
  • 0%
  • Não
  • 0%

Por que fazer parte da Skillshare?

Faça cursos premiados Skillshare Original

Cada curso possui aulas curtas e projetos práticos

Sua assinatura apoia os professores da Skillshare

Aprenda em qualquer lugar

Faça cursos em qualquer lugar com o aplicativo da Skillshare. Assista no avião, no metrô ou em qualquer lugar que funcione melhor para você, por streaming ou download.

Transcrições

1. INTRODUÇÃO DO CURSO: Se fôssemos programador de flutter, talvez você estivesse familiarizado com o Firebase. Firebase não é a única opção no mercado. Há outro concorrente que é uma alternativa muito boa, conhecido pelo nome de Superbus. Superbus está ganhando popularidade a dia e está recebendo uma boa resposta da comunidade. A melhor característica é sua natureza de código aberto e seu modelo de preços. A base de suprimentos é gratuita para começar e seu gráfico de plano pago é uma taxa mensal fixa para uso ilimitado, em vez de pagar conforme o uso, que pode ser muito caro a longo prazo. Este curso foi desenvolvido para iniciantes. Começaremos criando um novo projeto de supervisor. Em seguida, aprenderemos como permitir sua indicação usando e-mail e senha, bem como implementar o login do Google. Depois disso, entraremos nas operações crud do banco de dados. Também ouviremos as alterações do banco de dados em tempo real por meio de streams. Em seguida, entenda o conceito de segurança em nível de e como criar políticas para proteger nosso aplicativo. E finalmente aprendi a fazer upload e excluir arquivos nesse armazenamento. Ao final do curso, você poderá construir sua própria startup dos sonhos usando todos esses conceitos e, quem sabe, ela pode ser a próxima grande novidade no setor de tecnologia. Então, sem desperdiçar mais diamante, vamos começar. 2. Por que usar o Supabase: Olá, bem-vindo ao primeiro vídeo do curso, onde aprenderemos como usar banco de dados supervisionado com tecnologia de desordem. Então, o que é o Superbus? Superbus é uma plataforma de back-end de código aberto, em tempo real e poderosa que facilita a criação e escalabilidade de aplicativos móveis e web. To biowaste é construído sobre o Postgres sequel, um poderoso banco de dados SQL que facilita o trabalho com estruturas e relacionamentos de dados complexos. Ele também tem suporte integrado para autenticação, autorização, lógica e armazenamento do lado do servidor. Wildfire, que já existe há algum tempo e tem uma ampla gama de recursos. Portanto, a Barbies é uma empresa relativamente nova no mercado, mas está rapidamente ganhando popularidade entre os desenvolvedores devido à sua natureza de código aberto. São recursos poderosos integrados e sua flexibilidade. Com o Superbus, você tem controle total sobre seus dados e infraestrutura e pode personalizar o serviço para atender às suas necessidades. Neste curso, vamos nos concentrar em aprender sobre autenticação, banco de dados, segurança em nível de linha e armazenamento de forma simplificada, passo a passo. Mas antes de mudarmos para lá, vamos discutir alguns pontos sobre por que devemos escolher a supervisão em vez do Firebase. O primeiro ponto é SQL versus bancos de dados NoSQL. banco de dados de sequências do Postgres é particularmente poderoso quando se trata consultas, junções e filtragem complexas. Como os dados são organizados em tabelas, relacionamentos definidos. Em supervisionar, você pode usar o comando join para combinar dados de várias tabelas nas quais você deseja recuperar dados relacionados em uma única consulta. Você também pode usar a filtragem e a classificação de comentários, como where a OrderBy, para recuperar subconjuntos específicos de dados. Por outro lado, bancos de dados NoSQL, como o Fire Basis, usar dados pode ser mais difícil e menos eficiente. modelo Firebase NoSQL não tem o mesmo suporte embutido para consultas, uniões e filtragem complexas. Portanto, talvez seja necessário recuperar dados de vários documentos e, em seguida, realizar essas consultas no lado do cliente. Uma segunda diferença importante é o modelo de preços. Ambos são gratuitos para iniciantes. Ou seja, você pode começar gratuitamente. Mas o modelo de preços do Superbus é mais flexível e econômico do que o Firebase. Supervisionar. Cobranças do plano pago, uma taxa mensal fixa para usuários ilimitados, enquanto o Firebase cobra com base nos usuários e tem custos mais altos para usuários mais altos. A longo prazo, se seu aplicativo crescer, o uso anual aumentará. Em seguida, o terceiro ponto é importar dados pré-existentes. Diríamos generalizado. Podemos importar facilmente um CSV ou copiar e colar uma planilha para iniciar o projeto. Isso é ótimo se estivermos migrando dados de outra plataforma para superbactérias. Firebase não oferece serviços integrados que nos permitem fazer upload direto de dados em massa. Você pode ter alguns pacotes de terceiros, não sei, mas não estão embutidos. O próximo ponto é a hospedagem própria. Muitos desenvolvedores podem querer um aplicativo auto-hospedado. Aguarde por motivos de segurança ou escalabilidade. Quando se trata de hospedagem própria, Dan disse que é simples. Firebase não nos permite vender, forçou nosso aplicativo. Bem, super empresa, nossa hospedagem própria é importante para você. Então o Superbus é a melhor opção. Então. O ponto final é a ausência de dependência de fornecedores. Quando você está usando um serviço baseado em nuvem, é importante considerar o potencial de dependência de fornecedores. bloqueio de fornecedores ocorre quando você se torna dependente do Serviço Florestal de um determinado fornecedor, dificultando ou custando a mudança para um provedor diferente. Portanto, o Bobby's nos dá a liberdade mudar para outro provedor qualquer momento, sem nenhum custo adicional. Mas esse não é o caso do Firebase. Estamos presos à plataforma do Google para sempre. Então, ou podemos nos auto-hospedar desde o início, ou suponha que você comece a usar o Superbus, mas mais tarde eu quis mudar a plataforma que também é permitida na superbase. Então, por esses motivos, também acredito que o Superbus é mais amigável ou mais adequado para pessoas que não querem correr o risco de usar o banco de dados do Firebase e receber uma fatura enorme por algum código ou por algum erro em seu aplicativo. Porque, como não há cobranças fixas no Firebase, suas despesas podem aumentar exponencialmente. Então é isso. Sem perder mais tempo com a parte teórica. Vamos sujar nossas mãos e começaremos a trabalhar em nosso aplicativo flutter no próximo vídeo. Obrigada. 3. Crie um projeto: Agora é hora de começarmos e criarmos um novo projeto de flutter. E estou assumindo que você já instalou o flutter SDK em seu sistema. Vá para sua pasta preferida e escreva esse comando para criar um novo projeto. Crie o Superbus. Eu vou, vou nomear a pasta assim. Você pode dar o nome que quiser. Vamos entrar. Isso levará apenas alguns segundos. Ok? Agora, nosso projeto foi criado com sucesso. Simplesmente vou escrever, primeiro vou para o Flutter. Isso é dobrado. Em seguida, escreva o espaço do código de comando para abrir essa pasta em nosso VS Code Editor. Você pode ver aqui que temos todos esses arquivos e pastas. Agora está na hora. Criamos uma nova conta Superbus e , em seguida, usamos essas configurações em nosso projeto mais simples para conectá-la. Basta acessar supervise.com assim e fazer login com sua conta. Eu já entrei. Então agora você pode ver que eu não tenho nenhum projeto. Então, primeiro, temos que criar um novo projeto. Ele dirá sua organização. Então, ao fazer login, você também pode criar uma organização. Vou escrever o nome do projeto como flutter, super base. Use qualquer senha. Vou apenas escrever para gerar uma senha. É isso. Em seguida, escolha os estudos e o que está mais próximo de você. Vou apenas escolher este. E vou começar com o plano de preços gratuito. Ok, agora, crie um novo projeto. Depois de criar o projeto , você precisará de dois a três segundos para criar um banco de dados e obteremos nossas informações de API. Então, aqui você pode ver que eu também tenho as chaves de API e o URL. E você também pode obter os mesmos detalhes da API nesta seção. Essa é a página de configurações mais tarde, se você quiser, e acesse esta API na barra lateral. Esse aqui. Agora, usaremos essas chaves de API no aplicativo flutter. E para isso, vou usar uma dependência. Basta ir ao pub Dev aqui, primeiro, Superbus flutter. Essa é a dependência que usarei para conectar com dw e copiá-la. Vá para sua pasta e, em seguida, Pub spec dot YAML. E eu vou colar aqui. Pressione Enter. O próximo pacote que eu quero é chamado dot ENV. Este pacote é usado para que nossas senhas sejam confidenciais. As informações não são comprometidas porque não é aconselhável escrever diretamente na interface do usuário. Basta copiá-lo e colá-lo. É isso. Agora, esses dois pacotes estão instalados. Para usar esse pacote dot ENV na pasta raiz, precisamos criar um arquivo apenas com a extensão dot ENV. Primeiro nome. Aqui escreveremos nossas credenciais. Eu vou nomear sua super base, URL é igual a. E a segunda são maneiras excelentes. K é igual a. Vamos ao seu painel novamente. Você tem esse URL aqui, copie-o e cole-o no URL. Então, novamente, vá e veja aqui se você tem público e chave. Basta copiá-lo e colá-lo nessa chave. É isso. Basta fechar os pontos ENV que você não quer. De novo. Para garantir que nosso aplicativo possa acessar esse arquivo DOT ENV. Você tem que mencionar isso nos ativos. Ou seja, vá para Pub spec dot YAML. E abaixo aqui na linha 65 você pode ver que está sendo comentado. Simplesmente primeiro, remova sem comentários. Aqui. Novamente, o primeiro é incomum. E o ponto direito ENV. E lembre-se sempre de que esse arquivo YAML de pontos de especificação pub é muito sensível. Se você tiver algum erro de abas ou espaços aqui e ali , isso gerará um erro. Então, isso também é feito. Agora é hora de inicializarmos nosso aplicativo. Então vá para o membro e o ponto principal. E temos que inicializar o cliente Superbus em nossa função principal com as credenciais de API que você copiou anteriormente. Ou seja, você mencionou nesse arquivo DOT ENV. Em primeiro lugar, sim, importe o pacote super básico aqui. E então importe o ponto e. E nós fizemos isso, não ENV, letra barra, ponto ENV, assim. Na função principal. Certifique-se de transformá-la em uma pia. Então você tem que escrever esses comentários que sejam rígidos. Encadernação na Flórida. Garanta a inicialização para garantir que tudo esteja inicializado. A primeira coisa que precisamos fazer é carregar o ENV. Eles aguardam o carregamento de pontos ENV. Esse é o comando dado por esse pacote. Então temos que inicializar a sopa sempre. Simplesmente primeiro obterei um URL superbásico, que é dot ENV e depois ENV. E aqui vou adicionar essa chave que é uma URL tão básica. E se for nulo, basta usar essa string vazia. E URL é capital. Essas coisas causarão erros. Em seguida, cole e adicionarei que os nomes das variáveis acima são fundamentais. E isso será fundamental. Depois disso, basta aguardar a super base, não inicializá-la, exceto cURL. Nós temos isso. E na principal reabilitação isso também. Ah, tudo bem. Nós temos essas coisas. Está na hora. Estruturamos nosso projeto em pastas. Em vez de escrever tudo no arquivo principal de pontos, basta ir ao laboratório, criar uma pasta e nomeá-la como páginas. Dentro dela, crie mais duas páginas. É para mover arquivos de pontos da página inicial ponto, ponto e ponto da página inicial ponto, ponto. Assim. Na página inicial. Basta importar esse material. Então ficou menos rígido. E página inicial. Eu criei esse rígido em segundos usando algumas extensões aqui. Portanto, você também pode adicionar essas extensões. Sim, eu realmente viro a lacuna para o corpo, depois o centro constante. Criança. Basta escrever a página inicial. Obviamente, mudaremos essas coisas mais tarde. Então eu só estou pensando por que essas linhas estão aqui? Ok, vamos deixar isso de novo. Vá para a importação da página inicial, meu TTL, depois data menos rígida. Diga o nome de início. Depois volte, andaime, depois corpo e depois centro. Mais uma vez, vou simplesmente escrever o nome da página por enquanto. É uma página escura. Essa é a palavra N, não é? Ok. Mas mais tarde, obviamente, temos que remover essa constante. E agora vamos ver o que acontece nos vídeos posteriores. Agora, tudo é feito aqui. No próximo vídeo, trabalharemos na parte de autenticação e nas páginas. Dito isso, vendo o próximo vídeo. 4. Configurar a tela do auth: Oi. Agora é hora de aprendermos sobre a autenticação do usuário no Superbus. Vá para o arquivo principal de pontos e remova tudo abaixo deste, meu aplicativo. Vamos removê-lo. Também removerei esses comentários apenas para que pareçam limpos. Agora, crie um novo widget com estado e dê um nome a ele. Ou seja, ficou para rígido e chame-o de arte. Ok. Agora, nesta página de arte, mostraremos ou redirecionaremos para o redirecionamento o usuário, dependendo se o usuário já está autenticado ou não. Ou seja, vamos apenas verificar se um usuário já fez login anteriormente ou se é um novo usuário. Então é isso que vou fazer aqui. Em primeiro lugar, criarei uma super instância base. É um exemplo cego. Suponha que sempre supervisionar seja igual ao cliente da instância de pontos superhighways. É assim que chamamos as funções fornecidas pelo Superbus. Depois disso. Então, suprimentos, presentes, nossos retornos como usuário. Vou ter apenas essa variável de usuário. Lembre-se, isso vem do Superbus. Vou atribuir isso a esse usuário mais tarde. E agora, aqui, vou apenas verificar se o usuário é igual a nulo. Então eu vou criar esta página que é uma página escura. Eu tenho essa página. Lembre-se no último vídeo ou então na página inicial. É simples. É. Se o usuário já estiver lá, faça login diretamente, faça login na página inicial ou então ele fará o login. Aqui. Faça desta página a página inicial. E agora nosso laboratório de materiais. Isso está feito. Agora. O que faremos são super formas, presentes , poucas funções, ou seja, entrar no usuário. Esse é o comando. Então, ponto, ponto, ponto de Bobby entrou no usuário. Tão bom. O comando retorna um objeto de usuário. Ok, simples assim. Agora vamos criar a função futura. Obviamente. Isso levará alguns segundos. É por isso que esse nome se tornou arte. Uma pia. Espero que você saiba que todo esse conceito básico é chamado de futuro. E porque eles são necessários para este curso. Agora, aqui, vou simplesmente afirmar que é essa variável de usuário para esse comando, é User dot, dot, current user. E aqui você pode ver, isso nos dá esse usuário. Se você passar o mouse sobre ele, ele nos dará esse usuário, ele pode ser nulo e ter valor. E depois disso, o que queremos é ouvir. Isso está na nossa mudança de estado. que significa simplesmente que se o estado do usuário mudar, ou seja, o usuário se desconectar ou fizer login, nossa página será recarregada. Ou seja, ele pode ser enviado novamente para a página inicial ou para a página inicial. Aqui. E aqui. Devemos ouvir. Esse é o evento. E agora aqui mencionaremos o estado definido. O usuário é uma chamada para o usuário do ponto da sessão de pontos do evento, e isso também pode ser nulo. Ou seja, se não for nenhum dos dois, basta atribuir o valor nulo. Se você passasse o mouse sobre ele. Veja, isso é jogar como esse usuário. Então, significa simplesmente obter o usuário atual. Você pode usar nossa função de usuário de corrente escura. Também existe essa função. Esta sessão. Na sessão, você pode obter os detalhes do usuário. Ok? Agora, vou chamar essa função no estado init. Ou seja, quando essa tela está sendo renderizada, a primeira coisa que você, ele tem, essa função precisa fazer é chamar isso. E depois disso, de acordo com o valor do usuário, a tela será retornada. Então, temos essa coisa pronta. Está na hora. Executamos o aplicativo. E também vou mudar o nome para Florida Superbus. E eu tenho a página inicial como esta arte agora. Ok, vamos tornar isso constante mais tarde. Se precisarmos, eu vou mudar isso. E eu também removerei esse binário de depuração. Agora, você executa esse aplicativo. Você pode usar dispositivos virtuais, também são seu dispositivo físico. Você pode se conectar via cabo USB e ativar a depuração depuração em seu dispositivo móvel. Mas vou simplesmente usar o emulador. Vá até o Android Studio aqui mais ações do que o Virtual Device Manager. Eu já criei esse dispositivo, mas você pode criar um novo dispositivo aqui. E veja que estou usando pixel para API 30 e leia 11. Vamos começar aqui. Se seu sistema não for poderoso, acho que o Android Studio o tornará mais lento ou o Ártico ficará lento. Agora você tem seu dispositivo aqui. E você pode ver neste VS Code, meu dispositivo agora está ativo. Vou apenas executar e começar a depurar. Hora. Isso leva algum tempo. Então você tem que esperar e ter pacientes. Gostaria apenas de dizer que, suponha que você queira saber mais sobre autenticação, funções e terminologias e, em seguida, acesse o site oficial da supervisão. Aqui você entenderá mais sobre as sessões atuais dos usuários e tudo mais. Mas, principalmente, existem poucas coisas, apenas algumas palavras-chave e eu acho que é um inglês muito simples. Portanto, não deve ser tão difícil de lembrar. Está demorando um pouco, mas acho que temos que esperar. Não há outra opção. E veja. Eu tenho esse aviso. Não é como se o aplicativo não funcionasse, mas tenho um aviso aqui que é para alterar a versão do SDK do compilador. Então eu vou te mostrar como é assim que é feito. Mas se você não está recebendo essas linhas vermelhas, tudo bem. Mas no meu sistema, eu tenho o atualizado. Mas, como você pode ver, ele foi construído com sucesso. Eu sei que demorou muito tempo. Espero que seu sistema não leve esse tempo. Vamos ver o que é renderizado como início ou início. Veja, temos essa terceira página aqui. Portanto, o aplicativo é bem-sucedido, pois o Superbus também está conectado e não é adicionado a ele. E também vou te dizer como resolver isso. Fechar. Estou apenas interrompendo o aplicativo. Então. Vá para a pasta Android, depois para o aplicativo e, em seguida, crie o arquivo Gradle. Aqui. Você verá os 29 subjacentes. Esta versão de compilação do SDK. Não compile a versão do SDK. Vou apenas remover a vibração e, certo, 33. É isso. E salve-o. E agora, basta refazer novamente para que eles comecem a depurar. E espero que você não veja nenhuma linha vermelha ou qualquer aviso aqui. Não quero mais esperar que esse aplicativo seja executado. Então, nos vemos no próximo vídeo. 5. Trabalhe na interface do StartPage: Oi, bem vindo de volta. Portanto, você pode ver no console de depuração que não há avisos após a alteração, o compilador deteriorou a versão do SDK. É hora de trabalharmos na interface do usuário da página inicial. Esta é a página em que o usuário pode fazer login e se registrar. A primeira coisa que precisamos fazer é torná-la uma versão completa do estado. Porque, obviamente, trabalharemos com muitos estados. E vamos começar a escrever nossos estados. A primeira coisa é que superforma a instância do cliente. Então, a instância de pontos do Bobby é o cliente de pontos. A próxima coisa é que temos o valor booleano de E que diz que, ao carregar, será falso pela primeira vez. E outra é, não é, é que vou apenas escrever o carregamento de inscrição, assim, carregamento de login, e aqui será o carregamento da inscrição. Isso também é falso. Em seguida, fazer login e me inscrever exigirá impostos que estou recebendo. Esse controlador de edição de texto é o conceito em flutter. E, obviamente, o e-mail é a senha deles também estará lá. O controlador de barramento é igual a x controlador de tudo. Em seguida, usaremos o widget de formulário necessário. Na chave. Essas são apenas sintaxe. Você deve se lembrar que essas formas pouco volumosas indicam o valor nulo. E sempre me lembrarei de descartar os estados que não são todos, principalmente instâncias de propósito. E na edição de decks e no refrigerante refrigerante, não há vazamento de memória. K, Não, vá abaixo. E ele tinha no corpo que eu terei esse centro. Mas nessa criança, essa criança terá a forma visão e a bomba terá coluna k, c. E um ano é um valor obrigatório de K G, N aqui, já que vamos dar uma olhada. Sim, Foley está lá, ok. As constantes não deveriam estar lá. É isso. Esse era o problema aqui. É que não deveria ser constante. Não. Usaremos essas propriedades da coluna, que é o principal alinhamento existente, data center de alinhamento médio existente. cruz x é terra, centro de alinhamento excessivo bruto e não centralizada. Eu vou, sim, você se alonga. E eu vou embrulhar este formulário. Qual filho solteiro? Visualização de rolagem. Não há erro ao digitar. Ou seja, quando estamos digitando e-mail, uma senha não é adicionada. Dizendo isso na interface do usuário, acabei de esquecer o somador, mas se você remover a rolagem de canal único, você entenderá. Deixe-me te mostrar mais tarde. Depois deste fórum. Nesta coluna, vou dar algumas dicas sobre como fazer isso. A primeira coisa é que sempre obterei uma imagem de rede. Basta acessar o Google Images e servir o ícone do logotipo Superbus. Vou apenas abrir a imagem. Aqui. São a cola. Vamos copiar a imagem e ver se é PNG de pontos ou não. Conheça. Isso pode dar um pouco porque você não deveria ter uma imagem em que ela tenha essa extensão. Vamos copiar o endereço e a base dessa imagem. Essa é minha imagem. Basta abrir a mesma imagem. E agora, como copiar o endereço da imagem. Agora, se eu colar, vejo que isso tem essa extensão que o PNG. E eu realmente dei. Alta altura de 150. Salve isso. Você tem o aplicativo em execução. Não sei o que Stat Edit. Ok, há algum problema. São três imagens robustas de que a rede existe. Acho que não. Deve haver algum erro, mas acabei de reiniciar. Novamente. Vou apenas mudar a imagem. Obteremos dados e, novamente, usaremos essa imagem. Vestido B maior. , é tão engraçado que você não consegue obter uma imagem. Homem. E vamos ver, vamos usar outras coisas. Vou apenas fornecer alguns outros widgets e, posteriormente, genes dessa imagem, campo de e-mail, senha, amigo. O próximo campo. E vou usar apenas uma caixa de algum tamanho, dar espaçamento. E botão elevado. Ter um login. Vamos ver. Há algum adicionado aqui? Vou simplesmente pará-lo e executá-lo novamente. Temos essa saída aqui. O logotipo, dois campos de texto, qualquer botão de login. Também terei um botão de inscrição aqui e usarei apenas o divisor. Seja consistente. Então. Basta ter um botão de esboço e se inscrever para criar filhos. É isso. Então, temos o andaime e cama central está lá. Ok. Agora vamos decorar o formulário de texto para que o campo de e-mail seja coincidente. Vou usar o validador para garantir que ele não esteja sendo enviado. Vazio. O valor é igual a nulo. O ponto de valor está vazio. Nós simplesmente retornaremos, se necessário. Ou então, se tudo estiver bem, basta retornar null. Ou seja, não há erro de validação. Então, temos o controlador como controlador de e-mail. Declaração. E coloque a decoração. O rótulo é igual ao e-mail e ao teclado tipo X, tipo de entrada, ponto, endereço de e-mail. Agora vá para o ônibus para obter o campo de senha. Agora temos o validador. Se o valor for igual a nulo e se o valor estiver vazio, retorno será necessário. Rl. Então, gire esse controlador, temos a decoração do controlador em espiral. Decoração, limite é igual a texto, espada e obscurecido. X é igual a verdadeiro. Ou seja, o usuário não deve ver o que está digitando. Agora salve-o. Confira nosso aplicativo e veja se ele parece decente. Obviamente, este não é um curso de interface do usuário. Nosso foco é aprender o Superbus. Neles. No próximo vídeo, aprenderemos como implementar funcionalidades de login ou inscrição. E Q. 6. Implementar inscrição e sinalização: Olá, então temos nossa interface de usuário pronta. Agora é hora de implementarmos esse sinal de funcionalidade. Portanto, essa instância do Superbus tem arte, como você viu aqui, que está no main.out. A funcionalidade de inscrição do parceiro. sintaxe é como a sintaxe. Super diz nada, arte, não se inscrever. E aqui temos que enviar e-mail e senha. É isso. Esse é o índice da lista necessário. E isso nos retornará tanto a sessão quanto o usuário. Agora, para implementar isso, nosso botão de inscrição está aqui. Em primeiro lugar, farei apenas verificar se este é o carregamento de inscrição e existe um indicador de progresso circular gigante do Centro . Isso é para aquele indicador de progresso, ou então vamos ao pressionamento e tornar essa criança constante. Agora, a primeira coisa que precisamos verificar se está no formulário é válida. Isso é válido é igual ao estado atual do ponto qi da bomba. Não me debruçar sobre isso. A primeira coisa que precisamos verificar é se é válido ou não. E se estiver, se não estiver correto, basta atribuir o valor nulo. Agora, temos uma declaração if. Se for válido, não igual a verdadeiro, então simplesmente retornaremos daqui. Ou então enviaremos o DOT estadual. carregamento da inscrição é verdadeiro. Sim, mostraremos um indicador de carregamento. Em seguida, vamos embrulhar tudo nele, um bloco de tentativa e captura. Agora, vamos experimentar formas super estranhas. Dot, dot, cadastre-se assim. E aqui, para o e-mail, temos que escrever um controlador de e-mail, não um texto. E para a senha, texto do nó do controlador de senha. E depois disso, vamos apenas para mensageiro, lanchonete. Sucesso. Para automação. E-mail enviado, cor de fundo, cores, verde escuro. E isso pode ser constante. E eu acho que isso espera. Temos dias de domínio ao pressionar Sincronizar. Depois disso, nos enviaremos dados. carregamento da inscrição é igual a falso. É isso. Agora, e se houver um mensageiro cuidadoso adicional, que não seja de contextos que mostre os contras da lanchonete. Snack bar x Falha na inscrição? Sem cor de fundo. A cor é vermelha. A e temos que definir novamente o destino como falso, ou seja, inscrever-se. O carregamento é igual a falso. Então, aqui estamos primeiro tentando inscrever meu tempo, nos foi dado pela Superbus. E então estamos mostrando a lanchonete. Se estiver confirmado ou se estiver, se houver alguma adição, também mostraremos a lanchonete. Lembre-se de que o Superbus, por padrão, habilita a verificação de e-mail, que significa que, ao usar autenticação Superbus com essas configurações ativadas, seus usuários precisam verificar seus endereços de e-mail para que as contas se tornem ativas. Você também pode desativá-lo acessando a opção Configurações na seção de autenticação. Agora, temos esse método de inscrição, retorne simplesmente, vamos escrever esse login também. E depois disso, declararemos. Da mesma forma. Para a funcionalidade de login. Este é o índice básico que é superjetivo, não artístico, sem palavras com uma senha fraca como essa. Mas esse é esse índice. Aqui temos que fornecer um e-mail e uma senha. Isso é uma sintaxe. Nosso login. Vamos fazer isso. Vamos ter esse botão elevado aqui. Sim. Faça-o afundar. Esse é o botão de login. Depois da rede. coisas serão semelhantes. Antes de tudo, verificaremos se o carregamento do login é verdadeiro. Em seguida, constitua uma criança central. Legal. Indicador de progresso. E depois disso, faremos como comprar uma ligase. Novamente, copie também. Por que perder tempo. Daqui até aqui. Vamos copiar tudo. Fiquei aqui dentro. E agora vamos ver, verificar tudo. Ele dirá. E no carregamento. Da mesma forma, isso será assinar, fazer login. Então, isso será, digamos, em peso. Outras coisas. Então, dizemos e não exigimos isso, pois ele entrará diretamente na página inicial. Mas aqui só precisamos fazer login. E é isso. Então, isso está feito e espero que funcione. Escrevemos com sucesso a inscrição e a funcionalidade. No próximo vídeo, testaremos o funcionamento dessas funções e também o design agora. Obrigada. 7. Funcionalidade de saída: Olá, é hora de testarmos a funcionalidade. Vamos escrever o e-mail e a senha 12345 e clicar em Inscrever-se. Veja e-mail de sucesso, centavo de confirmação. Agora temos que acessar esse endereço do Gmail e clicar na conformação. Vamos usar o Gmail n. Quando você acessa a seção de autenticação e recarrega. Veja, temos este e-mail aqui e ele está sendo escrito para verificação. E aqui, simplesmente, você precisa clicar no disco Z, confirmar seu e-mail. E agora não vai fazer nada. Mas se formos recarregar a seção de autenticação, veremos se a verificação foi concluída. Agora, se formos , já temos o e-mail e a senha lá. Como não dissemos que esse estado foi removido, podemos testar diretamente a funcionalidade de atribuição. Vamos clicar nele e ver. A página inicial está aberta. Então você pode estar pensando não estamos navegando após a inscrição, o login. Ou seja, temos esse sinal aqui. Não estamos navegando. Mas se formos para o arquivo principal ponto, ponto, aqui, estamos ouvindo a mudança do estado artístico. E é por isso que ele nos envia automaticamente para a página inicial. Agora, na página inicial, vamos usar também um botão simples para implementar essa saída. Vá para a página inicial. Aqui. Vamos além de importantes NANDA superestradas de materiais da NANDA. E agora estou diretamente no aplicativo, mas terei um botão. Ações. Então eu posso abotoar. Eu posso ser, não consigo sair desta. Faça com que seja consistente. E para implementar primeiro o BAA, uma instância supervisionada. A base de clientes de baterias é igual à instância de pontos do cliente dot de Bobby. Ok? Isso é sintaxe. Aqui. Não pode ser consistente. Agora, a sintaxe para psi nada é novamente muito simples. Relacione autoestradas, não desconecte. É isso. Esse é o único chamado silêncio. Agora, depois de salvá-lo, se eu acessar o aplicativo e clicar aqui, esse é o botão de sair, ele deve nos redirecionar para a página de inicialização. É a página inicial, digamos C. Agora estamos sendo redirecionados para a página de login. Portanto, nossa funcionalidade de inscrição, login e saída está funcionando perfeitamente. No próximo vídeo, aprenderemos sobre um conceito conhecido como deep linking. Obrigada. 8. Integração de link profundo: Oi, bem vindo de volta. Neste vídeo, trabalharemos nessa integração de links diretos em nosso aplicativo. Portanto, temos a autenticação por senha de e-mail funcionando. Vamos configurar links diretos para que os usuários que se conectaram via link mágico ou externo ou não, ou seja, Google ou Facebook, possam voltar ao aplicativo e você precisará acessar sua conta de supervisor, que é o Dashboard. Em seguida, clique em autenticação. Em seguida, posso clicar em Configuração de URL. Aqui você encontrará esses URLs fixos, redirecionamentos , URLs que provedores estranhos podem redirecionar. Depois da autenticação. Basta clicar em Adicionar URL e clicar com o botão direito do mouse no ponto. Super maneiras de meu aplicativo , em seguida, fazer login com barra dupla com dois pontos. Eu acho que recuei, só isso. Em seguida, clique em Adicionar domínio. Veja, temos esse URL de redirecionamento aqui. Você pode renomear este aplicativo my flutter e esse retorno de chamada de login. Mas eu tentei mudar essa coisa que é io dot Superbus e estava me dando um pouco de redirecionamento. Então, se você quiser, experimente você mesmo, dando nomes diferentes. Agora, a próxima etapa para links diretos é que precisamos adicionar algum código. Na pasta Android e iOS. Você pode simplesmente acessar a documentação do Superbus e ler sobre como configurar o jogo C. Adicionamos esse URL de redirecionamento aqui, eles estão usando um Quickstart mais plano. Depois disso, mudei o nome para Android, adicionei a fonte de aplicativos Android e o AndroidManifest.xml. Então, vamos lá. fonte do aplicativo Android significa AndroidManifest.xml. E abaixo desse IntentFilter, temos que copiar essa coisa. Ok, basta copiar o do meio. Vá até lá. E acima, aqui, essa é a atividade de encerramento. Basta colar. Aqui, mude esse esquema. Esse é o meu aplicativo que você recarregou. E o host é o mesmo, ou seja, retorno de chamada de login. Nós voltamos, tudo bem. A coisa que não precisamos fazer nada. Agora para iOS. Temos que fazer essas mudanças. Isso é fundamental. Basta copiar essa coisa acima da caixa final. Vamos para a pasta iOS. Então. Execute nosso arquivo info.plist. Aqui. Nesta posição. Basta colar. E, novamente, mude essa string aqui. Esse é o meu aplicativo de lotes. É isso. Período. Após essas alterações, basta interromper seu aplicativo. Certifique-se de salvar tudo e executá-lo novamente para que essas alterações sejam refletidas no aplicativo. Então, isso é tudo para esse link direto. No próximo vídeo, trabalharemos em como implementar o login do Google em nosso aplicativo. Obrigada. 9. Configurar o Google Oauth: Olá, para ativar a autenticação do Google em nosso projeto. Primeiro, precisamos configurar o Google Art e obter essas credenciais. Então, basta abrir seu navegador, acessar cloud.google.com e você já está conectado por padrão. Caso contrário, basta fazer login com sua conta do Google depois clicar em Console. Agora, eu já tenho esse projeto, mas talvez você não o veja. Você pode ver aqui como selecionar o projeto. Em seguida, clique aqui. Em seguida, clique em Criar novo projeto na parte superior. Simplesmente denominado o projeto, escreverei seu dilúvio. A lâmpada é. Ok. Em seguida, clique em Criar. Está criando. Agora, como você pode ver, basta selecionar o projeto recém-criado. Agora, você pode ver aqui que está trabalhando na Flórida. Portanto, a pobreza é o próximo passo que precisamos fazer é criar as chaves para o nosso projeto. Na barra de pesquisa. Aqui, basta digitar ou AUD. Clique na tela de consentimento. Em seguida, selecione essa opção externa do tipo de usuário. Simplesmente laboratório externo. Clique em Criar. Em seguida, basta preencher este formulário. Direi apenas que é um e-mail de suporte de fornecedores. Eu não tenho nenhum logotipo. Domínio. Simplesmente aqui também. Acho que nada mais é obrigatório. Clique em Salvar e continuar. Agora, a próxima coisa que você precisa fazer é encontrar seu URL de retorno de chamada. Portanto, não precisamos preencher os escopos e os usuários do OwlTest agora, basta acessar o painel do Here Supervisor. Aqui. Clique na opção de configuração do projeto e selecione a opção API. Agora, aqui você pode ver a URL do projeto. Clique neste, basta copiá-lo. E então, novamente, acesse o Google Console. Clique nas credenciais. Essa opção. Ok, sim, então clique em Criar credenciais para escolher o ID do cliente OT. Agora, tipo de aplicativo, vou simplesmente escolher o aplicativo web. Já que temos Android, iOS e reunião na web. Agora, o nome ficará desfocado. Super cliente web. Então, isso é importante no redirecionamento autorizado, URI. Primeira base, essa é a que você copiou do painel da super base. Então, no final, lembre-se de adicionar essas linhas que são retorno de chamada de barra e ponto v1 ponto. Essa coisa, você simplesmente tem que se lembrar disso. E então você tem que escrever essas linhas para que elas sejam redirecionadas para o nosso aplicativo. Em seguida, basta clicar em Criar. Depois disso, obteremos as credenciais. Copie e cole os valores aqui porque você precisará deles mais tarde. Depois disso, basta acessar a autenticação. Então Bobby é porque agora estamos e vamos usar essas credenciais aqui. Clique em provedores e encontre o Google. E você pode ver que está solicitando um ID de cliente e um segredo do cliente. É isso. E veja isso redirecionar o URL como barra de retorno de chamada de barra v1. Agora copie esse ID de cliente. Declare aqui. Novamente, copie o estado do Segredo do Cliente aqui e clique em Salvar. É isso. Concluímos todas as etapas e configuramos com sucesso o login do Google para nosso projeto. No próximo vídeo, trabalharemos na interface e na implementação. Obrigada. 10. Implementar o Google login: Agora está na hora. Como tudo está pronto, implementamos o login do Google em nosso laboratório de flutter. Primeiro, vamos criar o botão na página inicial. Depois desse botão de inscrição. Simplesmente a linha. Então temos filhos. E essas crianças. Um penhasco que a primeira coisa que teremos é a região expandida. E dentro dessa região expandida, teremos uma divisória. Nós teremos. Como sempre, você pode alterar a interface de usuário de acordo com a sua. Para mim, este não é um tutorial sobre uma interface de usuário muito boa, nada parecido. Conjuntos de genes infantis lerão o texto. E, novamente, eu tenho esse ditado expansivo, eu só quero essa coisa. Mas o usuário sabe que pode fazer login com seu e-mail ou usar diretamente o login. Aqui. Você pode simplesmente dar uma const. E vou remover a divisória anterior. Esse aqui. Se você quiser, pode ficar com ele. Eu só quero essa divisória aqui. E agora. Depois dessa linha, depois dramaturgo, contorno, botão, ícone e pressione. Apenas mantenha-o assim. Rótulo. Devemos então fazer com o Google. Em seguida, no ícone, terei uma rede de pontos de imagem. Estou simplesmente usando uma imagem de rede aqui. Eu só queria manter as coisas muito simples. E também a altura dessa imagem será igual D. E simplesmente pesquise qualquer imagem no Google. Em seguida, o logotipo do Google é transparente. E vou simplesmente copiar endereço da imagem e colá-lo aqui. Salve isso. Veja, está parecendo decente. Agora, para implementar a funcionalidade de login do Google. Primeiro, vamos criar um novo botão. Esse não é um botão que é booleano. Login do Google. O carregamento é chamado de falso, assim. Em seguida, vá até este botão de esboço e aqui basta escrever se o login do Google for verdadeiro e, como de costume, mostre um indicador de progresso circular. E como isso já está no local, transforme-o em uma pia. E agora vamos escrever o código. A primeira coisa que faremos é definir o estado. carregamento do login do Google é igual a verdadeiro. Então temos esse bloco de tentar pegar. Essa é uma sintaxe, sintaxe para o Google. Faça login. Imediatamente. Superrodovias com largura de sinal de dança artística, como esta. Ok. Nesse provedor, basta escrever provider. Veja que você tem muitos fornecedores. Vou usar o Google. Então, eles importam o importante é o caminho direto para cá. Temos que primeiro fazer essa verificação. Ou seja, k é web, essa. Então, no topo, haverá uma base importante ponto, ponto. Ou seja, se é web , então simplesmente não faça isso, ou seja, não escreva. Rls. Use o URL de redirecionamento, que é io dot. Scoop sempre. Meu flutter, meu aplicativo mais liso. Login, retorno de chamada, assim. Ou seja, esse foi o nosso texto que acabei de lembrar em Redirect URL order deep e outras coisas. Esse é o único código adquirido depois disso, simplesmente naquele drag, ou seja, catch block, certo? Andaime. Mensageiro de contexto, não mostre conteúdo de lanchonete, lanchonete. A próxima coisa, assim. Se você quiser, você pode alterar a cor de fundo para as cores L, acento vermelho escuro. E defina o estado. O login do Google é igual a falso. Temos código redundante. É hora de testarmos. Se eu for e acessar nossa autenticação e usuários, aqui, apenas removerei esse usuário porque usarei o login do Google com o mesmo nome de usuário. Agora. Vamos testá-lo. Tudo está salvo. Sim. Vamos continuar com o Google. É abrir uma conta. Sim. Eu vou escolher isso. Deveria ter sido dirigido. Vamos ver o porquê. Aqui. Acho que temos o login do Google, mas ele não foi redirecionado. Deve haver algum problema aqui. Veja, deveria ter sido reeleito aqui. K Phi reinicie aqui, nada vai acontecer. Basta ir e remover esse usuário. E nos contratos, forneça uma configuração de URL. Vamos ver o que acontece se eu remover esse host local nos URLs de redirecionamento direto da UE. Vamos ver. Meu palpite. Esse é o correto. Vou bater no veado novamente. Salve isso. Ok, vamos tentar de novo. Vá para continuar com o Google. E veja. Acho que você não conseguiu entender o que foi redirecionado para o nosso aplicativo. Mas eu disse que havia esse problema. Acabei de remover o host local que você localiza dos URLs do redator. E agora está tudo bem. Está funcionando muito bem. Você pode ver que o Google está lá? Bem, sim, é isso. Portanto, nossa indicação também está completa. Espero que você tenha gostado. No próximo módulo, aprenderemos sobre como usar o banco de dados na superbase, bem como o flutter na fila. 11. Trabalhando na interface de usuário cruel: Olá, bem-vindo de volta a um vídeo muito novo. E agora é hora de começar a aprender sobre bancos de dados no Superbus. Superbus fornece uma interface de usuário baseada na web que nos permite gerenciar e interagir facilmente com nosso banco de dados relacional. Essa interface fornece uma variedade de recursos para criar e modificar tabelas, gerenciar dados e realizar consultas SQL. Então aqui você pode ver esse editor de SQL, basta ir até lá. O problema é que, na supervisão, você precisa definir suas tabelas e colunas com antecedência pois pode começar antes começar a inserir dados nelas. Isso ocorre porque o Superbus é construído sobre a sequência Postgres, que é um sistema de gerenciamento de banco de dados relacional. E isso requer um esquema predefinido para armazenar dados. Então, aqui, basta ir lá, ir até este editor SQL. Ou se formos ao banco de dados, veja também aqui, temos a mesma coisa, nova tabela. Basta clicar na nova tabela e agora dar a você uma tabela, um nome. Vou chamá-lo de tarefas. Agora, vou desmarcar essa segurança em nível de linha por enquanto e ativar em tempo real. Porque, obviamente, também aprenderemos como usar dados em tempo real. Agora, abaixo, você pode ver que há duas colunas predefinidas. Isso é id e create a created at. Id é real. Gere o ID automaticamente e verifique se este é o principal. Agora aqui. Basta clicar em Adicionar coluna. Então. Além disso, escreverei o título e darei o texto. Dito isso. E o segundo escreverá o ID do usuário porque, obviamente, também precisamos armazenar o usuário. E aqui eu vou usá-lo. A próxima coisa é que você também pode usá-lo como um teaser. Mas supervisionado retorna essa variável de usuário ou o ID do usuário como uma string. É por isso que estou usando string. E mais tarde, teremos que fazer algumas mudanças, ou você também pode dizer “converta”, que faremos isso dessa vez. Então, temos a coluna, temos o nome e ela será em tempo real e depois clique em Salvar. Oh, Kay. E se eu for para a mesa, bem, editor também, veja que temos nossa mesa. É perder. Além disso. Estou usando esse novo emulador. Ou seja, conectei meu dispositivo real porque o Android Studio anterior estava muito atrasado. É por isso que. Antes de começar a aprender as operações crud, vamos primeiro trabalhar em algumas partes da interface do usuário. Crie um novo arquivo dentro do diretório de páginas. Então, jogue para a direita. Crie página, ponto, ponto e ponto, ponto. Ok? Então, dentro da página Criar , o pai simplesmente importa o material e depois o mata. Eles permaneceram totalmente rígidos, nomeando a página de criação. Então, a primeira coisa que faremos, como sempre, é fazer com que um booleano excluindo seja igual a falso. E criaremos um controle que exige tudo, porque, obviamente se estivermos criando algo, haverá um próximo campo envolvido. E eu vou chamá-lo de Título. O controlador é igual ao controlador de edição x. Assim. Agora, basta devolver uma barra de andaime. Eu compro títulos. Em seguida, crie dados. Então, no corpo, adicionando laços e percepções rígidas e percepções 15 e aquela criança têm uma coluna. Vamos discutir essa criança. E digamos que X3. E também como apenas um texto tem data de lançamento, é por isso que não estou usando este formulário e vou deixar que esse formulário de texto falhe com a chave estrangeira. Novamente, é muito simples. Como declaração do controlador Dell, Const, input, declaration, int x. O título e a borda. Vamos dizer que uma borda é um esboço na borda da bota. K. Depois daquele TextField. Dê um pouco de espaço com a ajuda de uma caixa do tamanho dele. Eu, em seguida, elevo o botão Criar e faço com que ele consista. Ok. Teremos essa página de criação e, definitivamente, a veremos em nosso dispositivo. Mas primeiro, vamos criar nossa página de edição também. Isso é semelhante a criar página, mas a única diferença é que estamos aceitando dados e atribuindo os dados. Controlador de edição de texto. Basta ir aqui. Material de importação. Página de edição rígida e imponente. Aqui. Nesse construtor, aceitaremos duas coisas. String final, data, int final, id. E então simplesmente aceitaremos isso como editou esse conjunto de dados. É isso. Agora, como sempre, a mesma coisa. Boolean está carregando é igual a false. Controlador de edição. O controlador fará o controlador de edição x assim. E agora, no estado inicial, o que faremos é dizer que eu atribuí valor aos dados para eles. Aquele token resfriador, escória, rígido, pequeno w, rígido, não nenhum dado como esse. Agora, depois disso, vamos até nossa página Criar e copiar esse andaime. Andaime. Nós temos aqui. Agora. Serão adicionados dados. controlador está lá. Este será um encontro. Isso é um encontro. Só estou pensando. O que podemos fazer? Ok, vamos fazer isso aqui assim. Se o carregamento for igual a verdadeiro. Se o carregamento for verdadeiro, desculpe, equilibrado, central, Jane, indicador de progresso circular. Ou então eu tenho uma coluna. Com essa coluna, digamos que crianças ficam nas calçadas. Peso, infinito de dois pontos, altura. Mas estou apenas criando o botão de atualização aqui. Nada demais. É como dar a largura total. Botão elevado ao pressionar. E a criança partirá no dia seguinte. Assim. Dentro desta coluna. Ou seja, depois que a caixa de tamanho fornecerá algum espaçamento com a ajuda de uma caixa de outro tamanho. Eu então, e depois uma divisória. E, finalmente, outro botão apenas para esse propósito de exclusão. Para isso, o usuário só pode excluir desta página. Const. Eu posso, eu posso começar a excluir. Esse rótulo pode ser constante. Em seguida, exclua. E, portanto, estilo. Vamos dar apenas o estilo Dan, cor de fundo, meu TDL, estado, propriedade, ponto. Esses outros códigos que você deve lembrar não são feitos por mim. E salve-o. Em palavras simples. A única diferença entre as duas páginas é que também temos um botão de exclusão aqui. Apenas salve tudo. Se você quiser conferir essa página de forma simples. Ok, vamos para main.out. E em vez de páginas iniciais, envie-as para criar a página e salvar. Veja, esta é nossa página de criação. E se fizermos Editar página, ela estiver solicitando dois argumentos, string e integer. Acorde e seja olá. número inteiro pode ser dois. Se eu salvá-lo. E página de checkout. Veja, esse halo já foi retornado aqui porque o estamos atribuindo no estado init. E essa atualização está ocupando a tela inteira. Então temos essa pequena divisória. Esse é o botão de exclusão. Parece decente. Novamente, vamos mudar para mais cedo. Essa é a página inicial. Então é isso. No próximo vídeo trabalharemos na interface do usuário inicial, bem como em como criar implementar essa funcionalidade e funcionalidade de criação . E Q. 12. Implementando funcionalidade de criação: Oi. Agora temos a página de criação e edição pronta. É hora de trabalhar na página inicial e criar botões para navegar até outras páginas, além de trabalhar no corpo do todo. Muito raro, buscaremos e mostraremos os dados criados. Então vá para a página inicial. Aqui. Vamos dar um título aí, mas vou apenas escrever. A propósito, é então dotado muito bem. Vamos importar, criar página, importar, editar página. Vamos começar a trabalhar no corpo aqui. E removeremos n. Usaremos um construtor de pontos para visualização de lista. Espero que você conheça todos esses widgets porque esses são novamente os fundamentos do Flutter. Eu sou uma arma ****. E agora estou apenas mostrando alguns dados fictícios. E, posteriormente, substituiremos esses dados pelos dados provenientes deles. Superbus, Construtor de itens, texto , índice, string e dados são iguais a dados fictícios. E o número do índice. Mostraremos essa sequência de dados. Em seguida, retorne o texto do estilo da lista. Dados e, em seguida, rastreamento. Vamos usar um botão de ícone. E o ícone terá const. Eu posso, eu posso começar um anúncio aqui, ou seja, eu posso começar a editar. E vamos dar uma cor, cores, vermelho. E no local, vamos navegar. Isso é Navigator Dot Push. Em decks. Nessa voz alta dentro do layout da minha página TBL haverá texto e nós o enviaremos para a página de edição. Editar dados simplesmente não é uma variável de dados e ideias que indexam. Novamente, são simplesmente idiotas. E a próxima coisa que precisamos fazer é um botão de ação flutuante criativo. Botão de ação flutuante. Criança. Const, eu posso, eu posso muco, adicionar no peito. E a partir disso, terminamos. Navegaremos até a ponte de criação. Navegue pelo ponto deles, empurre. Minha página diária, página de layout aqui. É isso. Vamos salvá-lo e conferir o aplicativo. Veja, está parecendo muito decente agora. Sem dúvida, esses dados são fictícios, mas é muito simples substituí-los. Então, como temos a interface de usuário pronta agora, é hora de trabalharmos para aprender essas operações credíveis, começando com a criação de nossos dados de inserção no Superbus. Então, basta acessar a página Criar. Primeiro. Vou te contar uma sintaxe. Para inserir um registro, a sintaxe é muito simples. Temos que escrever que é uma instância de superrodovias, essa instância de cliente. Então, de, de nos leva. Qual é o nome da tabela na qual os dados serão inseridos? Aqui? Simplesmente, por exemplo temos usuários ou você pode dizer que temos as tarefas a fazer. Então, o comando é simples, ou seja, inserir, inserir. E essa área. Este é um segundo argumento que recebe dados na forma de mapa, nosso par de valores-chave como este. Suponha que tenhamos então algum valor, o valor médio, depois a data e depois o valor. Assim. Essa é a sintaxe para inserção. E suponha que você queira inserir vários registros de uma só vez. Então, basta inserir mencionando-os. Em um anúncio como esse. Então, da mesma forma, haverá uma data de entrega apertada e de valor como esta. É assim que podemos inserir vários registros ao mesmo tempo. E agora, suponha que você tenha inserido esse valor e queira que ele seja obtido imediatamente. Para isso, o que podemos fazer é usar uma variável que é theta é igual a await, assim. E no final, basta acrescentar a seleção de pontos. Aqui. Ele buscará os dados inseridos. Ou seja, obteremos a resposta no método anterior, que está diretamente com await e, sem usar o select, ele retorna null como resposta. É isso. É isso. Então nós temos isso. Nós entendemos como inserir dados. Agora é hora de implementar essa funcionalidade de criação. O pior é que vamos criar uma instância de supervisão em que essa base inicial seja igual a supervisionar o cliente de início da instância. Então, vamos criar uma função futura. Insira dados. Assim. A primeira coisa que faremos é configurar o carregamento. Em seguida, envolveremos o código em um bloco try catch. Aqui. A primeira coisa que precisamos é obter o ID do usuário. E isso podemos obter do método de arte que é o Superbus, que é o ID de ponto do usuário atual. Então, agora está dizendo que pode ser nulo. Mas como sabemos que o usuário já está autenticado, teremos esse operador porque sabemos com certeza que haverá um valor. Agora vamos escrever essa sintaxe. É da inserção de todos os pontos. Não. O valor será dy del, del controller dot txt ID de usuário. Vamos usar essa ideia? Ok, aqui. Depois que você fez isso, foi um erro meu. E então eu simplesmente navegarei e estourarei. Isso é navegar, portar o pop. E agora vamos fazer essa captura. Apenas para fins de depuração, trarei dados. Inserindo dados. Dias de agradecimento. Define que o estado em que o carregamento é igual a falso. E o couro cabeludo do messenger não mostra o conteúdo da lanchonete. Então as coisas deram errado. Percorra esta caverna. Nesse caso, disponha minha vez. Vamos descartar que eu digo ao controlador dot dispense, supervise dot dispose. Então, há sódio, não há vazamento de memória. Aqui. Basta fazer o uso de ternário, como const, Center, cooler, progress indicator. E o Calder local. Insira dados como esses. É isso. Agora vamos testar essa funcionalidade. Se eu clicar em sim. E agora, se eu simplesmente escrever Barbies e clicar em Criar, então, foi nessa navegação que o pop foi chamado. Então, vamos até o banco de dados e atualizá-lo. Veja, nós supervisionamos o aprendizado de dados, temos o ID do usuário. Portanto, a inserção de dados está funcionando perfeitamente. No próximo vídeo, aprenderemos como buscar esses dados e mostrá-los em nosso aplicativo. Obrigada. 13. Implementar funcionalidade de leitura: Como inserimos dados com sucesso, agora aprenderemos como buscar esses dados. Portanto, a base de energia nos fornece um método selecionado para buscar dados de uma tabela. Basta ir para a página inicial. Vou apenas escrever o índice para selecionar os dados. E aqui é muito simples. É uma ótima maneira de perder o nome da tabela e dizer esquerda. Portanto, esse é o método que usaremos. Isso buscará todos os registros daquele dia e fará com que você perca. Também por padrão. Portanto, baseado em potência retornará no máximo mil linhas. Obviamente, são muitos dados. Mas se você exigir mais, essa configuração também poderá ser alterada. Além disso, essa sintaxe retornará todas as colunas. Suponha que seja um nome para abordar a idade. Mas se você quiser, mas e se precisarmos apenas de uma coluna específica? Diz isso apenas o nome de todos os registros. Então, aqui vou simplesmente escrever aqui, mesmo na seleção. Portanto, ele retornará apenas a coluna do título. É isso. Esses, esses dois, você tem que se lembrar. É uma sintaxe muito básica. Agora, vamos escrever uma função para buscar dados. Será um futuro e, no final, retornará uma lista. Vamos chamá-los de dados lidos e eles serão um coletor. É muito simples. Basta escrever. O resultado final é igual a aguardar. Super-rodovias para tarefas pendentes. Não selecione esse conjunto e retorne esse resultado. Nada extravagante. Agora, como é um futuro no corpo, usaremos um futuro construtor. Em primeiro lugar, vou simplesmente cortar isso porque vamos colá-lo. O futuro será o futuro. Então, ele tem duas propriedades. O futuro será lido, dado e construído. Isso nos dá contexto, bem como um instantâneo do coletor. Ou seja, esses são os dados provenientes da base soma. Agora, aqui vamos primeiro, se o ponto instantâneo tiver um somador, primeiro escreveremos se algo estiver errado, retornaremos ao centro da criança, ponto instantâneo, ponto dois fluxos. Basta escrever isso diretamente. Aqui. Eu retornarei um indicador de progresso circular infantil constante. É por isso que está no estado de carregamento que está tentando buscar. Teremos um indicador de carregamento nessa tela. E se o snapshot tiver dados? Novamente, essa sintaxe vem de. O futuro não se regenerará. Essa não é uma sintaxe distante. Se o snapshot tiver dados, suponha que o supervisor tenha retornado algo, ok? E não há dados inseridos. Nesse caso. Eu simplesmente mostro um rígido onde é devolvido e onde está escrito. Sem dados, todos os rótulos são como esses. E se o comprimento for maior que zero , retorne uma lista. Veja o ponto n aqui. contagem de itens será instantânea, dados de pontos e comprimento de pontos. Isso é o número de pessoas que estão chegando. Basta criar esse número de widgets. E o item aprenderá. Ele fornece contextos e índices. É um índice. E agora aqui vou retornar essa lista de visualizações, ok? Vou devolver o item. Dentro desse construtor de itens. A primeira coisa é que terei uma variável chamada var data, dados instantâneos e esse índice. Então você lembra que está no mapa. Esse é um tipo de dados de mapa. Agora eu não preciso desses dados fictícios. contagem de itens ficará ficará bem. Acho que cometi esse erro aqui. Eu tenho que fazer com que a visualização da lista apenas remova isso. apenas Vamos ver quais dados existem. Agora eu acho que está tudo bem. O nome da coluna é título. E o que estamos enviando é o, isso é um índice. Será apenas o ID, não o ID do usuário. Lembre-se, porque id é o ID da linha que queremos adicionar e é exclusivo. O ID do usuário será o mesmo para todos os seus dados. Está bem? Vamos ver se existe, se há algum erro ou se tudo está funcionando perfeitamente. Aprenda a supervisionar, está vindo do banco de dados. E também havia um indicador de carregamento. Então, finalmente, somos capazes de criar tão bem quanto os dados. No próximo vídeo, aprenderemos mais algumas coisas quando se trata de buscar dados. 14. Filtros e modificadores: Oi. Neste vídeo, aprenderemos como filtrar nossos dados. Então, nosso aplicativo busca todos os dados. Mas na maioria das situações do mundo real, gostaríamos apenas que o usuário lesse seus próprios dados. Permite retornar apenas linhas que atendam a determinadas condições. os filtros também podem ser usados com qualquer outro método, como selecionar, atualizar ou excluir. Essas coisas que faremos mais tarde. Agora, vamos ler ou entender alguns filtros nele. A primeira aqui que entenderemos é igual a esta, busca todas as linhas cujo valor na coluna indicada corresponde exatamente ao valor especificado. Simplesmente. Então, assim, isso está muito longe de. Suponha que tenhamos essa tabela chamada usuários. Então, aqui vamos selecionar, isso atrairá todos os usuários. Mas se lermos o.eq, é igual. E isso é, uma coluna de nome deve ser igual a esse valor. Portanto, ele buscará no lead esse usuário específico. E esse nome é o nome da coluna do corredor da morte. E esse é o valor que deve ser igual. Então isso é igual ao filtro ND. Lembre-se de que isso é igual a, bem, usamos muito tempo. Da mesma forma, também não temos igual ao filtro. Ele busca linhas cujo valor na coluna declarada não corresponde, correspondem a esse valor especificado. Então, aqui podemos perguntar, suponha que essa seja uma sintaxe dos usuários dot e E, q nada igual, digamos aqui, nome, não igual a. Realmente ajuda. Então, além dessa linha em particular, ela buscará tudo. Às vezes, você pode precisar, isso depende da sua aplicação. Então temos ótimos lá. Em seguida, o filtro buscará todas as linhas cujo valor nessa coluna declarada seja maior que o valor especificado. Então, suponha que você queira todos os usuários com idade superior a 18 anos. Portanto, a sintaxe é assim. De usuários. Selecione o item acima. Acho que esqueci de selecionar a declaração aqui. Selecione. E essa. Não selecionamos GT maior que o nome da coluna, envelheceremos? O valor é 18, então o valor dessas linhas não estaria em 18. E outros campos maiores que são iguais. Para todas as linhas cujo valor na coluna de data de permanência seja maior ou igual aos valores especificados. Então, por exemplo, dos usuários selecione.gt. Suponha que exista uma coluna de seguidores e simplesmente traga ou receba usuários cujos seguidores sejam maiores que 10.000, ímpares e maiores ou iguais a 10.000 mortes. Da mesma forma, temos menos que, ou seja, LTE menor ou igual a? Vou simplesmente deslizar aqui. Menos do que isso d não é menor que igual. Da mesma forma que o LTE. Você pode simplesmente entender isso com o mesmo exemplo. Então, mais alguns. Ou seja, a coluna corresponde a um padrão. Então, aqui busque todas as linhas cuja coluna subestimada de valor corresponda ao fornecido por turno. E lembre-se de que é sensível a maiúsculas e minúsculas. Então, neste caso, Dave, vamos escrevê-lo como uma super maneira de os usuários selecionarem. Como aqui. Vamos escrever a coluna do nome e qual é esse padrão? Opor. Deveria ter um lago, a borda e o submarino. Eu tinha esse nome. A rocha, ela receberá esse nome. Espero que você tenha entendido com este exemplo. Da mesma forma, temos uma coluna que corresponde a maiúsculas e minúsculas. Se padrão. Aqui será bom se separar. Os usuários selecionam. Eu, como aqui, é insensível. Se você escreveu em letras minúsculas , também trará a mesma coisa. se você acabou de dizer THE na parte inferior, não é maiúscula, então também trará essa linha. Assim. Há mais, mas vou te contar a última. Essa coluna está no ADA, está na matriz. Portanto, ele busca todas as linhas cujo valor nessa coluna é encontrado na lista de valores especificada. É como se o super pudesse começar com os usuários, selecionar e depois NÃO ENTRAR. E sublinhado. Então, o status é encontrado lá embaixo. Então, se esse valor é offline, online ou offline, mesma coisa online ou offline. Se algum desses valores estiver presente, traga-o. Da mesma forma, existem mais alguns sub, como a coluna contém, cada elemento contido no filtro de valor corresponde a pelo menos uma condição. Você tem. Essas coisas. Você pode ler. Você pode ler sobre outras pessoas na documentação oficial. Neste momento, nosso foco será mais em dois iguais. E então temos modificadores. Há trabalho no nível da linha. Eles nos permitem retornar linhas que correspondam determinadas condições sem alterar a forma das linhas. Modificadores são tudo o que não se encaixa nessa definição, nos permite alterar o formato dessa resposta. Ou seja, limites ascendentes e descendentes e todo esse tipo de coisa. Lembre-se de que os modificadores devem ser especificados após o filtro. Ou seja, se houver algum filtro após esses modificadores de pontos. E vamos entender o modificador. Aqui. Isso simplesmente muda a ordem da resposta. É super fácil, não de usuários. Selecione. Aqui, adicionaremos a coluna de ID do pedido com pontos como envio. O envio não deve ser falso. Então, por padrão, ascendência é verdadeira. Podemos tornar isso falso. E então ele virá na ordem decrescente. E então limitamos esse modificador de consulta. Isso limita a quantidade de dados provenientes. Usuários. Selecione o limite. Então, traga novos dados, ou suponha que você queira encerrá-los como uma análise como essa. Está bem assim. Você pode entender que são mais alguns. Recupere a consulta como uma linha e todas, mas essas não são necessariamente, essas duas são necessárias por enquanto. Então é hora de aplicar o que aprendemos agora, cerca de três dúzias de modificadores. Anteriormente, em nosso aplicativo, buscávamos toda a dublagem, mas agora, usando um filtro, buscaremos somente os dados enviados por um determinado usuário que estejam autenticados. Além disso, alteraremos o pedido e mostraremos os últimos dados na parte superior. Então, primeiro vamos escrever master. E mais um. Vamos tentar entender onde você pode estar pensando por que ela não está sendo exibida porque agora precisamos atualizá-la porque não é em tempo real. Veja, agora, depois de reiniciar, ele está nos mostrando os três dados. Agora, aqui estamos no futuro. Aqui na função futura, logo após os pontos, selecione o ponto direito igual. O nome da coluna é ID do usuário. E a ID do usuário deve ser igual a superrodovias . O ID do usuário atual, assim, e o pedido devem ser ID. Ascendente é igual a falso. Agora, se eu salvá-lo, ele mudou. Agora. Temos todos os dados mais recentes no topo. Espero que você tenha aprendido muito hoje. No próximo vídeo, trabalharemos na funcionalidade em tempo real na fila. 15. Implementar banco de dados em tempo real: Oi. Agora podemos adicionar dados, mas o usuário precisa reiniciar a tela para refletir as alterações. Não é uma boa experiência. Então, aprenderemos como usar streams em vez de futuros para mostrar atualizações em tempo real. Então, o que é sintaxe primeiro, vamos mostrar uma sintaxe que é banco de dados em tempo real. Ou você pode usar diretamente o que eles supervisionam. A partir daí, nomearemos seu usuário, suponha que então transmita, transmita. E lembre-se de que o stream usa uma lista de colunas de chave primária como argumento. Portanto, é necessário o E primário e simplesmente escrever ID. Ok, aqui. Então escute. E dentro dessa escuta, ela nos dará uma lista de dados e você poderá fazer o que quiser com esses dados. Faça alguma coisa, ok, aqui, dentro, dentro de você, você pode fazer alguma coisa. Mas e se você quiser ouvir usando o construtor de streams? Então, usando o construtor de streams, você pode atribuí-lo diretamente aqui, assim. Suponha que um riacho esteja lá. Vamos cortar. O argumento está aí. E aqui você pode simplesmente escrever rodovias transmitidas pelos usuários. É isso aqui, como sempre, chave primária. Neste caso, capital. Só que eu não quero mexer. Essa é a sintaxe. Usaremos essa sintaxe porque estamos usando StringBuilder. Se você também quiser ouvir diretamente a suposição no estado de inicialização, você pode implementar a linha acima descrita acima. A primeira coisa que você precisa fazer é, sem dúvida, que podemos escrever diretamente aqui. Mas vou fazer com que fique totalmente rígido. E aqui vou escrever um fluxo variável e um lead porque atribuirei seu valor em cada estado. E tem essa lista de valores dinâmicos. E vamos apenas escrever um fluxo de leitura como este. E então, no estado inicial, farei com que o fluxo de leitura seja igual a supervisionar o fórum de pontos. Para perder o fluxo. Veja a chave primária lá perguntando, vou escrever o ID. Então, a coluna com ponto igual é a ID do usuário. E o valor será supervisionado ou não será o ID de usuário atual. E da mesma forma, temos a coluna do filtro modificador. Vamos identificar o número ascendente falso? É isso. Nós temos essa corda. E agora vamos mudar isso para três milímetros. Este será um stream e este será um stream de leitura. Assim. É isso. Apenas reinicie. Agora, vamos verificar se está funcionando ou não. Agora, se phi seno n, massa direita, o que resta? Ok, eu tive esse problema com as chaves físicas. Isso não é um erro, é apenas uma palavra-chave. Nada mais. Vamos fazer assim e clicar em Criar. Então, veja, oito foi atualizado automaticamente, pois estávamos usando streams anteriormente, tivemos que atualizar ou reiniciar o aplicativo. Obviamente, isso é mais fácil de usar. E a maioria dos aplicativos exigirá aplicativos de streaming de mensagens ou algo parecido, notificações e tudo mais. Bem, espero que você tenha gostado aprender sobre o banco de dados em tempo real. No próximo vídeo, trabalharemos na atualização e exclusão de nossos dados. Obrigado. 16. Funcionalidade de atualização e exclusão: Agora é hora de aprendermos como atualizar dados existentes. O supervisor nos fornece, atualiza minha vez e deve sempre ser combinado com filtros. Vamos para a página de edição. Aqui. Vamos aprender sobre a funcionalidade de atualização. Portanto, a sintaxe é que você pode começar imediatamente a partir do nome do primeiro dia. Suponha que os usuários datem com pontos. Agora, aqui, envie esses dados. Você deseja atualizar isso na forma de um mapa. Valor chave, isso é nome. Eu quero que ele mude para Elon Musk. E a próxima coisa que você precisa fazer é escrever essa correspondência, porque aqui adicionaremos a condição de quais dados atualizar. Portanto, id deve ser igual a dez. Portanto, atualize os dados. De quem é essa identidade? Estranho? Você tem outra sintaxe. Para atualizar. Você pode usar a atualização de qualquer um desses dois usuários. Então esse é o mesmo nome, atualizado para Elan Musk. Mas em vez de combinar , usaremos igual. É isso. E aqui será como um ID, mais calmo do que não na forma de um mapa. Lembre-se de que essa é uma diferença entre as duas sintaxe. Então, o que você quiser, use esse D porque você pode ficar confuso mais tarde se vir algum código de aplicativo e pensará: OK, aprendemos apenas essa palavra-chave, como ela está sendo usada. É por isso que. Agora, basta implementar isso em nosso aplicativo. Aqui. Em primeiro lugar, tenha uma função de cliente supervisora . Em todo o futuro, isso não funciona. Não está retornando nada. A sincronização de dados. Aqui, escreverei se o texto do ponto do controlador de título for igual a nulo e, se não for igual a nulo, execute apenas esse estado definido. Seu carregamento é igual a verdadeiro. Apanhar. Nesse caso, seque imediatamente. Provavelmente não é de ardil. Não atualize. O valor é del atualize o valor do título. Delete o texto do ponto do controlador e combine. O que temos que igualar. Id. Id é um ID de ponto rígido como este. E depois de pronto, simplesmente o Navigator, não o pop. Vamos simplesmente não estourar nada. Como estamos usando streams , ele definitivamente será atualizado em tempo real. Aqui. Se algo está errado, é a é igual a falso. E um andaime mensageiro de contextos, pontos, mostre uma lanchonete, escreverá que algo deu errado. E vamos verificar se é isso que é o cabeçalho. Ok, salve isso. E também vou usar a função de descarte. Eles descartam o controlador. Essa é uma boa prática : soja ou menos, não é necessária para este projeto fictício. Mas sempre gostaríamos de fazer a melhor coisa. Agora, nesta atualização, simplesmente no local, atribua o mecanismo, ou seja, e salve-o. Vamos testar o aplicativo. Se eu for para o terceiro, isso é Master Flatter. E eles reúnem vibração e tudo mais e clicam em Atualizar. Veja, nada aconteceu. Vamos ver se há algum erro. A lâmpada é atualização ponto a ponto. Acho que deveria ter sido atualizado. Eid Early Title Controller dot decks match. Vamos ver nossos dados. Ok. Temos o mestre Florida e o dardo aqui. Mas por que não foi atualizado em tempo real? Se eu atualizá-lo, ele estará lá, mas não deveria ser o caso. A função de atualização está funcionando. Vamos tentar de novo. Atualizar. Diga tudo bem, agora está funcionando. Não cometi uma falha muito pequena por engano, modifiquei a programação principal de flerte e atualizei. Está funcionando perfeitamente. entendemos a função de atualização. Agora, a única coisa a aprender é como excluir dados do Superbus. Superbus também nos fornece o final do meu terceiro. É muito simples, como o método de atualização, e deve ser combinado com filtros. E podemos usar igual ou igual. Então, o que estou dizendo é que suponha que tenhamos essa funcionalidade atrasada. A sintaxe é simples. Super maneiras de os usuários não demoram. E então verifique se você tem essa combinação ou igual. Embora eu tenha essa combinação aqui, id é igual a dez, assim. Vamos implementar uma funcionalidade de exclusão. Vou simplesmente copiar isso, atualizar e colar. Vou escrever deletar. Eu não preciso dessa declaração de identidade. Vamos afirmar que o carregamento deve ser verdadeiro. Aqui. Aguarde, não deveria ser. Excluir. É um Superbus de peso de todos os pontos atrasados. E diretamente temos esse ID da partida. E teremos, depois disso estouraremos. Ou se você tiver algum erro de fungo, talvez eles o mostrem na lanchonete e simplesmente o atribuam no botão elevado. Dados diários como esses e, em seguida, salve-os. Vamos testar isso também. Vou remover a primeira, a pilha Mastermind. Agora está sendo removido. Se acessarmos nossos dados de banco de dados, para obter dados, se eu atualizar, haverá três. Portanto, entendemos com sucesso como criar, ler, atualizar e excluir dados. Espero que você tenha gostado de aprender até agora. No próximo vídeo, aprenderemos algo novo. Eles prestam um treino. 17. Habilitando a segurança do nível da fileira: Oi, bem-vindo de volta. Hoje, aprenderemos sobre um novo conceito que é uma segurança em nível de linha, também conhecida como RLS. Rls é um recurso de segurança que nos permite controlar o acesso às linhas em uma tabela de banco de dados com base na identidade ou função do usuário. No Superbus, podemos usar o RLS para restringir quais linhas de dados que um usuário pode ver são modificadas com base em regras predefinidas. Até agora, qualquer pessoa com a chave pública da API tinha acesso ao nosso banco de dados. Lembre-se também de que o comportamento padrão após ativar a tabela bidirecional RLS é que, ao jantar, ela nega todo o acesso independentemente de o usuário estar autenticado ou não. Até mencionarmos nossas políticas. Cada política é anexada a uma tabela e sua política é executada. Toda vez que uma tabela é acessada, você pode simplesmente pensar que ela adiciona uma cláusula where a cada consulta. A tabela pode ter diferentes políticas de IRLS. Talvez você queira que alguma mesa seja produzida, outras talvez não. Portanto, cabe a você decidir qual tabela você deseja dar acesso. Então isso é o suficiente para o Curie. Vamos habilitá-lo. Vá para o painel do Superbus, vá para nossa ação. Então você pode ver aqui as políticas. Então, aqui está mencionado que o RLS está desativado. Então, basta clicar em Habilitar RLS. Ah, tudo bem. Então, agora, se reiniciarmos nosso aplicativo, descobriremos que não há dados sendo exibidos. Vamos ver, não vejo dados disponíveis. Temos que escrever políticas. E as políticas basicamente nos permitem especificar quem tem acesso a quais dados e quais ações podem ser executadas nos dados. Temos que escrever políticas para todas as operações de petróleo bruto. Isso é criar, ler, atualizar, excluir. E é muito simples. Clique na nova política nesta tabela de tarefas. Depois disso, você terá duas opções. enquanto, escolheremos a opção de começar rapidamente. Para uma opção mais avançada, você também pode vê-la mais tarde. Basta clicar aqui. Então. Isso nos dá políticas. Mas, antes de tudo, gostaria de dizer quais políticas eu quero ter para esse aplicativo. Ou seja, para nosso aplicativo para todos. Além disso, os usuários devem acessar ou ler apenas seus próprios dados. Isso significa que a coluna de ID do usuário na superbase deve ser igual à ideia da pessoa que está enviando a solicitação. Essa é a primeira coisa. Em segundo lugar, todos os usuários devem poder criar dados se estiverem autenticados. Então, quando se trata de inserir, inserir , todos estão autorizados. Só nesse dia, eles devem ser autenticados. E agora, para atualizar ou excluir, os usuários devem poder atualizar ou excluir seus próprios dados sobre leads, ou seja, sem mais nem menos. Leia a política. A coluna ID do usuário deve ser igual à ideia da pessoa que está enviando a solicitação. É isso. Agora, novamente, volta a este modelo. Isso nos dá quatro opções. O primeiro é que ele lerá o acesso para todos e, em seguida, habilitará o acesso de inserção para usuários autenticados em. Hoje, permitem um pouco de acesso para os usuários com base em seus e-mails e seus 40 anos. E ele soldou o acesso de exclusão para usuários com base em seu ID de usuário. Usaremos isso, ou seja, o acesso com base no usuário que fiz. Este modelo vamos usá-lo e modificá-lo para nossa conveniência, basta usar este modelo. Agora. Ela nos pede coisas. O primeiro é o nome da política. Vou simplesmente escrever habilitar ler acesso para usuários com base na ID do usuário. Então. Operação permitida, vou selecionar esta. E lembre-se se você pode fazer, mas não pode fazer duas coisas. Isso está aqui, apenas um de cada vez. Em seguida, o target cresce, basta deixá-lo como padrão para todos, pois obviamente o usuário precisa ser autenticado. Agora, usando expressão. Cada um deveria, devemos ter um ID de ponto igual ao ID do usuário, ok? Portanto, esse ID de usuário é o nome da coluna, e r dot ID significa a pessoa que está enviando a solicitação. Agora, se eu tentar clicar em Salvar , está mostrando uma falha do somador na criação da função. ID ímpar não existe. Não deveria ser assim. E também houve outro erro. Mas espere, eu vou fazer isso de novo. Veja aqui se a mesma coisa se eu escrever, ler o acesso. E se eu apenas selecionasse isso. Agora, se eu escrever, revisar, política segura e agora vejo a criação de um operador não existe. Vocês, UUIDs, vão para Tech, pois, como mencionamos o ID do usuário, esse valor como texto é supervisionado, lembre-se que seu valor é texto. Portanto, você pode alterar esse tipo de coluna com dois números inteiros ou fazer essa alteração apenas para ter certeza de que funcionará assim. Agora, se eu clicar em Revisar e salvar política, a política foi salva com sucesso. Portanto, habilite o acesso de leitura para usuários com base na ID do usuário. Vamos ver se nosso aplicativo está funcionando ou não. Agora, podemos acessar nossos próprios dados. Nós fizemos isso com sucesso. Eles tendem a ler a política de acesso para nossa tabela de banco de dados. No próximo vídeo, simplesmente escreveremos a política de inserção, atualização e exclusão. E Q. 18. Escrever políticas de CRUD: Oi. Agora temos que mencionar essa política de inserção. E para isso, clicaremos novamente em nova política. Em seguida, comece rapidamente. E aqui escolheremos o modelo , ou seja, inseriremos o acesso para usuários autenticados usarem apenas essa tabela. Aqui. Não precisamos fazer mais nada. Em seguida, clique em Revisão e política segura. Dito isso, nós lemos, temos um encarte. Agora ou atualize. Usaremos novamente o acesso com base no ID do usuário, ou seja, esse modelo e data para os usuários. E aqui vou clicar em atualizar. Isso nos dá outro campo que é, que será o mesmo. E, novamente, como eu disse, como é uma string, tenho que convertê-la em UUID, copiá-la e colá-la aqui. É isso. Simplesmente, significa qualquer atualização dos usuários com base em seu ID de usuário. Revisão, política segura. Ok. Então, agora, para a última, reconheça uma nova política, semanal ou adiada. Agora é como habilitar o acesso dos usuários com base em seus IDs. Use esse modelo. Está tudo bem. Simplesmente este. Lembre-se de que esse UUID você não precisa escrever se tiver mencionado a coluna, ou seja, os nomes das linhas ou a coluna como um número inteiro e não uma string no banco de dados. É isso. Delayed K. Clique em Revisão e política segura. Então, temos todas as políticas quando Chen, certo? Então, agora nosso aplicativo funcionará perfeitamente bem. A segurança em nível de linha é algo muito básico, mas muito, muito importante. Espero que você tenha entendido que quando estamos criando aplicativos do mundo real, esses são todos os recursos, são todos necessários. A segurança é a que precisaremos em nosso aplicativo. Então é isso. Para esse conceito. No próximo vídeo, começaremos a trabalhar em. Portanto, armazenamento baseado em energia, enfileiramento. 19. Configuração de armazenamento: Oi, bem vindo de volta. Então, aprendemos sobre bancos de dados de autenticação e segurança em nível de linha. Agora, finalmente, é hora de entendermos como usar o armazenamento na supervisão. No mundo de hoje, o conteúdo é rei. Em seguida, você vê aplicativos de mídia social ou comércio eletrônico em todos os lugares onde encontrará essas imagens e vídeos. Então está na hora. Também aprendemos como fazer upload de arquivos para nosso armazenamento. A primeira coisa que precisamos fazer é criar um novo bucket. Aqui você pode ver que o bucket é um contêiner no qual os arquivos são armazenados. Cada bucket é associado a um URL exclusivo, que pode ser usado para acessar os arquivos dentro deles. Cada bucket pode ter seu próprio conjunto de permissões, permitindo que você controle quem pode ler e gravar nele. Assim como o RLS. Quando você carrega um arquivo em um bucket, ele recebe automaticamente uma URL exclusiva que pode ser usada para acessar o arquivo a qualquer momento. Então, basta clicar em Criar nome do bucket. Eu simplesmente escreverei imagens de usuários. Torne-o público para que possamos acessá-lo mais tarde. E também mencionaremos títulos, então não haverá muitos problemas. Então, agora temos essas imagens de usuário. O que também precisamos escrever políticas, assim como aprendemos no sexo do banco de dados e também sobre políticas ou compartimentos, podemos configurar permissões que controlam quem pode ler e escrever nelas. Por exemplo, você pode configurar um bucket que só ser acessado por usuários autenticados ou aberto ao público. Além disso, você pode configurar políticas de violação que excluem arquivos automaticamente após um determinado período de tempo. Agora, clique em nova política. Você fará isso, basta clicar em nova política. Em seguida, usaremos o Get Started rapidamente. E isso nos dá cinco opções. Permita o acesso a imagens JPEG em uma pasta pública. Ofereça acesso apenas ao nome da pasta de nível superior. Como UID. Dê aos usuários acesso a uma pasta no lead para usuários autenticados. Dê acesso a uma pasta aninhada chamada admin somente para um usuário específico. Dê acesso ao f phi a um usuário. Usaremos dar aos usuários acesso apenas aos seus. Esse é o nome da pasta de nível superior, esse UUID, é UID. Use este modelo aqui. Em primeiro lugar, selecione tudo. Aqui. Desculpe. Estou cometendo um erro muito tolo de novo e de novo. Mas a próxima coisa, então, o usuário em salários, impostos, os fez de acordo com uma política realmente segura. Então, o que isso significa é que haverá uma pasta criada dentro desse bucket. Ou seja, cada usuário terá sua própria pasta. Você entenderá quando começarmos a enviar imagens. Agora, também precisamos instalar um pacote. Acesse pub.gov e escreva o seletor de arquivos. Eu escolho esse. Basta ir e copiar uma dependência. Vá para o arquivo YAML Pub spec dot. Abaixo do ponto de fluido ENV. Basta colar e salvar. Está demorando um pouco. Mas vamos continuar. Está feito. Se necessário, você pode reiniciar nossa parada e executar seu aplicativo, mas acho que não é necessário. E também para Android, não há configuração. Mas se você estiver usando um dispositivo iOS, basta ver a documentação aqui sobre como configurá-lo. Mas para o nosso dispositivo, essa coisa é adquirida. Então é isso. No próximo vídeo, começaremos a trabalhar na funcionalidade de upload. 20. Implementar a funcionalidade do upload: Olá, vamos começar na tela de upload. Crie um novo arquivo dentro das páginas e dê um nome a ele. Carregar. Página ponto, ponto. Comece a trabalhar no UA. Importe insumos de material, superrodovias, Flórida. A bordo. Agora, crie essa visão completa do estado. Poderíamos simplesmente chamá-lo de upload, idade. E agora bezerro como armas, Superbus, armazenamento. Então corpo. Por enquanto, basta deixá-lo com o contêiner. Em seguida, botão de ação flutuante. Botão de ação flutuante. Este botão será usado para adicionar o ícone da foto. Posso começar com um pedágio na imprensa, deixe por enquanto. E então esse topo cria um estado para carregamento. O descarregamento é igual a falso. Agora, vá para a página inicial dot.in na barra AB. Crie um novo botão para fazer upload de imagens. Aqui. Eu vou ter um novo botão , pois posso colocar o botão no lugar. E eu posso ser que eu posso fazer upload de arquivos. E deve desaparecer como sempre. E no local, basta navegar, navegar em seu Bush. Retire o material. E página de upload. É isso. Vamos salvá-lo. E confira nosso aplicativo. Ainda está economizando. Ok, nós temos esse ícone. Se eu clicar nela, veja, esta é a página de armazenamento. Agora é hora de trabalharmos na funcionalidade de upload de imagens. Supervise nos fornece a função de upload que aceita dois argumentos, era esse nome de arquivo. E também podemos aninhar e mencionar a estrutura dobrada onde queremos armazená-la no Superbus nesse argumento. segundo argumento é o arquivo que queremos carregar. Vamos, vamos para a página de upload. Sim, a primeira coisa a bordo, não IO. Em seguida, crie uma instância Superbus , instância cliente, assim. Em seguida, crie uma função. Futuro. Sincronização de arquivos de upload. Agora, a postagem que faremos é usar a biblioteca do seletor de arquivos. Arquivo é igual a aguardar. Por uma grande plataforma. Os arquivos não selecionados permitem várias quedas e serão uma imagem pontilhada. Por enquanto, usaremos a guia Arquivo como imagem, obviamente da mesma forma que você pode fazer upload de qualquer arquivo. Agora, escreveremos uma declaração if para verificar se o usuário escolheu algum arquivo ou não. Se o arquivo não for nulo, somente o estado do upload será verdadeiro. Então vamos tentar pegar o bloco. Naquele ônibus. É mais pesado. O arquivo de arquivo é igual a, temos que convertê-lo em um objeto de arquivo, arquivos de pontos, primeiro caminho de ponto. E não seria nulo, pois temos a verificação if. Então você pode estar perguntando primeiro ao branco porque ele nos fornece a lista de arquivos e sabemos que não permitimos vários, então basta escolher o primeiro arquivo, pronto. Então, o nome da string é igual a um arquivo grande, arquivos de pontos. Primeiro nome do Dot. Em seguida, upload da string. URN carregado é igual a await. Agora essa é a sintaxe super ways storage. Não é do nome do nosso bucket que estão as imagens do usuário. Então aqui, quem é a função de upload? E está perguntando sobre o morcego de profundidade. Portanto, lembre-se de que precisamos criar uma pasta com o nome desse ID de usuário. Só espero que você se lembre que estamos nas políticas que escrevemos dessa forma. O supervisor não é arte, não é um ID de usuário atual. Em seguida, coloque uma barra e depois o nome do arquivo. Assim. E esse é um arquivo já retirado. Agora, se você quiser, basta imprimir o URL enviado. E então eu estou apenas definindo o estado em que o carregamento é igual a falso, não está carregando, está carregando. Enviando Isabelle para false. E organize a lanchonete mensageira dos contextos em que eu carrego o arquivo carregado com sucesso. Sexos totalmente. Cor de fundo, a cor é verde escuro. E apenas faça disso a constante. E nessa pegadinha, basta dizer imprimir. Por enquanto, está debugando. E vamos imprimir um anúncio. O estado definido é o upload de arquivos. Ele está enviando músicas para falsas. E, da mesma forma, no andaime, algo deu errado. É isso. Agora, K Sim. Esse também é um aplicativo de desktop. Ok. Eu não o atribuí. Vamos fazer o upload. nome da nossa função é arquivo de upload. Digite-o aqui. Agora, se eu clicar no botão, estou pensando o que é adicionado aqui? Agora meus dados estão lá, mas também no botão flutuante. F para fazer se o upload for verdadeiro. E contraria esse objetivo. Indicador de progresso. Salve tudo, tente novamente para ver qual é a exceção do somador devido à falta de plug-in de hóquei Vamos interromper nosso aplicativo e reiniciá-lo. Então, eu já iniciei minha inscrição. Vamos testá-lo novamente. Clique no botão. Agora, sua base de suprimentos está perguntando, podemos permitir apenas uma vez. Em seguida, use esta imagem e salve o arquivo carregado com sucesso. Agora vamos ao nosso painel de supervisores. Aqui. Se eu apenas recarregá-lo, você verá que temos essa imagem de usuário. E temos essa imagem aqui. E esse é o nome do ID do usuário. Ou seja, essa é uma pasta do ID do usuário. Então, espero que você tenha entendido como podemos fazer upload de imagens. Basta pausar o vídeo e entender nossa tentativa de entender o código. Isso é simplesmente uma coisa básica. A primeira, desde esse upload do arquivo EXE, dívida do tipo de dados, por que o convertemos em arquivo. Então temos o nome do arquivo e pronto. No próximo vídeo, corrigiremos as imagens enviadas e o Q. 21. Imagens enviadas pela Fetch: Oi. Agora é hora de buscarmos as imagens enviadas no Firebase. Podemos usar o método de lista da função storage dot bucket para selecionar dele todos os arquivos dentro dessa pasta. O método de lista de compartimentos retorna uma lista de arquivos no bucket, que você pode então repetir para acessar os arquivos individuais. Então, só para emular a sintaxe, sintaxe para buscar imagens. É simples assim. Objeto de arquivo da lista final. Resultados. Suponha aqui um peso. Então, o armazenamento de pontos do Bobby. A partir daí, a partir de imagens, ou seja, esse é o nome do bucket, lista de pontos. Ok? Você pode simplesmente deslizar o nome do bucket aqui. Nome do bucket. Portanto, lembre-se de que podemos mencionar o nome da pasta nessa lista passando um argumento chamado Math. Então, como em nosso exemplo, também estamos criando pastas por ID de usuário. Então, vamos usar isso. Vamos escurecer e escrever a função def. Crie uma nova função. Meu nome, veja minhas descobertas. Lista final. Objeto de arquivo. O resultado é igual ao esperado Superbus. Excelente, nada. Naught H. Nada da imagem do usuário é uma lista negra. Ok? Então esse é o ar, mas obviamente você tem que mencionar o nome da pasta. Será o ID de usuário atual super res dot dot . Esse nome de pasta. Caverna. Agora, lembre-se de que esse resultado não retorna o URL da imagem. Então, aqui, o que quero dizer com isso é esperar. Liste, embora eu apenas escreva o item da barra no resultado, imprima o item. Ok, vamos tentar fazer isso. Vamos ver, mova tudo do console. Se eu clicar, obviamente não chamei a função. Acho que não. Temos um estado inicial aqui. Ok, vamos colocar um propósito fictício. Vamos fazer o estado de inicialização. Pegue meus arquivos. Agora, se eu for para a página, teremos a instância do item de objeto de arquivo C. Isso é o que ele nos dá. ID do bucket, compartimentos selecionados, metadados, nome como este. Mas não nos fornece o URL da imagem, então você receberá o nome, poderá obter o nome, desculpe, id e nome, bem como metadados. Então, se eu reiniciasse. Então você verá o tamanho da ETag, o controle do cache. Tudo é o anúncio e não o URL da imagem. Agora, para isso, a supervisão nos dá outra função que é obter a URL pública. Eu vou te mostrar como. Primeiro, criarei uma variável vazia, que será uma lista de strings. Minhas imagens são assim. Então, isso pode mudar. Em resultado. Até agora, você obterá um URL igual a. Agora aqui. A partir daqui, nosso supervisor não é do usuário, não é do usuário. Imagens. Não pegue. Vamos ver o que está acontecendo. Ok, eu esqueci aquele armazenamento. Que erro tolo. As imagens do usuário Dot recebem um URL público. Veja. Agora, ele está nos pedindo a parte dessa barra de imagem que precisamos. Em primeiro lugar, a pasta que é tão difundida, ponto, ponto, ponto, ponto, ID de usuário atual. E também se você quiser, você pode usar algum gerenciamento de estado, como provedor, e obter essa ideia e tudo armazenado lá. No momento, estou apenas tornando isso uma maneira muito simples. E lembre-se de que recebemos o nome da imagem. Então, é como o nome do ponto da imagem, assim. A partir disso, obteremos o URL que pode ser usado para mostrar inovação. Ok? E vamos ver se é o futuro ou não. Não, não é o futuro. Então, eu posso simplesmente remover esse peso. E aqui vou adicionar essas informações acima na EMTALA. Em primeiro lugar, também armazenarei o nome para que ele possa ser usado posteriormente para excluir e excluir o propósito. E o URL vai fazer e obter o URL assim. E, finalmente, vou devolver minhas imagens. E também se você quiser, vamos primeiro imprimir se está funcionando ou não. Minhas imagens são variáveis. E vamos ver, eu estou indo para aquela página novamente. E veja, o nome da imagem é esse, o URL é isso. Isso significa que estamos obtendo as informações. Esse é o URL público. Agora é hora de mostrarmos que as imagens na interface de usuário que está aqui no corpo anteriormente eram apenas um contêiner. Isso será alterado. Agora vamos escrever o Future Builder. Sua cadeira. Temos esse futuro e pegamos meus arquivos. Contexto, uma captura instantânea. Instantâneo. Agora, se o snapshot dot tiver dados, faça outra coisa. O retorno é um indicador de progresso circular. Indicador. Se o snapshot tiver dados, primeiro, vamos verificar se. Instantâneo. Dados. O comprimento do ponto é se for igual a zero, ou seja, nenhuma imagem é carregada. Em seguida, retorne títulos, texto central, sem rotulagem de imagem. E se não for esse o caso, retorne. Vamos fazer isso. Widget. E lembre-se, você também pode usar o construtor, mas estou usando outro widget conhecido como separado, forma que, entre todos os elementos, eu tenha uma separação de, seja, eu o divido como um separador. Este é um dos widgets da desordem. Acho que está aí, mas primeiro escreverei. separador aprenderá. Também tem textos e índices. Vamos apenas retornar um divisor constante como este. Espessura à cor. A cor é preto escuro. Assim. Então, o item que aprenderemos. Novamente, a mesma coisa no próximo índice. N. Vou obter o índice de dados instantâneos dos dados da imagem do mapa de dados. Estou apenas armazenando o valor do mapa aqui dessa lista, um por um. E retorne uma linha, o que significa que os elementos em excesso permanecem acessíveis. E o centro de Mendota e as crianças comerão pudins. O primeiro é o tamanho da caixa. Aqui. Será comum. A caixa, isto é, esta será a imagem. Só estou dando a altura. Ele não se expande para todos ou menos palitos nem tem problemas posteriores. Rede de pontos de imagem. Agora, aqui estão os dados da imagem principal, URL, caixa, capa de pontos. E depois desse tamanho de caixa, dentro dessa linha, terei um botão de ícone. Eu posso ser que eu posso deletar confortavelmente as cores, vermelho, 0, tecla. E vou remover esse estado de inicialização por enquanto. Espero que tudo funcione. Jed é, vamos dar uma olhada em nosso aplicativo. Estou clicando nesse botão e vejo que temos a imagem aparecendo em nosso aplicativo. Vou apenas dar um preenchimento a essa visualização de lista. É isso. Ao adicionar será const, a borda insere o ponto simétrico. O que eles podem. Então, assim. Veja, esta é a nossa imagem. Espero que esteja tudo bem. Vamos fazer o upload de outra imagem. Vamos ver. Eu vou usar esse vírus. Veja, nós também temos essa divisória e temos duas imagens aqui, o que parece incrível. Também fizemos a parte de buscar imagens. No próximo vídeo, trabalharemos nesse botão de exclusão. E então fizemos tudo o que era necessário para aprender no Superbus. Obrigada. 22. Excluir funcionalidade de imagem: Oi, bem vindo de volta. Então, agora vamos trabalhar na funcionalidade de exclusão do armazenamento. Em superrodovias. Temos o DUS, remova minha tecnologia para excluir um arquivo do bucket. Portanto, basta escrever a sintaxe para seguir seu objeto básico da lista final. Então, ele também nos retorna esse arquivo excluído. Super ways, dots, Storage, bucket, name, dot remova isso, remova x e adicione um parâmetro com os nomes dos arquivos dentro desta imagem, um ponto PNG, assim. Além disso, se quisermos, podemos mencionar que o nome da pasta aqui também é um fio de cabelo. No nosso caso, será feito um ID de usuário. Vamos criá-lo. Aqui. Eu removerei a impressão, ficarei vazia no futuro. Não quero retornar nada que seja largo, exclua a imagem. E usará o nome da string, que é o nome da imagem. Vamos digitar o try catch. O bloco de captura. Sim, isso mesmo. Maneiras incríveis. Pontos, ponto de armazenamento das imagens do usuário. Remover. Sim. Você tem que escrever uma parte. parte será super a, não sendo o ID de usuário atual mais o nome da imagem. Você também pode usar a interpolação de strings. Mas agora, vamos ver se funciona ou não. Depois vou enviar dados, atualizar a página para que nosso futuro morra. Mostra as imagens mais recentes. E se houver algum erro, então contextos, lanchonete, simplesmente escreva alguma coisa, deram errado. É isso. Temos que usar essa função para chamá-la aqui no botão do ícone. Como alho, nome da imagem, nome da imagem e será nome. Sim, nós lhe demos um nome. Vamos fazer isso. Vamos salvá-lo e lançar nosso aplicativo. Nós vamos lá. E se fizéssemos essa supervisão, se eu clicar nela, vejo que agora também está sendo excluída do armazenamento. Então, se eu atualizar, vamos ver, acho que será o filme, sim, apenas uma imagem é para a edição. Nossa funcionalidade de exclusão também está funcionando perfeitamente. Em palavras simples, temos esse aplicativo completo, basta ver, acabamos de testar. Finalmente, se eu fizer isso, simplesmente projetarei. Agora, vamos clicar em Criar. A inserção está funcionando. Então temos o mundo real. E se eu mudar para preto , obviamente também está errado, mas está funcionando. E então vá e exclua também. Eu o excluí. Esta é a razão pela qual as operações de petróleo bruto também aprenderam sobre a segurança em nível de linha. Também fizemos a autenticação. E, novamente, se eu fizer o upload. Então, como você pode ver, o upload também está funcionando perfeitamente. E eu vou simplesmente sair. Então, obrigado por ser o Lee e espero ver você em meus cursos futuros também. Então, até lá, continue trabalhando duro e praticando.