Offline-first: o mundo da baixa conectividade – Hipsters Ponto Tech #484


Resumo

O episódio explora a filosofia offline-first no desenvolvimento de aplicativos móveis, partindo da premissa de que a falta de conexão não deve ser tratada como um erro, mas como um estado normal da aplicação. Os participantes discutem como essa abordagem impacta a experiência do usuário e a arquitetura do software.

São apresentados diferentes contextos onde o offline-first é crucial, como em áreas rurais do agro, onde técnicos percorrem grandes distâncias sem conectividade para registrar dados em campo, ou em aplicativos financeiros como o Caju, que precisam lidar com a delicada questão de exibir saldos que podem estar desatualizados. Casos como o Instagram e o WhatsApp são citados como exemplos de aplicações que já implementam estratégias offline.

A conversa aborda estratégias técnicas para implementação, incluindo armazenamento local com SQLite, Room (Android), Core Data (iOS) e soluções específicas como Couchbase, que faz sincronização automática. Também são discutidas questões de segurança, como o uso de criptografia e ferramentas como Secure Storage no Flutter ou Keychain no iOS para dados sensíveis.

Os participantes compartilham desafios práticos, como a migração de aplicações online para offline-first, a sincronização de grandes volumes de dados (como 20 mil itens em inventários agro) e a gestão de múltiplos usuários em um mesmo dispositivo. Eles também refletem sobre quando desenvolvedores iniciantes devem começar a se preocupar com esses conceitos, sugerindo que o momento surge naturalmente ao implementar autenticação e persistência de tokens.


Indicações

Aplicativos

  • Chrome (jogo do dinossauro) — Citado por Iago como um exemplo clássico de experiência offline-first: quando não há internet, o navegador exibe um jogo simples, mostrando que a falta de conexão não é um erro.
  • Instagram — Mencionado por Iago como um app que salva posts localmente para que o usuário possa visualizá-los mesmo sem conexão, implementando uma estratégia offline.
  • WhatsApp — Citado por Priscila como exemplo de app que lida bem com offline: as mensagens são salvas localmente com um ícone de relógio e enviadas automaticamente quando a conexão retorna.

Tecnologias

  • Couchbase — Tecnologia mencionada por William que faz um dump do banco de dados para o dispositivo, permitindo operações offline e sincronização automática quando há conexão, com segurança própria.
  • Flutter + Clean Architecture — Priscila destaca que a clean architecture no Flutter facilita a implementação de offline-first, permitindo declarar no repositório se a consulta será feita na fonte de dados remota ou local, dependendo da conectividade.
  • Secure Storage (Flutter) — Ferramenta do Flutter citada por Priscila e William que, por baixo dos panos, usa Encrypted Shared Preferences no Android e Keychain no iOS para armazenar dados sensíveis de forma segura no dispositivo.
  • Connectivity Plus (Flutter) — Package da comunidade Flutter mencionado por Iago que verifica se há conexão (Wi-Fi, 4G), mas não a qualidade dela, sendo necessário testar também a capacidade de bater em um endpoint.

Linha do Tempo

  • 00:00:00Introdução ao tema offline-first e apresentação dos participantes — André Davi apresenta o episódio, partindo de uma experiência pessoal com internet lenta (3G) para levantar a questão: o que acontece quando não há conexão alguma? Ele introduz o conceito de offline-first e apresenta os convidados Iago Oliveira, William Bezerra e Priscila Abrambila, que são instrutores na Alura e têm experiência com o tema.
  • 00:03:18Por que pensar em offline-first? Contextos e realidades diferentes — Iago inicia a discussão explicando que offline-first é uma filosofia onde o dispositivo deve funcionar independente de internet, citando exemplos como o Chrome (jogo do dinossauro) e Instagram (posts salvos). William complementa com sua realidade no interior do Nordeste, onde viajar 60km pode significar ausência total de conexão, e destaca a importância do tema para aplicativos no setor do agro, onde fazendas imensas não têm cobertura.
  • 00:07:08Desafios em aplicativos financeiros e a comunicação com o usuário — Priscila compartilha sua experiência no Caju (app de benefícios), onde lidar com saldos de dinheiro exige cuidado extra. Ela explica que, mesmo com avisos de “offline”, um saldo salvo localmente pode não refletir transações recentes, criando uma experiência confusa. Ela contrasta com o app do Itaú, que, em offline, simplesmente não exibe nenhum dado, possivelmente por questões regulatórias.
  • 00:11:40Estratégias de front-end e UI para uma experiência offline tranquila — André pergunta sobre estratégias de interface para comunicar o estado offline sem frustrar o usuário. William responde que a aplicação deve ter pouca diferença entre online e offline, talvez apenas uma “labelzinha” informativa. A experiência deve fluir, com dados sendo salvos localmente e sincronizados depois, como no WhatsApp (ícone de relógio). Priscila dá o exemplo de um app de marcação de consultas que funciona offline e lida com conflitos de horário depois.
  • 00:16:45Segurança, autenticação e estratégias de armazenamento de dados — A discussão avança para segurança e confidencialidade de dados armazenados localmente. Iago cita duas grandes estratégias: bancos de dados locais robustos (SQLite, Room) ou estratégias de cache de requisições. William menciona tecnologias como Hive (Flutter) e Couchbase, que faz um “dump” do banco para o dispositivo e sincroniza. Priscila fala sobre ferramentas seguras como Secure Storage no Flutter, que usa Encrypted Shared Preferences (Android) e Keychain (iOS).
  • 00:21:41Ferramentas e ecossistemas: Flutter, React e a independência da solução — André provoca uma discussão sobre se o Flutter ou React oferecem vantagens para offline-first. Priscila afirma que todas as ferramentas oferecem meios, mas destaca a facilidade do Flutter com clean architecture para decidir entre data source local ou remoto. Iago e William alertam para a diferença entre ter “conectividade” (Wi-Fi/4G) e ter efetivamente “internet”, sugerindo testar a qualidade da conexão.
  • 00:26:01Os grandes desafios e dores de cabeça na implementação offline-first — André pergunta sobre os maiores desafios. Iago compartilha casos complexos: um app educacional usado por múltiplos professores no mesmo tablet, exigindo troca de usuário e sincronização de contextos offline; e apps industriais usados no subsolo, sem conexão. William relata a dor de migrar um app online para offline-first no agro, lidando com geração de IDs únicos offline para milhares de itens e a sincronização massiva de dados (ex: 20 mil itens), que exigiu quebra em lotes e controle de logs.
  • 00:34:43Quando começar a estudar offline-first? Conselhos para iniciantes — André pergunta quando desenvolvedores iniciantes devem começar a se preocupar com o tema. Iago recomenda primeiro dominar a construção de telas e a navegação básica na tecnologia escolhida (Flutter, iOS, Android). William brinca que a primeira vez que se usa offline-first é ao implementar login e salvar o token localmente (ex: Shared Preferences). Eles aconselham um caminho gradual: shared preferences secure storage bancos locais mais complexos, sempre entendendo os porquês da segurança.
  • 00:38:47Encerramento e divulgação da nova carreira de Flutter na Alura — Iago anuncia os novos cursos da carreira de Flutter na Alura, onde Priscila e William são instrutores. Ele convida os ouvintes a conhecerem a trilha, que vai desde os fundamentos até tópicos avançados como CI/CD e Fastlane. André reforça o convite e encerra o episódio agradecendo aos participantes e pedindo interação dos ouvintes nos comentários.

Dados do Episódio

  • Podcast: Hipsters Ponto Tech
  • Autor: Alura - Hipsters Network
  • Categoria: Technology Science Education
  • Publicado: 2025-10-07T03:00:11Z
  • Duração: 00:41:26

Referências


Dados do Podcast


Transcrição

[00:00:00] RIPSTERS.TEC, o podcast de tecnologia e outras modinhas.

[00:00:13] Salve, ouvintes do RIPSTERS.TEC, tá no ar mais um episódio do seu podcast favorito.

[00:00:19] Sou o André Davi, sou seu host nesse episódio.

[00:00:21] Um pouquinho antes da gravação eu tava fazendo o quê?

[00:00:23] Tava com o meu celular na mão, feliz e contente,

[00:00:27] usando, reclamando que a minha internet tava um pouco lenta,

[00:00:30] até perceber que eu não tava no Wi-Fi, eu tava no 3G.

[00:00:34] E aí a gente começa a se perguntar, e quando nem 3G tem?

[00:00:38] E quando a gente não tem conexão nenhuma?

[00:00:40] Quando a gente olha pro celular e ele olha pra gente de volta,

[00:00:43] dizendo, filho, eu não tô conectado, o que que acontece?

[00:00:46] Pois é, hoje a gente vai falar exatamente das estratégias que existem no mundo do desenvolvimento

[00:00:52] quando a gente pensa em offline first.

[00:00:55] E tem uma galera muito boa pra falar.

[00:00:57] Vamos falar comigo, vamos ver quem é.

[00:01:06] Quem tá aqui comigo é o cara que me propôs esse tema.

[00:01:10] Falou, vamos falar de problema, vamos falar de dificuldade.

[00:01:13] Eu tô falando de Iago Oliveira, coordenador educacional técnico.

[00:01:18] Tudo bem com você, Iago?

[00:01:19] Fala, galera.

[00:01:20] Hoje nós vamos tentar entender se 3G realmente funciona.

[00:01:24] Porque eu não sei com vocês, mas comigo 3G já foi que foi com Deus,

[00:01:27] quando dá 3G, meu celular não funciona mais não.

[00:01:29] Há quem diga que nunca funcionou, e eu sei que o Sr. Iago já andou tendo um papo aí nos bastidores

[00:01:35] sobre o mesmíssimo assunto com ele.

[00:01:38] William Bezerra, que é engenheiro de software, instrutor na Alura e empreendedor.

[00:01:43] Tudo bem com você, William?

[00:01:45] Fala, André. Fala, galera.

[00:01:46] Muito feliz de estar novamente aqui com vocês, conversando sobre esse tema,

[00:01:50] que quando eu tentei pra conversar com o Iago um pouquinho antes do podcast,

[00:01:53] a gente ficou quase uma hora comentando sobre isso.

[00:01:56] Gente, tem…

[00:01:57] Tem muito desafio.

[00:01:58] Eu tô super empolgado pra nós falarmos sobre isso hoje.

[00:02:00] Eu gosto de gente que tá falando de problema até agora e tá feliz, tá empolgado.

[00:02:04] Eu quero saber se a nossa terceira convidada também é assim.

[00:02:08] Eu tô falando dela, Priscila Abrambila, que é tech lead da Caju.

[00:02:12] Tudo bem com você, Priscila?

[00:02:14] Tudo certo, pessoal.

[00:02:15] Obrigada pelo convite.

[00:02:16] Eu também sou instrutora na Alura e eu também tô bem empolgada por esse papo.

