import 'package:sqflite/sqflite.dart'; import 'package:path/path.dart'; import 'package:uuid/uuid.dart'; import '../models/problem_model.dart'; class LocalDatabase { static final LocalDatabase _instance = LocalDatabase._internal(); factory LocalDatabase() => _instance; static Database? _database; LocalDatabase._internal(); Future get database async { if (_database != null) return _database!; _database = await _initDatabase(); return _database!; } Future _initDatabase() async { String path = join(await getDatabasesPath(), 'problems.db'); return await openDatabase(path, version: 1, onCreate: _onCreate); } Future _onCreate(Database db, int version) async { await db.execute(''' CREATE TABLE problems( id TEXT PRIMARY KEY, description TEXT NOT NULL, location TEXT NOT NULL, imagePaths TEXT NOT NULL, createdAt TEXT NOT NULL, isUploaded INTEGER NOT NULL, boundInfo TEXT ) '''); } Future insertProblem(Problem problem) async { final db = await database; problem.id = Uuid().v4(); return await db.insert('problems', problem.toMap()); } Future> getProblems() async { final db = await database; final List> maps = await db.query('problems'); return List.generate(maps.length, (i) { return Problem.fromMap(maps[i]); }); } Future updateProblem(Problem problem) async { final db = await database; return await db.update( 'problems', problem.toMap(), where: 'id = ?', whereArgs: [problem.id], ); } Future deleteProblem(int id) async { final db = await database; return await db.delete('problems', where: 'id = ?', whereArgs: [id]); } Future> getUnuploadedProblems() async { final db = await database; final List> maps = await db.query( 'problems', where: 'isUploaded = ?', whereArgs: [0], ); return List.generate(maps.length, (i) { return Problem.fromMap(maps[i]); }); } }