From 00eb595d2d7d05702f9a9f28e7d9a7856dbdd571 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Gonz=C3=A1lez?= Date: Sun, 21 Sep 2025 21:35:20 +0200 Subject: [PATCH] feat: add FormulaList widget and force unit definitions --- lib/ai/formula_list.dart | 39 +++++++++++++++++++++++++++++ lib/defaults/units/force.d4rt.units | 31 +++++++++++++++++++++++ lib/main.dart | 24 +++--------------- 3 files changed, 74 insertions(+), 20 deletions(-) create mode 100644 lib/ai/formula_list.dart create mode 100644 lib/defaults/units/force.d4rt.units diff --git a/lib/ai/formula_list.dart b/lib/ai/formula_list.dart new file mode 100644 index 0000000..5f04c51 --- /dev/null +++ b/lib/ai/formula_list.dart @@ -0,0 +1,39 @@ +import 'package:flutter/material.dart'; +import 'package:d4rt_formulas/formula_models.dart'; +import '../corpus.dart'; +import 'formula_screen.dart'; + +class FormulaList extends StatelessWidget { + final Corpus corpus; + final List formulas; + + const FormulaList({ + super.key, + required this.corpus, + required this.formulas, + }); + + @override + Widget build(BuildContext context) { + return ListView.builder( + itemCount: formulas.length, + itemBuilder: (context, index) { + final formula = formulas[index]; + return ListTile( + title: Text(formula.name), + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => FormulaScreen( + formula: formula, + corpus: corpus, + ), + ), + ); + }, + ); + }, + ); + } +} diff --git a/lib/defaults/units/force.d4rt.units b/lib/defaults/units/force.d4rt.units new file mode 100644 index 0000000..303d42c --- /dev/null +++ b/lib/defaults/units/force.d4rt.units @@ -0,0 +1,31 @@ +[ + { + "name": "newton", + "symbol": "N", + "isBase": true + }, + { + "name": "kilonewton", + "symbol": "kN", + "baseUnit": "newton", + "factor": 1000 + }, + { + "name": "meganewton", + "symbol": "MN", + "baseUnit": "newton", + "factor": 1000000 + }, + { + "name": "dyne", + "symbol": "dyn", + "baseUnit": "newton", + "factor": 0.00001 + }, + { + "name": "pound-force", + "symbol": "lbf", + "baseUnit": "newton", + "factor": 4.44822 + } +] diff --git a/lib/main.dart b/lib/main.dart index dda93b2..4ccbd35 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -5,6 +5,7 @@ import 'package:resource_portable/resource.dart' show Resource; import 'dart:convert'; import 'ai/formula_screen.dart'; +import 'ai/formula_list.dart'; import 'corpus.dart'; import 'defaults/default_corpus.dart'; @@ -19,26 +20,9 @@ void main() { } return Scaffold( appBar: AppBar(title: const Text('Formulas')), - body: ListView.builder( - itemCount: snapshot.data!.getFormulas().length, - itemBuilder: (context, index) { - final formula = snapshot.data!.getFormulas()[index]; - return ListTile( - title: Text(formula.name), - subtitle: Text(formula.description ?? ''), - onTap: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => FormulaScreen( - formula: formula, - corpus: snapshot.data!, - ), - ), - ); - }, - ); - }, + body: FormulaList( + corpus: snapshot.data!, + formulas: snapshot.data!.getFormulas(), ), ); }