[00:02:20] Confesso que tá um pouco até, digamos assim, diferente do contexto que eu tô participando hoje no meu dia a dia.

[00:02:27] E vai ser muito bom participar disso também pra contribuir e também adquirir conhecimento com vocês.

[00:02:32] Olha, eu recebi spoilers aqui que tanto você quanto o William andaram gravando aí cursos maneiríssimos.

[00:02:38] Mas a gente vai falar disso daqui a pouco.

[00:02:40] Eu quero começar esse papo aqui com um grande porquê.

[00:02:45] E por que eu quero começar esse papo com um grande porquê?

[00:02:48] Porque a gente vai lá de offline first.

[00:02:50] Quando a gente pensa em certas bolhas, principalmente bolhas geográficas,

[00:02:55] a gente tem internet.

[00:02:57] Tem internet disponível quase que como por certeza.

[00:03:00] Quem tá na cidade de São Paulo, por exemplo, pode se deslocar entre diferentes pontos

[00:03:05] com uma razoável certeza de que vai ter celular de internet ou pela operadora ou algum Wi-Fi disponível.

[00:03:13] Mas isso não é uma realidade nem no Brasil inteiro e muito menos no mundo inteiro.

[00:03:18] Então, Iago, pra gente começar essa conversa, cara, eu queria entender assim.

[00:03:21] Por que pensar em offline first?

[00:03:24] Qual que é a grande mudança?

[00:03:27] O que fica na cabeça de uma pessoa desenvolvedora quando ela considera esse cenário de que não vai ter conexão?

[00:03:32] Quando a gente fala de mobile, André, e aí eu vou até depois jogar a bola para os convidados,

[00:03:38] tem um episódio já longínquo do Hipsters que falava sobre BFF,

[00:03:43] que o Felipe Calçado fala sobre pensar em desenvolvimento mobile.

[00:03:48] A pessoa tá dentro de um trem, então ela tá dentro do metrô e aí a conexão dela não é estável.

[00:03:54] Então, pra isso, eu tenho que ter requisições menores.

[00:03:56] Isso é um além disso.

[00:03:58] Você não tem conexão.

[00:04:00] Então, seu celular, seu dispositivo, ele tem que funcionar, ele deveria, né?

[00:04:04] Ele tem poder computacional suficiente para funcionar, independente de ter internet ou não.

[00:04:09] E é uma filosofia que a gente consegue enxergar em produtos como o Google, que tem o Chrome lá dentro

[00:04:15] e quando não tem internet, o Chrome vira um joguinho.

[00:04:18] Ele vira o dinossaurinho pulando os desafios.

[00:04:22] Então, mesmo quando você não tem conectividade, você ainda tem uma experiência.

[00:04:26] O Instagram também tem esse pensamento.

[00:04:28] Quando você tem o Instagram e você não tira a internet, você não fica sem ver nada.

[00:04:33] Ele já tem alguns posts salvos pra você acessar.

[00:04:37] Fora outras realidades que eles vão compartilhar.

[00:04:39] Mas eu vou passar a bola pro William, que ele tem ali.

[00:04:42] Foi ele que cantou esta bola comigo.

[00:04:44] Então, conta aí, William, o que é que você acha dessas bolhas aí que o André comentou e eu também trouxe algumas.

[00:04:49] Valeu, Iago.

[00:04:50] Eu acho que levantou a bola muito boa, trouxe esse ponto.

[00:04:54] Mas quando o Teco tava comentando…

[00:04:56] Quando o Teco tava comentando contigo, né, tipo, que a gente vive talvez uma realidade um pouco diferente,

[00:05:00] porque hoje a gente mora no…

[00:05:02] Acho que o Iago, ele mora na capital, mas eu moro no interior do Nordeste.

[00:05:06] Então, assim, a situação pra cá, tipo, por mais que a gente tenha desenvolvimento,

[00:05:09] a gente tenha, tipo, algumas frentes muito interessantes,

[00:05:12] é muito diferente quando a gente diz em relação à conectividade.

[00:05:15] Porque, por exemplo, algumas semanas atrás eu estava em São Paulo, a gente foi viajar pro interior.

[00:05:20] Ah, a minha internet, ela não ficou em nenhum momento, oscilou.

[00:05:23] Às vezes ficou ali um pouquinho mais fraca e tal, mas eu consegui mandar uma mensagem.

[00:05:26] Ouvi uma música, etc.

[00:05:28] Agora, se eu vou viajar 60 quilômetros daqui pra casa dos meus pais,

[00:05:32] eu não tenho internet na estrada, gente.

[00:05:34] Então, assim, eu tenho que baixar as músicas no Spotify ou no YouTube,

[00:05:37] eu tenho que baixar o mapa, eu tenho que ficar ali, tipo, atento,

[00:05:41] eu tenho que saber quais são os pontos que tem internet pra poder avisar, ver alguma mensagem.

[00:05:45] Então, assim, no meu caso, eu vivo numa bolha um pouco diferente

[00:05:48] e isso, ele reflete diretamente nos aplicativos que as pessoas utilizam aqui.

[00:05:52] Então, quando eu vou pro mercado, por exemplo,

[00:05:54] hoje eu tô empreendendo dentro da TXT, que é uma software house, né?

[00:05:58] Então, eu tô liderando o time, a gente tá construindo.

[00:06:00] Então, quando eu venho pro mercado regional, onde eu vou atender empresas,

[00:06:04] eu vou construir aplicativos pra essas empresas,

[00:06:06] consequentemente, eu tenho que entender um pouco do offline first,

[00:06:09] entender o contexto disso pra poder criar uma situação e criar ali, tipo,

[00:06:13] aplicativos que se adaptem nesse contexto.

[00:06:16] Principalmente, e aí eu levanto uma bola aqui que é muito importante

[00:06:18] e que é muito influente dentro desse cenário,

[00:06:22] que é quando tu se vai trabalhar com agro.

[00:06:24] Que é algo muito específico da nossa região.

[00:06:26] Acho que todo mundo sabe que o agro é uma das grandes frentes do Brasil,

[00:06:29] economicamente falando.

[00:06:31] E quando tu vai trabalhar, por exemplo, em uma fazenda,

[00:06:33] uma fazenda média é 100 hectares, que é um milhão de metros quadrados.

[00:06:37] E por mais que tu tenha uma Starlink, que tu tenha uma rede funcionando

[00:06:40] dentro da sede da fazenda, se tu tiver um inventário a 15 quilômetros da sede,

[00:06:46] não vai funcionar a internet, cara.

[00:06:47] Então, como é que tu vai fazer isso tudo funcionar?

[00:06:49] Usa um pombo.

[00:06:51] Usa um pombo.

[00:06:52] Eu queria saber só uma coisa.

[00:06:54] Não vamos usar um pombo, né?

[00:06:55] Pelo amor de Deus.

[00:06:56] Mas, Priscila, você tinha comentado, acredito que foi aqui na abertura,

[00:06:59] você falou, não é a realidade do trabalho que eu faço hoje em dia

[00:07:03] ter que pensar offline firsts a todo momento.

[00:07:08] Talvez alguma coisa que surja mais, tipo,

[00:07:09] tá aí se a pessoa não tiver internet nessa hora, mas não do zero.

[00:07:14] É mais ou menos isso mesmo?

[00:07:15] É, então, é mais ou menos nessa linha.

[00:07:17] Pelo seguinte, né?

[00:07:18] Quando, assim, vocês conhecem a Caju, que é o aplicativo de benefícios e tudo mais.

[00:07:23] Quando você tem um aplicativo de benefícios, você tem um saldo.

[00:07:27] Saldo, no caso, dinheiro.

[00:07:29] Então, no caso disso, você precisa necessariamente refletir

[00:07:33] a situação ali naquele momento do usuário.

[00:07:36] E, assim, mesmo que a gente tenha, por exemplo, a situação de,

[00:07:39] ah, acabou a conexão, tem um aviso no app dizendo a você,

[00:07:42] está offline e tenha lá um saldo que foi o último que ele salvou.

[00:07:47] Se a pessoa, por exemplo, nesse meio tempo, foi lá,

[00:07:49] passou o cartão em algum lugar para algum alimento,

[00:07:52] aí ela consumiu daquele saldo.

[00:07:53] Só que não está refletindo no app.

[00:07:55] E aí, são questões muito delicadas que a gente acaba tendo que pensar

[00:07:58] em questão de experiência.

[00:07:59] Como que a gente comunica o usuário, por exemplo?

[00:08:01] Falar que está offline é uma alternativa.

[00:08:04] Mas aí, talvez, valha algum detalhe a mais do tipo,

[00:08:06] ah, o seu saldo pode não estar refletindo exatamente o que você tem no momento.

[00:08:11] E aí, a gente acaba tendo que pensar muito nesses detalhes

[00:08:15] de como refletir essa realidade.

[00:08:18] Qual comunicação passar para o usuário.

[00:08:19] E, além disso, o que a gente realmente, de fato,

[00:08:23] consegue salvar, por exemplo, em algo interno

[00:08:26] para exibir para o usuário a qualquer momento ou não.

[00:08:29] E aí, eu vou passar um exemplo disso,

[00:08:31] como é delicada essa questão de mexer com dinheiro.

[00:08:33] Porque aí, é um exemplo de fora da Caju.

[00:08:35] Eu tenho conta no Itaú.

[00:08:37] Aí, hoje, pensando até no tema desse podcast,

[00:08:40] eu fui acessar o app do Itaú e forçando sem conexão.

[00:08:44] Todas as sessões do app, sem brincadeira,

[00:08:46] todas aparecem, não foi possível trazer os dados,

[00:08:49] não foi possível carregar os dados.

[00:08:50] Fica assim, um bolo de não foi possível,

[00:08:52] carregar os dados.

[00:08:54] Ele não exibe nada, nem se você tivesse acessado antes

[00:08:57] e tiver consultado algum outro valor.

[00:08:59] Ele não persiste nada.

[00:09:02] E aí, como é o caso de um banco grande,

[00:09:04] aí, creio eu, que tem alguma questão também regulatória

[00:09:08] com relação a isso de que não pode exibir

[00:09:10] dado diferente de dinheiro de forma nenhuma, sabe?

[00:09:14] Isso que a Priscila comentou é muito importante

[00:09:16] e muito interessante também.

[00:09:18] Quando a gente veja como são os contextos,

[00:09:19] quando a gente pensa offline first,

[00:09:21] é como o William comentou.

[00:09:22] Ah!

[00:09:22] Nós temos situações, eu também me vivo mais ou menos que nele.

[00:09:26] Se eu andar 60 quilômetros aqui, eu já não tenho internet mais.

[00:09:29] Eu vou visitar minha irmã, eu passo quilômetros sem conexão

[00:09:33] e eu preciso fazer esses downloads,

[00:09:35] eu preciso estar preparado para isso acontecer.

[00:09:37] No contexto do agro, a Priscila acabou de dizer,

[00:09:40] ah, quando eu abro o Itaú, o aplicativo do meu banco

[00:09:43] e eu não tenho internet, ele começa a pipocar um monte de coisa.

[00:09:46] E um dos pensamentos offline first é

[00:09:48] estar sem internet não é um erro.

[00:09:50] A aplicação não quebrou.

[00:09:52] Ela só está num estado diferente.

[00:09:54] Então, eu não posso simplesmente estourar na tela um vermelhão

[00:09:57] com um aviso na cara do meu usuário.

[00:09:59] Eu tenho que tentar mostrar para ele

[00:10:01] com um UI mais bem pensado.

[00:10:04] Um exemplo foi onde eu trabalhei.

[00:10:05] Eu trabalhei numa empresa do agro,

[00:10:07] chamada AgroSmart,

[00:10:08] em que você tinha uma experiência que era

[00:10:10] bem parecida com essa que o William falou.

[00:10:12] Eu tinha um caderno de campo,

[00:10:14] o técnico saía da sede da fazenda

[00:10:16] e ia de moto, sei lá, 30 quilômetros dentro da propriedade.

[00:10:21] Quem está no Pará,

[00:10:22] e no norte sabe que são fazendas que você anda

[00:10:25] 50 quilômetros e você ainda está dentro da fazenda da pessoa,

[00:10:28] para fazer um registro de campo,

[00:10:30] porque deu problema na cana,

[00:10:31] deu problema em alguma desses cultivares ali.

[00:10:35] E aí o cara vai e faz o registro.

[00:10:36] Quando ele abre a previsão do tempo

[00:10:38] para saber o que é que ele tem que tomar de decisão

[00:10:40] numa irrigação,

[00:10:41] eu não posso simplesmente estourar para ele dizendo

[00:10:43] está vermelho, você está sem internet.

[00:10:44] Não, eu tenho que mostrar para ele um campo cinza,

[00:10:47] dizer para ele,

[00:10:48] olha, você está vendo sim a previsão do tempo,

[00:10:50] mas ela pode ter mudado.

[00:10:52] Essa é a última que você teve.

[00:10:54] Então ela não está coloridinha,

[00:10:55] ela está um pouco cinza.

[00:10:57] Ele consegue fazer a anotação normalmente

[00:10:58] e quando chega na sede da fazenda,

[00:11:01] ele consegue disparar aquilo ali.

[00:11:02] Então veja como são experiências diferentes.

[00:11:04] Um banco e o próprio Caju,

[00:11:06] que é como a Priscila comentou,

[00:11:07] trabalham com dinheiro.

[00:11:08] O dinheiro tem que ser um negócio mais fixo.

[00:11:11] E aí quando eu passo para um offline first,

[00:11:13] um pensamento offline,

[00:11:14] eu tiro essa ideia.

[00:11:15] Estar desconectado não é um problema.

[00:11:22] Mas agora, foi bom que você pegou essa bola, Iago,

[00:11:26] porque eu estava pensando nesse equilíbrio

[00:11:28] que tem entre a experiência do usuário

[00:11:30] versus a regra do negócio,

[00:11:32] que obviamente, como vocês bem trouxeram,

[00:11:35] vai mudar aquilo que eu posso ou não posso mostrar,

[00:11:37] guardar e tudo mais.

[00:11:38] Mas eu queria pensar em estratégias,

[00:11:40] porque assim, eu sou péssimo em qualquer coisa

[00:11:43] que se refira a front-end,

[00:11:44] a interação com o usuário,

[00:11:45] não é aí que está a minha força.

[00:11:47] E como que eu faço para a minha solução estratégica

[00:11:50] não ser só eu ficar escrevendo um livro,

[00:11:51] mas eu ficar escrevendo um montão de texto.

[00:11:53] Porque, de certa forma, o usuário vai abrir lá

[00:11:55] o programa que ele quer usar,

[00:11:57] o aplicativo que ele quer usar,

[00:11:58] e por mais bem escrito que esteja,

[00:12:00] olha, a gente viu que você está sem internet,

[00:12:02] mas está tudo bem.

[00:12:04] A pessoa não quer ler.

[00:12:06] Vai haver a frustração, óbvio, de estar desconectado,

[00:12:08] mas eu quero saber assim, de estratégia,

[00:12:10] o que dá para usar,

[00:12:12] primeiro nessa parte do front,

[00:12:14] para eu conseguir fazer com que o usuário

[00:12:16] tenha essa sensação de que eu previa

[00:12:18] que em algum momento ele pudesse ficar sem internet,

[00:12:20] que está tudo bem,

[00:12:21] e não como o Iago falou, que foi um erro.

[00:12:51] Mas quando o teu negócio,

[00:12:53] e aí teu produto, e teu aplicativo,

[00:12:56] ele precisa e ele pode funcionar offline,

[00:12:59] tu tem que ter isso como uma mentalidade.

[00:13:02] E aí, tipo, é uma coisa que eu brinco muito

[00:13:04] quando é esse contexto,

[00:13:04] porque tu tem sempre que pensar primeiro o seguinte,

[00:13:08] como é que o aplicativo vai funcionar sem internet?

[00:13:10] Porque se eu estou pensando,

[00:13:11] e eu tenho esse pensamento offline first,

[00:13:13] ele tem que funcionar offline,

[00:13:15] independente se eu tenho internet ou não.

[00:13:18] E aí, uma das coisas que normalmente eu abordo

[00:13:20] sempre que eu trabalho online,

[00:13:21] que eu trabalhei com os meus times,

[00:13:22] construindo projetos e aplicativos nesse sentido,

[00:13:26] é que a aplicação,

[00:13:27] ela tende a não ter tanta diferença

[00:13:30] do offline para o online.

[00:13:32] No máximo, o que muda é,

[00:13:34] vai ter uma labelzinha ali informando,

[00:13:36] olha, você está offline,

[00:13:38] mas a aplicação, ela segue funcionando.

[00:13:40] Ah, eu adicionei,

[00:13:41] eu estou fazendo cadastro,

[00:13:43] igual o Iago falou, tipo,

[00:13:45] estou vendo a previsão do tempo

[00:13:46] de 30 quilômetros da fazenda.

[00:13:48] Cara, o dado está salvo dentro do aplicativo,

[00:13:50] a última vez que o usuário

[00:13:51] entrou, a gente baixou da API,

[00:13:53] mas a gente salvou no banco de dados

[00:13:55] para a gente persistir,

[00:13:56] a gente avisa para o usuário

[00:13:57] se é um dado importante, por exemplo,

[00:13:59] olha, eu sei que esse dado é muito importante,

[00:14:01] eu sabia a hora que eu busquei ele,

[00:14:03] que eu baixei ele,

[00:14:04] então eu vou informar para o usuário,

[00:14:05] olha, a previsão do tempo é X,

[00:14:07] mas essa previsão do tempo é X,

[00:14:09] considerando que ela foi baixada

[00:14:10] há duas horas atrás,

[00:14:12] quando você saiu lá da fazenda.

[00:14:13] Então, você sempre vai pensar a aplicação

[00:14:16] que funcione bem online,

[00:14:18] mas que funcione muito melhor offline,

[00:14:20] para você não travar a experiência do usuário

[00:14:22] nesse sentido.

[00:14:23] Então, sempre a gente fala offline first

[00:14:25] justamente por isso.

[00:14:26] Antes de você pensar a experiência online,

[00:14:28] você tem que pensar a experiência offline

[00:14:30] para depois você seguir para a experiência online.

[00:14:32] Exato.

[00:14:33] E até pensando, por exemplo,

[00:14:35] em aplicações que não mexem com dinheiro

[00:14:37] até de um modo geral,

[00:14:39] seguindo um pouco nessa linha.

[00:14:40] Um exemplo que a gente tem

[00:14:41] que é uma ótima adaptação.

[00:14:44] Quando você está mexendo no WhatsApp

[00:14:46] e você está sem conexão,

[00:14:48] você envia a mensagem,

[00:14:49] ele fica com aquele ícone,

[00:14:50] no reloginho,

[00:14:51] que ele não enviou ainda.

[00:14:52] Mas ele vai ser enviado em algum momento,

[00:14:54] assim que você tiver conexão.

[00:14:56] Então, isso é uma forma de se pensar

[00:14:58] nas aplicações.

[00:14:59] Por exemplo,

[00:15:00] vou dar um exemplo.

[00:15:01] Aplicação de marcar consulta.

[00:15:03] Digamos assim, algo mais simples.

[00:15:05] Você está ali no meio

[00:15:06] e em algum momento você perdeu a conexão.

[00:15:08] Localmente, você pode salvar ali

[00:15:09] que você quer marcar aquela consulta

[00:15:11] e assim que você recuperar essa conexão,

[00:15:14] ele já manda e envia isso.

[00:15:16] E aí, caso aconteça, por exemplo,

[00:15:17] pensando já além.

[00:15:18] Vamos supor que você fez

[00:15:20] sua marcação sem internet

[00:15:21] e alguém lá no meio do caminho

[00:15:22] pegou o mesmo horário que você.

[00:15:24] Só que essa pessoa estava com internet

[00:15:25] e foi no meio.

[00:15:26] Aí, nesse caso,

[00:15:27] aí teria um sistema, por exemplo,

[00:15:29] de notificação de

[00:15:30] não foi possível marcar sua consulta

[00:15:31] e explicar que você estava sem internet

[00:15:34] ou alguma coisa assim

[00:15:35] e alguém marcou no mesmo horário.

[00:15:36] Algo do gênero, sabe?

[00:15:37] E como que vocês enxergam

[00:15:40] um pouco da questão da segurança,

[00:15:42] da confidencialidade desses dados?

[00:15:44] Porque eu estou imaginando

[00:15:45] o seguinte cenário.

[00:15:46] Eu vou lá, penso um pouquinho

[00:15:47] no offline first,

[00:15:49] mesmo sem conhecer,

[00:15:50] nem conhecer tanto,

[00:15:50] decido pela seguinte estratégia.

[00:15:52] Eu vou salvar localmente

[00:15:54] os dados que forem possíveis

[00:15:56] de se salvar aqui para a minha aplicação.

[00:15:58] Se o usuário estiver offline,

[00:15:59] eu não vou pedir uma reautenticação dele

[00:16:01] quando ele entrar,

[00:16:02] se tiver sem conexão.

[00:16:03] Então, ele vai continuar

[00:16:04] acessando aquilo local.

[00:16:05] Mas eu penso assim,

[00:16:06] pode ser o usuário

[00:16:07] que ele foi do ponto A ao ponto B

[00:16:09] e ficou sem internet por 15 minutos.

[00:16:11] Não deveria ter que reautenticar ele

[00:16:13] na volta, por exemplo.

[00:16:15] Agora, pode ser que seja um usuário

[00:16:17] que estava sem internet

