Persistência de Dados no Flutter: o que é? Qual ferramenta usar?

Persistência de Dados no Flutter: o que é? Qual ferramenta usar?
Ricarth Lima
Ricarth Lima

Compartilhe

Chegou a hora de você tornar suas aplicações em Flutter mais estáveis e rápidas com a implementação adequada da persistência de dados.

Talvez você esteja começando a aprender Dart e Flutter agora e já tenha ouvido falar da importância de armazenar dados de forma persistente para melhorar a experiência da pessoa usuária.

Ou, quem sabe, você já tenha bastante conhecimento em Flutter, mas nunca explorou as diversas opções de persistência de dados e percebeu que cada projeto pode ter necessidades específicas que demandam soluções diferentes.

Ou, até, você já possua um projeto sólido na sua empresa, mas percebe que escolher a biblioteca de persistência adequada pode otimizar o desempenho da aplicação, garantir a integridade dos dados e facilitar futuras manutenções.

Para todos esses casos, neste artigo você aprenderá:

  • O que é persistência de dados e por que ela é essencial.
  • As diferenças entre persistência local e na nuvem, e quando cada uma é mais apropriada.
  • As opções mais populares de persistência de dados no Flutter, incluindo shared_preferences, sqflite, Drift e Hive.
  • Outras ferramentas relevantes como Isar, ObjectBox, Realm, Floor e sembast.
  • Dicas valiosas sobre como escolher a biblioteca de persistência de dados ideal para o seu projeto.

E eu te garanto, esse é só o começo! Nesse artigo vamos explorar bem fundo o universo da persistência de dados, com foco no Flutter.

Além de entender o que, como funciona e quando usar cada biblioteca, vamos analisar as vantagens e desvantagens de cada opção para que você possa fazer uma escolha informada e eficiente.

Segure-se e vamos lá! 🚀

O que é persistência de dados?

Persistência de dados é o conceito de armazenar dados de maneira que possam ser recuperados e utilizados posteriormente, mesmo após o encerramento de uma aplicação. Imagine que você tem um cofre onde guarda seus documentos importantes.

Mesmo que você saia de casa e o cofre seja fechado, você sabe que, quando voltar, os documentos estarão lá, seguros e prontos para serem usados novamente.

Agora, pense em como isso se aplica no desenvolvimento de software. Quando criamos um aplicativo, muitas vezes precisamos salvar informações para que estejam disponíveis na próxima vez que o usuário abrir o aplicativo.

Sem a persistência de dados, todas as informações seriam perdidas assim que o aplicativo fosse fechado.

Considere o seguinte código:

String name = "";
String email = "";
String senha = "";

registerUser(){
    name = nameController.text
    email = emailController.text
    senha = passwordController.text
}

Podemos ter a ilusão de que a função registerUser de fato registra os dados da pessoa usuária, afinal ela alimenta as variáveis que podemos usar mesmo fora da função. Mas o que acontece se esse app for fechado?

É... Exatamente... Perdemos tudo e vamos ter que pedir os dados novamente para a pessoa usuária. Chato né? É exatamente para isso que a persistência de dados serve!

No contexto da vida cotidiana, podemos pensar na persistência de dados como a capacidade de reter e acessar informações importantes de maneira consistente e confiável.

Por exemplo, imagine um aplicativo de notas no seu celular. Quando você cria uma nova nota e a salva, espera que ela esteja disponível na próxima vez que abrir o aplicativo, independentemente de ter reiniciado o telefone ou fechado o aplicativo.

Essa capacidade de manter as notas disponíveis é um exemplo clássico de persistência de dados.

Outro exemplo comum é o histórico de mensagens em um aplicativo de mensagens. Mesmo que você feche o aplicativo ou perca a conexão com a internet, as mensagens antigas ainda estão lá quando você abre o aplicativo novamente, graças à persistência de dados.

Os exemplos são infinitos! Seu progresso em um app fitness, suas configurações padrão em um app de finanças, e muitas outras possibilidades mostram como a persistência de dados é crucial para a funcionalidade e a usabilidade de diversos aplicativos móveis, garantindo que os dados das pessoas usuária sejam armazenados e recuperados de forma eficiente e segura.

Banner promocional da Alura, com um design futurista em tons de azul, apresentando dois blocos de texto, no qual o bloco esquerdo tem os dizeres:

Persistência Local x Persistência na Nuvem

"Mas Ricarth! Hoje em dia é tudo na nuvem, até mesmo aquela pequena anotação que eu fiz fica associada na minha conta."

