feat: add FormulaList widget and force unit definitions

This commit is contained in:
Álvaro González 2025-09-21 21:35:20 +02:00 committed by Álvaro González (aider)
parent 681d9215b3
commit 00eb595d2d
3 changed files with 74 additions and 20 deletions

39
lib/ai/formula_list.dart Normal file
View file

@ -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<Formula> 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,
),
),
);
},
);
},
);
}
}

View file

@ -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
}
]

View file

@ -5,6 +5,7 @@ import 'package:resource_portable/resource.dart' show Resource;
import 'dart:convert'; import 'dart:convert';
import 'ai/formula_screen.dart'; import 'ai/formula_screen.dart';
import 'ai/formula_list.dart';
import 'corpus.dart'; import 'corpus.dart';
import 'defaults/default_corpus.dart'; import 'defaults/default_corpus.dart';
@ -19,26 +20,9 @@ void main() {
} }
return Scaffold( return Scaffold(
appBar: AppBar(title: const Text('Formulas')), appBar: AppBar(title: const Text('Formulas')),
body: ListView.builder( body: FormulaList(
itemCount: snapshot.data!.getFormulas().length, corpus: snapshot.data!,
itemBuilder: (context, index) { formulas: snapshot.data!.getFormulas(),
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!,
),
),
);
},
);
},
), ),
); );
} }