[00:16:18] e aí teve o celular,

[00:16:20] o celular dele furtado

[00:16:21] e aí por uma semana

[00:16:22] esse celular ficou desconectado,

[00:16:24] duas, três,

[00:16:25] e aí quando a pessoa vai ligar de novo,

[00:16:27] eu deveria ter formas

[00:16:28] de derrubar essa autenticação.

[00:16:30] Então, quer dizer,

[00:16:31] como prever

[00:16:32] e mais do que prever,

[00:16:33] como pensar de forma estratégica

[00:16:35] também considerando

[00:16:37] os aspectos de confidencialidade,

[00:16:39] de segurança

[00:16:40] que a gente precisa ter

[00:16:41] na hora de tentar

[00:16:43] dar uma experiência melhor

[00:16:44] para o usuário.

[00:16:45] Aí a gente volta

[00:16:46] dois passos antes

[00:16:47] que são

[00:16:48] quais são as possíveis

[00:16:49] estratégias

[00:16:50] para armazenar esses dados.

[00:16:52] Porque, veja,

[00:16:52] tem criptografia,

[00:16:53] eu consigo criptografar,

[00:16:54] então eu consigo salvar com um dado.

[00:16:56] Mas aí eu tenho,

[00:16:57] dá o meu ver,

[00:16:58] não sei se a Priscila

[00:16:59] e o William concordam,

[00:17:00] mas a gente tem,

[00:17:01] eu tenho duas grandes estratégias.

[00:17:03] A primeira é

[00:17:04] uma que eu já usei

[00:17:05] em um contexto educacional

[00:17:07] onde eu tinha um SQLite

[00:17:09] dentro do dispositivo

[00:17:10] e aí era a tabela,

[00:17:12] era aquela,

[00:17:13] quem nunca sofreu com SQLite

[00:17:14] que atira a primeira pedra

[00:17:15] porque aquela miséria

[00:17:16] no Nossa Senhora,

[00:17:18] ou então no Room mesmo

[00:17:19] do Android,

[00:17:19] Android nativo,

[00:17:21] você tem as tabelinhas,

[00:17:23] você tem sincronismo,

[00:17:24] você tem migration,

[00:17:25] você tem toda aquela

[00:17:26] parafernália para poder fazer.

[00:17:28] Porque aí você não está apenas

[00:17:29] salvando o request,

[00:17:31] que aí é o segundo ponto

[00:17:32] que eu trago,

[00:17:33] mas você está realmente

[00:17:34] deixando a aplicação

[00:17:35] dentro do aparelho.

[00:17:37] Então eu tenho

[00:17:37] um relacionamento,

[00:17:38] eu tenho DR,

[00:17:39] eu tenho uma experiência

[00:17:40] muito mais ali robusta,

[00:17:42] é realmente um standalone.

[00:17:44] Ou,

[00:17:45] que é como a maioria das vezes

[00:17:46] eu consegui trabalhar

[00:17:47] porque a gente conseguia,

[00:17:48] é uma estratégia de cache,

[00:17:49] de fato.

[00:17:49] É parecido com o que a gente tem

[00:17:51] num CDN da vida.

[00:17:53] Eu salvo aquela request

[00:17:54] dentro do meu aparelho,

[00:17:56] quando tem internet

[00:17:57] eu mando ou não.

[00:17:58] Aí eu tenho estratégia

[00:17:59] de refresh token,

[00:18:00] de reautenticação

[00:18:01] para poder armazenar

[00:18:02] ele lá dentro.

[00:18:03] E aí tem N estratégias

[00:18:04] de criptografia no meio

[00:18:05] que eu posso salvar

[00:18:06] usando a própria criptografia

[00:18:07] do dispositivo

[00:18:08] que eu estou rodando.

[00:18:09] Aí depende muito

[00:18:10] de cada caso

[00:18:11] e de cada regra de negócio.

[00:18:13] Exato, Iago.

[00:18:14] Eu acho que até um ponto importante

[00:18:16] e abrindo um parêntese

[00:18:17] aqui até antes

[00:18:17] de começar a falar.

[00:18:18] A gente trouxe muito

[00:18:19] disso na formação

[00:18:20] de offline first

[00:18:21] que a gente tem aqui.

[00:18:22] Eu e o Iago,

[00:18:23] nós construímos muitas coisas

[00:18:25] aqui dentro desse aspecto

[00:18:27] como um todo.

[00:18:28] Mas quando tu vai falar

[00:18:29] sobre segurança especificamente,

[00:18:32] existem diversas abordagens.

[00:18:34] Então vai depender muito

[00:18:35] do que tu vai utilizar

[00:18:37] de tecnologia.

[00:18:38] Por exemplo,

[00:18:38] um SQ Flight,

[00:18:40] tu vai utilizar

[00:18:41] um outro banco de dados.

[00:18:42] O pessoal utilizava muito

[00:18:43] antigamente no Flutter o Hive,

[00:18:45] que era um banco de dados,

[00:18:46] que era uma estratégia

[00:18:47] de cache local

[00:18:47] que até acabou ficando

[00:18:48] um pouco depreciado.

[00:18:49] Mas tudo vai depender

[00:18:51] da maneira que tu está lidando

[00:18:53] e do teu contrato.

[00:18:54] Porque às vezes,

[00:18:55] não necessariamente sempre

[00:18:57] tu precisa ter

[00:18:58] uma segurança muito alta

[00:18:59] em alguns dados.

[00:19:00] Então, tipo,

[00:19:01] a depender do tipo de dado,

[00:19:03] a depender da estrutura,

[00:19:05] a depender da autenticação.

[00:19:07] Tem um outro ponto

[00:19:07] super legal também,

[00:19:09] que eu estou comentando aqui

[00:19:10] já com o Iago especificamente,

[00:19:12] que é sobre o Coach Base,

[00:19:13] que literalmente ele faz

[00:19:14] um dump,

[00:19:15] que é uma tecnologia

[00:19:16] muito específica.

[00:19:17] Ele pega o banco de dados

[00:19:18] que tu tem,

[00:19:19] na tua aplicação rodando,

[00:19:20] ele literalmente baixa

[00:19:22] tudo o que tu precisa

[00:19:23] para poder operar

[00:19:24] dentro do aplicativo.

[00:19:25] Tu faz todas as interações,

[00:19:26] seja online ou seja offline,

[00:19:28] tipo, dentro do próprio Coach Base.

[00:19:30] E aí, de tempos em tempos,

[00:19:32] ele vai verificando

[00:19:33] a conexão do teu dispositivo,

[00:19:35] mesmo se o teu aplicativo

[00:19:36] estiver fechado.

[00:19:37] E ele vai fazendo

[00:19:37] uma espécie de sincronismo

[00:19:39] do banco de dados

[00:19:39] que tu tem no app

[00:19:40] com o banco de dados

[00:19:41] que tu tem, tipo,

[00:19:42] dentro da aplicação.

[00:19:43] E foi das coisas

[00:19:43] que mais me surpreenderam

[00:19:44] a nível de tecnologia,

[00:19:45] tipo, olhando para essa questão

[00:19:47] de segurança.

[00:19:47] Porque ele tem

[00:19:48] uma segurança própria,

[00:19:49] tu consegue meio que fazer

[00:19:50] esse depara, tipo, muito bem

[00:19:52] entre os dois bancos,

[00:19:54] mesmo que sejam diferentes

[00:19:55] e são iguais.

[00:19:56] E, assim,

[00:19:57] se a gente for parar

[00:19:57] para pensar, por exemplo,

[00:19:58] a dados sensíveis,

[00:19:59] talvez a gente tenha

[00:20:01] que pensar um pouco

[00:20:01] sobre guardar ou não.

[00:20:03] Vamos supor que a gente

[00:20:04] queira deixar

[00:20:04] fechado no app

[00:20:05] dados pessoais, assim,

[00:20:07] para a pessoa não ter

[00:20:08] que ficar fazendo

[00:20:08] requisição e tudo mais.

[00:20:10] A gente tem também

[00:20:11] ferramentas do próprio Flutter

[00:20:13] que fazem isso,

[00:20:13] como o Secure Storage,

[00:20:15] que por baixo dos panos

[00:20:16] ele usa o Encrypted

[00:20:17] Shared Preference

[00:20:18] do Android

[00:20:19] para salvar

[00:20:19] as coisas.

[00:20:20] E o Keychain

[00:20:21] do iOS,

[00:20:23] que são duas estratégias

[00:20:24] super seguras também

[00:20:25] para salvar esses dados.

[00:20:26] Então, assim,

[00:20:27] para o usuário,

[00:20:28] ele vai ver o dado dele.

[00:20:29] Mas,

[00:20:29] para a questão de segurança,

[00:20:31] aquilo lá

[00:20:32] está seguro

[00:20:32] e não vai ser

[00:20:34] um dado que vai ser

[00:20:35] vazado, assim,

[00:20:36] muito facilmente.

[00:20:47] Pris,

[00:20:47] você tocou num ponto

[00:20:48] que foi engraçado

[00:20:48] porque a hora

[00:20:49] que vocês

[00:20:49] estavam falando,

[00:20:50] eu estava pensando

[00:20:51] justamente que lá

[00:20:52] na apresentação,

[00:20:55] vocês são de Flutter, né?

[00:20:57] Vocês curtem um Flutter,

[00:20:58] adoram um Flutter.

[00:20:59] E o Iago, não.

[00:21:00] Eu sei que o Iago

[00:21:00] só gosta de React,

[00:21:02] que de manhã

[00:21:02] ele bota a camisa dele

[00:21:03] do React,

[00:21:04] acorda e vai tomar café.

[00:21:07] Mas os demais…

[00:21:08] O que foi que eu lhe fiz?

[00:21:09] O que foi que eu lhe causei?

[00:21:11] Vá, me fale.

[00:21:12] Eu lhe xinguei,

[00:21:13] eu falei mal do Java.

[00:21:14] Só estou tentando

[00:21:15] causar distúrbios

[00:21:16] aqui no lore,

[00:21:17] no lore do Hipsters.

[00:21:19] Mas, falando em Flutter,

[00:21:19] falando especificamente

[00:21:20] do nosso amigo Flutter,

[00:21:22] o que ele traz

[00:21:23] de recursos

[00:21:25] que privilegiam

[00:21:26] ou talvez que favoreçam

[00:21:28] um pouquinho

[00:21:28] esse pensamento

[00:21:30] de offline first?

[00:21:32] Ou é algo

[00:21:33] que é tão anterior

[00:21:35] que meio que independe

[00:21:37] de você estar usando

[00:21:38] Flutter, React

[00:21:39] ou o que quer que tenha

[00:21:40] sido feliz na sua vida?

[00:21:41] Como que vocês

[00:21:42] trazem essa questão?

[00:21:43] Eu acho que,

[00:21:44] independente da ferramenta

