import 'package:drift/drift.dart'; import 'package:drift/native.dart'; import 'package:path/path.dart' as p; import 'package:path_provider/path_provider.dart'; import 'dart:io'; part 'formulas_database.g.dart'; // Define the FORMULAELEMENT table to store both formulas and units as text class FormulaElements extends Table { IntColumn get id => integer().autoIncrement()(); TextColumn get elementText => text()(); } @DriftDatabase(tables: [FormulaElements]) class FormulasDatabase extends _$FormulasDatabase { FormulasDatabase() : super(_openConnection()); @override int get schemaVersion => 1; // Method to insert a new formula element (either formula or unit) Future insertFormulaElement(String elementText) { return into(formulaElements).insert(FormulaElementsCompanion.insert(elementText: elementText)); } // Method to get all formula elements Future> getAllFormulaElements() { return select(formulaElements).get(); } // Method to get a formula element by ID Future getFormulaElementById(int id) { return (select(formulaElements)..where((tbl) => tbl.id.equals(id))).getSingleOrNull(); } // Method to update a formula element Future updateFormulaElement(int id, String newElementText) { return (update(formulaElements)..where((tbl) => tbl.id.equals(id))) .write(FormulaElementsCompanion.insert(elementText: newElementText)); } // Method to delete a formula element Future deleteFormulaElement(int id) { return (delete(formulaElements)..where((tbl) => tbl.id.equals(id))).go(); } // Additional helper methods for direct access to the table SimpleSelectStatement get allFormulaElements => select(formulaElements); } LazyDatabase _openConnection() { return LazyDatabase(() async { // Determine the platform-specific database directory Directory dbDirectory; if (Platform.isLinux || Platform.isWindows || Platform.isMacOS) { final appSupportDir = await getApplicationSupportDirectory(); dbDirectory = Directory(p.join(appSupportDir.path, 'd4rt_formulas')); } else { dbDirectory = await getApplicationDocumentsDirectory(); } // Ensure the directory exists await dbDirectory.create(recursive: true); // Create the database file in the platform-specific directory final file = File(p.join(dbDirectory.path, 'formulas.sqlite')); return NativeDatabase.createInBackground(file); }); }