📊 Capítulo 13: Room Database & Flow Reativo
Especialização em Mobile Nativo Android
🗺️ A Arquitetura do Room Database com Fluxo Reativo
flowchart TD
ENTITY["@Entity(tableName = 'transacoes') data class TransacaoEntity"]
--> DAO["@Dao interface TransacaoDao"]
DAO --> QUERY["@Query('SELECT * FROM transacoes') fun listar(): Flow<List<TransacaoEntity>>"]
QUERY --> ROOM_DB["@Database class AppDatabase : RoomDatabase()"]
ROOM_DB --> FLOW["Emite novo List<Transacao> a cada INSERT/UPDATE/DELETE no SQLite!"]
FLOW --> COMPOSE["Compose UI atualiza a lista em tempo real sem polling! ⚡"]
style ENTITY fill:#ede7f6,stroke:#512da8,stroke-width:2px
style DAO fill:#fff3e0,stroke:#ff9800,stroke-width:2px
style QUERY fill:#e1f5fe,stroke:#03a9f4,stroke-width:1.5px
style ROOM_DB fill:#e8f5e9,stroke:#4caf50,stroke-width:2px
style FLOW fill:#c8e6c9,stroke:#2e7d32,stroke-width:2px
style COMPOSE fill:#00897b,stroke:#004d40,stroke-width:2px,color:#ffffff
🎯 Slide 1: Entidades & DAOs Fortemente Tipados
@Dao
interface TransacaoDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun salvar(transacao: TransacaoEntity)
@Query("SELECT * FROM transacoes ORDER BY data DESC")
fun observarTodas(): Flow<List<TransacaoEntity>>
}
🎯 Slide 2: Migrações Seguras de Banco
val MIGRATION_1_2 = object : Migration(1, 2) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("ALTER TABLE transacoes ADD COLUMN categoria TEXT NOT NULL DEFAULT 'Geral'")
}
}
🎯 Slide 3: TypeConverters para JSON & Datas
- Anote classes com
@TypeConverterpara serializar listas de objetos eInstantem colunas simples de texto no SQLite.
🔗 Navegação do Capítulo 13
| 📖 Ler Conteúdo Completo | 🧠 Fazer Quiz | 💻 Ver Exemplos | 🧩 Exercícios |
Slide 1 de 1
Atalhos: ← → Navegar • Espaço Avançar • F Tela Cheia • Home Início • End Fim