[00:21:46] que você for usar,

[00:21:47] você vai ter meios

[00:21:47] para fazer essa…

[00:21:49] para fazer essa

[00:21:49] a forma de guardar

[00:21:50] os dados de forma segura

[00:21:51] ou de você ver

[00:21:53] se você vai consultar

[00:21:54] ou não algo local

[00:21:55] ou se você vai fazer

[00:21:56] uma requisição

[00:21:57] dependendo da conectividade.

[00:21:58] Isso, pelo menos

[00:21:59] de todas que eu mexi,

[00:22:00] no caso, Flutter e React,

[00:22:02] todas elas conseguem

[00:22:04] provar isso para a gente.

[00:22:05] Mas aí, uma coisa,

[00:22:06] aí eu vou ter que puxar

[00:22:07] a sardinha para o Flutter,

[00:22:08] que é uma coisa

[00:22:08] que eu gosto muito,

[00:22:10] é um ponto específico

[00:22:11] do Flutter

[00:22:11] que é a questão do clean-ar,

[00:22:13] que é quando ele tem lá

[00:22:14] a camada dos repositories

[00:22:16] e a parte do data source,

[00:22:18] quando você vai fazer

[00:22:19] a consulta,

[00:22:20] que você consegue fazer ali

[00:22:21] uma…

[00:22:22] meio que ali

[00:22:23] você consegue declarar

[00:22:24] se você está com conectividade

[00:22:26] ou não

[00:22:26] e dependendo disso

[00:22:27] você ou vai

[00:22:28] para o data source

[00:22:29] remoto

[00:22:30] ou você vai para o local

[00:22:31] que daí você consulta

[00:22:33] do storage.

[00:22:34] E aí, isso é uma coisa

[00:22:35] que facilita

[00:22:35] a compreensão

[00:22:36] para quem está

[00:22:37] lendo o código também.

[00:22:38] Isso que a Priscila falou

[00:22:39] é legal.

[00:22:40] Tem uma diferença

[00:22:40] entre eu ter conectividade

[00:22:42] e eu ter uma conexão.

[00:22:44] Eu estar conectado

[00:22:45] no Wi-Fi

[00:22:46] não me garante

[00:22:46] absolutamente nada

[00:22:47] que eu tenha internet.

[00:22:49] Então,

[00:22:49] eu não posso simplesmente

[00:22:50] medir se eu estou conectado

[00:22:51] ou não,

[00:22:52] que tem um package

[00:22:53] inclusive famoso

[00:22:54] na comunidade do Flutter

[00:22:55] que é o

[00:22:56] Connectivity Plus,

[00:22:57] que ele mede

[00:22:58] se você tem conexão.

[00:23:00] Então, ele vai olhar

[00:23:00] se eu tenho 4G,

[00:23:01] se eu tenho 5G,

[00:23:02] se eu tenho Wi-Fi,

[00:23:03] mas ele não mede

[00:23:04] essa qualidade.

[00:23:05] Então, eu tenho

[00:23:05] que testar isso também.

[00:23:07] Ah, eu consigo

[00:23:08] bater no endpoint

[00:23:09] que eu preciso

[00:23:10] para poder

[00:23:11] fazer essa comunicação?

[00:23:13] Porque se eu tiver

[00:23:14] no Wi-Fi que é limitado,

[00:23:15] às vezes eu estou

[00:23:15] no Wi-Fi de faculdade

[00:23:17] que todos nós aqui

[00:23:18] já passamos por isso,

[00:23:19] ou então eu estou

[00:23:19] no Wi-Fi público

[00:23:20] que está terrível,

[00:23:21] ou então eu estou

[00:23:22] dentro de um estádio

[00:23:24] com um show,

[00:23:25] estou dentro de um show

[00:23:25] que está congestionada

[00:23:26] a antena,

[00:23:27] eu não estou conseguindo

[00:23:28] fazer transação.

[00:23:29] E aí, eu tenho que fazer

[00:23:30] essa verificação também.

[00:23:32] Só queria comentar

[00:23:33] que eu não tinha nem pensado

[00:23:34] nesse caso que você citou,

[00:23:35] Iago,

[00:23:35] de que quem caiu

[00:23:36] às vezes não fui eu,

[00:23:37] foi o servidor

[00:23:38] lá do outro lado

[00:23:39] e eu preciso garantir

[00:23:40] algum termo de,

[00:23:41] algum tipo, né,

[00:23:42] de experiência ali

[00:23:44] para o meu usuário.

[00:23:45] E aí, eu acho que

[00:23:46] entra, tipo, novamente,

[00:23:47] eu gosto muito de frisar

[00:23:48] porque o offline,

[00:23:49] ele precisa ser um modo

[00:23:50] de, o offline first,

[00:23:51] ele tem que ser um modo

[00:23:52] de pensar

[00:23:52] a depender do teu contexto, né?

[00:23:55] E o que eu mais gosto,

[00:23:56] tipo, dentro do Flutter

[00:23:57] e o que o Flutter

[00:23:58] traz de diferença,

[00:24:00] tipo,

[00:24:00] frente às outras tecnologias,

[00:24:02] pelo menos,

[00:24:03] na minha opinião,

[00:24:04] baseado completamente

[00:24:05] na minha opinião,

[00:24:06] é justamente o que a Pri

[00:24:08] trouxe.

[00:24:08] A gente conseguir, tipo,

[00:24:10] tanto olhar a conexão,

[00:24:11] mas também a gente conseguir

[00:24:12] ali, tipo,

[00:24:14] lidar com pontos

[00:24:15] e com nuances específicas

[00:24:17] de,

[00:24:18] de qual é o ponto

[00:24:19] de qual dado utilizar,

[00:24:20] de como utilizar.

[00:24:21] Grande maioria

[00:24:22] dos clients

[00:24:23] dentro do Flutter,

[00:24:23] eles já vêm com algumas

[00:24:24] estratégias de cache.

[00:24:25] Então, tipo,

[00:24:26] quando tu vai trabalhar,

[00:24:27] por exemplo,

[00:24:28] o GraphQL,

[00:24:29] que já é algum,

[00:24:30] que é até um outro assunto

[00:24:31] que a gente comentou

[00:24:31] num podcast anterior,

[00:24:32] inclusive a gente falou

[00:24:33] um pouco sobre o offline,

[00:24:34] mas entra justamente

[00:24:35] esse ponto.

[00:24:36] Tu consegue ter queries

[00:24:37] com tipos de cache específico,

[00:24:39] a depender do contexto.

[00:24:41] Tu só pode trabalhar

[00:24:41] com online,

[00:24:42] tu só pode trabalhar

[00:24:42] com online ou offline.

[00:24:44] Então, tu consegue ter ali,

[00:24:45] dentro da comunidade,

[00:24:46] dentro das coisas

[00:24:47] que estão dentro do Flutter,

[00:24:49] essa possibilidade

[00:24:50] de tu trabalhar

[00:24:52] com o offline first,

[00:24:53] com esse pensamento

[00:24:54] offline first

[00:24:55] de uma maneira

[00:24:55] mais simplificada.

[00:24:56] Porque tu consegue

[00:24:57] tanto olhar a conexão

[00:24:58] como também entender

[00:24:59] os clients

[00:25:00] e já estão tudo,

[00:25:01] e todos já estão

[00:25:02] bem adaptados

[00:25:02] pra poder tu conseguir,

[00:25:03] tipo, lidar

[00:25:04] e encorpar isso

[00:25:05] dentro da tua aplicação.

[00:25:06] Olha, quais são, então,

[00:25:09] os grandes desafios?

[00:25:12] Qual que é a maior dor

[00:25:13] de barriga

[00:25:14] aos pensar em mobile first?

[00:25:15] Porque a gente tá falando

[00:25:16] de coisas que são

[00:25:17] tão diferentes, assim,

[00:25:18] que vão algumas,

[00:25:19] de, bom,

[00:25:20] quem definiu essa regra

[00:25:21] de negócio,

[00:25:22] quem definiu o que pode

[00:25:23] ou não pode ser mostrado,

[00:25:24] tem coisas que passam por,

[00:25:26] ah, tá,

[00:25:27] por quanto tempo

[00:25:28] que essa sessão vai ser mantida,

[00:25:29] qual linguagem eu tô usando,

[00:25:31] eu sei que depende,

[00:25:33] que tem uma variedade imensa.

[00:25:34] Mas eu queria saber de vocês,

[00:25:36] pra além do depende,

[00:25:37] onde que vocês enxergam

[00:25:38] a maior dificuldade?

[00:25:40] Se é,

[00:25:41] apesar de ser Flutter,

[00:25:42] na diferença dos ecossistemas

[00:25:44] Apple, Android,

[00:25:45] se é,

[00:25:46] em alguma particularidade

[00:25:47] do serviço,

[00:25:48] da regra,

[00:25:49] de negócio,

[00:25:50] se é,

[00:25:51] na parte da criptografia,

[00:25:52] porque tem várias coisas

[00:25:53] que eu pensava

[00:25:53] que fossem ser problemas,

[00:25:55] e vocês já resolveram aqui

[00:25:56] com um importe,

[00:25:58] uma classe,

[00:25:59] e foram pra galera.

[00:26:01] Então,

[00:26:01] contem um pouquinho pra nós

[00:26:02] onde que aperta o calo.

[00:26:04] Um dos que eu posso citar é,

[00:26:07] eu trabalhando naquela aplicação

[00:26:08] que eu comentei sobre educação,

[00:26:10] ela foi pensada pra rodar

[00:26:11] num tablet dentro de sala de aula.

[00:26:13] Então, era o aplicativo

[00:26:14] do professor em sala de aula,

[00:26:16] e aí,

[00:26:17] pra lembrar,

[00:26:18] turmas de fundamento,

[00:26:19] o fundamental menor

[00:26:20] é um professor

[00:26:21] pra todas as disciplinas.

[00:26:23] E aí, você fica dando ali

[00:26:24] pra assistência.

[00:26:25] Mas quando você parte

[00:26:26] pra os fundamental menor,

[00:26:28] fundamental maior,

[00:26:29] perdão,

[00:26:30] são vários professores.

[00:26:31] E aí, todos eles

[00:26:32] tinham que entrar e logar.

[00:26:34] E todos eles

[00:26:34] têm os seus próprios

[00:26:35] planos de aula,

[00:26:36] todos eles têm

[00:26:37] seus próprios conteúdos,

[00:26:39] todos eles têm cada um.

[00:26:40] Então, todos eles faziam

[00:26:41] login naquele bendito tablet.

[00:26:43] Você tinha que fazer

[00:26:43] a troca de usuário

[00:26:45] offline com frequência.

[00:26:46] Isso, e manter os dados

[00:26:47] do usuário

[00:26:48] pra cada usuário.

[00:26:49] E sincronizar

[00:26:50] cada usuário

[00:26:51] dentro do seu próprio contexto.