É verdade. Principalmente com a popularização dos dispositivos móveis e do acesso à internet móvel (3G, 4G, 5G), vimos uma tendência a tudo funcionar na nuvem. Isso tornou a persistência local obsoleta? Claro que não!

A persistência de dados na nuvem, utilizando serviços como Firebase ou servidores back-end próprios, oferece várias vantagens, como a capacidade de acessar informações de qualquer lugar e a facilidade de sincronização entre diferentes dispositivos.

Por exemplo, ao usar um aplicativo de anotações que armazena dados na nuvem, você pode acessar suas notas tanto no celular, quanto no computador, garantindo que sempre tenha as informações à mão, independentemente do dispositivo que está usando.

No entanto, a persistência local ainda desempenha um papel crucial, especialmente em situações onde a conectividade à internet é limitada ou inexistente!

Aplicativos que armazenam dados localmente no dispositivo garantem que você possa acessar suas informações a qualquer momento, sem depender de uma conexão de dados. Pode não parecer, mas isso é essencial!

Imagine estar em uma área sem sinal de celular e precisar acessar uma nota importante ou verificar informações em um aplicativo de viagem; a persistência local permite que esses dados estejam disponíveis mesmo offline.

Além disso, a persistência local pode oferecer desempenho mais rápido, pois os dados são armazenados diretamente no dispositivo, eliminando a latência associada ao envio e recebimento de informações de servidores remotos. Isso é particularmente importante em aplicativos que exigem respostas rápidas e interações em tempo real, como jogos ou aplicativos de produtividade.

Por fim, a persistência local e na nuvem podem (e devem!) ser complementares.

Muitos aplicativos modernos utilizam uma abordagem híbrida, onde dados são armazenados localmente para acesso imediato e offline, mas também são sincronizados com a nuvem para garantir backups seguros e acesso multiplataforma.

Essa combinação oferece o melhor dos dois mundos, garantindo que os dados estejam sempre acessíveis e seguros, independentemente das circunstâncias.

Portanto, a persistência local continua sendo uma parte essencial do desenvolvimento de aplicativos móveis, proporcionando uma experiência de usuário robusta e confiável, mesmo quando a conectividade com a nuvem não está disponível.

Opções de persistência de dados no Flutter

No contexto do Flutter, a abordagem à persistência de dados pode tirar proveito tanto da persistência local quanto da nuvem.

Com Flutter, desde as parte mais iniciais da sua jornada de aprendizagem, pessoas desenvolvedoras podem facilmente implementar soluções de armazenamento local utilizando bibliotecas como sqflite para bancos de dados SQL ou shared_preferences para dados simples e persistentes.

Já quando houver necessidades mais exigentes para aplicações mais robustas, é a hora de buscar soluções mais completas para o armazenamento, seja NoSQL usando ferramentas como o hive ou ainda no SQL com ferramentas como o drift.

Esses recursos permitem que aplicativos Flutter funcionem eficientemente offline, mantendo o desempenho e a acessibilidade dos dados mesmo sem conexão à internet.

Embora seja possível realizar a persistência local de dados no Flutter utilizando o próprio sistema de entrada e saída (IO) para ler e escrever arquivos diretamente, essa abordagem pode ser trabalhosa e propensa a erros.

Para facilitar o desenvolvimento, diversas bibliotecas especializadas foram criadas, cada uma com suas próprias vantagens e desvantagens. Alguma delas são:

BibliotecaDescriçãoRelacional/Não RelacionalLinguagem BasePrincipal VantagemPrincipal DesvantagemQuando Usar
shared_preferencesArmazenamento simples de pares chave-valorNão RelacionalDartSimplicidadeLimitação de dadosPequenos dados persistentes como configurações
sqfliteInterface SQLite diretaRelacionalSQLConsultas avançadasComplexidadeDados estruturados e consultas complexas
DriftORM para SQLite com integração DartRelacionalDart/SQLIntegração com DartCurva de aprendizadoConsultas reativas e estrutura de dados complexa
HiveBanco de dados NoSQL rápidoNão RelacionalDartPerformanceEscalabilidadeDados simples e alta performance
IsarBanco de dados embutido de alto desempenhoNão RelacionalDartPerformance e simplicidadeComplexidade de migraçãoDados grandes e consultas rápidas
ObjectBoxBanco de dados NoSQL orientado a objetosNão RelacionalDartVelocidadeSuporte limitadoModelos de dados complexos e alta performance
RealmBanco de dados NoSQL móvelNão RelacionalDartSincronização fácilComplexidadeDados offline com necessidade de sincronização
FloorAbstração de SQLite para DartRelacionalDart/SQLSimplicidadeMenos recursos avançadosConsultas SQL com integração simples em Dart
sembastBanco de dados NoSQL baseado em arquivosNão RelacionalDartSimplicidadePerformance limitadaPequenos volumes de dados locais

