Почтиииии
This commit is contained in:
parent
91a0de0cc9
commit
38cb371048
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,65 +0,0 @@
|
||||
kotlin version: 1.9.10
|
||||
error message: java.lang.Exception: Could not flush incremental caches in C:\Users\egore\Desktop\MyProjects\ULSTU\TankAppMobile\TanksApp\compose\app\build\kspCaches\debug\symbolLookups: lookups.tab
|
||||
at org.jetbrains.kotlin.incremental.storage.BasicMapsOwner.forEachMapSafe(BasicMapsOwner.kt:64)
|
||||
at org.jetbrains.kotlin.incremental.storage.BasicMapsOwner.flush(BasicMapsOwner.kt:48)
|
||||
at org.jetbrains.kotlin.incremental.LookupStorage.flush(LookupStorage.kt:155)
|
||||
at com.google.devtools.ksp.IncrementalContext.updateLookupCache(Incremental.kt:262)
|
||||
at com.google.devtools.ksp.IncrementalContext.updateCaches(Incremental.kt:486)
|
||||
at com.google.devtools.ksp.IncrementalContext.updateCachesAndOutputs(Incremental.kt:556)
|
||||
at com.google.devtools.ksp.AbstractKotlinSymbolProcessingExtension.doAnalysis(KotlinSymbolProcessingExtension.kt:357)
|
||||
at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration(TopDownAnalyzerFacadeForJVM.kt:112)
|
||||
at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration$default(TopDownAnalyzerFacadeForJVM.kt:88)
|
||||
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:256)
|
||||
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:42)
|
||||
at org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport.analyzeAndReport(AnalyzerWithCompilerReport.kt:115)
|
||||
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.analyze(KotlinToJVMBytecodeCompiler.kt:247)
|
||||
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.repeatAnalysisIfNeeded(KotlinToJVMBytecodeCompiler.kt:181)
|
||||
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli(KotlinToJVMBytecodeCompiler.kt:87)
|
||||
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli$default(KotlinToJVMBytecodeCompiler.kt:47)
|
||||
at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:168)
|
||||
at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:53)
|
||||
at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:100)
|
||||
at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:46)
|
||||
at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:101)
|
||||
at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1497)
|
||||
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
|
||||
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
|
||||
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
|
||||
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
|
||||
at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360)
|
||||
at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)
|
||||
at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)
|
||||
at java.base/java.security.AccessController.doPrivileged(AccessController.java:712)
|
||||
at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)
|
||||
at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:587)
|
||||
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828)
|
||||
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705)
|
||||
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
|
||||
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704)
|
||||
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
|
||||
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
|
||||
at java.base/java.lang.Thread.run(Thread.java:833)
|
||||
Suppressed: java.lang.reflect.InaccessibleObjectException: Unable to make field protected java.io.OutputStream java.io.FilterOutputStream.out accessible: module java.base does not "opens java.io" to unnamed module @59fd97a8
|
||||
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
|
||||
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
|
||||
at java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:178)
|
||||
at java.base/java.lang.reflect.Field.setAccessible(Field.java:172)
|
||||
at org.jetbrains.kotlin.com.intellij.util.io.IOUtil.syncStream(IOUtil.java:216)
|
||||
at org.jetbrains.kotlin.com.intellij.util.io.PersistentHashMapValueStorage.appendBytes(PersistentHashMapValueStorage.java:188)
|
||||
at org.jetbrains.kotlin.com.intellij.util.io.PersistentHashMapValueStorage.appendBytes(PersistentHashMapValueStorage.java:175)
|
||||
at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapImpl$2.onDropFromCache(PersistentMapImpl.java:237)
|
||||
at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapImpl$2.onDropFromCache(PersistentMapImpl.java:215)
|
||||
at org.jetbrains.kotlin.com.intellij.util.containers.SLRUMap.clear(SLRUMap.java:172)
|
||||
at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapImpl.flushAppendCache(PersistentMapImpl.java:930)
|
||||
at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapImpl.clearAppenderCaches(PersistentMapImpl.java:754)
|
||||
at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapImpl.doForce(PersistentMapImpl.java:741)
|
||||
at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapImpl.force(PersistentMapImpl.java:730)
|
||||
at org.jetbrains.kotlin.com.intellij.util.io.PersistentHashMap.force(PersistentHashMap.java:194)
|
||||
at org.jetbrains.kotlin.incremental.storage.CachingLazyStorage.flush(CachingLazyStorage.kt:115)
|
||||
at org.jetbrains.kotlin.incremental.storage.BasicMap.flush(BasicMap.kt:40)
|
||||
at org.jetbrains.kotlin.incremental.storage.BasicMapsOwner$flush$1.invoke(BasicMapsOwner.kt:48)
|
||||
at org.jetbrains.kotlin.incremental.storage.BasicMapsOwner$flush$1.invoke(BasicMapsOwner.kt:48)
|
||||
at org.jetbrains.kotlin.incremental.storage.BasicMapsOwner.forEachMapSafe(BasicMapsOwner.kt:56)
|
||||
... 38 more
|
||||
|
||||
|
8
compose/.idea/modules/app/pmu-demo.app.iml
Normal file
8
compose/.idea/modules/app/pmu-demo.app.iml
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module version="4">
|
||||
<component name="ModuleClassLoaderOverlays">
|
||||
<paths>
|
||||
<option value="C:\Users\egore\AppData\Local\Temp\overlay16197097467506260191" />
|
||||
</paths>
|
||||
</component>
|
||||
</module>
|
@ -66,7 +66,6 @@ import ru.ulstu.`is`.pmu.tank.composeui.TankList
|
||||
import ru.ulstu.`is`.pmu.tanks.composeui.Account
|
||||
import ru.ulstu.`is`.pmu.tanks.composeui.Constructor
|
||||
import ru.ulstu.`is`.pmu.tanks.composeui.Hangar
|
||||
import ru.ulstu.`is`.pmu.ui.theme.CustomYellow
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
|
@ -23,15 +23,23 @@ import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.ButtonDefaults
|
||||
import androidx.compose.material3.Card
|
||||
import androidx.compose.material3.CardDefaults
|
||||
import androidx.compose.material3.DropdownMenuItem
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.ExposedDropdownMenuBox
|
||||
import androidx.compose.material3.ExposedDropdownMenuDefaults
|
||||
import androidx.compose.material3.Surface
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TextField
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.key
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.asImageBitmap
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
@ -42,6 +50,8 @@ import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import androidx.navigation.NavController
|
||||
import androidx.navigation.NavHostController
|
||||
import androidx.navigation.compose.rememberNavController
|
||||
import ru.ulstu.`is`.pmu.R
|
||||
import ru.ulstu.`is`.pmu.composeui.navigation.Screen
|
||||
import ru.ulstu.`is`.pmu.tank.composeui.edit.NationDropDownViewModel
|
||||
@ -127,7 +137,7 @@ fun ColumnItem(
|
||||
) {
|
||||
CuteImage(
|
||||
imageBitmap = tank.miniature.asImageBitmap(),
|
||||
modifier = Modifier.weight(0.5F)
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
)
|
||||
Text(
|
||||
text = tank.name,
|
||||
|
@ -49,7 +49,7 @@ class TankEditViewModel(
|
||||
|
||||
suspend fun saveTank() {
|
||||
if (validateInput()) {
|
||||
val image: Bitmap = tankUiState.tankDetails.image!!
|
||||
val image: Bitmap = tankUiState.tankDetails.miniature!!
|
||||
if (tankUid > 0) {
|
||||
tankRepository.updateTank(tankUiState.tankDetails.toTank(tankUid), image = image)
|
||||
} else {
|
||||
@ -65,7 +65,7 @@ class TankEditViewModel(
|
||||
&& levelId!! != 0L
|
||||
&& nationId!! != 0L
|
||||
&& imageId !! != 0L
|
||||
&& image != null
|
||||
&& miniature != null
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -81,7 +81,6 @@ data class TankDetails(
|
||||
val levelId: Long? = 0,
|
||||
val nationId: Long? = 0,
|
||||
val miniature: Bitmap = getEmptyBitmap(),
|
||||
val image: Bitmap? = null,
|
||||
val imageId: Long = -1
|
||||
)
|
||||
|
||||
|
@ -8,6 +8,7 @@ import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.fillMaxHeight
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
@ -213,8 +214,7 @@ private fun Constructor(
|
||||
fun handleImageUpload(bitmap: Bitmap) {
|
||||
tankViewModel.updateUiState(
|
||||
tankUiState.tankDetails.copy(
|
||||
image = bitmap.resize(tankImageBound),
|
||||
miniature = bitmap.resize(miniatureBound)
|
||||
miniature = bitmap.resize(miniatureBound),
|
||||
)
|
||||
)
|
||||
}
|
||||
@ -236,25 +236,22 @@ private fun Constructor(
|
||||
){
|
||||
Text(text="Добавить танк", fontSize = 30.sp, color = Color.Black, fontWeight = FontWeight.Bold)
|
||||
}
|
||||
Spacer(Modifier.height(10.dp))
|
||||
Row(
|
||||
horizontalArrangement = Arrangement.SpaceAround,
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
horizontalArrangement = Arrangement.SpaceBetween,
|
||||
modifier = Modifier.fillMaxWidth().padding(5.dp)
|
||||
){
|
||||
Column(
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
modifier = Modifier.padding(0.dp, 5.dp)
|
||||
) {
|
||||
Text(text="Название:", fontSize = 30.sp, color = Color.Black, fontWeight = FontWeight.Bold)
|
||||
Spacer(Modifier.height(40.dp))
|
||||
Text(text="Изображение:", fontSize = 30.sp, color = Color.Black, fontWeight = FontWeight.Bold)
|
||||
Spacer(Modifier.height(40.dp))
|
||||
Text(text="Уровень:", fontSize = 30.sp, color = Color.Black, fontWeight = FontWeight.Bold)
|
||||
Spacer(Modifier.height(40.dp))
|
||||
Text(text="Нация:", fontSize = 30.sp, color = Color.Black, fontWeight = FontWeight.Bold)
|
||||
Spacer(Modifier.height(40.dp))
|
||||
Text(text="Стоимость:", fontSize = 30.sp, color = Color.Black, fontWeight = FontWeight.Bold)
|
||||
Text(
|
||||
text = "Название:",
|
||||
fontSize = 30.sp,
|
||||
color = Color.Black,
|
||||
fontWeight = FontWeight.Bold
|
||||
)
|
||||
}
|
||||
Column {
|
||||
TextField(
|
||||
value = tankUiState.tankDetails.name,
|
||||
placeholder = { Text(text = "Название", color = CustomDark) },
|
||||
@ -262,12 +259,39 @@ private fun Constructor(
|
||||
modifier = Modifier
|
||||
.width(200.dp),
|
||||
)
|
||||
}
|
||||
Spacer(Modifier.height(10.dp))
|
||||
Row(
|
||||
horizontalArrangement = Arrangement.SpaceBetween,
|
||||
modifier = Modifier.fillMaxWidth().padding(5.dp)
|
||||
){
|
||||
Column(
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
modifier = Modifier.padding(0.dp, 5.dp)
|
||||
) {
|
||||
Row(
|
||||
horizontalArrangement = Arrangement.Center,
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
){
|
||||
Text(text="Изображение", fontSize = 30.sp, color = Color.Black, fontWeight = FontWeight.Bold)
|
||||
}
|
||||
CuteImageUploader(
|
||||
bitmap = tankUiState.tankDetails.image,
|
||||
bitmap = tankUiState.tankDetails.miniature,
|
||||
onResult = { bitmap: Bitmap -> handleImageUpload(bitmap) }
|
||||
)
|
||||
}
|
||||
}
|
||||
Spacer(Modifier.height(10.dp))
|
||||
Row(
|
||||
horizontalArrangement = Arrangement.SpaceBetween,
|
||||
modifier = Modifier.fillMaxWidth().padding(5.dp)
|
||||
){
|
||||
Column(
|
||||
verticalArrangement = Arrangement.Center,
|
||||
modifier = Modifier.padding(0.dp, 5.dp).fillMaxHeight()
|
||||
) {
|
||||
Text(text="Уровень:", fontSize = 30.sp, color = Color.Black, fontWeight = FontWeight.Bold)
|
||||
}
|
||||
// Выпадающий список уровней
|
||||
LevelDropDown(
|
||||
levelUiState = levelUiState,
|
||||
@ -277,7 +301,18 @@ private fun Constructor(
|
||||
onLevelUpdate(it)
|
||||
},
|
||||
)
|
||||
}
|
||||
Spacer(Modifier.height(10.dp))
|
||||
Row(
|
||||
horizontalArrangement = Arrangement.SpaceBetween,
|
||||
modifier = Modifier.fillMaxWidth().padding(5.dp)
|
||||
){
|
||||
Column(
|
||||
verticalArrangement = Arrangement.Center,
|
||||
modifier = Modifier.padding(0.dp, 5.dp).fillMaxHeight()
|
||||
) {
|
||||
Text(text="Нация:", fontSize = 30.sp, color = Color.Black, fontWeight = FontWeight.Bold)
|
||||
}
|
||||
// Выпадающий список наций
|
||||
NationDropDown(
|
||||
nationUiState = nationUiState,
|
||||
@ -287,7 +322,18 @@ private fun Constructor(
|
||||
onNationUpdate(it)
|
||||
},
|
||||
)
|
||||
}
|
||||
Spacer(Modifier.height(10.dp))
|
||||
Row(
|
||||
horizontalArrangement = Arrangement.SpaceBetween,
|
||||
modifier = Modifier.fillMaxWidth().padding(5.dp)
|
||||
){
|
||||
Column(
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
modifier = Modifier.padding(0.dp, 5.dp)
|
||||
) {
|
||||
Text(text="Стоимость:", fontSize = 30.sp, color = Color.Black, fontWeight = FontWeight.Bold)
|
||||
}
|
||||
TextField(
|
||||
value = tankUiState.tankDetails.price.toString(),
|
||||
placeholder = { Text(text = "Стоимость", color = CustomDark) },
|
||||
@ -296,7 +342,7 @@ private fun Constructor(
|
||||
.width(200.dp),
|
||||
)
|
||||
}
|
||||
}
|
||||
Spacer(Modifier.height(10.dp))
|
||||
Row(
|
||||
horizontalArrangement = Arrangement.Center,
|
||||
modifier = Modifier
|
||||
|
@ -13,6 +13,7 @@ import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.material3.Card
|
||||
import androidx.compose.material3.CardDefaults
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
@ -57,6 +58,8 @@ import ru.ulstu.`is`.pmu.tank.model.Tank
|
||||
import ru.ulstu.`is`.pmu.tank.model.TankWithNationAndLevel
|
||||
import ru.ulstu.`is`.pmu.tank.model.UserWithTanks
|
||||
import ru.ulstu.`is`.pmu.tanks.composeui.image.CuteImage
|
||||
import ru.ulstu.`is`.pmu.tanks.composeui.image.Dimensions
|
||||
import ru.ulstu.`is`.pmu.tanks.composeui.image.RoundedCorderImage
|
||||
import ru.ulstu.`is`.pmu.ui.AppViewModelProvider
|
||||
import ru.ulstu.`is`.pmu.ui.theme.CustomDark
|
||||
import ru.ulstu.`is`.pmu.ui.theme.CustomYellow
|
||||
@ -102,7 +105,7 @@ private fun Hangar(
|
||||
horizontalArrangement = Arrangement.SpaceAround,
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.padding(10.dp, 0.dp, 10.dp, 0.dp)
|
||||
.padding(5.dp, 0.dp, 5.dp, 0.dp)
|
||||
) {
|
||||
var supportSizeRow = 1
|
||||
|
||||
@ -113,11 +116,13 @@ private fun Hangar(
|
||||
//цикл для заполнения строки карточек
|
||||
for (m in 0..supportSizeRow) {
|
||||
Column(
|
||||
modifier = Modifier.background(CustomYellow)
|
||||
modifier = Modifier.background(
|
||||
color = CustomYellow
|
||||
)
|
||||
) {
|
||||
Box(
|
||||
Modifier
|
||||
.background(CustomYellow)
|
||||
.background(CustomYellow, shape = RoundedCornerShape(Dimensions.cornerRadius))
|
||||
.height(260.dp),
|
||||
)
|
||||
{
|
||||
@ -126,10 +131,10 @@ private fun Hangar(
|
||||
containerColor = CustomYellow,
|
||||
),
|
||||
modifier = Modifier
|
||||
.size(width = 170.dp, height = 250.dp)
|
||||
.size(width = 185.dp, height = 250.dp)
|
||||
.padding(10.dp, 0.dp, 10.dp, 0.dp)
|
||||
) {
|
||||
CuteImage(
|
||||
RoundedCorderImage(
|
||||
imageBitmap = tankList[index].image.asImageBitmap(),
|
||||
modifier = Modifier.weight(0.5F)
|
||||
)
|
||||
@ -171,7 +176,6 @@ private fun Hangar(
|
||||
index++
|
||||
}
|
||||
}
|
||||
Spacer(Modifier.height(20.dp))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -19,7 +19,7 @@ fun CuteImage(
|
||||
contentDescription = null,
|
||||
contentScale = ContentScale.Crop,
|
||||
modifier = modifier
|
||||
.aspectRatio(1F)
|
||||
.clip(RoundedCornerShape(Dimensions.cornerRadius))
|
||||
.aspectRatio(16F/12F)
|
||||
.clip(RoundedCornerShape(topStart = Dimensions.cornerRadius, topEnd = Dimensions.cornerRadius))
|
||||
)
|
||||
}
|
@ -15,6 +15,7 @@ import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.aspectRatio
|
||||
import androidx.compose.foundation.layout.fillMaxHeight
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.width
|
||||
@ -66,7 +67,7 @@ fun CuteImageUploader(
|
||||
}
|
||||
|
||||
Row(
|
||||
modifier = Modifier.height(IntrinsicSize.Min)
|
||||
modifier = Modifier.height(IntrinsicSize.Min).padding(5.dp)
|
||||
) {
|
||||
Box(
|
||||
contentAlignment = Alignment.Center,
|
||||
@ -75,11 +76,10 @@ fun CuteImageUploader(
|
||||
color = MaterialTheme.colorScheme.surface,
|
||||
shape = RoundedCornerShape(Dimensions.cornerRadius)
|
||||
)
|
||||
.weight(0.25F)
|
||||
.aspectRatio(1F)
|
||||
.weight(1F)
|
||||
) {
|
||||
if (bitmap != null) {
|
||||
CuteImage(
|
||||
RoundedCorderImage(
|
||||
imageBitmap = bitmap.asImageBitmap(),
|
||||
modifier = Modifier.fillMaxSize()
|
||||
)
|
||||
@ -93,23 +93,21 @@ fun CuteImageUploader(
|
||||
}
|
||||
Spacer(modifier = Modifier.width(10.dp))
|
||||
Column(
|
||||
modifier = Modifier
|
||||
Modifier
|
||||
.background(
|
||||
color = MaterialTheme.colorScheme.surface,
|
||||
shape = RoundedCornerShape(Dimensions.cornerRadius)
|
||||
)
|
||||
.fillMaxHeight()
|
||||
.padding(10.dp)
|
||||
.weight(0.75F)
|
||||
.padding(10.dp).align(Alignment.CenterVertically)
|
||||
) {
|
||||
Text(
|
||||
text = title,
|
||||
color = MaterialTheme.colorScheme.onBackground
|
||||
)
|
||||
Spacer(modifier = Modifier.weight(1F))
|
||||
Spacer(modifier = Modifier.height(10.dp))
|
||||
Button(
|
||||
modifier = Modifier
|
||||
.width(200.dp)
|
||||
.width(130.dp)
|
||||
.height(50.dp),
|
||||
colors = ButtonDefaults.buttonColors(
|
||||
containerColor = CustomOrange,
|
||||
|
@ -0,0 +1,25 @@
|
||||
package ru.ulstu.`is`.pmu.tanks.composeui.image
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.layout.aspectRatio
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.graphics.ImageBitmap
|
||||
import androidx.compose.ui.layout.ContentScale
|
||||
|
||||
@Composable
|
||||
fun RoundedCorderImage(
|
||||
imageBitmap: ImageBitmap,
|
||||
modifier: Modifier = Modifier
|
||||
) {
|
||||
Image(
|
||||
bitmap = imageBitmap,
|
||||
contentDescription = null,
|
||||
contentScale = ContentScale.Crop,
|
||||
modifier = modifier
|
||||
.aspectRatio(16F/12F)
|
||||
.clip(RoundedCornerShape(Dimensions.cornerRadius))
|
||||
)
|
||||
}
|
Loading…
Reference in New Issue
Block a user