Small UI adjustment over some screens.
This commit is contained in:
parent
c8d6bfe4ef
commit
2e4c87c052
4 changed files with 194 additions and 168 deletions
|
|
@ -22,11 +22,13 @@ class CharacterSheetParser @Inject constructor() {
|
|||
|
||||
// prepare a hash on the structure & function to get index in it.
|
||||
lateinit var structure: Map<String, Int>
|
||||
fun List<*>.parseInt(key: String): Int =
|
||||
(getOrNull(structure.getValue(key)) as? String)?.toIntOrNull() ?: 0
|
||||
|
||||
// declare helper method to parse String
|
||||
fun List<*>.parseString(key: String): String? =
|
||||
(getOrNull(structure.getValue(key)) as? String)
|
||||
(getOrNull(structure.getValue(key)) as? String)?.takeIf { it.isNotEmpty() }
|
||||
|
||||
// declare helper method to parse Int
|
||||
fun List<*>.parseInt(key: String): Int? = parseString(key = key)?.toIntOrNull()
|
||||
|
||||
// parse the sheet
|
||||
return sheet?.mapIndexedNotNull { index, item ->
|
||||
|
|
@ -43,39 +45,39 @@ class CharacterSheetParser @Inject constructor() {
|
|||
name = name,
|
||||
hitPoint = item.parseString(HIT_POINT) ?: "1",
|
||||
maxHitPoint = item.parseString(MAX_HIT_POINT) ?: "1",
|
||||
armorClass = item.parseString(ARMOR_CLASS) ?: "0",
|
||||
speed = item.parseInt(SPEED),
|
||||
proficiency = item.parseInt(MASTERY),
|
||||
strength = item.parseInt(STRENGTH),
|
||||
dexterity = item.parseInt(DEXTERITY),
|
||||
constitution = item.parseInt(CONSTITUTION),
|
||||
intelligence = item.parseInt(INTELLIGENCE),
|
||||
wisdom = item.parseInt(WISDOM),
|
||||
charisma = item.parseInt(CHARISMA),
|
||||
strengthSavingThrows = item.parseInt(STRENGTH_SAVING_THROW),
|
||||
dexteritySavingThrows = item.parseInt(DEXTERITY_SAVING_THROW),
|
||||
constitutionSavingThrows = item.parseInt(CONSTITUTION_SAVING_THROW),
|
||||
intelligenceSavingThrows = item.parseInt(INTELLIGENCE_SAVING_THROW),
|
||||
wisdomSavingThrows = item.parseInt(WISDOM_SAVING_THROW),
|
||||
charismaSavingThrows = item.parseInt(CHARISMA_SAVING_THROW),
|
||||
acrobatics = item.parseInt(ACROBATICS),
|
||||
animalHandling = item.parseInt(ANIMAL_HANDLING),
|
||||
arcana = item.parseInt(ARCANA),
|
||||
athletics = item.parseInt(ATHLETICS),
|
||||
deception = item.parseInt(DECEPTION),
|
||||
history = item.parseInt(HISTORY),
|
||||
insight = item.parseInt(INSIGHT),
|
||||
intimidation = item.parseInt(INTIMIDATION),
|
||||
investigation = item.parseInt(INVESTIGATION),
|
||||
medicine = item.parseInt(MEDICINE),
|
||||
nature = item.parseInt(NATURE),
|
||||
perception = item.parseInt(PERCEPTION),
|
||||
performance = item.parseInt(PERFORMANCE),
|
||||
persuasion = item.parseInt(PERSUASION),
|
||||
religion = item.parseInt(RELIGION),
|
||||
sleightOfHand = item.parseInt(SLEIGHT_OF_HAND),
|
||||
stealth = item.parseInt(STEALTH),
|
||||
survival = item.parseInt(SURVIVAL),
|
||||
armorClass = item.parseString(ARMOR_CLASS) ?: "10",
|
||||
speed = item.parseInt(SPEED) ?: 10,
|
||||
proficiency = item.parseInt(MASTERY) ?: 2,
|
||||
strength = item.parseInt(STRENGTH) ?: 10,
|
||||
dexterity = item.parseInt(DEXTERITY) ?: 10,
|
||||
constitution = item.parseInt(CONSTITUTION) ?: 10,
|
||||
intelligence = item.parseInt(INTELLIGENCE) ?: 10,
|
||||
wisdom = item.parseInt(WISDOM) ?: 10,
|
||||
charisma = item.parseInt(CHARISMA) ?: 10,
|
||||
strengthSavingThrows = item.parseInt(STRENGTH_SAVING_THROW) ?: 0,
|
||||
dexteritySavingThrows = item.parseInt(DEXTERITY_SAVING_THROW) ?: 0,
|
||||
constitutionSavingThrows = item.parseInt(CONSTITUTION_SAVING_THROW) ?: 0,
|
||||
intelligenceSavingThrows = item.parseInt(INTELLIGENCE_SAVING_THROW) ?: 0,
|
||||
wisdomSavingThrows = item.parseInt(WISDOM_SAVING_THROW) ?: 0,
|
||||
charismaSavingThrows = item.parseInt(CHARISMA_SAVING_THROW) ?: 0,
|
||||
acrobatics = item.parseInt(ACROBATICS) ?: 0,
|
||||
animalHandling = item.parseInt(ANIMAL_HANDLING) ?: 0,
|
||||
arcana = item.parseInt(ARCANA) ?: 0,
|
||||
athletics = item.parseInt(ATHLETICS) ?: 0,
|
||||
deception = item.parseInt(DECEPTION) ?: 0,
|
||||
history = item.parseInt(HISTORY) ?: 0,
|
||||
insight = item.parseInt(INSIGHT) ?: 0,
|
||||
intimidation = item.parseInt(INTIMIDATION) ?: 0,
|
||||
investigation = item.parseInt(INVESTIGATION) ?: 0,
|
||||
medicine = item.parseInt(MEDICINE) ?: 0,
|
||||
nature = item.parseInt(NATURE) ?: 0,
|
||||
perception = item.parseInt(PERCEPTION) ?: 0,
|
||||
performance = item.parseInt(PERFORMANCE) ?: 0,
|
||||
persuasion = item.parseInt(PERSUASION) ?: 0,
|
||||
religion = item.parseInt(RELIGION) ?: 0,
|
||||
sleightOfHand = item.parseInt(SLEIGHT_OF_HAND) ?: 0,
|
||||
stealth = item.parseInt(STEALTH) ?: 0,
|
||||
survival = item.parseInt(SURVIVAL) ?: 0,
|
||||
)
|
||||
} else {
|
||||
null
|
||||
|
|
|
|||
|
|
@ -0,0 +1,66 @@
|
|||
package com.pixelized.rplexicon.ui.screens.character
|
||||
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.shape.CutCornerShape
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.State
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.pixelized.rplexicon.ui.screens.character.composable.Action
|
||||
import com.pixelized.rplexicon.ui.screens.character.composable.ActionsUio
|
||||
import com.pixelized.rplexicon.ui.screens.character.composable.Counter
|
||||
import com.pixelized.rplexicon.ui.screens.character.composable.CounterUio
|
||||
import com.pixelized.rplexicon.utilitary.extentions.ddBorder
|
||||
|
||||
@Composable
|
||||
fun ActionsPages(
|
||||
modifier: Modifier = Modifier,
|
||||
actions: State<List<ActionsUio>>,
|
||||
counter: State<List<CounterUio>>,
|
||||
alterations: State<List<String>>,
|
||||
onHit: (id: String) -> Unit,
|
||||
onDamage: (id: String) -> Unit,
|
||||
) {
|
||||
Column(
|
||||
modifier = modifier,
|
||||
) {
|
||||
Column(
|
||||
verticalArrangement = Arrangement.spacedBy(8.dp),
|
||||
) {
|
||||
counter.value.forEach {
|
||||
Counter(
|
||||
counter = it,
|
||||
)
|
||||
}
|
||||
actions.value.forEach {
|
||||
Action(
|
||||
action = it,
|
||||
onHit = onHit,
|
||||
onDamage = onDamage,
|
||||
)
|
||||
}
|
||||
}
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.ddBorder(
|
||||
inner = remember { RoundedCornerShape(size = 8.dp) },
|
||||
outline = remember { CutCornerShape(size = 16.dp) },
|
||||
)
|
||||
.padding(all = 16.dp),
|
||||
verticalArrangement = Arrangement.spacedBy(8.dp),
|
||||
) {
|
||||
alterations.value.forEach {
|
||||
Text(
|
||||
text = it
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -2,19 +2,21 @@ package com.pixelized.rplexicon.ui.screens.character
|
|||
|
||||
import android.content.res.Configuration
|
||||
import androidx.activity.compose.BackHandler
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||
import androidx.compose.foundation.ScrollState
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.PaddingValues
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.systemBarsPadding
|
||||
import androidx.compose.foundation.pager.HorizontalPager
|
||||
import androidx.compose.foundation.pager.PagerState
|
||||
import androidx.compose.foundation.pager.rememberPagerState
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.shape.CutCornerShape
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.material.ExperimentalMaterialApi
|
||||
import androidx.compose.material.icons.Icons
|
||||
|
|
@ -25,7 +27,6 @@ import androidx.compose.material.pullrefresh.rememberPullRefreshState
|
|||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Scaffold
|
||||
import androidx.compose.material3.Surface
|
||||
import androidx.compose.material3.Text
|
||||
|
|
@ -40,13 +41,8 @@ import androidx.compose.ui.Alignment
|
|||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.shadow
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.ColorFilter
|
||||
import androidx.compose.ui.graphics.graphicsLayer
|
||||
import androidx.compose.ui.layout.ContentScale
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.hilt.navigation.compose.hiltViewModel
|
||||
|
|
@ -55,16 +51,13 @@ import com.pixelized.rplexicon.NO_WINDOW_INSETS
|
|||
import com.pixelized.rplexicon.R
|
||||
import com.pixelized.rplexicon.ui.composable.Loader
|
||||
import com.pixelized.rplexicon.ui.navigation.LocalScreenNavHost
|
||||
import com.pixelized.rplexicon.ui.screens.character.composable.Action
|
||||
import com.pixelized.rplexicon.ui.screens.character.composable.ActionsUio
|
||||
import com.pixelized.rplexicon.ui.screens.character.composable.Counter
|
||||
import com.pixelized.rplexicon.ui.screens.character.composable.CounterUio
|
||||
import com.pixelized.rplexicon.ui.screens.character.composable.LabelPoint
|
||||
import com.pixelized.rplexicon.ui.screens.character.composable.LabelPointUio
|
||||
import com.pixelized.rplexicon.ui.screens.character.composable.ProficiencyUio
|
||||
import com.pixelized.rplexicon.ui.screens.character.composable.StatUio
|
||||
import com.pixelized.rplexicon.ui.theme.LexiconTheme
|
||||
import com.pixelized.rplexicon.utilitary.extentions.ddBorder
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
@Stable
|
||||
|
|
@ -78,7 +71,7 @@ data class CharacterSheetUio(
|
|||
val proficiencies: List<ProficiencyUio>,
|
||||
)
|
||||
|
||||
@OptIn(ExperimentalMaterialApi::class)
|
||||
@OptIn(ExperimentalMaterialApi::class, ExperimentalFoundationApi::class)
|
||||
@Composable
|
||||
fun CharacterSheetScreen(
|
||||
viewModel: CharacterSheetViewModel = hiltViewModel(),
|
||||
|
|
@ -92,7 +85,7 @@ fun CharacterSheetScreen(
|
|||
onRefresh = { scope.launch { viewModel.update() } },
|
||||
)
|
||||
|
||||
Box(
|
||||
Surface(
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
) {
|
||||
viewModel.sheet.value?.let {
|
||||
|
|
@ -101,8 +94,15 @@ fun CharacterSheetScreen(
|
|||
.fillMaxSize()
|
||||
.systemBarsPadding(),
|
||||
state = rememberScrollState(),
|
||||
refreshState = refresh,
|
||||
pagerState = rememberPagerState {
|
||||
if (viewModel.actions.value.isNotEmpty() || viewModel.counter.value.isNotEmpty()) {
|
||||
2
|
||||
} else {
|
||||
1
|
||||
}
|
||||
},
|
||||
refreshing = viewModel.isLoading,
|
||||
refreshState = refresh,
|
||||
onRefresh = { scope.launch { viewModel.update() } },
|
||||
sheet = it,
|
||||
actions = viewModel.actions,
|
||||
|
|
@ -177,11 +177,16 @@ fun CharacterSheetScreen(
|
|||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterialApi::class)
|
||||
@OptIn(
|
||||
ExperimentalMaterial3Api::class,
|
||||
ExperimentalMaterialApi::class,
|
||||
ExperimentalFoundationApi::class,
|
||||
)
|
||||
@Composable
|
||||
private fun CharacterSheetContent(
|
||||
modifier: Modifier = Modifier,
|
||||
state: ScrollState,
|
||||
pagerState: PagerState,
|
||||
refreshState: PullRefreshState,
|
||||
refreshing: State<Boolean>,
|
||||
onRefresh: () -> Unit,
|
||||
|
|
@ -202,7 +207,6 @@ private fun CharacterSheetContent(
|
|||
contentWindowInsets = NO_WINDOW_INSETS,
|
||||
topBar = {
|
||||
TopAppBar(
|
||||
modifier = Modifier.shadow(elevation = 4.dp),
|
||||
navigationIcon = {
|
||||
IconButton(onClick = onBack) {
|
||||
Icon(
|
||||
|
|
@ -228,110 +232,55 @@ private fun CharacterSheetContent(
|
|||
},
|
||||
) { paddingValues ->
|
||||
Surface(
|
||||
modifier = Modifier
|
||||
.pullRefresh(refreshState)
|
||||
.verticalScroll(state = state)
|
||||
.padding(paddingValues = paddingValues),
|
||||
modifier = Modifier.padding(paddingValues = paddingValues),
|
||||
) {
|
||||
Column(
|
||||
verticalArrangement = Arrangement.spacedBy(16.dp),
|
||||
) {
|
||||
Row(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.padding(horizontal = 16.dp),
|
||||
verticalAlignment = Alignment.Bottom,
|
||||
horizontalArrangement = Arrangement.spacedBy(
|
||||
space = 16.dp,
|
||||
alignment = Alignment.CenterHorizontally
|
||||
),
|
||||
Column {
|
||||
Surface(
|
||||
modifier = Modifier.shadow(elevation = 4.dp),
|
||||
) {
|
||||
LabelPoint(label = sheet.armorClass)
|
||||
LabelPoint(label = sheet.hitPoint)
|
||||
LabelPoint(label = sheet.speed)
|
||||
}
|
||||
|
||||
ProficiencyPage(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.padding(horizontal = 16.dp),
|
||||
sheet = sheet,
|
||||
onInitiative = onInitiative,
|
||||
onStats = onStats,
|
||||
onProficiencies = onProficiencies,
|
||||
)
|
||||
|
||||
if (actions.value.isNotEmpty() || counter.value.isNotEmpty()) {
|
||||
Row(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.padding(top = 16.dp),
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
horizontalArrangement = Arrangement.Center,
|
||||
.padding(horizontal = 16.dp),
|
||||
verticalAlignment = Alignment.Bottom,
|
||||
horizontalArrangement = Arrangement.spacedBy(
|
||||
space = 16.dp,
|
||||
alignment = Alignment.CenterHorizontally
|
||||
),
|
||||
) {
|
||||
Image(
|
||||
modifier = Modifier.graphicsLayer { rotationY = 180f },
|
||||
painter = painterResource(id = R.drawable.art_clip_1),
|
||||
contentScale = ContentScale.FillWidth,
|
||||
alignment = Alignment.Center,
|
||||
colorFilter = ColorFilter.tint(color = MaterialTheme.colorScheme.onSurface),
|
||||
contentDescription = null,
|
||||
)
|
||||
Text(
|
||||
modifier = Modifier
|
||||
.weight(weight = 1f, fill = false)
|
||||
.padding(horizontal = 8.dp),
|
||||
style = MaterialTheme.typography.titleLarge,
|
||||
textAlign = TextAlign.Center,
|
||||
overflow = TextOverflow.Ellipsis,
|
||||
maxLines = 1,
|
||||
text = stringResource(R.string.character_sheet_title_actions),
|
||||
)
|
||||
Image(
|
||||
painter = painterResource(id = R.drawable.art_clip_1),
|
||||
contentScale = ContentScale.FillWidth,
|
||||
alignment = Alignment.Center,
|
||||
colorFilter = ColorFilter.tint(color = MaterialTheme.colorScheme.onSurface),
|
||||
contentDescription = null,
|
||||
)
|
||||
}
|
||||
|
||||
Column(
|
||||
modifier = Modifier.padding(horizontal = 16.dp),
|
||||
verticalArrangement = Arrangement.spacedBy(8.dp),
|
||||
) {
|
||||
counter.value.forEach {
|
||||
Counter(
|
||||
counter = it,
|
||||
)
|
||||
}
|
||||
actions.value.forEach {
|
||||
Action(
|
||||
action = it,
|
||||
onHit = onHit,
|
||||
onDamage = onDamage,
|
||||
)
|
||||
}
|
||||
LabelPoint(label = sheet.armorClass)
|
||||
LabelPoint(label = sheet.hitPoint)
|
||||
LabelPoint(label = sheet.speed)
|
||||
}
|
||||
}
|
||||
|
||||
if (alterations.value.isNotEmpty()) {
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.padding(horizontal = 16.dp)
|
||||
.fillMaxWidth()
|
||||
.ddBorder(
|
||||
inner = remember { RoundedCornerShape(size = 8.dp) },
|
||||
outline = remember { CutCornerShape(size = 16.dp) },
|
||||
)
|
||||
.padding(all = 16.dp),
|
||||
verticalArrangement = Arrangement.spacedBy(8.dp),
|
||||
) {
|
||||
alterations.value.forEach {
|
||||
Text(
|
||||
text = it
|
||||
)
|
||||
}
|
||||
HorizontalPager(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.pullRefresh(refreshState)
|
||||
.verticalScroll(state = state),
|
||||
state = pagerState,
|
||||
contentPadding = PaddingValues(all = 16.dp),
|
||||
pageSpacing = 8.dp,
|
||||
verticalAlignment = Alignment.Top,
|
||||
) {
|
||||
when (it) {
|
||||
0 -> ProficiencyPage(
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
sheet = sheet,
|
||||
onInitiative = onInitiative,
|
||||
onStats = onStats,
|
||||
onProficiencies = onProficiencies,
|
||||
)
|
||||
|
||||
1 -> ActionsPages(
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
actions = actions,
|
||||
counter = counter,
|
||||
alterations = alterations,
|
||||
onHit = onHit,
|
||||
onDamage = onDamage,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -351,10 +300,10 @@ private fun CharacterSheetContent(
|
|||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalMaterialApi::class)
|
||||
@OptIn(ExperimentalMaterialApi::class, ExperimentalFoundationApi::class)
|
||||
@Composable
|
||||
@Preview(uiMode = Configuration.UI_MODE_NIGHT_NO, heightDp = 2000)
|
||||
@Preview(uiMode = Configuration.UI_MODE_NIGHT_YES, heightDp = 2000)
|
||||
@Preview(uiMode = Configuration.UI_MODE_NIGHT_NO)
|
||||
@Preview(uiMode = Configuration.UI_MODE_NIGHT_YES)
|
||||
private fun CharacterScreenPreview() {
|
||||
LexiconTheme {
|
||||
val bru = remember {
|
||||
|
|
@ -540,6 +489,7 @@ private fun CharacterScreenPreview() {
|
|||
CharacterSheetContent(
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
state = rememberScrollState(),
|
||||
pagerState = rememberPagerState { 1 },
|
||||
refreshState = rememberPullRefreshState(refreshing = false, onRefresh = { }),
|
||||
refreshing = remember { mutableStateOf(false) },
|
||||
onRefresh = { },
|
||||
|
|
|
|||
|
|
@ -108,7 +108,6 @@ private fun SearchScreenContent(
|
|||
containerColor = Color.Transparent,
|
||||
topBar = {
|
||||
TopAppBar(
|
||||
modifier = Modifier.shadow(elevation = 4.dp),
|
||||
windowInsets = NO_WINDOW_INSETS,
|
||||
navigationIcon = {
|
||||
IconButton(onClick = onBack) {
|
||||
|
|
@ -128,7 +127,7 @@ private fun SearchScreenContent(
|
|||
modifier = Modifier.padding(paddingValues = paddingValues),
|
||||
header = {
|
||||
SearchBox(
|
||||
modifier = Modifier.padding(horizontal = 16.dp),
|
||||
modifier = Modifier.shadow(elevation = 4.dp),
|
||||
form = form,
|
||||
)
|
||||
},
|
||||
|
|
@ -161,27 +160,36 @@ private fun SearchBox(
|
|||
modifier: Modifier = Modifier,
|
||||
form: SearchFormUio,
|
||||
) {
|
||||
Column(
|
||||
Surface(
|
||||
modifier = modifier,
|
||||
verticalArrangement = Arrangement.spacedBy(2.dp),
|
||||
) {
|
||||
TextField(
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
field = form.search,
|
||||
)
|
||||
Row(
|
||||
horizontalArrangement = Arrangement.spacedBy(8.dp),
|
||||
Column(
|
||||
verticalArrangement = Arrangement.spacedBy(2.dp),
|
||||
) {
|
||||
DropDownField(
|
||||
modifier = Modifier.weight(1f),
|
||||
field = form.gender,
|
||||
TextField(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.padding(horizontal = 16.dp),
|
||||
field = form.search,
|
||||
)
|
||||
DropDownField(
|
||||
modifier = Modifier.weight(1f),
|
||||
field = form.race,
|
||||
Row(
|
||||
modifier = Modifier.padding(horizontal = 16.dp),
|
||||
horizontalArrangement = Arrangement.spacedBy(8.dp),
|
||||
) {
|
||||
DropDownField(
|
||||
modifier = Modifier.weight(weight = 1f, fill = true),
|
||||
field = form.gender,
|
||||
)
|
||||
DropDownField(
|
||||
modifier = Modifier.weight(weight = 1f, fill = true),
|
||||
field = form.race,
|
||||
)
|
||||
}
|
||||
Divider(
|
||||
modifier = Modifier.padding(top = 16.dp),
|
||||
color = MaterialTheme.lexicon.colorScheme.placeholder,
|
||||
)
|
||||
}
|
||||
Divider(modifier = Modifier.padding(top = 16.dp, bottom = 8.dp))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue