Separate browsing filters from review radius
All checks were successful
Build and deploy Flutter Web / build (push) Successful in 4m2s
All checks were successful
Build and deploy Flutter Web / build (push) Successful in 4m2s
This commit is contained in:
@@ -53,9 +53,7 @@ class _MapContent extends ConsumerWidget {
|
||||
final selected = state.selectedPlace;
|
||||
final userCoordinate = state.userCoordinate;
|
||||
final mapCenter = userCoordinate ?? selected?.coordinate ?? _fallbackCenter;
|
||||
final availableTraits = {
|
||||
for (final place in state.recommendations) ...place.traits,
|
||||
}.toList();
|
||||
final availableTraits = PlaceTrait.values;
|
||||
|
||||
return Scaffold(
|
||||
body: Stack(
|
||||
@@ -121,25 +119,24 @@ class _MapContent extends ConsumerWidget {
|
||||
),
|
||||
),
|
||||
),
|
||||
if (availableTraits.isNotEmpty)
|
||||
SafeArea(
|
||||
child: Align(
|
||||
alignment: Alignment.topCenter,
|
||||
child: _TraitBar(
|
||||
selectedTrait: state.selectedTrait,
|
||||
traits: availableTraits,
|
||||
),
|
||||
),
|
||||
),
|
||||
Align(
|
||||
alignment: Alignment.bottomCenter,
|
||||
child: SafeArea(
|
||||
top: false,
|
||||
child: _PlaceCarousel(
|
||||
places: state.recommendations,
|
||||
onSelect: (place) => ref
|
||||
.read(placeControllerProvider.notifier)
|
||||
.selectPlace(place.id),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
_TraitBar(
|
||||
selectedTrait: state.selectedTrait,
|
||||
traits: availableTraits,
|
||||
),
|
||||
_PlaceCarousel(
|
||||
places: state.recommendations,
|
||||
onSelect: (place) => ref
|
||||
.read(placeControllerProvider.notifier)
|
||||
.selectPlace(place.id),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
@@ -525,7 +522,7 @@ class _MapAttribution extends StatelessWidget {
|
||||
class _TraitBar extends ConsumerWidget {
|
||||
const _TraitBar({required this.selectedTrait, required this.traits});
|
||||
|
||||
final PlaceTrait selectedTrait;
|
||||
final PlaceTrait? selectedTrait;
|
||||
final List<PlaceTrait> traits;
|
||||
|
||||
@override
|
||||
@@ -536,16 +533,19 @@ class _TraitBar extends ConsumerWidget {
|
||||
height: 54,
|
||||
child: ListView.separated(
|
||||
scrollDirection: Axis.horizontal,
|
||||
padding: const EdgeInsets.fromLTRB(68, 8, 12, 0),
|
||||
padding: const EdgeInsets.fromLTRB(12, 0, 12, 8),
|
||||
itemCount: traits.length,
|
||||
separatorBuilder: (_, _) => const SizedBox(width: 6),
|
||||
itemBuilder: (context, index) {
|
||||
final item = traits[index];
|
||||
final selected = item == selectedTrait;
|
||||
return ChoiceChip(
|
||||
avatar: Icon(item.icon, size: 17),
|
||||
label: Text(item.label),
|
||||
selected: item == selectedTrait,
|
||||
onSelected: (_) => controller.selectTrait(item),
|
||||
selected: selected,
|
||||
onSelected: (_) => selected
|
||||
? controller.clearTrait()
|
||||
: controller.selectTrait(item),
|
||||
backgroundColor: const Color(0xFFFFFBF5),
|
||||
selectedColor: Theme.of(context).colorScheme.primaryContainer,
|
||||
side: BorderSide.none,
|
||||
@@ -710,7 +710,7 @@ class AddExperienceFlow extends ConsumerStatefulWidget {
|
||||
|
||||
class _AddExperienceFlowState extends ConsumerState<AddExperienceFlow> {
|
||||
static const _minimumInformationUnits = 16.0;
|
||||
static const _nearbyPlaceRadiusMeters = 200;
|
||||
static const _nearbyPlaceRadiusMeters = 50;
|
||||
|
||||
final _api = MapflowApi();
|
||||
final _waveController = WaveformRecorderController(
|
||||
@@ -1279,7 +1279,7 @@ class _IntroStep extends StatelessWidget {
|
||||
),
|
||||
const SizedBox(height: 22),
|
||||
Text(
|
||||
'Поделись ощущением от места голосом. Мы разберем запись через AI и удалим аудио после обработки.',
|
||||
'Поделись ощущением от места голосом. Нужно быть в заведении или не дальше 50 м. Аудио обработаем и удалим.',
|
||||
textAlign: TextAlign.left,
|
||||
style: Theme.of(context).textTheme.titleLarge?.copyWith(
|
||||
color: Colors.white,
|
||||
|
||||
Reference in New Issue
Block a user