[00:26:53] Um outro caso

[00:26:54] que eu posso citar,

[00:26:55] a gente fala muito

[00:26:56] de conexão,

[00:26:57] pensa em agro,

[00:26:58] mas, às vezes,

[00:26:58] a gente não precisa ir

[00:26:59] pro horizonte,

[00:27:00] a gente pode descer.

[00:27:01] Tem lição de fábrica

[00:27:03] que você tem

[00:27:03] a maquinário

[00:27:04] que você tá dando

[00:27:05] manutenção,

[00:27:06] tendo que fazer plano

[00:27:07] de qualquer jeito,

[00:27:08] pra baixo.

[00:27:09] Então, eu preciso descer

[00:27:10] três, quatro níveis

[00:27:11] no subsolo

[00:27:12] pra poder dar manutenção

[00:27:13] numa bomba,

[00:27:14] numa maquinária,

[00:27:15] alguma coisa nesse sentido

[00:27:16] industrial.

[00:27:17] E lá, obviamente,

[00:27:18] não pega nem calor,

[00:27:19] não pega amor,

[00:27:20] não pega nada,

[00:27:21] é só cinza,

[00:27:21] máquina e graxa.

[00:27:22] Como é que eu faço isso?

[00:27:23] E aí, eu tenho

[00:27:24] várias máquinas,

[00:27:25] eu tenho vários setores

[00:27:27] que vão pegar

[00:27:27] o mesmo aparelho.

[00:27:28] Então, veja como complica.

[00:27:30] Eu já não tenho mais

[00:27:31] apenas o ecossistema

[00:27:32] de um usuário só

[00:27:33] que a gente tá pensando,

[00:27:33] porque o celular,

[00:27:34] ele é um…

[00:27:35] é pessoal e intransferível.

[00:27:37] Deveria.

[00:27:37] Mas aí, você…

[00:27:38] E como é que você faz agora,

[00:27:40] sendo que você tem

[00:27:40] 30 usuários

[00:27:41] usando o mesmo dispositivo

[00:27:42] e tendo que funcionar

[00:27:43] offline,

[00:27:44] e tendo que sincronizar?

[00:27:45] E aí, eu acho que

[00:27:46] eu já puxo aqui

[00:27:47] pro meu lado,

[00:27:47] porque eu brinco

[00:27:49] desse cunhado,

[00:27:50] é muito parecido,

[00:27:50] mas apesar da gente

[00:27:51] estar quase 2 mil quilômetros

[00:27:52] de distância,

[00:27:53] mesmo estando dentro

[00:27:54] do Nordeste.

[00:27:55] Porque eu passei

[00:27:56] pelas mesmas experiências,

[00:27:57] só que em contextos

[00:27:58] diferentes.

[00:27:59] E aí, eu acho que

[00:28:00] entra talvez

[00:28:01] duas grandes dores

[00:28:02] que eu tenho aqui,

[00:28:03] que eu tive durante

[00:28:03] esse processo.

[00:28:04] A primeira grande dor

[00:28:06] que aconteceu

[00:28:07] no meu contexto

[00:28:08] foi o seguinte,

[00:28:08] eu tinha uma aplicação

[00:28:09] online,

[00:28:10] que ela funcionava

[00:28:11] perfeitinho,

[00:28:12] bem bacana,

[00:28:13] 100% online, etc.

[00:28:15] E aí, eles precisaram

[00:28:17] migrar essa aplicação

[00:28:18] pra ela funcionar

[00:28:18] offline,

[00:28:19] first.

[00:28:20] Ou seja,

[00:28:20] ela não foi pensada

[00:28:21] novamente nesse quesito,

[00:28:24] só que aí a gente

[00:28:24] teve que construir

[00:28:25] a aplicação

[00:28:26] e adaptar a aplicação

[00:28:27] que não foi preparada

[00:28:29] pro offline,

[00:28:29] pra funcionar offline.

[00:28:31] E aí, o que aconteceu?

[00:28:32] Era também

[00:28:32] uma empresa do agro,

[00:28:35] que tu tinha a sede

[00:28:36] onde todo mundo

[00:28:37] controlava tudo,

[00:28:38] tinha conexão

[00:28:39] com a internet,

[00:28:39] rede interna,

[00:28:40] a aplicação funcionava

[00:28:41] bonitinha,

[00:28:42] só que tu tinha

[00:28:43] uma série de inventários

[00:28:44] dentro da fazenda,

[00:28:46] se eu não me engano,

[00:28:47] cerca de 10 quilômetros

[00:28:48] entre um império

[00:28:49] de um inventário

[00:28:49] e outro,

[00:28:50] aonde ficavam

[00:28:51] meio que os insumos

[00:28:52] pra fazer a execução

[00:28:53] da operação ali,

[00:28:54] com centenas,

[00:28:56] se quiser,

[00:28:57] até milhares

[00:28:57] de itens,

[00:28:58] aonde o usuário

[00:28:59] ia ter que pegar

[00:29:00] o seu aplicativozinho,

[00:29:02] pegar item a item,

[00:29:04] registrar offline

[00:29:04] e voltar.

[00:29:06] E o banco de dados

[00:29:07] era indexado

[00:29:08] com ints,

[00:29:10] ou seja,

[00:29:11] nós tínhamos

[00:29:11] tínhamos um probleminho

[00:29:14] muito sério,

[00:29:15] eu baixei os dados

[00:29:16] do banco de dados,

[00:29:17] ok,

[00:29:17] o último item

[00:29:18] foi o 100,

[00:29:19] o próximo item

[00:29:20] vai ser o 101,

[00:29:21] certo?

[00:29:22] Só que eu tenho

[00:29:22] 6 pessoas

[00:29:23] usando o aplicativo

[00:29:24] ao mesmo tempo,

[00:29:26] como é que eu vou gerar

[00:29:27] os,

[00:29:27] beleza,

[00:29:27] eu posso até

[00:29:28] gerar os dados lá,

[00:29:29] tipo,

[00:29:30] sem gerar índice

[00:29:31] e depois tentar

[00:29:31] sincronizar

[00:29:32] pra poder gerar,

[00:29:33] só que o banco de dados

[00:29:34] ainda se ele não

[00:29:35] tava gerando,

[00:29:36] enfim gente,

[00:29:36] foi um desafio

[00:29:37] muito complexo,

[00:29:39] mas a gente meio que

[00:29:40] pegou espaços

[00:29:41] de identificadores,

[00:29:44] delegou pra cada usuário,

[00:29:45] ou seja,

[00:29:46] a gente sabia que

[00:29:46] tinha cerca de

[00:29:47] mil a dois mil itens

[00:29:49] por inventário

[00:29:50] e cada usuário

[00:29:50] ia fazer isso

[00:29:51] 30,

[00:29:51] 50 vezes por mês,

[00:29:53] então o que é que

[00:29:54] nós pegamos?

[00:29:54] Fizemos o espaço

[00:29:55] de 100 mil

[00:29:56] identificadores

[00:29:57] e entregamos

[00:29:58] pra cada usuário,

[00:29:59] aqui meu amigo,

[00:30:00] quando você completar

[00:30:01] os seus identificadores,

[00:30:02] a gente passa pra outro,

[00:30:04] mas foi uma condição

[00:30:05] muito específica,

[00:30:07] uma solução que

[00:30:08] foge muito

[00:30:09] do convencional,

[00:30:10] mas é quando

[00:30:10] tu pega uma solução

[00:30:11] que ela não foi pensada

[00:30:12] pro offline,

[00:30:13] tu tem que trazer

[00:30:14] essas adaptações,

[00:30:15] porque senão

[00:30:15] acaba, tipo,

[00:30:16] perdendo,

[00:30:17] e aí já pra fechar

[00:30:18] a gente,

[00:30:18] tipo,

[00:30:19] sobre o meu

[00:30:19] outro desafio,

[00:30:20] foi justamente

[00:30:21] a questão da

[00:30:22] sincronização

[00:30:22] desses dados,

[00:30:23] porque tu pensa,

[00:30:24] cara,

[00:30:25] uma coisa é tu

[00:30:25] sincronizar 10 itens,

[00:30:27] o usuário foi lá,

[00:30:28] inseriu 10,

[00:30:29] fez 10 interações

[00:30:31] dentro da aplicação,

[00:30:32] voltou a internet

[00:30:32] e sincronizou,

[00:30:33] agora tu pensa,

[00:30:34] o cara tá ali

[00:30:35] pela manhã,

[00:30:35] ele foi e registrou

[00:30:36] 20 mil itens

[00:30:37] dentro da aplicação,

[00:30:39] ele voltou

[00:30:39] no final do dia,

[00:30:40] 8 horas depois,

[00:30:41] ele passou o dia

[00:30:41] todinho só bipando

[00:30:42] o item pelo aplicativo.

[00:30:43] Gente,

[00:30:44] pra tu sincronizar

[00:30:45] 20 mil itens

[00:30:46] em uma API,

[00:30:47] cara,

[00:30:48] surreal,

[00:30:49] então,

[00:30:49] tipo,

[00:30:50] tem que lidar

[00:30:50] muito bem

[00:30:51] com log,

[00:30:53] tem que entender

[00:30:53] o que que tá acontecendo,

[00:30:55] tem que,

[00:30:55] tipo assim,

[00:30:56] tu tem que ter um controle

[00:30:57] pro usuário saber

[00:30:58] o que foi que aconteceu,

[00:30:59] então,

[00:30:59] tipo assim,

[00:30:59] não é só tu chegar,

[00:31:00] tu pegar os 20 mil itens,

[00:31:01] ah,

[00:31:02] vou chamar um post aqui,

[00:31:03] jogar dentro do board

[00:31:04] e tá aí,

[00:31:04] se vira pra ele.

[00:31:05] Não,

[00:31:06] cara,

[00:31:06] não vai dar certo,

[00:31:07] então,

[00:31:07] tipo assim,

[00:31:07] tem que ter um certo controle

[00:31:08] ali dentro dessa aplicação

[00:31:10] e a gente teve que ter

[00:31:11] esse certo controle

[00:31:12] pra garantir que

[00:31:13] quando fosse fazer

[00:31:14] o sincronismo,

[00:31:15] a gente,

[00:31:15] por exemplo,

[00:31:16] quebrasse esses itens

[00:31:17] em splits,

[00:31:19] por exemplo,

[00:31:19] uma requisição HTTP,

[00:31:21] ela tem um limite,

[00:31:22] eu não posso mandar

[00:31:22] 20 mil itens

[00:31:23] porque senão

[00:31:23] ela vai quebrar,

[00:31:24] ela vai dar um erro

[00:31:25] de memória,

[00:31:26] então,

[00:31:27] tipo,

[00:31:27] teve que quebrar,

[00:31:28] a gente teve que lidar

[00:31:29] com especificamente retornos,

[00:31:31] então,

