diff --git a/aider.sh b/aider.sh index f6fcc10..4cdb855 100755 --- a/aider.sh +++ b/aider.sh @@ -1,3 +1,2 @@ -aider --git --watch-files --read README.md --read CLAUDE.md -notify-send "LLM session ended" +aider --git --watch-files --read CLAUDE.md --notifications diff --git a/lib/ai/unit_dropdown.dart b/lib/ai/unit_dropdown.dart new file mode 100644 index 0000000..d181bc9 --- /dev/null +++ b/lib/ai/unit_dropdown.dart @@ -0,0 +1,38 @@ +import 'package:flutter/material.dart'; +import '../../formula_models.dart'; +import '../../corpus.dart'; + +class UnitDropdown extends StatelessWidget { + final UnitCorpus corpus; + final VariableSpec variable; + final String? selectedUnit; + final ValueChanged onUnitChanged; + + const UnitDropdown({ + super.key, + required this.corpus, + required this.variable, + required this.selectedUnit, + required this.onUnitChanged, + }); + + @override + Widget build(BuildContext context) { + final availableUnits = corpus.allUnits().where((unit) => unit.baseUnit == variable.magnitude).toList(); + + return DropdownButton( + value: selectedUnit ?? variable.magnitude, + icon: const Icon(Icons.arrow_drop_down), + elevation: 16, + style: TextStyle(color: Theme.of(context).colorScheme.primary, fontSize: 14), + underline: Container(height: 1, color: Theme.of(context).dividerColor), + onChanged: onUnitChanged, + items: availableUnits.map>((UnitSpec unit) { + return DropdownMenuItem( + value: unit.name, + child: Text(unit.symbol, style: const TextStyle(fontSize: 14)), + ); + }).toList(), + ); + } +} diff --git a/lib/ai/unit_list.dart b/lib/ai/unit_list.dart index 248aa2c..8203509 100644 --- a/lib/ai/unit_list.dart +++ b/lib/ai/unit_list.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import '../corpus.dart'; import '../formula_models.dart'; +import 'formula_screen.dart'; class UnitList extends StatefulWidget { final UnitCorpus corpus; @@ -54,7 +55,7 @@ class _UnitListState extends State { VariableSpec(name: 'velocity', magnitude: 'meters_per_second'), ], output: VariableSpec(name: 'energy', magnitude: 'joules'), - d4rtCode: "main() {\n return 0.5 * mass * velocity * velocity;\n}", + d4rtCode: "energy = 0.5 * mass * velocity * velocity;", ); Navigator.push( diff --git a/lib/corpus.dart b/lib/corpus.dart index 2f76c7a..0ec89e8 100644 --- a/lib/corpus.dart +++ b/lib/corpus.dart @@ -93,4 +93,6 @@ class UnitCorpus { return xTo; } + + Iterable allUnits() => _allUnits.values; } diff --git a/lib/main.dart b/lib/main.dart index d93a078..8ace5f4 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -2,9 +2,12 @@ import 'package:d4rt_formulas/ai/FormulaWidget.dart'; import 'package:d4rt_formulas/formula_models.dart'; import 'package:flutter/material.dart'; -import 'package:resource/resource.dart'; +import 'package:resource_portable/resource.dart' show Resource; import 'dart:convert'; +import 'ai/unit_list.dart'; +import 'corpus.dart'; + void main() { runApp(MaterialApp( home: FutureBuilder(