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 get primaryKey => {id}; } @DriftDatabase(tables: [Tasks]) class AppDatabase extends _$AppDatabase { AppDatabase() : super(_openConnection()); @override int get schemaVersion => 1; // Task CRUD operations Future> 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 getTaskById(String id) { return (select(tasks)..where((t) => t.id.equals(id))).getSingleOrNull(); } Future insertTask(TasksCompanion task) { return into(tasks).insert(task); } Future updateTask(TasksCompanion task) { return update(tasks).replace(task); } Future deleteTaskById(String id) { return (delete(tasks)..where((t) => t.id.equals(id))).go(); } Future> 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); }); }