[00:31:31] por exemplo,

[00:31:32] na versão inicial,

[00:31:33] nós não tínhamos lidado

[00:31:34] com isso,

[00:31:34] o que que aconteceu?

[00:31:35] O usuário passou o dia todinho

[00:31:36] e chegou lá

[00:31:37] e ele foi sincronizar

[00:31:38] erro.

[00:31:39] Aí, tipo assim,

[00:31:39] mas deu erro no quê?

[00:31:40] O que que não foi sincronizado?

[00:31:42] O que foi que aconteceu?

[00:31:45] Então,

[00:31:45] tipo,

[00:31:45] a gente teve que tomar

[00:31:46] um certo cuidado

[00:31:47] em relação a isso

[00:31:47] porque no final

[00:31:48] a experiência do usuário

[00:31:49] é muito importante

[00:31:50] principalmente

[00:31:51] nessas questões

[00:31:52] de ser uma requisição

[00:31:54] muito grande,

[00:31:54] de ter espaços

[00:31:55] muito grandes,

[00:31:56] mas,

[00:31:56] gente,

[00:31:56] foram só esses dois

[00:31:57] probleminhas.

[00:31:59] E assim,

[00:32:00] do meu lado,

[00:32:01] assim,

[00:32:01] puxando um pouco

[00:32:02] a questão da dificuldade,

[00:32:03] apesar de não ter tido

[00:32:05] um grande acontecimento,

[00:32:06] assim,

[00:32:07] que tivesse causado

[00:32:08] algum problema,

[00:32:09] eu acho que o desafio mesmo

[00:32:10] tá no dia a dia

[00:32:10] de como a gente vai fazer

[00:32:12] experiência pra pessoa

[00:32:13] que tá lá e lidar

[00:32:14] do que tem muita coisa

[00:32:15] que a gente simplesmente

[00:32:16] não pode exibir

[00:32:17] desatualizado,

[00:32:18] sabe?

[00:32:18] Ou até,

[00:32:19] dando um exemplo,

[00:32:20] assim, né,

[00:32:21] vamos lá,

[00:32:21] a pessoa tá,

[00:32:22] tem lá o caju,

[00:32:23] ela tá numa empresa,

[00:32:24] aí ela sai pra outra

[00:32:25] que também tem caju.

[00:32:27] No aplicativo dela,

[00:32:28] ela tem que trocar

[00:32:29] de empresa.

[00:32:30] Só que isso não pode

[00:32:31] estar desincronizado

[00:32:31] porque a partir do momento

[00:32:33] que ela seleciona

[00:32:34] a empresa dela,

[00:32:35] quando ela for

[00:32:36] usar o cartãozinho dela,

[00:32:37] ela vai tá pegando

[00:32:38] o saldo da nova empresa.

[00:32:39] Se isso tá diferente

[00:32:40] e a pessoa for consultar,

[00:32:42] ela vai pensar,

[00:32:42] pô,

[00:32:43] mas por que

[00:32:43] que não tá funcionando?

[00:32:44] Entendeu?

[00:32:45] Porque daí,

[00:32:46] vamos supor,

[00:32:46] ela tava offline,

[00:32:47] resolveu trocar,

[00:32:47] vamos supor que

[00:32:48] deu sucesso,

[00:32:49] entre aspas,

[00:32:50] mas isso não,

[00:32:51] de fato,

[00:32:51] não aconteceu,

[00:32:52] não vai tá refletindo

[00:32:54] a realidade

[00:32:54] e aí ela vai começar

[00:32:56] a ficar confusa

[00:32:57] e vai prejudicar

[00:32:58] toda a experiência

[00:32:59] onde ela vai achar

[00:33:00] que o cartão dela

[00:33:01] não tá funcionando

[00:33:02] ou qualquer coisa do tipo.

[00:33:03] Então,

[00:33:04] é basicamente

[00:33:05] nesses detalhes

[00:33:06] que a gente acaba

[00:33:06] tendo que prestar atenção,

[00:33:07] sabe?

[00:33:11] Eu tô tendo

[00:33:12] tantas emoções

[00:33:13] nesse papo,

[00:33:14] eu tô aqui

[00:33:14] me retorcendo

[00:33:15] e olha que eu bato palma,

[00:33:16] que eu fico feliz,

[00:33:18] que eu,

[00:33:18] isso que é uma boa

[00:33:19] POG,

[00:33:20] a boa e velha

[00:33:21] programação orientada

[00:33:22] a gambiarra,

[00:33:22] mais aplicada

[00:33:24] no lugar certo,

[00:33:25] pô,

[00:33:25] adorei,

[00:33:26] mas teve esses momentos

[00:33:27] de tensão também

[00:33:28] e aí eu fico pensando

[00:33:29] bastante

[00:33:30] na galera que tá

[00:33:31] acompanhando a gente

[00:33:32] e que talvez esteja

[00:33:33] no começo da jornada,

[00:33:34] porque pra galera

[00:33:35] que tá no meio

[00:33:36] da jornada ali,

[00:33:37] trabalhando com o MOBA

[00:33:38] há algum tempo,

[00:33:39] talvez esse assunto

[00:33:40] já tenha surgido aí

[00:33:41] por uma demanda

[00:33:42] do trabalho,

[00:33:42] mas pra quem tá

[00:33:43] no comecinho

[00:33:43] tá pensando,

[00:33:45] ó meu Deus,

[00:33:46] tem tanta coisa

[00:33:47] pra estudar,

[00:33:48] tanta coisa

[00:33:49] pra entender,

[00:33:50] é tanto nome,

[00:33:51] é tanto isso,

[00:33:52] pra vocês três

[00:33:53] que tão aqui,

[00:33:54] que por acaso

[00:33:54] também são professores,

[00:33:56] são instrutores,

[00:33:57] também se preocupam

[00:33:58] em como que

[00:33:59] ajudar as pessoas

[00:34:00] a partirem do básico,

[00:34:01] quando que é a hora

[00:34:03] de eu começar

[00:34:04] a ter

[00:34:04] esse tipo

[00:34:06] de preocupação

[00:34:06] e de ter a preocupação

[00:34:08] de aprender

[00:34:08] os conteúdos

[00:34:09] que vêm com ela,

[00:34:10] porque vocês falaram

[00:34:10] de login,

[00:34:11] por exemplo,

[00:34:12] que vamos combinar,

[00:34:13] não é a primeira coisa

[00:34:14] que você estuda,

[00:34:15] ela acaba aparecendo ali

[00:34:16] um pouquinho depois,

[00:34:17] vocês falaram bastante

[00:34:19] de entender

[00:34:20] a diferença

[00:34:20] de conectividade,

[00:34:21] conexão,

[00:34:22] quer dizer,

[00:34:23] exige também

[00:34:23] uma certa maturidade

[00:34:25] de compreensão tecnológica,

[00:34:27] que às vezes

[00:34:27] quem tá começando ali

[00:34:28] ainda não tem,

[00:34:29] então,

[00:34:29] qual vocês

[00:34:30] consideram

[00:34:31] que é o momento,

[00:34:33] qual que é a hora

[00:34:34] de quem tá acompanhando

[00:34:35] a gente começar

[00:34:35] a pensar,

[00:34:36] opa,

[00:34:37] eu preciso

[00:34:38] estudar um pouquinho

[00:34:39] disso,

[00:34:39] eu preciso entender

[00:34:40] um pouco isso,

[00:34:41] pra não ser pego

[00:34:42] de surpresa?

[00:34:43] Acho que quando

[00:34:44] você consegue

[00:34:45] construir uma aplicação

[00:34:46] visualmente,

[00:34:47] a gente fidedigna

[00:34:48] ao projeto

[00:34:49] que ele foi colocado,

[00:34:50] quando tem um domínio

[00:34:51] de tela da construção,

[00:34:53] e eu não falo isso

[00:34:54] apenas de Flutter,

[00:34:55] eu falo isso

[00:34:55] de qualquer uma,

[00:34:56] então,

[00:34:57] se eu tô no iOS,

[00:34:58] por exemplo,

[00:34:58] eu vou primeiro

[00:34:59] aprender Swift,

[00:35:00] Swift UI,

[00:35:01] vou construir as telinhas,

[00:35:02] storyboards,

[00:35:03] etc,

[00:35:04] aí, beleza,

[00:35:04] eu consigo construir isso,

[00:35:06] aí eu já vou começar

[00:35:07] a ter alguns BOs

[00:35:08] como o que a gente citou,

[00:35:09] um pouco mais complexo,

[00:35:10] então, beleza,

[00:35:11] agora eu vou ver Core Data,

[00:35:12] que é o banco de dados

[00:35:13] dentro do iOS,

[00:35:14] o padrão,

[00:35:15] a mesma coisa

[00:35:16] o Android,

[00:35:16] ah, já sei

[00:35:17] construir,

[00:35:17] uma tela em Jetpack Compose,

[00:35:19] tô lá,

[00:35:20] atendi,

[00:35:21] já consigo andar,

[00:35:22] já consigo navegar ali

[00:35:23] por esses mares

[00:35:24] de uma forma

[00:35:24] bem mais tranquila,

[00:35:26] vamos dar uma olhada

[00:35:26] no Room agora,

[00:35:27] agora eu quero dar uma olhada,

[00:35:29] porque quando você evolui,

[00:35:30] vou falar offline first,

[00:35:31] veja,

[00:35:31] a gente falou

[00:35:32] de background tasking,

[00:35:33] a gente botou uma tarefa

[00:35:34] em background

[00:35:35] pra poder fazer

[00:35:35] essa conexão,

[00:35:37] falamos de medição,

[00:35:37] então essas coisas

[00:35:38] acabam aparecendo

[00:35:39] depois que você

[00:35:40] conhece a ferramenta,

[00:35:41] se você não conseguir

[00:35:42] construir alguma coisa ainda,

[00:35:45] visualmente falando,

[00:35:46] você vai bater

[00:35:47] uma tela em Jetpack Compose,

[00:35:47] você vai bater cabeça

[00:35:48] até umas horas,

[00:35:48] porque você vai estar

[00:35:49] com duas atenções,

[00:35:50] eu tô tendo que entender

[00:35:51] como eu construo um botão,

[00:35:52] como eu construo um texto,

[00:35:53] ao mesmo tempo que eu tô tendo

[00:35:55] que entender banco de dados,

[00:35:56] eu tô tendo que entender

[00:35:57] como funciona a conexão,

[00:35:58] e não negligenciar

[00:36:00] a parte de redes,

[00:36:02] a parte de que você

[00:36:03] tem que entender

[00:36:03] como um HTTP funciona,

[00:36:06] como a conexão de rede funciona,

[00:36:08] as camadas lá

[00:36:09] que todo mundo vê

[00:36:10] na faculdade

[00:36:11] ou vê em textos,

[00:36:11] a gente às vezes

[00:36:12] negligencia isso,