O que é shared_preferences

O shared_preferences é uma biblioteca do Flutter que permite armazenar dados simples e persistentes no dispositivo da pessoa usuária.

Por ser muito simples e já ser trazido na documentação, muitas vezes é o primeiro contato que temos com persistência de dados no Flutter.

Esses dados são armazenados como pares chave-valor, como Maps. Essa estrutura é semelhante ao armazenamento local em JavaScript ou ao UserDefaults no iOS. Mesmo o JSON também usa a lógica de chaves e valores.

É ideal para guardar pequenas quantidades de informações que precisam ser rapidamente acessíveis e não exigem uma estrutura complexa de banco de dados.

Vantagens da shared_preferences

  1. Simplicidade: shared_preferences é fácil de usar e não requer configuração complicada.
  2. Desempenho: Oferece acesso rápido aos dados, já que são armazenados localmente.
  3. Persistência: Os dados permanecem disponíveis mesmo após o aplicativo ser fechado e reaberto.
  4. Pequeno armazenamento: Ideal para armazenar configurações da pessoa usuária, preferências de aplicativo, tokens de autenticação e outros pequenos pedaços de informação.

Desvantagens da shared_preferences

  1. Limitação de dados: Não é adequado para armazenar grandes volumes de dados ou informações complexas.
  2. Falta de segurança: Dados armazenados em shared_preferences não são criptografados por padrão, o que pode ser um problema para informações sensíveis.
  3. Sem suporte para dados estruturados: Apenas permite armazenar tipos de dados primitivos (strings, números, booleanos) e listas simples, sem suporte para objetos complexos ou relacionamentos entre dados.

Quando usar shared_preferences?

O shared_preferences é ideal para situações em que você precisa armazenar pequenas quantidades de dados que devem persistir entre sessões do aplicativo. Exemplos comuns incluem:

  • Configurações do usuário, como temas (modo claro/escuro), preferências de idioma e outras opções personalizáveis.
  • Tokens de autenticação ou outras informações de sessão que não são altamente sensíveis.
  • Estados simples do aplicativo, como a última aba visitada, progresso em um tutorial, ou opções selecionadas pelo usuário.

O shared_preferences é uma ferramenta útil e eficiente para gerenciar dados simples e persistentes em aplicativos Flutter, oferecendo uma solução rápida e fácil de implementar para muitas necessidades comuns de armazenamento local.

Como falamos bastante da questão de segurança do shared_preferences, é interessante citar seu "irmão mais seguro", que é o flutter_secure_storage, permitindo as mesmas funcionalidades mas com criptografia, mas armazenamento de dados sensíveis.

O que é sqflite?

Já o sqflite é uma biblioteca Flutter que fornece uma interface para o SQLite, um sistema de banco de dados relacional leve, incorporado diretamente no dispositivo.

Essa biblioteca permite criar, ler, atualizar e excluir (CRUD) registros em tabelas, oferecendo um armazenamento local mais robusto e estruturado comparado a opções como shared_preferences.

Por também ser bastante simples, e utilizar uma linguagem popular de manipulação e gerenciamento de banco de dados (SQLite, variante do SQL), essa também é uma das primeiras opções quando estamos estudando desenvolvimento em Flutter.

Vantagens da sqflite

  1. Estrutura de Dados Complexa: Suporta a criação de bancos de dados relacionais com múltiplas tabelas e relações complexas entre dados.
  2. Grande Volume de Dados: Adequado para armazenar e gerenciar grandes quantidades de dados de forma eficiente.
  3. Consultas Poderosas: Permite a execução de consultas SQL avançadas para filtrar, ordenar e agrupar dados conforme necessário.
  4. Persistência e Performance: Oferece um armazenamento persistente e de alto desempenho para dados estruturados.

Desvantagens da sqflite

  1. Complexidade: Requer um entendimento sólido de bancos de dados relacionais e SQL, o que pode aumentar a complexidade do desenvolvimento.
  2. Configuração: A configuração inicial e a manutenção de um banco de dados relacional podem ser mais trabalhosas comparadas a soluções mais simples.
  3. Sobrecarga: Pode ser excessivo para armazenamento de dados simples ou pequenas quantidades de informações.

