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.