前回の続きですが。
👉 Jetpack Compose で Todo アプリを作ってみた - Qiita
SQLDelight を使います。
👉 Getting Started with Multiplatform - SQLDelight
テキストファイルに、テーブル、クエリーをSQLで記述して、
-- app/src/main/sqldelight/com/your/package/data/Todo.sq
CREATE TABLE todo (
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
text TEXT NOT NULL,
updated INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
);
selectAll:
SELECT * FROM todo ORDER BY updated DESC;
count:
SELECT COUNT(id) FROM todo;
insert:
INSERT INTO todo (text) VALUES (:text);
update:
UPDATE todo SET text = :text, updated = (strftime('%s', 'now')) WHERE id = :entryId;
delete:
DELETE FROM todo
WHERE id = :entryId;
ビルドすると、関連テーブルやクラスが自動作成され、そのまま使えるようになります。
class TodoRepository @Inject constructor(
private val database: Database
) {
fun load(): Flow<List<Todo>> {
return database.todoQueries.selectAll().asFlow().mapToList(Dispatchers.IO)
}
fun count(): Flow<Long> {
return database.todoQueries.count().asFlow().mapToOne(Dispatchers.IO)
}
fun insert(text: String) {
database.todoQueries.insert(text)
}
fun update(id: Long, text: String) {
database.todoQueries.update(text, id)
}
fun delete(id: Long) {
database.todoQueries.delete(id)
}
}
Flow に向けて作られており、Kotlin を使ったマルチプラットフォーム向けです。