Quando usar sqflite?

O sqflite é ideal para aplicações que exigem:

  • Armazenamento de dados estruturados: Quando os dados são complexos e requerem uma organização em tabelas com relações entre elas, como em um aplicativo de gestão de clientes ou inventário.
  • Consultas e Filtragem de Dados: Quando há necessidade de realizar consultas avançadas ou filtragem de dados baseadas em múltiplos critérios.
  • Grandes Volumes de Dados: Para aplicações que precisam armazenar e acessar uma grande quantidade de informações de maneira eficiente e rápida.
  • Persistência Longa e Segura: Quando é necessário garantir que os dados serão persistidos de forma segura e disponível por longos períodos, mesmo após várias reinicializações do aplicativo.

O sqflite é uma poderosa ferramenta para desenvolvedores Flutter que necessitam de um armazenamento local robusto e estruturado, ideal para aplicações com requisitos de dados complexos e de alto volume.

O que é drift?

Por fim, o Drift (anteriormente conhecido como Moor) é uma biblioteca Flutter que oferece uma maneira eficiente e segura de gerenciar bancos de dados SQLite, utilizando a linguagem Dart.

Drift permite escrever consultas SQL e manipular dados usando objetos Dart, proporcionando uma experiência de desenvolvimento mais fluida e menos propensa a erros em comparação com a abordagem SQL pura, como com o sqflite.

Vantagens do drift

  1. Integração com Dart: Permite manipular dados diretamente usando objetos e classes Dart, o que torna o código mais legível e menos suscetível a erros de sintaxe SQL.
  2. Abstração: Oferece uma camada de abstração sobre o SQL, simplificando operações comuns de banco de dados e reduzindo a complexidade do código.
  3. Migrations: Suporta migrações de banco de dados, facilitando a atualização e a evolução da estrutura do banco de dados ao longo do tempo.
  4. Type Safety: Garante a segurança de tipos em tempo de compilação, ajudando a evitar erros comuns de tipo que podem ocorrer com SQL puro.
  5. Reactiveness: Suporta operações reativas, permitindo que as interfaces do usuário sejam automaticamente atualizadas quando os dados no banco de dados mudam.

Desvantagens do drift

  1. Curva de Aprendizado: Pode ter uma curva de aprendizado mais íngreme para desenvolvedores que não estão familiarizados com o conceito de ORMs (Object-Relational Mappers).
  2. Desempenho: A camada adicional de abstração pode introduzir uma leve sobrecarga de desempenho em comparação com consultas SQL diretas.
  3. Complexidade Inicial: De todos os pacotes citados, o Drift é o que tem a configuração inicial mais complexa devido à vários fatores incluindo a necessidade de definir entidades e gerenciar migrações.

Quando usar o drift?

O Drift é ideal para aplicações que:

  • Beneficiam de Abstração: Desenvolvedores que preferem trabalhar com objetos Dart em vez de escrever SQL diretamente podem se beneficiar da abstração oferecida pelo Drift.
  • Necessitam de Reactiveness: Aplicativos que precisam reagir automaticamente às mudanças no banco de dados, como interfaces dinâmicas que se atualizam com novas entradas de dados.
  • Demandam Migrations: Projetos que exigem migrações de banco de dados para gerenciar mudanças na estrutura do banco ao longo do tempo.
  • Valorizam Type Safety: Para garantir que operações de banco de dados sejam verificadas em tempo de compilação, reduzindo o risco de erros.

Comparação com sqflite

Enquanto sqflite é uma biblioteca robusta para acessar diretamente o SQLite, exigindo que os desenvolvedores escrevam consultas SQL manualmente, Drift oferece uma abordagem mais integrada ao Dart, permitindo que os desenvolvedores manipulem dados usando objetos Dart.

Essa integração melhora a legibilidade do código e reduz a quantidade de erros comuns associados à escrita de SQL manual.

Além disso, Drift suporta operações reativas e migrações de banco de dados, oferecendo uma solução mais completa e flexível para o gerenciamento de dados em aplicações Flutter.

O que é hive?

Hive é uma biblioteca leve de banco de dados NoSQL para Flutter, projetada para ser rápida, segura e fácil de usar. Ao contrário de soluções baseadas em SQL, Hive armazena dados em um formato binário, permitindo um acesso mais eficiente.

