fix(stations): свечение верхнего ряда не обрезается, уходит под чипы
Грид растянут под чипы (верхний contentPadding = высота чипов), а чипы вынесены отдельным слоем поверх грида с фоном-градиентом (вверху непрозрачный — маскирует прокрутку, книзу прозрачный). Свечение играющей станции из верхнего ряда больше не режется границей и мягко проступает из-под чипов категорий. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package com.radiola.ui.stations
|
||||
|
||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.gestures.detectHorizontalDragGestures
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.lazy.grid.GridCells
|
||||
@@ -10,6 +11,8 @@ import androidx.compose.material3.*
|
||||
import androidx.compose.runtime.*
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Brush
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.hapticfeedback.HapticFeedbackType
|
||||
import androidx.compose.ui.input.pointer.pointerInput
|
||||
import androidx.compose.ui.platform.LocalHapticFeedback
|
||||
@@ -75,16 +78,6 @@ fun StationsScreen(
|
||||
)
|
||||
Spacer(Modifier.height(12.dp))
|
||||
|
||||
// Жанры — всегда видны
|
||||
if (tags.isNotEmpty()) {
|
||||
FilterChips(
|
||||
tags = tags,
|
||||
selectedTag = selectedTag,
|
||||
onTagSelected = viewModel::onTagSelected
|
||||
)
|
||||
Spacer(Modifier.height(8.dp))
|
||||
}
|
||||
|
||||
// Область результатов — единственная прокручиваемая зона.
|
||||
// Горизонтальный свайп листает фильтры-чипы (вертикаль остаётся у грида).
|
||||
Box(
|
||||
@@ -145,7 +138,9 @@ fun StationsScreen(
|
||||
else -> LazyVerticalGrid(
|
||||
columns = GridCells.Fixed(2),
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
contentPadding = PaddingValues(start = 20.dp, end = 20.dp, top = 4.dp, bottom = 20.dp),
|
||||
// top = высота чипов: грид уходит ПОД них, свечение верхнего ряда
|
||||
// не обрезается и проступает за чипами.
|
||||
contentPadding = PaddingValues(start = 20.dp, end = 20.dp, top = 54.dp, bottom = 20.dp),
|
||||
horizontalArrangement = Arrangement.spacedBy(14.dp),
|
||||
verticalArrangement = Arrangement.spacedBy(14.dp)
|
||||
) {
|
||||
@@ -163,6 +158,31 @@ fun StationsScreen(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Чипы-фильтры поверх грида. Фон-градиент: вверху непрозрачный
|
||||
// (маскирует прокручиваемые карточки), книзу прозрачный — свечение
|
||||
// верхнего ряда станций проступает ИЗ-ПОД чипов.
|
||||
if (tags.isNotEmpty()) {
|
||||
Box(
|
||||
modifier = Modifier
|
||||
.align(Alignment.TopStart)
|
||||
.fillMaxWidth()
|
||||
.background(
|
||||
Brush.verticalGradient(
|
||||
0f to colors.bgBase,
|
||||
0.55f to colors.bgBase,
|
||||
1f to Color.Transparent
|
||||
)
|
||||
)
|
||||
.padding(top = 2.dp, bottom = 12.dp)
|
||||
) {
|
||||
FilterChips(
|
||||
tags = tags,
|
||||
selectedTag = selectedTag,
|
||||
onTagSelected = viewModel::onTagSelected
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user