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
|
package com.radiola.ui.stations
|
||||||
|
|
||||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||||
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.gestures.detectHorizontalDragGestures
|
import androidx.compose.foundation.gestures.detectHorizontalDragGestures
|
||||||
import androidx.compose.foundation.layout.*
|
import androidx.compose.foundation.layout.*
|
||||||
import androidx.compose.foundation.lazy.grid.GridCells
|
import androidx.compose.foundation.lazy.grid.GridCells
|
||||||
@@ -10,6 +11,8 @@ import androidx.compose.material3.*
|
|||||||
import androidx.compose.runtime.*
|
import androidx.compose.runtime.*
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
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.hapticfeedback.HapticFeedbackType
|
||||||
import androidx.compose.ui.input.pointer.pointerInput
|
import androidx.compose.ui.input.pointer.pointerInput
|
||||||
import androidx.compose.ui.platform.LocalHapticFeedback
|
import androidx.compose.ui.platform.LocalHapticFeedback
|
||||||
@@ -75,16 +78,6 @@ fun StationsScreen(
|
|||||||
)
|
)
|
||||||
Spacer(Modifier.height(12.dp))
|
Spacer(Modifier.height(12.dp))
|
||||||
|
|
||||||
// Жанры — всегда видны
|
|
||||||
if (tags.isNotEmpty()) {
|
|
||||||
FilterChips(
|
|
||||||
tags = tags,
|
|
||||||
selectedTag = selectedTag,
|
|
||||||
onTagSelected = viewModel::onTagSelected
|
|
||||||
)
|
|
||||||
Spacer(Modifier.height(8.dp))
|
|
||||||
}
|
|
||||||
|
|
||||||
// Область результатов — единственная прокручиваемая зона.
|
// Область результатов — единственная прокручиваемая зона.
|
||||||
// Горизонтальный свайп листает фильтры-чипы (вертикаль остаётся у грида).
|
// Горизонтальный свайп листает фильтры-чипы (вертикаль остаётся у грида).
|
||||||
Box(
|
Box(
|
||||||
@@ -145,7 +138,9 @@ fun StationsScreen(
|
|||||||
else -> LazyVerticalGrid(
|
else -> LazyVerticalGrid(
|
||||||
columns = GridCells.Fixed(2),
|
columns = GridCells.Fixed(2),
|
||||||
modifier = Modifier.fillMaxSize(),
|
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),
|
horizontalArrangement = Arrangement.spacedBy(14.dp),
|
||||||
verticalArrangement = 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