diff --git a/lib/ai/formula_editor.dart b/lib/ai/formula_editor.dart index e9ea8c8..895e82b 100644 --- a/lib/ai/formula_editor.dart +++ b/lib/ai/formula_editor.dart @@ -15,7 +15,7 @@ import 'unit_dropdown.dart'; class FormulaEditor extends StatefulWidget { final Formula formula; final Corpus corpus; - final Function(Formula)? onSave; // Callback when formula is saved + final Function(Formula)? onSave; const FormulaEditor({ super.key, diff --git a/lib/ai/formula_list.dart b/lib/ai/formula_list.dart index 6f8ecf7..4e47753 100644 --- a/lib/ai/formula_list.dart +++ b/lib/ai/formula_list.dart @@ -51,15 +51,18 @@ class _FormulaListState extends State { }).toList(); } - String _formulaAndDependenciesToStringLiteral(Formula formula) { - // Get the formula and its dependencies + String _formulaAndDependenciesToExportStringLiteral(Formula formula) { final dependencies = widget.corpus.withDependencies(formula); - return SetUtils.prettyPrint(dependencies.map((f) => f.toMap()).toList()); + final dependenciesAsMap = dependencies.map((f) => f.toMap()).toList(); + for( final f in dependenciesAsMap ){ + f.remove("uuid"); + } + return SetUtils.prettyPrint(dependenciesAsMap); } void _shareFormula(Formula formula) async { try { - final exportString = _formulaAndDependenciesToStringLiteral(formula); + final exportString = _formulaAndDependenciesToExportStringLiteral(formula); // Share the string await share_plus.SharePlus.instance.share( @@ -92,7 +95,7 @@ class _FormulaListState extends State { void _copyFormula(Formula formula) async { try { - final exportString = _formulaAndDependenciesToStringLiteral(formula); + final exportString = _formulaAndDependenciesToExportStringLiteral(formula); // Copy to clipboard await Clipboard.setData(ClipboardData(text: exportString)); @@ -204,6 +207,11 @@ class _FormulaListState extends State { builder: (context) => FormulaScreen( formula: formula, corpus: widget.corpus, + onSave: (formula){ + setState(() { + // Refresh the list when returning from the formula screen + }); + }, ), ), ); diff --git a/lib/ai/formula_screen.dart b/lib/ai/formula_screen.dart index 3c51e3d..6064752 100644 --- a/lib/ai/formula_screen.dart +++ b/lib/ai/formula_screen.dart @@ -12,10 +12,11 @@ import 'unit_dropdown.dart'; import 'formula_editor.dart'; class FormulaScreen extends StatefulWidget { - final Formula initialformula; + final Formula initialFormula; final Corpus corpus; + final Function(Formula)? onSave; // Callback when formula is saved - FormulaScreen({super.key, required formula, required this.corpus}) : initialformula = formula; + FormulaScreen({super.key, required formula, required this.corpus, this.onSave}) : initialFormula = formula; @override State createState() => _FormulaScreenState(); @@ -55,7 +56,7 @@ class _FormulaScreenState extends State { @override void initState() { super.initState(); - formula = widget.initialformula; + formula = widget.initialFormula; } @override @@ -120,11 +121,7 @@ class _FormulaScreenState extends State { String? unit = formula.output.unit; if (unit != null && result is Number) { final converted = widget.corpus.convert(result, unit, _selectedOutputUnit!); - if (converted is num) { - _result = converted.toStringAsFixed(2); - } else { - _result = converted.toString(); - } + _result = converted.toStringAsFixed(2); } else { _result = result?.toString(); } @@ -161,9 +158,8 @@ class _FormulaScreenState extends State { formula: formula, corpus: widget.corpus, onSave: (updatedFormula) { - // Refresh the screen after saving + widget.onSave?.call(updatedFormula); setState(() { - // The corpus has been updated, refresh the displayed formula formula = updatedFormula; }); }, diff --git a/lib/database/database_service.dart b/lib/database/database_service.dart index cc23cad..de3ab49 100644 --- a/lib/database/database_service.dart +++ b/lib/database/database_service.dart @@ -46,7 +46,7 @@ extension CorpusDatabaseExtension on FormulasDatabase { final parsed = SetUtils.parseCorpusElements('[${element.elementText}]'); if (parsed.isNotEmpty && parsed.first is models.Formula) { final existingFormula = parsed.first as models.Formula; - if (existingFormula.name == formula.name) { + if (existingFormula.uuid == formula.uuid) { // Update this element await updateFormulaElement( element.id, @@ -70,7 +70,7 @@ extension CorpusDatabaseExtension on FormulasDatabase { } // Method to delete a formula from the database by name - Future deleteFormula(String formulaName) async { + Future deleteFormula(String uuid) async { final elements = await getAllFormulaElements(); for (final element in elements) { @@ -78,7 +78,7 @@ extension CorpusDatabaseExtension on FormulasDatabase { final parsed = SetUtils.parseCorpusElements('[${element.elementText}]'); if (parsed.isNotEmpty && parsed.first is models.Formula) { final existingFormula = parsed.first as models.Formula; - if (existingFormula.name == formulaName) { + if (existingFormula.uuid == uuid) { await deleteFormulaElement(element.id); return true; } diff --git a/lib/formula_models.dart b/lib/formula_models.dart index 1aaa6b9..22a8242 100644 --- a/lib/formula_models.dart +++ b/lib/formula_models.dart @@ -311,8 +311,8 @@ class Formula extends FormulaElement { @override Map toMap() { - // UUID NOT INCLUDED ON PURPOSE return { + 'uuid': uuid, 'name': name, if (description != null) 'description': description, 'input': input.map((v) => v.toMap()).toList(growable: false), @@ -323,7 +323,7 @@ class Formula extends FormulaElement { } Formula({ - String? uuid = null, + String? uuid, required this.name, this.description, required this.input,