Boas-vindas a este curso de Flutter abordando Persistência de Dados com Drift e Hive, com o instrutor Ricarth Lima.
Audiodescrição: Ricarth é um homem de cabelo crespo, pele dourada e barba, usa óculos de armação escura, veste uma camiseta azul-escura e está à frente de uma parede lisa com uma iluminação azul e rosa.
Agora, vamos falar do projeto. Ele será o nosso Listin, uma lista de compras para planejarmos as compras e feiras que fazemos no supermercado. Se você já conhece esse projeto da Formação Firebase, não se preocupe. Você vai notar que ele está diferente, pois vamos construí-lo totalmente do zero com outras funcionalidades. Portanto, não é necessário ter visto a Formação Firebase.
Se fizermos o login e clicarmos em Tela Inicial
, iremos justamente para a nossa tela inicial, onde podemos adicionar nossas listas de compra. Então, se vamos fazer uma feira semanal, apenas para reposição, colocamos o título "Feira Semanal", e nas observações, "Só para reposição".
Vamos salvar, e agora que salvamos, podemos editá-lo, podemos removê-lo, e dentro da nossa lista de compras, que chamamos de Listin
, podemos adicionar um produto. Então, vamos adicionar uvas. Quantas uvas? Duas. Qual é o preço? Cinco. Vamos salvar. E as uvas já ficam aqui nos nossos Planejados.
Quando estivermos no supermercado e colocarmos a uva no carrinho, podemos até atualizar a quantidade que queremos, o preço que está lá de fato, e não o que planejamos, e damos um check para ver quanto está ficando a nossa compra.
E como fazemos isso? Fazemos isso usando justamente o Drift e o Hive, que são duas das principais ferramentas de persistência de dados que temos no mercado de Flutter atualmente. O Drift para relacional, e o Hive para não relacional.
E qual a importância de conhecer essas duas ferramentas? Para que você, na hora que estiver planejando o aplicativo da sua empresa, ou da sua ideia pessoal, possa decidir qual banco de dados e qual pacote vai usar. Esse é um conhecimento valiosíssimo que vamos aprender neste curso.
Vamos aprender como configurar, como inicializar e como fazer as operações, tanto usando o Drift, quanto usando o Hive, para que quando chegar a hora de usar esse conhecimento na sua empresa, você possa colocar a mão na massa.
E quais são os pré-requisitos? O que você precisa saber para começar este curso? É bom que você tenha uma boa base de Dart e de Flutter.
Para isso, recomendamos muito ter feito nossa formação Dart e nossa formação Flutter, e já venha com seus conhecimentos bem consolidados.
Vale dizer que neste curso não criaremos telas, as telas já serão entregues prontas para nós, para focarmos no Drift e no Hive. Portanto, é muito importante você já ter esse conhecimento vindo da formação Flutter.
Esperamos que você esteja tão ansioso ou ansiosa quanto nós para começarmos este curso. Vamos começar logo na sequência. Te vejo lá!
Agora que já nos conhecemos, chegou a hora de conversarmos sobre alguns detalhes que vão tornar o fluxo do nosso curso mais agradável.
A primeira coisa é falar sobre o projeto. No vídeo anterior, vimos o resultado final do nosso projeto, mas agora vamos falar sobre o projeto base.
Para isso, estamos com ele aberto. Normalmente, falamos do projeto base no tópico "Preparando Ambiente", mas é muito importante que você preste atenção, pois esse projeto base terá todas as telas que vamos usar.
Você pode baixá-lo na atividade "Preparando Ambiente" e ele já terá todas as telas que vamos usar. Qual é a grande questão? A questão é que não terá a lógica, e é essa lógica que precisamos implementar.
Então, se abrirmos o emulador, você verá que ele já começa aqui em uma tela de autenticação. E aí, você se pergunta, vamos lidar com a autenticação nesse curso? Não.
Isso é só parte do fluxo natural da aplicação, mas não tem nenhuma autenticação implementada, e nós não vamos implementar. Então, por isso, ele já vem com e-mail e senha aqui pré-definidos. Basta clicar em Entrar
que vai aparecer um snackbar dizendo que não tem nenhuma autenticação implementada. Quer ir para a tela inicial? Basta clicar em Tela inicial
que chegamos aqui.
A tela inicial tem o appbar, tem uma tela vazia que permite que no futuro adicionemos uma lista, tem um drawer, mas o que importa para nós é esse botão no canto inferior direito com o símbolo de soma (+
), o Floating Action Button, para adicionarmos uma nova lista de compras, que chamamos carinhosamente de listin.
Você vai notar que, apesar de não adicionarmos nada no nome e nas observações, se clicarmos em Salvar
, já aparece uma "feira do mês" aqui. Por que isso? Porque o código está mockado, e é um código apenas para a interface. Faremos nesse curso toda a lógica para adicionar, remover, ler e editar um listin.
Clicando na "Feira do mês", vamos para a lista de produtos que por enquanto está vazia, mas se seguirmos a mesma lógica, clicar no Floating Action Button, clicar em Salvar
sem precisar adicionar nada, você vai ver que ele adiciona um desinfetante, só para termos uma boa ideia de como essa interface se comporta.
Então, clicando no desinfetante, ele vem aqui para a parte de baixo e pronto. Essa é a interface que vamos usar, e aplicaremos a lógica usando o Drift e o Hive.
Agora, quando você baixar esse projeto lá no "Preparando Ambiente", você pode notar que ele tem uma estrutura de pastas bem definida. Se você abrir a pasta lib
, com o explorador aberto, você vai ver que temos quatro pastas e a nossa main
, a _core
, authentication
, listins
e products
.
A _core
é onde estão todos os arquivos que nossas funcionalidades usam, independente de qual seja. Então, todas as funcionalidades vão usar esses arquivos.
Você não precisa se preocupar com a pasta authentication
, ela é feita para criar aquela tela inicial. Listins
é onde temos na pasta screens
, a nossa Home_screen
, que é a tela inicial onde vemos as listas de compras. E products
tem os produtos.
Se você entrar em cada uma delas, você vai notar que tem models
, screens
, services
, cada um com arquivos. Alguns deles são só para a interface.
E o que precisamos criar para dar a lógica de salvar os dados, nós vamos fazer no curso, não se preocupe. Mas recomendamos que, quando você baixar esse projeto lá no "Preparando Ambiente", você dê uma boa olhada nessas pastas e explore os arquivos.
Se abrirmos o meu terminal, você vai ver que na aba PROBLEMS
, não é exatamente um problema, mas temos vários to-dos, ou seja, blocos de códigos, lugares de código que não estão implementados ou têm códigos mockados e vão ser úteis ao decorrer do curso.
Então, recomendamos muito que você pare um tempinho e dê uma olhada nesse projeto base para entender como a tela está funcionando antes de vermos a implementação das funcionalidades.
Temos um recado também muito importante, agora que estamos aqui já com o terminal aberto. Vamos abrir o terminal de fato e escrever aqui flutter --version
.
Por que isso é importante? Porque você com certeza está vendo esse vídeo no futuro. Então, você precisa saber que esse curso foi gravado na versão 3.16.9 do Flutter com a versão do Dart 3.2.6.
E por que isso é importante? Porque o Flutter se atualiza bastante. Então, recomendamos que você instale essa versão do Flutter e do Dart para que consigamos conversar, para que não haja discrepância entre o que estamos fazendo aqui e o que você vai ver no seu curso.
A mesma coisa funciona para caso a gente abra o Explorer, venha no pubspec.yaml
e você vai ver que já tem alguns pacotes instalados. Esses pacotes são para a interface, mas ao longo do curso também vamos instalar alguns pacotes.
E da mesma forma, recomendamos que você sempre observe a versão e use a versão que estamos usando. Caso não seja possível, caso você queira usar a versão mais atualizada, seja do Flutter, seja dos pacotes, recomendamos que você também olhe a atividade "Preparando Ambiente", que lá vai ter alguns possíveis problemas que você pode enfrentar e como resolvê-los.
E por último, queremos mostrar uma imagem que aborda como nós vamos distribuir a informação nesse nosso projeto. Então, se você já estudou modelagem de dados, banco de dados ou tem experiência com banco de dados, você sabe que isso é uma simplificação de um diagrama de dados.
Não é exatamente como lidamos, mas para simplificar e para entendermos o que estamos fazendo, temos aqui um diagrama de dados.
Temos o listin, que vai ser nossa lista de compras, e o que é que ele tem de propriedades? Ele vai ter um ID, que é numérico, que é único e que é uma chave primária, vai ter um nome, que é uma string de 4 a 30 caracteres e por aí vai.
Para esse listin, nós vamos fazer todas essas operações no Drift. Já para os produtos que estão dentro de uma lista de compras, de um listin, nós vamos usar o Hive, e os produtos têm os seguintes atributos, o ID, o nome, a categoria, se é por quilo ou não, se está comprado ou não e assim por diante.
E essa imagem vai ser bem útil, e caso você queira revisitá-la, ela vai estar disponível em uma atividade a seguir também. Então, você pode revisitá-la para entender o que estamos fazendo, para ver como estão bem definidos os nossos modos, os nossos modelos, como vamos usar as classes, as entidades e por aí vai.
Estamos agora bem alinhados e alinhadas com o nosso conhecimento e agora podemos pegar essa demanda que chegou e trabalharmos juntos, eu e você, para implementar a persistência de dados nesse projeto. Vamos lá!
Agora que compreendemos nossos objetivos e o projeto básico que vamos usar para alcançá-los, é hora de instalar nossa primeira ferramenta, o Drift
.
Normalmente, esses vídeos de instalação não são muito mais do que executar uma linha de comando, um flutter pub add
, e assim por diante.
Nesse caso, é um pouco diferente, porque estamos lidando com um banco de dados, e o Drift
implementa várias capacidades do SQL, como a verificação segura de consultas, migrações, versionamento e até mesmo linhas de comando. Portanto, vai um pouco além de apenas executar um flutter pub add
.
Claro que temos a documentação para nos ajudar, e por isso já estamos com ela aberta. Se você clicar no menu lateral Setup
, ele exibirá as dependências.
Quando você estiver nesta documentação, que estará disponível em um "Para Saber Mais", você pode clicar com o botão direito e pedir para traduzir. Mas, já usando ela aqui em inglês, você verá que tem as dependências que são necessárias, e são seis dependências.
Isso porque, além do Drift
, ele precisa de outros pacotes, outros plugins, para que tudo funcione corretamente e tudo se correlacione. Então, temos o drift
, o sqlite_flutter_libs
, o path_provider
, o path
, o drift_dev
, e o build_runner
, essas duas últimas como dependências de desenvolvimento (dev_dependencies
).
É possível instalar tudo de uma vez? Sim. Na verdade, basta copiar o código a seguir, já preparado para que você faça a instalação automática e não fique instalando um por um.
dart pub add drift sqlite3_flutter_libs path_provider path dev:drift_dev dev:build_runner
Então, copiamos todo esse código no bloco, vamos dar um Ctrl + C
, voltando no meu VSCode, vamos dar um Ctrl + V
no terminal. Pressionando a tecla Enter
, ele vai instalar todas essas dependências de uma vez e rodar o flutter pub get
para nós.
Então, ele instalou tudo, rodou o flutter pub get
, observarmos o arquivo pubspec.yaml
, vamos ver que ele instalou o drift
, o sqlite3
, o path_provider
, o path
, e na dev_dependencies
, ele instalou o drift_dev
e o build_runner
.
Mais uma vez, preste atenção às versões desses pacotes, pois usar as mesmas versões que estamos usando, garante que não terá nenhuma surpresa durante o seu aprendizado.
Mas vamos falar sobre cada uma dessas dependências rapidamente para você, que deve estar se perguntando o que cada uma dessas coisas faz.
O drift
é o pacote central, que faz todo o trabalho de comunicação, de abstração do SQL usando o Dart. Já o sqlite3_flutter_libs
é a biblioteca que adiciona, de fato, o SQLite3 no nosso aplicativo.
O path
e o path_provider
são bibliotecas do Flutter que nos ajudam a entrar em diretórios do nosso sistema operacional que está sendo usado, na maioria dos casos, Android e iOS nos dispositivos móveis. Então, ele vai nos ajudar e mais para frente vamos ver a importância disso.
Já o drift_dev
e o build_runner
são dependências de desenvolvimento. A grande questão é que ela não é instalada no final, quando rodamos a aplicação, quando damos um build na aplicação para ir para as pessoas usuárias, para ir para as lojas e assim por diante.
Elas só funcionam para nós que estamos desenvolvendo. A drift_dev
serve para fazer toda uma geração de códigos automática se comunicando com a build_runner
, que esse é um pacote do Flutter para gerar códigos automaticamente. Vamos ver isso quando chegar o momento.
Agora que falamos das dependências que o Drift
usa, vamos falar um pouco sobre esse tal de Drift
e porque o estamos usando.
O Drift
antigamente se chamava Moor
. Então, se você trabalhar em uma empresa ou mesmo ver artigos na internet que se referem ao Moor
, você sabe que agora o nome novo dele, de uma versão mais atualizada, é Drift
.
Drift
?O Drift
é uma biblioteca de banco de dados relacional. E como é um banco de dados relacional, se espera que ele rode em SQL, como a linguagem de consultas estruturadas. Então, a versão de SQL que ele roda, o tipo, melhor dizendo, de SQL é o SQLite. Como eu falei, que roda em cima do SQL.
Drift
?A principal delas, na verdade, é não escrever consultas SQL. Você pode escrever se você quiser, se você tiver um caso específico. Mas, você vai estar usando todo o know-how de SQL. Toda a experiência do SQL, toda a base de anos que o SQL tem no mercado, sem precisar escrever as consultas de SQL usando só Dart. Essa é a principal vantagem do Drift
.
A principal desvantagem é a configuração. Então, ele tem uma configuração, a carga de configuração é pesada. Ele tem uma dificuldade maior, por exemplo, se você estiver usando web, e não aplicativo mobile, Android, iOS.
Então, tem essa questão, mas principalmente a curva de aprendizagem. Para usar o Drift
, é importante que você já tenha uma base de SQL. Porque, apesar de você usar Dart, você vai ver pontos ali que se sobrepõem, que você vai notar que tem toda uma questão de modelagem de dados, modelagem de banco de dados, entidade, relação, que conforme o projeto vai crescendo, é importante que a equipe tenha essa experiência.
E, portanto, é recomendado para equipes e projetos que já têm experiência com modelagem relacional usando SQL.
Então, se você já faz parte de uma empresa que já tem uma boa experiência com SQL, já trabalhou em outros projetos com SQL, e quer ter essa experiência para o Flutter, o Drift
provavelmente é a sua melhor escolha.
Agora que já entendemos o Drift
, já instalamos ele no nosso projeto, já podemos começar a criar nossas listas? Não, ainda tem uma boa parte de configuração que vamos fazer logo na sequência. Vejo você lá.
O curso Flutter: implementando persistência de dados com Drift e Hive possui 132 minutos de vídeos, em um total de 59 atividades. Gostou? Conheça nossos outros cursos de Flutter em Mobile, ou leia nossos artigos de Mobile.
Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:
Impulsione a sua carreira com os melhores cursos e faça parte da maior comunidade tech.
1 ano de Alura
Assine o PLUS e garanta:
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você tem acesso a eventos exclusivos, grupos de estudos e mentorias com especialistas de diferentes áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Acelere o seu aprendizado com a IA da Alura e prepare-se para o mercado internacional.
1 ano de Alura
Todos os benefícios do PLUS e mais vantagens exclusivas:
Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos, corrige exercícios e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com a Luri até 100 mensagens por semana.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Transforme a sua jornada com benefícios exclusivos e evolua ainda mais na sua carreira.
1 ano de Alura
Todos os benefícios do PRO e mais vantagens exclusivas:
Mensagens ilimitadas para estudar com a Luri, a IA da Alura, disponível 24hs para tirar suas dúvidas, dar exemplos práticos, corrigir exercícios e impulsionar seus estudos.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.