import 'package:sqflite_common/sqlite_api.dart'; import 'package:sqflite_common_ffi/sqflite_ffi.dart'; import 'package:simple_notes/models/db/dbnote.dart'; import 'package:simple_notes/models/constants.dart'; class DatabaseRepository { final DatabaseFactory factory; Database? db; DatabaseRepository(this.factory); Future open(String path) async { return _openPath(path); } Future saveNote(DatabaseExecutor? db, DBNote note) async { if (note.id.v != null) { await db!.update( tableNotes, note.toMap(), where: '$columnId = ?', whereArgs: [note.id.v] ); } else { note.id.v = await db!.insert(tableNotes, note.toMap()); } } Future getNote(int? id) async { var list = (await db!.query( tableNotes, columns: [columnId, columnTitle, columnContent], where: "$columnId = ?", whereArgs: [id] )); if(list.isNotEmpty) { return DBNote()..fromMap(list.first); } return null; } Future?> getNotes() async { var list = (await db!.query( tableNotes, columns: [columnId, columnTitle, columnContent] )); if(list.isNotEmpty) { return list.map((e) => DBNote()..fromMap(e)).toList(); } return null; } Future deleteNote(int? id) async { await db!.delete( tableNotes, where: "$columnId = ?", whereArgs: [id] ); } Future _openPath(String path) async { db = await factory.openDatabase( path, options: OpenDatabaseOptions( version: dbVersionNumber, onCreate: (db, version) async { await _createDB(db); }, onUpgrade: (db, oldVersion, newVersion) async { if (oldVersion < dbVersionNumber) { await _createDB(db); } } ) ); } Future _createDB(Database db) async { await db.execute("DROP TABLE IF EXISTS $tableNotes"); await db.execute( "CREATE TABLE $tableNotes($columnId INTEGER PRIMARY KEY, $columnTitle TEXT, $columnContent TEXT)" ); await saveNote( db, DBNote() ..title.v = "Simple Title" ..content.v = "Simple Content" ); await saveNote( db, DBNote() ..title.v = "Welcome to the terrible notes app" ..content.v = "Enter some notes\nSee if it actually loads\nwill this even work?" ); } }