DEV Community

Cover image for Integrando seu App com Firebase
Toshi Ossada for flutterbrasil

Posted on

Integrando seu App com Firebase

Fala Devs, tudo bem com vocês?

Hoje vamos falar de como podemos integrar nosso App com o Firebase de maneira muito simples, para isso iremos utilizar o Slidy e o Modular para nós auxiliares a construção de nosso App, faremos um TODO List como exemplo.

Primeiramente vamos criar nosso projeto vale ressaltar que o nome do domínio da nossa aplicação é muito importante para configurar o Firebase, por este motivo prefiro criar o projeto do Flutter através da prompt de comando, para realizar a criação basta executarmos o comando

$ flutter create –-org com.toshi todo_firebase

Dando uma explicação rápida este comando é separado em 5 partes, a primeira é a “palavra” flutter que significa que irei utilizar o CLI do flutter, o segundo argumento é o create isso significa que irei criar um projeto na CLI do flutter, em seguida temos nosso primeiro argumento o –-org nesta hora estou dizendo que meu próximo argumento será o nome do meu domínio que é o com.toshi e por último é o nome do meu projeto o todo_list. Caso tenha criado o projeto pelo Visual Studio Code ou pelo Android Studio ele irá criar com um nome default, para descobrir qual o domínio que ele criou basta ir e android>app>build.gradle e lá procure a área defaultConfig e no atributo applicationId estará o domínio da sua aplicação

Agora para configurar nosso Modular, no prompt de comando podemos executar o slidy start

Escolha o flutter_modular

Escolha o mobX

E confirme a instalação

Agora com nosso projeto criado vamos no site do https://firebase.google.com/ e clique em Ir para Console (você já deve ter logado com sua conta Google).

O Firebase é uma ferramenta da Google que é paga entretanto ela te oferece uma quantidade grátis de armazenamento que cabe muito bem para nossos apps de estudo, mas mesmo a parte paga é muito barata, o Firebase te oferece vários recursos interessantes como autenticação, push notifications e a que irmos utilizar que é o Cloud Store que é como se fosse um banco de dados noSQL.

Vamos criar nosso projeto

Agora vamos dar um nome bonito para nosso projeto

Next

Selecione a primeira opção

E voilá projeto criado, agora vamos adicionar um aplicativo em nosso projeto do Firebase

Nesta hora precisaremos saber qual o domínio da aplicação, aquele que vimos lá no começo, é só colocar aqui e pode deixar os outros campos em branco e simplesmente registrar o app

Agora precisaremos configurar nosso app com as instruções que são nos dada, faça o download do google-services.json

E precisamos colocar lá na nossa pasta android>app

Agora precisamos seguir os próximos passos, no build.gradle dentro da pasta android precisamos adicionar a dependência do google-services.

Dentro de dependencies adicione a linha

classpath ‘com.google.gms:google-services:4.3.3’

Agora no build.gradle dentro de android>app precisamos fazer outras configurações, no final do arquivo adicione a linha

apply plugin: ‘com.google.gms.google-services’

E dentro de dependencies adicione a linha

implementation ‘com.google.firebase:firebase-analytics:17.2.2’

Nos adiantando, na hora de compilarmos a aplicação ocorrerá um erro de multidex, resolveremos este problema adicionado neste mesmo build.gradle 2 configurações, dentro de dependencies adicionamos a linha

implementation ‘com.android.support:multidex:1.0.3’

E dentro de defaultConfig adicionamos a linha

multiDexEnabled true

Agora precisamos adicionar os package para trabalhar com o Firestore, basta executarmos no prompt slidy install cloud_firestore, também precisamos adicionar o firebase_core, basta executarmos slidy install firebase_core.

Agora no site do firebase ele ficara aguardando nossa aplicação executar o firebase, basta clicarmos em pular esta etapa

A parte que iremos utilizar é o database, basta acessarmos no menu lateral e depois clicar em criar banco de dados.

Depois selecione o modo de teste e concluir

E este é nosso banco de dados

Agora com tudo configurado vamos colocar a mão no código. Primeiramente vamos criar nosso modelo, ele terá 4 atributos, o título, se ele está checkado ou não, a posição e o identificador. O identificador no Firebase é um atributo do tipo DocumentReference, então nossa classe ficara da seguinte forma.

Agora seguindo o conceito do SOLID (onde cada classe do tem uma responsabilidade) vamos criar nosso repositório que terá a responsabilidade de pegar nossos dados no Firebase. Para isso vamos usar o slidy. slidy generate repository modules/home/repositories/todo e segundo as boas práticas do SOLID vamos também criar uma interface para esse repositório.

No dart uma interface é uma classe abstrata, vamos definir os métodos que iremos utilizar, o de salvar, o de inserir e o de deletar.

Com isso basta implementarmos a interface em nossa classe de repositório, como trabalharemos com o Firebase necessitaremos de uma instancia do Firestore, que seguindo as boas práticas do SOLID iremos receber por injeção de dependência.

Para recuperar o os documentos que estão no firebase basta acessarmos através da instancia do Firestore.

Firestore.collection(‘nome_do_domuento’).orderBy(‘position’).snapshots()

Isso me retornara uma querySnapshot e precisamos converter isso para uma Lista de TodoModel. Para isso utilizaremos o map para acessar os documentos que são um DocumentSnapshot, daí lá no meu todo_model.dart eu terei que criar um método factory que recebe um DocumentSnapshot e retorna um TodoModel, chamarei ele de fromDocument()

Desta maneira conseguimos utilizar desta maneira

Vamos já implementar os outros métodos, o delete() é bem simples, basta recebermos o TodoModel e no reference damos um delete()

No método save() ele será responsável por inserir e alterar o registro, para isso verificamos se o reference é null se for null trata-se de um insert de não trata de um update, o método ficara da seguinte forma

Eu particularmente não gosto de acessar a camada de repositório diretamente da controller, para isso criei uma camada service slidy generate service modules/home/services/todo também crio a interface para o serviço.

A responsabilidade da service neste caso será somente em fazer a ponte da controller para a repository.

Nossa Arquitetura ficara da seguinte forma controller < conversa > service < conversa > repository.

Então vamos receber na Controller uma instancia da service também por injeção.

Com isso já podemos configurar as injeções na home_module, note que nós binds da service e da repository eu tipifiquei com as interfaces, já no bind da repository eu injeto uma instancia do Firestore .

Agora vamos para nosso home_controller implementar os métodos de buscar os documentos, salvar e deletar. Vamos também criar um observável do tipo ObservableStream> para armazenar os modelos de forma reativa, nossa classe ficara da seguinte forma.

Usado ObservableStream conseguimos utilizar todo poder de um Stream com reatividade sem precisar usar o widget Stream(), basta envolvê-lo em um Observer()

Com isso basta montar minha tela utilizando as actions que eu montei na controller (deixarei no Github a home_page.dart), e teremos o seguinte resultado

Você pode baixar o código fonte deste projeto em
https://github.com/toshiossada/FlutterTodoListFirebase

Image description

Entre em nosso discord para interagir com a comunidade: https://discord.com/invite/flutterbrasil
https://linktr.ee/flutterbrasil

Top comments (0)