É especialmente adequado para dispositivos móveis devido ao seu baixo consumo de recursos e alta performance.

Vantagens da hive

  1. Desempenho: Hive é extremamente rápido, com leitura e gravação de dados eficientes, tornando-o ideal para aplicações móveis que requerem alta performance.
  2. Facilidade de Uso: Oferece uma API simples e intuitiva, que facilita o armazenamento e a recuperação de dados.
  3. Sem Dependência de SQL: Por ser NoSQL, elimina a necessidade de escrever consultas SQL, simplificando o desenvolvimento.
  4. Offline-First: Projetado para funcionar offline, garantindo que os dados estejam sempre disponíveis, mesmo sem conexão à internet.
  5. Suporte a Tipos Complexos: Permite armazenar dados complexos, como listas e mapas, diretamente, sem a necessidade de conversão para tipos primitivos.

Desvantagens da hive

  1. Escalabilidade: Embora seja excelente para dados locais e pequenos volumes de dados, Hive pode não ser a melhor escolha para grandes volumes de dados ou para aplicações que exigem operações complexas de consulta e filtragem.
  2. Falta de Consultas Avançadas: Não suporta consultas complexas e relacionamentos entre dados, o que pode ser uma limitação para certos tipos de aplicações.
  3. Crescimento da Base de Dados: Pode ter limitações em termos de escalabilidade conforme o tamanho da base de dados aumenta.

Quando usar a hive?

Hive é ideal para aplicações que:

  • Precisam de Desempenho Rápido: Aplicativos que exigem leitura e gravação rápidas de dados locais, como jogos ou aplicações de produtividade.
  • Armazenamento Offline: Aplicações que precisam funcionar de forma confiável sem conexão à internet, garantindo que os dados estejam sempre acessíveis.
  • Dados Simples a Moderadamente Complexos: Aplicações que lidam com dados que não requerem estrutura de banco de dados relacional ou consultas avançadas, como preferências do usuário, caches de dados, ou histórico de atividades.
  • Desenvolvimento Simples e Rápido: Projetos que beneficiam de uma API simples e uma configuração mínima, permitindo um desenvolvimento rápido e eficiente.

Comparação com sqflite e Drift

Enquanto sqflite oferece uma interface direta para o SQLite e Drift oferece uma integração mais orientada a objetos com Dart para manipulação de dados SQL, Hive adota uma abordagem NoSQL, focando na simplicidade e performance.

O sqflite e Drift são mais adequados para aplicações que necessitam de estrutura de dados complexa e operações avançadas de consulta, enquanto Hive é ideal para aplicações que requerem uma solução de armazenamento rápida e eficiente, sem a complexidade adicional de SQL.

Hive se destaca por sua facilidade de uso e alta performance, tornando-o uma escolha excelente para muitos tipos de aplicativos móveis que valorizam a velocidade e a simplicidade.

Outras opções

Os quatro pacotes destacados — shared_preferences, sqflite, Drift e Hive — são amplamente utilizados devido à sua popularidade, robustez e facilidade de integração em projetos Flutter.

Todos eles possuem o selo “Flutter Favorite” no pub.dev, dado pela própria equipe Flutter para indicar pacotes e plugins que você deveria considerar primeiro ao construir seu aplicativo, levando vários aspectos em consideração, sendo eles:

  • pontuação geral da comunidade,
  • editora verificada (a equipe que fez o pacote passou por um critério de seleção),
  • licença permissiva,
  • tag de versão atualizada,
  • completude do recurso (se não está em “beta” ou em “construção”),
  • usabilidade,
  • bom tempo de execução,
  • e se usam depências de alta qualidade.

Vale dizer, também, que o shared_preferences e a sqflite constam documentação oficial do Flutter, sendo o shared_preferences desenvolvido pela própria equipe flutter.dev.

Essas ferramentas cobrem uma ampla gama de necessidades de persistência de dados, desde o armazenamento simples de configurações do usuário até o gerenciamento de dados estruturados e de alta performance.

