From 018579d4b92ddeb4d43c42d9f15f344beb2cb9bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Gonz=C3=A1lez?= Date: Tue, 9 Sep 2025 09:57:05 +0200 Subject: [PATCH] feat: enhance UnitList with conversion factors and empty state Co-authored-by: aider (openrouter/deepseek/deepseek-r1:free) --- lib/ai/unit_list.dart | 44 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 40 insertions(+), 4 deletions(-) diff --git a/lib/ai/unit_list.dart b/lib/ai/unit_list.dart index 76a7d84..d3a216f 100644 --- a/lib/ai/unit_list.dart +++ b/lib/ai/unit_list.dart @@ -60,17 +60,53 @@ class _UnitListState extends State { ), ), Expanded( - child: ListView.builder( + child: _filteredUnits.isEmpty + ? Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Icon(Icons.search_off, size: 40, color: Theme.of(context).colorScheme.outline), + const SizedBox(height: 16), + Text('No matching units found', + style: Theme.of(context).textTheme.titleSmall?.copyWith( + color: Theme.of(context).colorScheme.outline + ), + ), + ], + ), + ) + : ListView.builder( itemCount: _filteredUnits.length, itemBuilder: (context, index) { final unit = _filteredUnits[index]; return ListTile( title: Text(unit.name), - subtitle: Text('Symbol: ${unit.symbol} • Base unit: ${unit.baseUnit}'), - contentPadding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), + subtitle: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text('Symbol: ${unit.symbol}'), + Text('Base: ${unit.baseUnit}', + style: Theme.of(context).textTheme.bodySmall?.copyWith( + color: Theme.of(context).colorScheme.onSurfaceVariant + ), + ), + if (unit.factorFromUnitToBase != null) + Padding( + padding: const EdgeInsets.only(top: 4), + child: Text('1 ${unit.name} = ${unit.factorFromUnitToBase} ${unit.baseUnit}', + style: Theme.of(context).textTheme.bodySmall?.copyWith( + fontFeatures: [const FontFeature.tabularFigures()], + color: Theme.of(context).colorScheme.primary, + ), + ), + ), + ], + ), + contentPadding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), tileColor: index.isEven - ? Theme.of(context).colorScheme.surfaceVariant.withOpacity(0.3) + ? Theme.of(context).colorScheme.surfaceVariant.withOpacity(0.2) : null, + visualDensity: VisualDensity.compact, ); }, ),