diff --git a/lib/screens/mapflow_shell.dart b/lib/screens/mapflow_shell.dart index b8f0570..547aabc 100644 --- a/lib/screens/mapflow_shell.dart +++ b/lib/screens/mapflow_shell.dart @@ -53,7 +53,11 @@ class _MapContent extends ConsumerWidget { final selected = state.selectedPlace; final userCoordinate = state.userCoordinate; final mapCenter = userCoordinate ?? selected?.coordinate ?? _fallbackCenter; - final availableTraits = PlaceTrait.values; + final traitCounts = _countPlaceTraits(state.places); + final availableTraits = [ + for (final trait in PlaceTrait.values) + if ((traitCounts[trait] ?? 0) > 0) trait, + ]; return Scaffold( body: Stack( @@ -126,10 +130,12 @@ class _MapContent extends ConsumerWidget { child: Column( mainAxisSize: MainAxisSize.min, children: [ - _TraitBar( - selectedTrait: state.selectedTrait, - traits: availableTraits, - ), + if (availableTraits.isNotEmpty) + _TraitBar( + selectedTrait: state.selectedTrait, + traits: availableTraits, + traitCounts: traitCounts, + ), _PlaceCarousel( places: state.recommendations, onSelect: (place) => ref @@ -173,6 +179,16 @@ class _MapContent extends ConsumerWidget { } } +Map _countPlaceTraits(List places) { + final counts = {}; + for (final place in places) { + for (final trait in place.traits) { + counts[trait] = (counts[trait] ?? 0) + 1; + } + } + return counts; +} + class _UserLocationMarker extends StatelessWidget { const _UserLocationMarker(); @@ -520,10 +536,15 @@ class _MapAttribution extends StatelessWidget { } class _TraitBar extends ConsumerWidget { - const _TraitBar({required this.selectedTrait, required this.traits}); + const _TraitBar({ + required this.selectedTrait, + required this.traits, + required this.traitCounts, + }); final PlaceTrait? selectedTrait; final List traits; + final Map traitCounts; @override Widget build(BuildContext context, WidgetRef ref) { @@ -541,7 +562,7 @@ class _TraitBar extends ConsumerWidget { final selected = item == selectedTrait; return ChoiceChip( avatar: Icon(item.icon, size: 17), - label: Text(item.label), + label: Text('${item.label} ${traitCounts[item] ?? 0}'), selected: selected, onSelected: (_) => selected ? controller.clearTrait()