Apresentando o fireXtensions

Mudando a forma como você utiliza o Firebase no Android

ATUALIZAÇÃO 29/09/2019: O fireXtensions foi descontinuado a favor das bibliotecas KTX oficiais do Firebase. Obrigado a todos que contribuiram, apoiaram ou utilizaram o fireXtensions.

18 de Maio de 2017 foi o dia em que a Google anunciou, durante o Google I/O, que Kotlin passa a ser (oficialmente) uma linguagem para desenvolvimento de aplicações Android. Isso porque:

Kotlin is expressive, concise, and powerful.
(Kotlin é expressivo, conciso e poderoso)

Essa foi uma das melhores novidades do I/O, pois esta linguagem traz várias funcionalidades que facilitam a vida dos desenvolvedores e de certa forma melhora a produtividade deles. Se você não conhece as funcionalidades da linguagem, recomendo que leia esta série de artigos do Paulo Enoque:

  1. Introdução a Kotlin
  2. Sintaxe básica do Kotlin
  3. Detalhes avançados sobre Kotlin
  4. Kotlin Android Extensions

Kotlin Extensions

Uma funcionalidade que, em particular, chamou a minha atenção foi Kotlin Extensions. Esta funcionalidade permite que você adicione novos métodos à classes que não são suas, sem ter de herdar (o famoso extends do java) dessa classe. Por exemplo: eu posso criar um método que verifica se uma String contém ponto de exclamação(!), algo como:

fun contemPontoExclamacao(umaString: String): Boolean {
return umaString.contains('!')
}

Mas para usar o método, eu tenho de chamar da seguinte forma: contemPontoExclamacao("Olá Mundo!"). Isso parece ok, mas imagine se eu tiver de chamar o método em várias classes — teria de declarar o método em todas elas ou declará-lo em uma só classe e definí-lo como estático. Ou até criar uma classe MinhaString que herda da classe String e implementa o método contemPontoExclamacao(). Depois teria de mudar o tipo de dado de todas as Strings do meu programa para que passasse a ser do tipoMinhaString.

Utilizando Kotlin Extensions, eu posso fazer com que este método faça parte da classe String:

fun String.contemPontoExclamacao(): Boolean{
return contains('!')
}

E então posso chamá-lo em qualquer classe, sempre da mesma forma:

"Olá Mundo!".contemPontoExclamacao()
// ou:
val frase = "Olá Mundo"
frase.contemPontoExclamacao()

Como você pode ver, Kotlin simplifica o código que temos de escrever. Muitos desenvolvedores (a google inclusive) aproveitaram disso para desenvolver bibliotecas que tornam o desenvolvimento Android mais simples. Falo de bibliotecas como Android KTX, Anko, Nahu, entre outras.


FireXtensions

Foi inspirado nessas bibliotecas que decidi desenvolver o fireXtensions. fireXtensions é uma biblioteca que vem para simplificar a forma como nós (desenvolvedores) executamos operações no Firebase. Atualmente, a biblioteca suporta a Realtime Database e Cloud Firestore.

Por exemplo:
Para ler utilizadores da Realtime Database com Kotlin, você utilizaria o código:

ref.addValueEventListener(object: ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
val utilizadores = ArrayList<Utilizador>()
for (snapshot in dataSnapshot.children) {
val utilizador = dataSnapshot.getValue(Utilizador::class.java)
utilizadores.add(utilizador!!)
}
// Mostrar os utilizadores na UI
}

override fun onCancelled(error: DatabaseError) {
// Mostrar o erro
}
})

Com fireXtensions:

ref.observeChildren<Utilizador> { utilizadores, error ->
utilizadores?.let {
// Mostrar os utilizadores na UI
}
error.let {
// Mostrar o erro
}
}

Fica mais simples, não é?

Exemplo 2: Ler dados da cidade “Maputo que está na coleção “cidades” do Firestore:

val docRef = db.collection("cidades").document("Maputo")
docRef.get().addOnCompleteListener { task ->
if (task.isSuccessful()) {
val cidade = task.result.toObject(Cidade::class.java)
// Mostrar a cidade
}
}

Com fireXtensions:

docRef.getDocument<Cidade>() { cidade, _ ->
cidade?.let {
// Mostrar a cidade
}
}

Como fazer essa magia?

Utilizar o fireXtensions na sua aplicação é muito simples, basta seguir as instruções encontradas no site:

  1. Adicionar o maven do jitpack para o build.gradle do projecto:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}

2. Adicionar a dependência ao build.gradle da app. Aqui você tem 2 opções:

  • Adicionar as extensions para Realtime Database e Cloud Firestore:
dependencies {
implementation 'com.github.rosariopfernandes:fireXtensions:0.3.4'
}
  • Ou adicionar as extensions só para Realtime Database ou só para Cloud Firestore:
dependencies {        // Use apenas uma:
// Importar só a database
implementation 'com.github.rosariopfernandes.fireXtensions:database:0.3.4'

// ou importar só o firestore
implementation 'com.github.rosariopfernandes.fireXtensions:firestore:0.3.4'
}

Conheça todas as extensions oferecidas pela biblioteca nos tutoriais:

Contribuir para a biblioteca

fireXtensions é open source (sob a MIT License) e você pode contribuir no GitHub. Abra um issue para sugerir uma alteração, pode ser uma nova funcionalidade ou correção de bugs. Se a sua alteração for aprovada, aí você poderá mandar um Pull Request para fazê-la ou esperar que alguém o faça.


Espero que esta biblioteca simplifique a forma como você escreve o seu código Android e que ajude-lhe a melhorar a sua produtividade. 🙂 Caso tenha alguma dúvida ou sugestão, deixe abaixo nos comentários. Se você estiver tentando usar o fireXtensions e teve um problema, abra um issue no GitHub explicando o que você fez e qual foi o erro que teve.

GDG Maputo

Artigos em português, escritos pela comunidade GDG Maputo. Faça parte da nossa comunidade: https://www.meetup.com/GDG-Maputo/

Thanks to Edilson Ngulele

Rosário Pereira Fernandes

Written by

Firebase App Developer from Mozambique | Writes about Google Technologies | Organizer @ GDG Maputo | Creator of fireXtensions and Tocha

GDG Maputo

Artigos em português, escritos pela comunidade GDG Maputo. Faça parte da nossa comunidade: https://www.meetup.com/GDG-Maputo/

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade