Add Drift SQLite database for local task storage

- Create AppDatabase with Tasks table
- Add CRUD operations for local task persistence
- Include generated database code
This commit is contained in:
m3mo 2026-02-03 14:21:07 +01:00
parent ceef4f4c72
commit ccc7d544db

View File

@ -0,0 +1,70 @@
import 'dart:io';
import 'package:drift/drift.dart';
import 'package:drift/native.dart';
import 'package:path_provider/path_provider.dart';
import 'package:path/path.dart' as p;
part 'app_database.g.dart';
class Tasks extends Table {
TextColumn get id => text()();
TextColumn get title => text().withLength(min: 1, max: 500)();
TextColumn get description => text().nullable()();
DateTimeColumn get date => dateTime()();
TextColumn get time => text().nullable()();
TextColumn get priority => text().withDefault(const Constant('medium'))();
BoolColumn get isDone => boolean().withDefault(const Constant(false))();
DateTimeColumn get createdAt => dateTime().withDefault(currentDateAndTime)();
DateTimeColumn get updatedAt => dateTime().withDefault(currentDateAndTime)();
@override
Set<Column> get primaryKey => {id};
}
@DriftDatabase(tables: [Tasks])
class AppDatabase extends _$AppDatabase {
AppDatabase() : super(_openConnection());
@override
int get schemaVersion => 1;
// Task CRUD operations
Future<List<Task>> getTasksByDate(DateTime date) {
final startOfDay = DateTime(date.year, date.month, date.day);
final endOfDay = startOfDay.add(const Duration(days: 1));
return (select(tasks)
..where((t) => t.date.isBiggerOrEqualValue(startOfDay))
..where((t) => t.date.isSmallerThanValue(endOfDay))
..orderBy([(t) => OrderingTerm.asc(t.priority)]))
.get();
}
Future<Task?> getTaskById(String id) {
return (select(tasks)..where((t) => t.id.equals(id))).getSingleOrNull();
}
Future<int> insertTask(TasksCompanion task) {
return into(tasks).insert(task);
}
Future<bool> updateTask(TasksCompanion task) {
return update(tasks).replace(task);
}
Future<int> deleteTaskById(String id) {
return (delete(tasks)..where((t) => t.id.equals(id))).go();
}
Future<List<Task>> getAllTasks() {
return select(tasks).get();
}
}
LazyDatabase _openConnection() {
return LazyDatabase(() async {
final dbFolder = await getApplicationDocumentsDirectory();
final file = File(p.join(dbFolder.path, 'agenda_tasks.sqlite'));
return NativeDatabase.createInBackground(file);
});
}