Além dessas, outras ferramentas também conhecidas e utilizadas incluem:

  • Isar: Um banco de dados embutido de alto desempenho, desenvolvido pela mesma equipe do Hive, que oferece excelente performance e simplicidade. É ideal para grandes volumes de dados e consultas rápidas, embora a complexidade de migração possa ser um desafio.
  • ObjectBox: Um banco de dados NoSQL orientado a objetos conhecido por sua velocidade e eficiência. Ele é excelente para modelos de dados complexos e operações de alta performance, mas seu suporte é mais limitado em comparação a outras opções.
  • Realm: Um banco de dados NoSQL móvel que facilita a sincronização de dados offline e online. É particularmente útil para aplicativos que precisam de sincronização fácil e eficiente, embora possa adicionar complexidade ao desenvolvimento.
  • Floor: Uma abstração de SQLite para Dart que oferece uma integração simples e direta, permitindo consultas SQL com uma interface amigável para desenvolvedores Dart. Apesar de sua simplicidade, pode carecer de alguns recursos avançados presentes em outras soluções.
  • sembast: Um banco de dados NoSQL baseado em arquivos que prioriza a simplicidade. É uma escolha adequada para pequenos volumes de dados locais, embora sua performance possa ser limitada em comparação com outras opções.

Essas ferramentas fornecem uma variedade de soluções para diferentes necessidades de persistência de dados.

Conhecê-las é o passo primordial para que nós, pessoas desenvolvedoras Flutter possamos escolher a que melhor se adapta aos requisitos específicos dos nossos projetos.

Qual ferramenta escolher?

Escolher a biblioteca de persistência de dados ideal para o seu projeto Flutter envolve considerar vários fatores cruciais que podem impactar diretamente o sucesso e a eficiência do desenvolvimento.

Aqui estão algumas dicas pra te ajudar a tomar essa importante decisão:

  1. Conhecimento da equipe: Avalie o nível de familiaridade da sua equipe com as tecnologias disponíveis. Se sua equipe está mais confortável com SQL, bibliotecas como sqflite ou Drift podem ser mais adequadas. Por outro lado, se ninguém nunca ouviu falar de SQL ou para aqueles que preferem trabalhar diretamente com Dart, opções como Hive ou Isar podem ser mais convenientes pois possuem uma curva de aprendizado menor.
  2. Compatibilidade com a stack de tecnologia: Da mesma forma que o conhecimento da equipe é importante, a stack de tecnologia (por exemplo, o que a equipe de back-end está desenvolvendo) essencial de ser levado em consideração. Se na sua empresa já existe uma equipe especialista em backend, provavelmente o conhecimento sobre SQL já é difundido, o que pode facilitar a integração de soluções baseadas em SQL como sqflite ou Drift.
  3. Prazo e adaptabilidade: Leve em conta o tempo disponível para aprender e configurar a ferramenta. Algumas bibliotecas podem ser mais complexas e exigir um tempo maior de configuração e aprendizado. Se o prazo do projeto é apertado, optar por uma solução mais simples e rápida de implementar pode ser mais vantajoso.
  4. Escalabilidade: Avalie se a escalabilidade é um requisito importante para o seu projeto. Se você espera que o volume de dados cresça significativamente, escolher uma biblioteca que suporte bem essa escalabilidade, como Isar ou ObjectBox, pode ser crucial para garantir a performance a longo prazo.
  5. Velocidade de acesso: Determine se a velocidade de acesso aos dados é um fator crítico para a aplicação. Para aplicativos que exigem acesso rápido e eficiente aos dados, bibliotecas como Hive e ObjectBox são excelentes escolhas devido à sua alta performance.

Levando em consideração esses fatores, você evolui sua capacidade de escolher a biblioteca de persistência de dados que melhor se adapta às necessidades específicas do seu projeto Flutter, garantindo uma implementação eficiente e bem-sucedida.

Conclusão

Persistência de dados é um passo essencial durante o desenvolvimento de qualquer aplicação, em qualquer ferramenta, e com o Flutter não é diferente!

Nossas aplicações não existem sem pessoas, e a persistência dos dados nos ajuda a criar apps cada vez mais personalizados e interessantes para cada pessoa que usa!

Bateu o interesse pelo assunto? Estude Persistência de Dados com a gente:

E aí, já tinha ouvido falar de Persistência de Dados no Flutter? Já usou essas ferramentas em algum projeto?

Conta para nós, marcando os perfis da Alura em suas redes sociais e usando a hashtag #AprendiNaAlura para compartilhar sua experiência de desenvolvimento.

Vejo você por aí no maravilhoso mundo do Flutter!

Referências

Ricarth Lima
Ricarth Lima

Acredito que educação e computação podem mudar o mundo para melhor, em especial, juntas. Por isso além de fazer parte do Grupo Alura, sou professor, desenvolvedor de jogos educativos e criador de conteúdo! Amo Flutter e Unity!

Veja outros artigos sobre Mobile