Como pegar localização em segundo plano flutter - Flutter Background Geolocation - Android ?

29/04/2022

Nesse artigo falarei sobre a minha jornada para resolver um problema complexo, e como você pode fazer o mesmo, seja para corrigir erros em um plugin ou em qualquer outra coisa que precise.


Durante o desenvolvimento de uma funcionalidade para o app da empresa que eu trabalho, passei pelo maior desafio da minha carreira até agora. tive que implementar uma funcionalidade, que não era nativa do framework e que não possuía plugins prontos para o uso. A funcionalidade já existe em outras frameworks, que não o flutter e no flutter, com as versões mais recentes do android as funcionalidades gratuitas acabaram se tornando desatualizadas e a paga acaba por ser muito cara, e eu não estava disposto a pagar ainda. Então como resolver?

Para saber como resolver, explicarei minha jornada, pois considero mais importante do que algumas linhas de código jogadas. Ao explicar o que fiz, espero poder ajudar outros programadores iniciantes, como eu, a encontrarem soluções parecidas para seus problemas, que podem ser diferentes do meu.

O Inicio

O primeiro passo ao me deparar com o problema foi pensar no que poderia ser feito, para isso usei o google e tentei diversas soluções prontas, o que logo descobri não solucionarem o problema, pois ao adicioná-las encontráva diversos erros e nada funcionava. Até que me deparei com esse artigo: https://medium.com/flutter-comunidade-br/flutter-background-geolocation-android-4bf10eb6f646 feito por Bruno Eleodoro Roza. Bruno teve o mesmo problema que o meu, dois anos antes de mim, e conseguiu retirar do problema uma solução brilhante. Através desse artigo comecei a considerar que a única solução era usar código nativo para resolver meus problemas e fazer uma comunicação do código nativo com o flutter. Infelizmente não pude solucionar meu problema da mesma forma que ele fez, não importava o tempo que eu passasse e na hora eu não sabia o porquê, mas apesar disso. Mas ainda bem que tinha contatos das redes sociais no próprio artigo, pois assim consegui me conectar com ele no linkedin e perguntar diretamente. Sério, não sei quantas vezes pude corrigir um problema pedindo ajuda para alguém mais experiente que eu. Peça ajuda. Nós programadores, por ficar tanto tempo na frente dos computadores, esquecemos que tem pessoas do outro lado.

Caro leitor, deixa eu te contar uma história com uma lição no final. Na escola técnica tinha um trabalho em que se formavam grupos de cinco alunos e cada grupo precisava usar um software específico. O software do meu grupo havia sido feito por um aluno de mestrado e ao contrário de seu artigo, seu software não era achado muito facilmente. Assim foi com a maioria dos outros grupos, no final das contas no dia da apresentação somente um grupo conseguiu apresenta e não era o meu. A maioria dos alunos ficou furiosa e o professor perguntou: quantos e-mails vocês mandaram para os escritores dos artigos? No final das contas o professor deixou os grupos apresentarem os trabalhos em outro dia, e todos conseguiram os softwares que precisavam, pois todos os editores estavam contentes em ajudar e em responder nossos e-mails. A lição que eu tirei nesse dia foi: conversar e pedir ajuda faz parte do processo, ou como esse meu professor diria: "vocês não são quadrados, se vira kkkkk".

Mas voltando pro assunto inicial, ao conversar com Bruno, quem fez o artigo, ele me falou o motivo da desatualização. Ele me explicou algo que eu não sabia, que o JAVA do android avançaram bastante desde que ele havia desenvolvido o código. e por isso poderia não estar funcionando, além de com o artigo dele eu conseguir aprender um pouco mais da comunicação do flutter com o nativo e de como plugins para o flutter funcionavam.


O meio

Tenho que admitir que a idéia de usar código nativo me assustou, não sabia nada daquilo e duvidei se conseguiria achar alguma solução para esse problema, mas decidi confiar nas palavras de Filipe Deschamps que ouvi a alguns anos atrás no vídeo: https://www.youtube.com/watch?v=ZtMzB5CoekE

e mudei a minha forma de pensar. A forma que a gente tende a agir nesses problemas tende a ser se nós conseguimos ou não em determinado período de tempo que nós exigimos, a mudança proposta nesse vídeo é acreditar que conseguimos resolver qualquer desafio, só que levaremos tempos diferentes.

O fim

Com essa ideia na cabeça passei a pensar em uma solução própria, armado das experiências recém adquiridas e de uma comunidade pronta para resolver esse desafio. E a solução que funcionou para mim foi fazer o fork do plugin público que possuia o código no github da comunidade do flutter chamado background_locator e corrigi os erros que ele tinha no meu código, esse plugin já tinha sido testado por mim nas partes iniciais de resolução do problema, ainda quando buscava soluções prontas no google. Porém estava dando muitos conflitos com o meu código e de acordo com as ishues do github com o código de outros colegas programadores.

Todo esse processo de criar teses, testar teorias e repetir quando algo dava errado durou mais ou menos uma semana, mas não podemos nos abalar quando enfrentamos esses problemas, temos que nos lembrar que somos capazes e contamos com o apoio de outros desenvolvedores no processo:


aqui vai o github do meu projeto, deixe o feedback se você consegue usa-lo: https://github.com/caiobraga/background_locator