💾 P06: Meus Jogos Favoritos (Catálogo Offline)

Neste projeto, você vai criar um “Save Game” real para o seu app! Você aprenderá a usar o banco de dados Room para salvar uma lista dos seus jogos favoritos. Mesmo se você desligar o celular, seus jogos continuarão salvos.


🎯 Objetivo do Projeto

Criar um catálogo onde você pode digitar o nome de um jogo, selecionar o console e salvar. O app deve mostrar uma lista de todos os jogos salvos no banco de dados.


📖 Dicionário do Projeto

  • Database (Room): O banco de dados interno do Android.

  • Entity (Entidade): É como chamamos a “Tabela” no código. No nosso caso, a tabela se chama Jogo.

  • DAO (Data Access Object): É o “Controle Remoto” do banco. É uma lista de comandos: “Salvar Jogo”, “Ver Todos”, “Apagar”.

  • Repository: É o “Gerente”. Ele organiza quem pede os dados (a tela) e quem entrega (o banco).


🏗️ Passo a Passo (Wizard do Android Studio)

  1. Template: Empty Compose Activity.

  2. Name: AppColecaoJogos_SeuNome.

  3. Package Name: br.com.curso.colecaojogos.


🎨 Parte 1: A Tabela (Entity)

NOTE

Para simplificar, colocamos a Entidade, o DAO e o Database no mesmo arquivo JogoDatabase.kt na pasta data/local.

@Entity(tableName = "jogos")
data class Jogo(
    @PrimaryKey(autoGenerate = true) val id: Int = 0,
    val nome: String,
    val plataforma: String,
    val status: String = "Pendente"
)

⚙️ Parte 2: O Controle Remoto (DAO)

@Dao
interface JogoDao {
    @Insert
    suspend fun inserir(jogo: Jogo)
 
    @Query("SELECT * FROM jogos ORDER BY nome ASC")
    fun listarTodos(): Flow<List<Jogo>>
}

✅ Gabarito Comentado (ViewModel + UI)

No Compose, a tela nunca mexe no banco direto. Ela pede para o ViewModel.

class JogoViewModel(private val dao: JogoDao) : ViewModel() {
    // A lista que a tela vai ficar vigiando
    val listaDeJogos = dao.listarTodos()
 
    fun adicionarJogo(nome: String, console: String) {
        viewModelScope.launch {
            dao.inserir(Jogo(nome = nome, plataforma = console))
        }
    }
}

📂 Organização de Pastas (Simplificada)

br.com.curso.colecaojogos.data.local JogoDatabase.kt (Contém Entity, DAO e Database).

br.com.curso.colecaojogos MainActivity.kt (Contém a UI e o ViewModel).


📐 Desenho no Draw.io

Faça o Diagrama ER (Entidade-Relacionamento) básico:

Tabela JOGOS (id [PK], nome [String], plataforma [String]).


??? Requisitos de Configuração e Solução de Problemas

Se você encontrar erros ao tentar rodar este projeto, verifique os pontos abaixo:

1. Suporte ao AndroidX

O arquivo gradle.properties na raiz do projeto deve conter:

android.useAndroidX=true

android.enableJetifier=true

org.gradle.jvmargs=-Xmx2048m

2. Dependências Necessárias

Certifique-se de adicionar as dependências do Room e do ViewModel no build.gradle.