import 'dart:async'; import 'package:path_provider/path_provider.dart'; import 'package:turso_dart/turso_dart.dart'; import 'package:turso_dart_example/features/task/models/task.dart'; import 'package:turso_dart_example/features/task/repositories/repositories.dart'; import 'package:watcher/watcher.dart'; class TursoTaskRepository extends TaskRepository { final TursoClient _client; TursoTaskRepository(this._client); @override Future addTask(Task task) async { await _client.execute( "insert into tasks (title, description, completed) values (?, ?, ?)", positional: [task.title, task.description, task.completed ? 1 : 0], ); } @override Future deleteTask(int id) async { final statement = await _client.prepare("delete from tasks where id = :id"); await statement.execute(named: {":id": id}); } @override Future> getTasks() async { return _client .query("select * from tasks") .then( (value) => value .map( (row) => Task( id: row["id"], title: row["title"], description: row["description"], completed: row["completed"] == 1, ), ) .toList(), ); } @override Future markTasksAsCompleted(List ids) async { await _client.execute( "update tasks set completed = 1 where id in (${ids.join(",")})", ); } @override Future replicaChanges() async { if (_client.url == ":memory:") return null; final dir = await getApplicationCacheDirectory(); return DirectoryWatcher(dir.path).events; } }