From 7e3d03d225f4c71da74dae107498c7d45c8c3ec2 Mon Sep 17 00:00:00 2001 From: Ruslan Bakiev <572431+veikab@users.noreply.github.com> Date: Thu, 14 May 2026 22:48:47 +0700 Subject: [PATCH] Show only populated place filters --- lib/screens/mapflow_shell.dart | 35 +++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) 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()