[00:36:14] e é uma parte fundamental

[00:36:15] pra você entender

[00:36:15] onde está o problema

[00:36:16] da sua aplicação,

[00:36:17] onde é que tá,

[00:36:18] onde eu vou resolver aquilo.

[00:36:20] E aí eu acho que

[00:36:21] já emendando

[00:36:21] o que o Iago falou,

[00:36:23] o brinco que a primeira vez

[00:36:25] que tu vai usar

[00:36:25] o offline first

[00:36:26] na tua vida,

[00:36:27] é quando tu começa

[00:36:28] a usar API

[00:36:29] com autenticação,

[00:36:30] então possivelmente

[00:36:31] a primeira vez

[00:36:32] que tu vai usar

[00:36:33] algo offline

[00:36:33] dentro do teu aplicativo

[00:36:35] é quando tu fizer

[00:36:35] a tua primeira tela de login,

[00:36:37] que tu já sabe

[00:36:37] como o Iago falou,

[00:36:38] construir tela,

[00:36:40] entender como

[00:36:40] a API funciona,

[00:36:42] conseguiu fazer a requisição,

[00:36:44] recebeu o token do usuário,

[00:36:45] agora você vai salvar,

[00:36:46] até porque não dá

[00:36:47] pra usar

[00:36:47] até o usuário

[00:36:47] ficar toda vez

[00:36:48] tendo que logar

[00:36:50] porque você não consegue

[00:36:51] salvar o seu token

[00:36:52] dentro ali

[00:36:53] do banco de dados

[00:36:54] do aplicativo.

[00:36:55] Então,

[00:36:56] acho que a pessoa

[00:36:56] começa ali

[00:36:57] com shared preference,

[00:36:58] com algo mais básicozinho

[00:36:59] nesse sentido,

[00:37:00] com pequenas tasks

[00:37:01] pra ir aprofundando,

[00:37:03] porque no final

[00:37:03] quando tu desce muito

[00:37:04] pro offline,

[00:37:05] tipo offline first,

[00:37:06] tu tem uma série

[00:37:06] de coisas

[00:37:07] como o Iago falou,

[00:37:08] tipo,

[00:37:09] que são horas e horas,

[00:37:11] anos e anos de estudo

[00:37:12] até tu conseguir dominar

[00:37:13] e te garanto

[00:37:14] que nem sempre

[00:37:15] tu vai conseguir dominar tudo.

[00:37:16] Vai ter que

[00:37:17] ir seguindo nessa linha, né?

[00:37:20] Que é a recomendação

[00:37:21] de começar

[00:37:21] pelo shared preference

[00:37:22] é boa,

[00:37:23] porque é justamente

[00:37:24] um armazenamento simples.

[00:37:25] Ele simplesmente

[00:37:26] ele vai armazenar

[00:37:27] o seu dado localmente,

[00:37:29] não vai ter questão

[00:37:30] de criptografia e tudo mais

[00:37:31] que, por exemplo,

[00:37:31] um secure storage da vida tem.

[00:37:33] E aí seria justamente

[00:37:35] a sequência seguida

[00:37:35] pra você

[00:37:36] pular pra isso,

[00:37:37] entender por que

[00:37:38] que ele é mais seguro,

[00:37:39] entender como que funciona

[00:37:41] o encrypted shared preference

[00:37:43] do Android

[00:37:44] e o Keychain do iOS,

[00:37:46] por que que ele

[00:37:47] são seguros

[00:37:48] e coisas assim.

[00:37:48] E aí, aos poucos,

[00:37:50] você vai construindo

[00:37:51] esse conhecimento

[00:37:52] e entendendo por que

[00:37:53] que isso é uma boa alternativa,

[00:37:54] por exemplo,

[00:37:54] pra dados pessoais

[00:37:55] ou coisas do gênero.

[00:37:56] Pô, sensacional.

[00:37:58] E olha,

[00:37:58] eu quero que você

[00:37:59] que tá ouvindo esse papo

[00:38:00] aqui agora,

[00:38:01] vem nos comentários

[00:38:02] do Spotify

[00:38:02] e se você tá

[00:38:04] em alguma das áreas

[00:38:05] da tecnologia,

[00:38:06] seja ela desenvolvimento

[00:38:07] ou não,

[00:38:08] conta pra gente

[00:38:08] como que você enfrenta

[00:38:10] esse problema

[00:38:10] da falta de conectividade.

[00:38:12] Como que a tua área

[00:38:13] resolve e olha pra isso.

[00:38:15] E se você ainda

[00:38:15] nem começou

[00:38:16] a área da tecnologia,

[00:38:17] não se preocupa.

[00:38:19] Comenta aqui pra mim

[00:38:20] que aplicativo

[00:38:20] que você acha

[00:38:21] que faz bem

[00:38:22] essa tarefa

[00:38:23] do offline first

[00:38:24] que não te deixa na mão

[00:38:25] quando você tá

[00:38:26] sem conexão.

[00:38:27] E eu tô pedindo

[00:38:28] a sua participação

[00:38:29] porque afinal

[00:38:30] é através dessa troca

[00:38:31] que a gente aprende.

[00:38:33] Inclusive, Iago,

[00:38:34] eu tô sabendo,

[00:38:35] falando de troca,

[00:38:36] de aprendizado,

[00:38:37] que tem agora

[00:38:38] novos cursos

[00:38:39] chegando na

[00:38:40] carreira de mobile

[00:38:42] dentro da Alura.

[00:38:44] Conta um pouquinho

[00:38:44] pra gente disso,

[00:38:45] o que que tá chegando,

[00:38:46] o que que tem de legal,

[00:38:46] o que que tem de legal,

[00:38:46] o que que tem de legal lá,

[00:38:47] cara?

[00:38:47] É isso mesmo, André.

[00:38:49] Estamos agora,

[00:38:50] vou botar o meu,

[00:38:51] minha versão jabazeira,

[00:38:52] estamos aqui

[00:38:53] com a trilha,

[00:38:54] a carreira de Flutter,

[00:38:55] né,

[00:38:56] as novas carreiras

[00:38:57] da Alura,

[00:38:57] trazendo essa mudança

[00:38:59] aí dentro do catálogo.

[00:39:00] Agora, pensando em carreiras,

[00:39:02] como você começa

[00:39:03] e como você consegue

[00:39:04] chegar em conhecimentos

[00:39:05] muito mais aprofundados

[00:39:06] que são esses

[00:39:07] que a gente citou aqui.

[00:39:08] E temos essas

[00:39:09] duas feras aqui

[00:39:10] que estão aqui,

[00:39:10] como diria Falto Silva,

[00:39:12] duas feras aqui,

[00:39:13] bicho,

[00:39:13] a Priscila e o William,

[00:39:15] que são instrutores

[00:39:15] e estão no curso,

[00:39:16] então você vai começar

[00:39:17] a aprender d’arte

[00:39:19] com os instrutores

[00:39:21] aqui da casa

[00:39:21] e depois você vai

[00:39:22] colocar,

[00:39:23] vai conhecer a Priscila,

[00:39:24] ela vai ensinar

[00:39:25] tudo o que você precisa

[00:39:25] para começar no Flutter,

[00:39:27] botar o pé na água

[00:39:28] e avançar

[00:39:29] e depois você continua

[00:39:30] com o William também.

[00:39:31] Então,

[00:39:31] temos muitos cursos

[00:39:32] iniciais ali do Flutter

[00:39:33] e depois a gente se aprofunda

[00:39:35] bastante ali,

[00:39:36] indo depois para CICD,

[00:39:38] Fastlane,

[00:39:39] palavras muito mais complexas,

[00:39:41] Serving,

[00:39:41] Driven UI aí,

[00:39:43] para fazer um bingo

[00:39:43] bem bonito,

[00:39:44] como diria o nosso amigo Vini,

[00:39:46] com bastante

[00:39:46] coisa legal aqui.

[00:39:47] Então,

[00:39:48] eu convido vocês

[00:39:48] a conhecer a carreira de Flutter.

[00:39:50] Você que já viu o Flutter,

[00:39:51] que estava ali

[00:39:52] um pouco desanimado,

[00:39:53] recomendo que dá uma olhada

[00:39:54] lá nas novas carreiras,

[00:39:55] dá uma olhada lá

[00:39:56] no que a gente tem de novo

[00:39:57] lá na plataforma,

[00:39:58] que está muito legal,

[00:39:59] muito bem feito.

[00:40:00] Cara,

[00:40:00] eu curti muito,

[00:40:01] eu sou muito fã

[00:40:02] dessa ideia das carreiras,

[00:40:03] afinal de contas,

[00:40:04] a área é muito ampla.

[00:40:06] Eu sei que eu me repito,

[00:40:06] eu sei que eu falo isso

[00:40:07] em quase todo episódio,

[00:40:09] mas eu lembro

[00:40:09] do frio da barriga

[00:40:10] dos meus alunos,

[00:40:11] dos meus colegas,

[00:40:12] quando eu ia escolher ali

[00:40:13] para que lado seguir,

[00:40:14] sem saber.

[00:40:16] Por isso,

[00:40:16] mais uma vez,

[00:40:17] a gente vai deixar aqui

[00:40:18] o link do Tech Guide

[00:40:20] para você entender

[00:40:21] quais são essas áreas

[00:40:22] dentro da tecnologia

[00:40:23] e também o link da Alura

[00:40:26] para você entender

[00:40:26] o que tem aí

[00:40:28] nessas novas carreiras,

[00:40:29] o que a gente está pensando.

[00:40:32] Eu agradeço demais

[00:40:33] ao Iago,

[00:40:34] à Priscila,

[00:40:34] ao William

[00:40:35] pela participação

[00:40:36] nesse papo

[00:40:36] que foi muito maneiro

[00:40:37] e a você,

[00:40:38] ouvinte do Hipsters,

[00:40:40] que está sempre aqui

[00:40:40] com a gente,

[00:40:41] muito obrigado.

[00:40:42] Além de deixar

[00:40:43] aquele comentário,

[00:40:44] avalia esse vídeo

[00:40:44] e se inscreva no canal.

[00:40:44] Se inscreva nesse episódio

[00:40:45] aqui com cinco estrelas

[00:40:46] e manda o link

[00:40:47] para um amigo

[00:40:48] ou para uma amiga sua

[00:40:50] que podem se interessar

[00:40:51] pela área.

[00:40:52] A gente se vê

[00:40:53] no próximo programa,

[00:40:54] Hipsters.

[00:40:55] Até mais.

[00:41:05] Este podcast

[00:41:06] foi produzido

[00:41:07] pela Alura,

[00:41:09] Mergulhe em Tecnologia

[00:41:11] e Faculdade FIAP.

[00:41:13] Let’s rock the world!

[00:41:14] The Future.

[00:41:16] Edição

[00:41:17] Rede Gigahertz

[00:41:18] de Podcasts.