瀏覽代碼

app: add wardrob page and filters

Anna 1 周之前
父節點
當前提交
de80c63192
共有 22 個文件被更改,包括 876 次插入224 次删除
  1. 24 0
      Project_exvesta/.idea/inspectionProfiles/Project_Default.xml
  2. 12 7
      Project_exvesta/app/build.gradle.kts
  3. 1 1
      Project_exvesta/app/src/main/AndroidManifest.xml
  4. 0 74
      Project_exvesta/app/src/main/java/com/example/exvesta/MainViewModel.kt
  5. 178 0
      Project_exvesta/app/src/main/java/com/example/exvesta/Screans/Filters.kt
  6. 417 92
      Project_exvesta/app/src/main/java/com/example/exvesta/Screans/Home.kt
  7. 18 0
      Project_exvesta/app/src/main/java/com/example/exvesta/Screans/Itemseasondub.kt
  8. 0 1
      Project_exvesta/app/src/main/java/com/example/exvesta/Screans/Login.kt
  9. 1 6
      Project_exvesta/app/src/main/java/com/example/exvesta/Screans/MainActivity.kt
  10. 4 4
      Project_exvesta/app/src/main/java/com/example/exvesta/Screans/MainViewModel.kt
  11. 0 1
      Project_exvesta/app/src/main/java/com/example/exvesta/Screans/Registration.kt
  12. 171 0
      Project_exvesta/app/src/main/java/com/example/exvesta/Screans/Wardrob.kt
  13. 0 1
      Project_exvesta/app/src/main/java/com/example/exvesta/Screans/auth.kt
  14. 2 2
      Project_exvesta/app/src/main/java/com/example/exvesta/Screans/itempublicthings.kt
  15. 2 1
      Project_exvesta/app/src/main/java/com/example/exvesta/domain/utils/Constants.kt
  16. 3 2
      Project_exvesta/app/src/main/java/com/example/exvesta/model/Publicthings.kt
  17. 1 1
      Project_exvesta/app/src/main/java/com/example/exvesta/model/Season_dublicate.kt
  18. 1 1
      Project_exvesta/app/src/main/java/com/example/exvesta/model/Style_dublicate.kt
  19. 1 1
      Project_exvesta/app/src/main/java/com/example/exvesta/model/Type_subtype_dublicate.kt
  20. 4 0
      Project_exvesta/app/src/main/java/com/example/exvesta/navigation/Navigation.kt
  21. 二進制
      Project_exvesta/app/src/main/res/drawable/heart.png
  22. 36 29
      Project_exvesta/gradle/libs.versions.toml

+ 24 - 0
Project_exvesta/.idea/inspectionProfiles/Project_Default.xml

@@ -1,6 +1,30 @@
 <component name="InspectionProjectProfileManager">
   <profile version="1.0">
     <option name="myName" value="Project Default" />
+    <inspection_tool class="ComposePreviewDimensionRespectsLimit" enabled="true" level="WARNING" enabled_by_default="true">
+      <option name="composableFile" value="true" />
+    </inspection_tool>
+    <inspection_tool class="ComposePreviewMustBeTopLevelFunction" enabled="true" level="ERROR" enabled_by_default="true">
+      <option name="composableFile" value="true" />
+    </inspection_tool>
+    <inspection_tool class="ComposePreviewNeedsComposableAnnotation" enabled="true" level="ERROR" enabled_by_default="true">
+      <option name="composableFile" value="true" />
+    </inspection_tool>
+    <inspection_tool class="ComposePreviewNotSupportedInUnitTestFiles" enabled="true" level="ERROR" enabled_by_default="true">
+      <option name="composableFile" value="true" />
+    </inspection_tool>
+    <inspection_tool class="GlancePreviewDimensionRespectsLimit" enabled="true" level="WARNING" enabled_by_default="true">
+      <option name="composableFile" value="true" />
+    </inspection_tool>
+    <inspection_tool class="GlancePreviewMustBeTopLevelFunction" enabled="true" level="ERROR" enabled_by_default="true">
+      <option name="composableFile" value="true" />
+    </inspection_tool>
+    <inspection_tool class="GlancePreviewNeedsComposableAnnotation" enabled="true" level="ERROR" enabled_by_default="true">
+      <option name="composableFile" value="true" />
+    </inspection_tool>
+    <inspection_tool class="GlancePreviewNotSupportedInUnitTestFiles" enabled="true" level="ERROR" enabled_by_default="true">
+      <option name="composableFile" value="true" />
+    </inspection_tool>
     <inspection_tool class="PreviewAnnotationInFunctionWithParameters" enabled="true" level="ERROR" enabled_by_default="true">
       <option name="composableFile" value="true" />
       <option name="previewFile" value="true" />

+ 12 - 7
Project_exvesta/app/build.gradle.kts

@@ -1,6 +1,7 @@
 plugins {
     alias(libs.plugins.android.application)
     alias(libs.plugins.jetbrains.kotlin.android)
+    kotlin("plugin.serialization") version "1.9.22"
 }
 
 android {
@@ -50,7 +51,6 @@ android {
 }
 
 dependencies {
-
     implementation(libs.androidx.core.ktx)
     implementation(libs.androidx.lifecycle.runtime.ktx)
     implementation(libs.androidx.activity.compose)
@@ -59,8 +59,12 @@ dependencies {
     implementation(libs.androidx.ui.graphics)
     implementation(libs.androidx.ui.tooling.preview)
     implementation(libs.androidx.material3)
+    implementation(libs.androidx.navigation.runtime.ktx)
     implementation(libs.androidx.navigation.compose)
-    implementation(libs.androidx.storage)
+    implementation(libs.androidx.runtime.android)
+    implementation(libs.androidx.ui.android)
+    implementation(libs.volley)
+    implementation(libs.androidx.espresso.core)
     testImplementation(libs.junit)
     androidTestImplementation(libs.androidx.junit)
     androidTestImplementation(libs.androidx.espresso.core)
@@ -68,16 +72,17 @@ dependencies {
     androidTestImplementation(libs.androidx.ui.test.junit4)
     debugImplementation(libs.androidx.ui.tooling)
     debugImplementation(libs.androidx.ui.test.manifest)
+    implementation(libs.androidx.material)
 
 
-
-    implementation(platform(libs.bom.v300))
-    implementation(libs.github.postgrest.kt)
-    implementation(libs.github.auth.kt)
+    implementation(platform(libs.bom.v261))
+    implementation(libs.io.github.jan.tennert.supabase.postgrest.kt2)
+    implementation(libs.io.github.jan.tennert.supabase.gotrue.kt2)
     implementation(libs.github.realtime.kt)
-    implementation(libs.storage.kt.v301)
+    implementation(libs.storage.kt.v190)
     implementation(libs.ktor.client.android)
 
+
     implementation(libs.coil.compose)
 }
 

+ 1 - 1
Project_exvesta/app/src/main/AndroidManifest.xml

@@ -13,7 +13,7 @@
         android:theme="@style/Theme.Exvesta"
         tools:targetApi="31">
         <activity
-            android:name=".MainActivity"
+            android:name=".Screans.MainActivity"
             android:exported="true"
             android:label="@string/app_name"
             android:theme="@style/Theme.Exvesta">

+ 0 - 74
Project_exvesta/app/src/main/java/com/example/exvesta/MainViewModel.kt

@@ -1,74 +0,0 @@
-package com.example.exvesta
-
-import androidx.lifecycle.LiveData
-import androidx.lifecycle.MutableLiveData
-import androidx.lifecycle.ViewModel
-import androidx.lifecycle.viewModelScope
-import com.example.exvesta.domain.utils.Constants
-import io.github.jan.supabase.auth.auth
-import io.github.jan.supabase.auth.providers.builtin.Email
-import io.github.jan.supabase.auth.providers.builtin.OTP
-import kotlinx.coroutines.launch
-
-import kotlinx.coroutines.launch
-class MainViewModel(): ViewModel() {
-    private val _loginResult = MutableLiveData<Boolean>()
-    val loginResult: LiveData<Boolean> = _loginResult
-
-    fun onSignInEmailCode(emailUser: String) {
-        viewModelScope.launch {
-            try {
-                Constants.supabase.auth.signInWith(OTP) {
-                    email = emailUser
-                    createUser = false
-                }
-
-            } catch (e: Exception) {
-                println(e.message.toString())
-
-            }
-
-        }
-    }
-
-    fun onSignInEmailPassword(emailUser: String, passwordUser: String): Boolean {
-        viewModelScope.launch {
-            try {
-                val user = Constants.supabase.auth.signInWith(Email) {
-                    email = emailUser
-                    password = passwordUser
-                }
-                println(user.toString())
-                println(Constants.supabase.auth.currentUserOrNull()!!.id)
-                println("Success")
-                _loginResult.postValue(true)
-            } catch (e: Exception) {
-                println("Error")
-                println(e.message.toString())
-                _loginResult.postValue(false)
-            }
-        }
-        return _loginResult.value ?: false
-    }
-    fun onSignUpEmail(emailUser: String, passwordUser: String): Boolean {
-        viewModelScope.launch {
-            try{
-                var  user =  Constants.supabase.auth.signUpWith(Email) {
-                    email = emailUser
-                    password = passwordUser
-                }
-                println(user.toString())
-                println(Constants.supabase.auth.currentUserOrNull()!!.id)
-                println("Success")
-                _loginResult.postValue(true)
-            }
-            catch (e: Exception) {
-                println("Error")
-                println(e.message.toString())
-                _loginResult.postValue(false)
-            }
-
-        }
-        return _loginResult.value ?: false
-    }
-}

+ 178 - 0
Project_exvesta/app/src/main/java/com/example/exvesta/Screans/Filters.kt

@@ -0,0 +1,178 @@
+package com.example.exvesta.Screans
+
+import android.util.Log
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Spacer
+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.size
+import androidx.compose.foundation.layout.width
+import androidx.compose.foundation.lazy.LazyColumn
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material3.Button
+import androidx.compose.material3.ButtonDefaults
+import androidx.compose.material3.Divider
+import androidx.compose.material3.SheetValue
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
+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.Brush
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import androidx.navigation.NavHostController
+import com.example.exvesta.domain.utils.Constants
+import com.example.exvesta.model.Season_dublicate
+import com.example.exvesta.model.Style_dublicate
+import com.example.exvesta.model.Type_dublicate
+import com.example.exvesta.model.Type_subtype_dublicate
+import io.github.jan.supabase.postgrest.from
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.withContext
+import androidx.compose.foundation.lazy.items
+@Composable
+public  fun Filters(isVisible: Boolean,  onClose: () -> Unit) {
+    var styledub by remember { mutableStateOf<List<Style_dublicate>>(listOf()) }
+    var subdubtype by remember { mutableStateOf<List<Type_subtype_dublicate>>(listOf()) }
+    var dubtype by remember { mutableStateOf<List<Type_dublicate>>(listOf()) }
+    var seasondubs by remember { mutableStateOf<List<Season_dublicate>>(listOf()) }
+    LaunchedEffect(Unit) {
+        withContext(Dispatchers.IO) {
+            subdubtype = Constants.supabase.from("Type_subtype_dublicate")
+                .select().decodeList<Type_subtype_dublicate>()
+            dubtype = Constants.supabase.from("Type_dublicate")
+                .select().decodeList<Type_dublicate>()
+            seasondubs = Constants.supabase.from("Season_dublicate")
+                .select().decodeList<Season_dublicate>()
+            styledub = Constants.supabase.from("Style_dublicate")
+                .select().decodeList<Style_dublicate>()
+            seasondubs.forEach { it ->
+                Log.d("ts", it.title_season)
+            }
+        }
+    }
+    if (isVisible) {
+        Column(
+            modifier = Modifier
+                .fillMaxHeight()
+                .fillMaxWidth()
+                .background(
+                    Brush.verticalGradient(
+                        colors = listOf(
+                            Color(0xFFF4F4F4),
+                            Color(0xFFE7D2A9),
+                            Color(0xFFC1A88B),
+                            Color(0xFF6F4A48)
+                        )
+                    )
+                ),
+            verticalArrangement = Arrangement.Top,
+            horizontalAlignment = Alignment.CenterHorizontally
+        ) {
+            Spacer(modifier = Modifier.height(50.dp))
+
+            // Кнопка для закрытия фильтров
+            Button(
+                onClick = { onClose() }, // Закрыть выбор фильтров
+                modifier = Modifier.padding(top = 16.dp)
+            ) {
+                Text("Закрыть выбор фильтров")
+            }
+
+            Spacer(modifier = Modifier.height(30.dp))
+
+            // Белый бокс с закругленными краями
+            Box(
+                modifier = Modifier
+                    .fillMaxWidth() // Бокс на всю ширину
+                    .padding(start = 16.dp, end = 16.dp, bottom = 10.dp)
+                    .background(
+                        color = Color.White,
+                        shape = RoundedCornerShape(16.dp) // Закругленные края
+                    )
+                    .padding(16.dp), // Отступы внутри бокса
+
+            ) {
+                // Используем Column для размещения текста и кнопки
+                Column( horizontalAlignment = Alignment.CenterHorizontally) {
+                    // Текст заголовка
+                    Text(
+                        text = "Фильтры",
+                        fontSize = 16.sp,
+                        fontWeight = FontWeight.Medium,
+                        color = Color(0xFF92A2B0)
+                    )
+                    Divider(
+                        modifier = Modifier.padding(vertical = 8.dp),
+                        color = Color.LightGray,
+                        thickness = 1.dp
+                    )
+                    Spacer(modifier = Modifier.height(10.dp)) // Отступ между текстом и кнопкой
+                    Box(
+                        modifier = Modifier.align(Alignment.Start) // Выравнивание по левому краю
+                    ) {
+                        Text("Сезон")
+                        Spacer(modifier = Modifier.height(10.dp))
+                        LazyColumn(
+
+                            modifier = Modifier
+                                .fillMaxSize(1f)
+                                .padding(10.dp)
+                        ) {
+                            items(
+                                seasondubs,
+                                key = { seasondub -> seasondub.id }
+                            ) { seasondub ->
+
+                                Text(
+                                    "Название: ${seasondub.title_season}",
+                                    fontSize = 18.sp,
+                                    modifier = Modifier.padding(start = 8.dp),
+                                    color = Color(0xFF92A2B0)
+                                )
+                            }
+                        }
+                    }
+                    // Кнопка "Применить"
+                    Button(
+                        onClick = { /* Действие при нажатии */ },
+                        modifier = Modifier
+                            .fillMaxWidth() // Занять всю ширину
+                            .height(50.dp)
+                            .padding(horizontal = 20.dp)
+                            .background(
+                                brush = Brush.horizontalGradient(
+                                    colors = listOf(
+                                        Color(0xFF6F4A48),
+                                        Color(0xFFE7D2A9),
+                                    )
+                                ),
+                                shape = ButtonDefaults.shape
+                            ),
+                        colors = ButtonDefaults.buttonColors(containerColor = Color.Transparent)
+                    ) {
+                        Text(
+                            text = "Применить",
+                            fontSize = 16.sp,
+                            fontWeight = FontWeight.Medium
+                        )
+                    }
+                }
+            }
+        }
+    }
+}

+ 417 - 92
Project_exvesta/app/src/main/java/com/example/exvesta/Screans/Home.kt

@@ -1,5 +1,6 @@
 package com.example.exvesta.Screans
 
+import android.util.Log
 import androidx.compose.foundation.BorderStroke
 import androidx.compose.foundation.Image
 import androidx.compose.foundation.background
@@ -8,167 +9,491 @@ import androidx.compose.foundation.layout.Box
 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.fillMaxSize
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.height
 import androidx.compose.foundation.layout.offset
 import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
 import androidx.compose.foundation.layout.width
+import androidx.compose.foundation.layout.wrapContentSize
+import androidx.compose.foundation.lazy.LazyColumn
 import androidx.compose.foundation.shape.CircleShape
 import androidx.compose.foundation.shape.RoundedCornerShape
 import androidx.compose.material3.Button
 import androidx.compose.material3.ButtonDefaults
-import androidx.compose.material3.Card
+import androidx.compose.material3.CircularProgressIndicator
 import androidx.compose.material3.Text
+import androidx.compose.foundation.lazy.items
+import androidx.compose.material.DrawerValue
+import androidx.compose.material.ModalDrawer
+import androidx.compose.material.rememberDrawerState
+import androidx.compose.material3.Divider
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.LaunchedEffect
 import androidx.compose.runtime.getValue
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
+import androidx.compose.runtime.rememberCoroutineScope
+import androidx.compose.runtime.setValue
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.draw.clip
 import androidx.compose.ui.draw.shadow
 import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.layout.ContentScale
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.text.font.FontWeight
 
-import androidx.compose.ui.res.painterResource
 import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
 import androidx.navigation.NavHostController
+import coil.compose.AsyncImagePainter
+import coil.compose.rememberAsyncImagePainter
+import coil.request.ImageRequest
+import coil.size.Size
 
-import com.example.exvesta.R
 import com.example.exvesta.domain.utils.Constants
 import com.example.exvesta.model.Publicthings
+import com.example.exvesta.model.Season_dublicate
+import com.example.exvesta.model.Style_dublicate
 import com.example.exvesta.model.Type_dublicate
+import com.example.exvesta.model.Type_subtype_dublicate
 import io.github.jan.supabase.postgrest.from
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.withContext
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Menu
+import androidx.compose.material.*
+import androidx.compose.ui.graphics.Brush
+import androidx.navigation.NavHost
+import kotlinx.coroutines.launch
 
+
+@OptIn(ExperimentalMaterialApi::class)
 @Composable
 fun Home(navHost: NavHostController) {
-var dubtype by remember { mutableStateOf<List<Type_dublicate>>(listOf()) }
+    var subdubtype by remember { mutableStateOf<List<Type_subtype_dublicate>>(listOf()) }
+    var dubtype by remember { mutableStateOf<List<Type_dublicate>>(listOf()) }
+    var seasondub by remember { mutableStateOf<List<Season_dublicate>>(listOf()) }
+    var publicthings by remember { mutableStateOf<List<Publicthings>>(listOf()) }
+    var styledub by remember { mutableStateOf<List<Style_dublicate>>(listOf()) }
+
 
-  var thingsdub by remember {mutableStateOf<List<Publicthings>>(listOf())}
-    LaunchedEffect(Unit){
+    LaunchedEffect(Unit) {
         withContext(Dispatchers.IO) {
-            thingsdub = Constants.supabase.from("Publicthings")
+            publicthings = Constants.supabase.from("Publicthings")
                 .select().decodeList<Publicthings>()
+            subdubtype = Constants.supabase.from("Type_subtype_dublicate")
+                .select().decodeList<Type_subtype_dublicate>()
+            dubtype = Constants.supabase.from("Type_dublicate")
+                .select().decodeList<Type_dublicate>()
+            seasondub = Constants.supabase.from("Season_dublicate")
+                .select().decodeList<Season_dublicate>()
+            styledub = Constants.supabase.from("Style_dublicate")
+                .select().decodeList<Style_dublicate>()
+            publicthings.forEach { it ->
+                Log.d("ts", it.title)
+            }
         }
     }
-    Column(
-        modifier = Modifier
-            .fillMaxSize()
-            .background(Color.White)
-            .padding(16.dp),
-        horizontalAlignment = Alignment.CenterHorizontally
-    ) {
-        Spacer(modifier = Modifier.height(40.dp))
 
-        Button(
-            onClick = { /*TODO*/ },
-            border = BorderStroke(1.dp, Color(0xFF92A2B0)),
-            modifier = Modifier
-                .fillMaxWidth()
-                .padding(vertical = 8.dp),
-            colors = ButtonDefaults.buttonColors(Color.White)
-        ) {
-            Text(text = "+ добавить фильтр", color = Color(0xFF92A2B0))
-        }
 
-        Spacer(modifier = Modifier.height(16.dp))
+    var isFilterSheetVisible by remember { mutableStateOf(false) }
+    var drawerState = rememberDrawerState(DrawerValue.Closed)
+    val scope = rememberCoroutineScope()
+
+    ModalDrawer(
+        drawerState = drawerState,
+        drawerContent = {
+           DrawerContent(navHost)
+
+        },
+    ) {
+        Column(
+            modifier = Modifier
 
-        Row(
-            modifier = Modifier.fillMaxWidth(),
-            horizontalArrangement = Arrangement.SpaceAround
+                .fillMaxSize()
+                .background(Color.White)
+                .padding(16.dp),
+            horizontalAlignment = Alignment.CenterHorizontally
         ) {
-            // Кнопка "вещи"
-            Box(
+            Spacer(modifier = Modifier.height(20.dp))
+            Row(
                 modifier = Modifier
-                    .weight(1f)
-                    .padding(bottom = 4.dp) // Паддинг для отступа от нижней тени
-                    .clip(RoundedCornerShape(16.dp))
+                    .fillMaxWidth()
+                    .padding(vertical = 16.dp)
+                ,
+                verticalAlignment = Alignment.CenterVertically,
+                horizontalArrangement = Arrangement.Start
             ) {
-                // Тень
+                IconButton(onClick = {
+                    scope.launch { drawerState.open() }
+                }) {
+                    Icon(imageVector = Icons.Filled.Menu, contentDescription = "Menu")
+                }
+
+                    Button(
+                        onClick = {
+                            isFilterSheetVisible = true
+                        },
+                        border = BorderStroke(1.dp, Color(0xFF92A2B0)),
+                        modifier = Modifier
+                            .fillMaxWidth()
+                            .padding(vertical = 8.dp),
+                        colors = ButtonDefaults.buttonColors(Color.White)
+                    ) {
+                        Text(text = "+ добавить фильтр", color = Color(0xFF92A2B0))
+                    }
+
+            }
+            Spacer(modifier = Modifier.height(10.dp))
+
+
+
+
+            Row(
+                modifier = Modifier.fillMaxWidth(),
+                horizontalArrangement = Arrangement.SpaceAround
+            ) {
+                // Кнопка "вещи"
                 Box(
                     modifier = Modifier
-                        .align(Alignment.BottomCenter)
-                        .fillMaxWidth()
-                        .height(4.dp) // Высота тени
-                        .background(Color.Black.copy(alpha = 0.2f)) // Цвет и прозрачность тени
-                        .offset(y = 2.dp), // Смещение тени вниз
+                        .weight(1f)
+                        .padding(bottom = 4.dp) // Паддинг для отступа от нижней тени
+                        .clip(RoundedCornerShape(16.dp))
+                ) {
+                    // Тень
+                    Box(
+                        modifier = Modifier
+                            .align(Alignment.BottomCenter)
+                            .fillMaxWidth()
+                            .height(4.dp) // Высота тени
+                            .background(Color.Black.copy(alpha = 0.2f)) // Цвет и прозрачность тени
+                            .offset(y = 2.dp), // Смещение тени вниз
 
-                )
+                    )
+
+                    // Кнопка
+                    Button(
+                        onClick = { /*TODO*/ },
+                        modifier = Modifier
+                            .fillMaxWidth()
+                            .shadow(
+                                0.dp,
+                                shape = CircleShape,
+                                clip = false
+                            ), // Убираем тень у кнопки
+                        colors = ButtonDefaults.buttonColors(Color.White),
+                        shape = RoundedCornerShape(16.dp) // Скругление кнопки
+                    ) {
+                        Text(text = "вещи", color = Color(0xFF92A2B0))
+                    }
+                }
 
-                // Кнопка
-                Button(
-                    onClick = { /*TODO*/ },
+                Spacer(modifier = Modifier.width(16.dp))
+
+                // Кнопка "образы"
+                Box(
                     modifier = Modifier
-                        .fillMaxWidth()
-                        .shadow(0.dp, shape = CircleShape, clip = false), // Убираем тень у кнопки
-                    colors = ButtonDefaults.buttonColors(Color.White),
-                    shape = RoundedCornerShape(16.dp) // Скругление кнопки
+                        .weight(1f)
+                        .padding(bottom = 4.dp) // Паддинг для отступа от нижней тени
+                        .clip(RoundedCornerShape(16.dp))
                 ) {
-                    Text(text = "вещи", color = Color(0xFF92A2B0))
+                    // Тень
+                    Box(
+                        modifier = Modifier
+                            .align(Alignment.BottomCenter)
+                            .fillMaxWidth()
+                            .height(4.dp) // Высота тени
+                            .background(Color.Black.copy(alpha = 0.2f)) // Цвет и прозрачность тени
+                            .offset(y = 2.dp) // Смещение тени вниз
+                    )
+
+                    // Кнопка
+                    Button(
+                        onClick = { /*TODO*/ },
+                        modifier = Modifier
+                            .fillMaxWidth()
+                            .shadow(
+                                0.dp,
+                                shape = CircleShape,
+                                clip = false
+                            ), // Убираем тень у кнопки
+                        colors = ButtonDefaults.buttonColors(Color.White),
+                        shape = RoundedCornerShape(16.dp) // Скругление кнопки
+                    ) {
+                        Text(text = "образы", color = Color(0xFF92A2B0))
+                    }
                 }
             }
 
-            Spacer(modifier = Modifier.width(16.dp))
+            Spacer(modifier = Modifier.height(10.dp))
+
+            LazyColumn(
 
-            // Кнопка "образы"
-            Box(
                 modifier = Modifier
-                    .weight(1f)
-                    .padding(bottom = 4.dp) // Паддинг для отступа от нижней тени
-                    .clip(RoundedCornerShape(16.dp))
+                    .fillMaxSize(1f)
+                    .padding(10.dp)
             ) {
-                // Тень
-                Box(
-                    modifier = Modifier
-                        .align(Alignment.BottomCenter)
-                        .fillMaxWidth()
-                        .height(4.dp) // Высота тени
-                        .background(Color.Black.copy(alpha = 0.2f)) // Цвет и прозрачность тени
-                        .offset(y = 2.dp) // Смещение тени вниз
-                )
 
-                // Кнопка
-                Button(
-                    onClick = { /*TODO*/ },
-                    modifier = Modifier
-                        .fillMaxWidth()
-                        .shadow(0.dp, shape = CircleShape, clip = false), // Убираем тень у кнопки
-                    colors = ButtonDefaults.buttonColors(Color.White),
-                    shape = RoundedCornerShape(16.dp) // Скругление кнопки
-                ) {
-                    Text(text = "образы", color = Color(0xFF92A2B0))
+                items(
+                    publicthings,
+                    key = { publicthing -> publicthing.id },
+                ) { publicthing ->
+                    val imageState = rememberAsyncImagePainter(
+                        model = ImageRequest.Builder(LocalContext.current).data(publicthing.img)
+                            .size(Size.ORIGINAL).build()
+                    ).state
+
+                    Box(
+                        modifier = Modifier
+                            .shadow(8.dp, RoundedCornerShape(30.dp))
+                    ) {
+                        Box(
+                            modifier = Modifier
+                                .background(
+
+                                    Color.White,
+
+                                    shape = RoundedCornerShape(30.dp)
+                                )
+                                .padding(8.dp)
+                                .wrapContentSize(Alignment.Center)
+
+                        ) {
+
+                            Column(
+                            )
+                            {
+                                if (imageState is AsyncImagePainter.State.Error) {
+                                    Box(
+                                        modifier = Modifier
+                                            .fillMaxWidth()
+
+                                            .height(250.dp),
+                                        contentAlignment = Alignment.Center
+                                    ) {
+                                        CircularProgressIndicator()
+                                    }
+                                }
+
+                                if (imageState is AsyncImagePainter.State.Success) {
+                                    Image(
+                                        modifier = Modifier
+                                            .fillMaxWidth()
+                                            .height(250.dp)
+//                                    .clip(RoundedCornerShape(8.dp))
+                                        ,
+                                        painter = imageState.painter,
+                                        contentDescription = "",
+                                        contentScale = ContentScale.Crop
+
+
+                                    )
+                                }
+                                Divider(
+                                    modifier = Modifier.padding(vertical = 8.dp),
+                                    color = Color.LightGray,
+                                    thickness = 1.dp
+                                )
+                                Spacer(modifier = Modifier.height(8.dp))
+                                Text(
+                                    "Название: ${publicthing.title}",
+                                    fontSize = 18.sp,
+                                    modifier = Modifier.padding(start = 8.dp),
+                                    color = Color(0xFF92A2B0)
+                                )
+                                val seasonid = publicthing.seson_id
+                                val season = seasondub.find { it.id == seasonid }
+                                val styleid = publicthing.id_style
+                                val style = styledub.find { it.id == styleid }
+                                val subtypeid = publicthing.id_subtype
+                                val subtype = subdubtype.find { it.id == subtypeid }
+
+                                if (subtype != null) {
+                                    val typeid = subtype.id_type
+                                    val type = dubtype.find { it.id == typeid }
+
+
+
+                                    if (season != null && style != null && type != null) {
+                                        Text(
+                                            "Категории: ${style.title_style}, ${type.title_type},  ${subtype.sub_type}, ${season.title_season}",
+                                            fontSize = 18.sp,
+                                            modifier = Modifier.padding(start = 8.dp),
+                                            color = Color(0xFF92A2B0)
+                                        )
+
+
+                                    }
+                                }
+
+                                Spacer(modifier = Modifier.height(1.dp))
+                                Text(
+                                    "Артикул: ${publicthing.article}",
+                                    fontSize = 18.sp,
+                                    modifier = Modifier.padding(start = 8.dp),
+                                    color = Color(0xFF92A2B0)
+                                )
+
+                                Spacer(modifier = Modifier.height(8.dp))
+                                Row(
+                                    horizontalArrangement = Arrangement.SpaceAround
+                                )
+                                {
+                                    Text(
+                                        "Рэйтинг: ${publicthing.rating}",
+                                        fontSize = 18.sp,
+                                        modifier = Modifier.padding(start = 8.dp),
+                                        color = Color(0xFF92A2B0)
+                                    )
+
+
+
+                                    Button(
+                                        onClick = { navHost.navigate("Registration") },
+                                        modifier = Modifier
+                                            .width(200.dp)
+                                            .height(50.dp)
+                                            .padding(start = 50.dp),
+                                        colors = ButtonDefaults.buttonColors(
+                                            Color(0xFF6F4A48),
+                                            contentColor = Color.White
+                                        ),
+                                        shape = ButtonDefaults.shape
+                                    ) {
+                                        Text(
+                                            text = "Добавить",
+                                            fontSize = 16.sp,
+                                            fontWeight = FontWeight.Medium
+                                        )
+                                    }
+
+
+                                }
+
+                            }
+
+                        }
+
+                        Spacer(modifier = Modifier.height(16.dp))
+
+
+                    }
+
                 }
             }
+
+
         }
 
-        Spacer(modifier = Modifier.height(16.dp))
+    }
+    if (isFilterSheetVisible) {
+        Column {
+            Filters(isVisible = isFilterSheetVisible, onClose = { isFilterSheetVisible = false }) // Ваш компонент фильтров
 
-        Card(
+
+        }
+    }
+}
+
+
+
+
+    @Composable
+ public  fun DrawerContent(navHost: NavHostController) {
+        Column(
             modifier = Modifier
+                .fillMaxHeight()
                 .fillMaxWidth()
-                .height(250.dp),
+
+                .background(
+                    Brush.verticalGradient(
+                        colors = listOf(
+                            Color(0xFFF1F1F3),
+                            Color(0xFFF1F1F3),
+                            Color(0xFFF1F1F3),
+                            Color(0xFFF1F1F3),
+                            Color(0xFFF1F1F3),
+                            Color(0xFFEDE3CF),
+                            Color(0xFFEBDBBC),
+                            Color(0xFF6F4A48)
+                        ),
+
+                    )
+                )
+            ,
+            verticalArrangement = Arrangement.Top,
+            horizontalAlignment = Alignment.CenterHorizontally
         ) {
-            Column(
+            Spacer(modifier = Modifier.height(60.dp))
+            Text(
+                text = "EXVESTA",
+                fontSize = 30.sp,
+                fontWeight = FontWeight.Medium,
+                color = Color(0xFF92A2B0)
+            )
+            Spacer(modifier = Modifier.height(16.dp))
+            // Аватар пользователя
+            Box(
                 modifier = Modifier
-                    .fillMaxSize()
-                    .padding(16.dp)
+                    .shadow(8.dp, CircleShape)
             ) {
-                Image(
-                    painter = painterResource(id = R.drawable.i),
-                    contentDescription = "Свитер",
-                    modifier = Modifier
-                        .fillMaxWidth()
-                        .height(150.dp)
-                        .clip(RoundedCornerShape(8.dp))
+            Box(
+                modifier = Modifier
+                    .size(150.dp)
+                    .clip(CircleShape)
+                    .background(Color(0xFFFFFFFF)),
+                    contentAlignment = Alignment.Center
+            ){}}
+            Spacer(modifier = Modifier.height(16.dp))
+            Text(
+                text = "user_name",
+                fontSize = 16.sp,
+                fontWeight = FontWeight.Medium,
+                color = Color(0xFF92A2B0)
+            )
+            Spacer(modifier = Modifier.height(32.dp))
+            // Кнопки
+            Button(
+                onClick = { /* TODO: Открыть "Мои образы" */ },
+                modifier = Modifier
+                    .fillMaxWidth()
+                    .height(48.dp),
+                colors = ButtonDefaults.buttonColors(
+                    Color(0xFFF0F0F0),
+                    contentColor = Color(0xFF92A2B0)
+                )
+            ) {
+                Text("Мои образы")
+            }
+            Spacer(modifier = Modifier.height(8.dp))
+            Button(
+                onClick = { navHost.navigate("Wardrob")  },
+                modifier = Modifier
+                    .fillMaxWidth()
+                    .height(48.dp),
+                colors = ButtonDefaults.buttonColors(
+                    Color(0xFFF0F0F0),
+                    contentColor = Color(0xFF92A2B0)
                 )
-                Spacer(modifier = Modifier.height(8.dp))
-                Text(text = "название: свитер")
-                Text(text = "категории: верхняя одежда, кофты, пряжа")
-                Text(text = "артикул: 38423")
+            ) {
+                Text("Коллекция")
+            }
+            Spacer(modifier = Modifier.height(8.dp))
+            Button(
+                onClick = { navHost.navigate("Home")  },
+                modifier = Modifier
+                    .fillMaxWidth()
+                    .height(48.dp),
+                colors = ButtonDefaults.buttonColors(
+                    Color(0xFFF0F0F0),
+                    contentColor = Color(0xFF92A2B0)
+                )
+            ) {
+                Text("Лента")
             }
         }
     }
-}

+ 18 - 0
Project_exvesta/app/src/main/java/com/example/exvesta/Screans/Itemseasondub.kt

@@ -0,0 +1,18 @@
+package com.example.exvesta.Screans
+
+import androidx.compose.foundation.layout.padding
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.unit.dp
+
+import com.example.exvesta.model.Season_dublicate
+@Composable
+fun Itemseasondub(seasondubs: Season_dublicate) {
+    Text(
+        seasondubs.title_season,
+        modifier = Modifier.padding(8.dp),
+    )
+}
+
+

+ 0 - 1
Project_exvesta/app/src/main/java/com/example/exvesta/Screans/Login.kt

@@ -42,7 +42,6 @@ import androidx.compose.ui.unit.sp
 import androidx.navigation.NavHostController
 
 import com.example.exvesta.R
-import com.example.exvesta.model.MainViewModel
 
 @Composable
 fun Login(navHost: NavHostController) {

+ 1 - 6
Project_exvesta/app/src/main/java/com/example/exvesta/MainActivity.kt → Project_exvesta/app/src/main/java/com/example/exvesta/Screans/MainActivity.kt

@@ -1,18 +1,13 @@
-package com.example.exvesta
+package com.example.exvesta.Screans
 
 import android.os.Bundle
 import androidx.activity.ComponentActivity
 import androidx.activity.compose.setContent
 import androidx.activity.enableEdgeToEdge
 import androidx.compose.foundation.layout.fillMaxSize
-import androidx.compose.foundation.layout.padding
 import androidx.compose.material3.MaterialTheme
-import androidx.compose.material3.Scaffold
 import androidx.compose.material3.Surface
-import androidx.compose.material3.Text
-import androidx.compose.runtime.Composable
 import androidx.compose.ui.Modifier
-import androidx.compose.ui.tooling.preview.Preview
 import com.example.exvesta.navigation.Navigation
 import com.example.exvesta.ui.theme.ExvestaTheme
 

+ 4 - 4
Project_exvesta/app/src/main/java/com/example/exvesta/model/MainViewModel.kt → Project_exvesta/app/src/main/java/com/example/exvesta/Screans/MainViewModel.kt

@@ -1,13 +1,13 @@
-package com.example.exvesta.model
+package com.example.exvesta.Screans
 
 import androidx.lifecycle.LiveData
 import androidx.lifecycle.MutableLiveData
 import androidx.lifecycle.ViewModel
 import androidx.lifecycle.viewModelScope
 import com.example.exvesta.domain.utils.Constants
-import io.github.jan.supabase.auth.auth
-import io.github.jan.supabase.auth.providers.builtin.Email
-import io.github.jan.supabase.auth.providers.builtin.OTP
+import io.github.jan.supabase.gotrue.auth
+import io.github.jan.supabase.gotrue.providers.builtin.Email
+import io.github.jan.supabase.gotrue.providers.builtin.OTP
 
 import kotlinx.coroutines.launch
 

+ 0 - 1
Project_exvesta/app/src/main/java/com/example/exvesta/Screans/Registration.kt

@@ -42,7 +42,6 @@ import androidx.compose.ui.unit.sp
 import androidx.navigation.NavHostController
 
 import com.example.exvesta.R
-import com.example.exvesta.model.MainViewModel
 
 @Composable
 fun Registration(navHost: NavHostController) {

+ 171 - 0
Project_exvesta/app/src/main/java/com/example/exvesta/Screans/Wardrob.kt

@@ -0,0 +1,171 @@
+package com.example.exvesta.Screans
+
+import androidx.compose.foundation.BorderStroke
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
+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.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.offset
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.width
+import androidx.compose.foundation.shape.CircleShape
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material3.Button
+import androidx.compose.material3.ButtonDefaults
+import androidx.compose.material.DrawerValue
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.Text
+import androidx.compose.material3.rememberDrawerState
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.rememberCoroutineScope
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.clip
+import androidx.compose.ui.draw.shadow
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.unit.dp
+import androidx.navigation.NavHostController
+
+//noinspection UsingMaterialAndMaterial3Libraries
+import androidx.compose.material.*
+import androidx.compose.runtime.*
+
+import androidx.compose.foundation.layout.*
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Menu
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.unit.sp
+import kotlinx.coroutines.launch
+
+@Composable
+fun Wardrob(navHost: NavHostController) {
+    var drawerState = rememberDrawerState(DrawerValue.Closed)
+    val scope = rememberCoroutineScope()
+    var isFiltersVisible by remember { mutableStateOf(false) }
+
+    ModalDrawer(
+        drawerState = drawerState,
+        drawerContent = {
+
+        },
+    ) {
+        Column(
+            modifier = Modifier
+                .fillMaxSize()
+                .background(Color.White)
+                .padding(16.dp),
+            horizontalAlignment = Alignment.CenterHorizontally
+        ) {
+            Row(
+                modifier = Modifier
+                    .fillMaxWidth()
+                    .padding(vertical = 16.dp),
+                verticalAlignment = Alignment.CenterVertically,
+                horizontalArrangement = Arrangement.Start
+            ) {
+                IconButton(onClick = {
+                    scope.launch { drawerState.open() }
+                }) {
+                    Icon(imageVector = Icons.Filled.Menu, contentDescription = "Menu")
+                }
+            }
+            Spacer(modifier = Modifier.height(40.dp))
+
+            Button(
+                onClick = {
+
+                    scope.launch { drawerState.close() } // Закрываем drawer
+                },
+                border = BorderStroke(1.dp, Color(0xFF92A2B0)),
+                modifier = Modifier
+                    .fillMaxWidth()
+                    .padding(vertical = 8.dp),
+                colors = ButtonDefaults.buttonColors(Color.White)
+            ) {
+                Text(text = "+ добавить фильтр", color = Color(0xFF92A2B0))
+            }
+
+            Spacer(modifier = Modifier.height(10.dp))
+            Button(
+                onClick = { /*TODO*/ },
+                border = BorderStroke(1.dp, Color(0xFF92A2B0)),
+                modifier = Modifier
+                    .fillMaxWidth()
+                    .padding(vertical = 8.dp),
+                colors = ButtonDefaults.buttonColors(Color.White)
+            ) {
+                Text(text = "+ добавить вещь", color = Color(0xFF92A2B0))
+            }
+
+
+        }
+    }
+}
+
+
+//@Composable
+//fun DrawerContent() {
+//    Column(
+//        modifier = Modifier
+//            .fillMaxHeight()
+//            .width(250.dp)
+//            .background(Color(0xFFF0F0F0))
+//            .padding(16.dp),
+//        verticalArrangement = Arrangement.Top
+//    ) {
+//        Text(
+//            text = "EXVESTA",
+//            fontSize = 20.sp,
+//            fontWeight = FontWeight.Bold,
+//            color = Color.Black
+//        )
+//        Spacer(modifier = Modifier.height(16.dp))
+//        // Аватар пользователя
+//        Box(
+//            modifier = Modifier
+//                .size(100.dp)
+//                .clip(CircleShape)
+//                .background(Color.LightGray)
+//        )
+//        Spacer(modifier = Modifier.height(16.dp))
+//        Text(
+//            text = "user_name",
+//            fontSize = 16.sp,
+//            fontWeight = FontWeight.Medium,
+//            color = Color.Black
+//        )
+//        Spacer(modifier = Modifier.height(32.dp))
+//        // Кнопки
+//        Button(
+//            onClick = { /* TODO: Открыть "Мои образы" */ },
+//            modifier = Modifier
+//                .fillMaxWidth()
+//                .height(48.dp),
+//            colors = ButtonDefaults.buttonColors(
+//                Color(0xFFF0F0F0),
+//                contentColor = Color.Black
+//            )
+//        ) {
+//            Text("Мои образы")
+//        }
+//        Spacer(modifier = Modifier.height(8.dp))
+//        Button(
+//            onClick = { /* TODO: Открыть "Коллекция" */ },
+//            modifier = Modifier
+//                .fillMaxWidth()
+//                .height(48.dp),
+//            colors = ButtonDefaults.buttonColors(
+//                Color(0xFFF0F0F0),
+//                contentColor = Color.Black
+//            )
+//        ) {
+//            Text("Коллекция")
+//        }
+//    }
+//}

+ 0 - 1
Project_exvesta/app/src/main/java/com/example/exvesta/Screans/auth.kt

@@ -4,7 +4,6 @@ import androidx.compose.runtime.Composable
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
 import androidx.navigation.NavHostController
-import com.example.exvesta.model.MainViewModel
 
 @Composable
 fun auth(navHost: NavHostController){

+ 2 - 2
Project_exvesta/app/src/main/java/com/example/exvesta/Screans/itempublicthings.kt

@@ -8,9 +8,9 @@ import androidx.compose.ui.unit.dp
 import com.example.exvesta.model.Publicthings
 
 @Composable
-fun Itempublicthings(publicthimgs: Publicthings){
+fun Itempublicthings(publicthings: Publicthings){
     Text(
-        publicthimgs.title,
+        publicthings.title,
         modifier = Modifier.padding(8.dp),
     )
 }

+ 2 - 1
Project_exvesta/app/src/main/java/com/example/exvesta/domain/utils/Constants.kt

@@ -1,6 +1,7 @@
 package com.example.exvesta.domain.utils
-import io.github.jan.supabase.auth.Auth
+
 import io.github.jan.supabase.createSupabaseClient
+import io.github.jan.supabase.gotrue.Auth
 
 import io.github.jan.supabase.postgrest.Postgrest
 import io.github.jan.supabase.storage.Storage

+ 3 - 2
Project_exvesta/app/src/main/java/com/example/exvesta/model/Publicthings.kt

@@ -7,6 +7,7 @@ public data class Publicthings(
     val id_style: Int,
     val id_subtype: Int,
     val img: String?,
-    val rsting: Int,
-    val article: String
+    val rating: Int,
+    val article: String,
+    val seson_id: Int
 )

+ 1 - 1
Project_exvesta/app/src/main/java/com/example/exvesta/model/Season_duplicate.kt → Project_exvesta/app/src/main/java/com/example/exvesta/model/Season_dublicate.kt

@@ -1,7 +1,7 @@
 package com.example.exvesta.model
 import kotlinx.serialization.Serializable
 @Serializable
-public data class Season_duplicate(
+public data class Season_dublicate(
     val id: Int,
     val title_season: String
 )

+ 1 - 1
Project_exvesta/app/src/main/java/com/example/exvesta/model/Style_duplicate.kt → Project_exvesta/app/src/main/java/com/example/exvesta/model/Style_dublicate.kt

@@ -1,7 +1,7 @@
 package com.example.exvesta.model
 import kotlinx.serialization.Serializable
 @Serializable
-public data class Style_duplicate(
+public data class Style_dublicate(
     val id: Int,
     val title_style: String
 )

+ 1 - 1
Project_exvesta/app/src/main/java/com/example/exvesta/model/Type_subtype_duplicate.kt → Project_exvesta/app/src/main/java/com/example/exvesta/model/Type_subtype_dublicate.kt

@@ -1,7 +1,7 @@
 package com.example.exvesta.model
 import kotlinx.serialization.Serializable
 @Serializable
-public data class Type_subtype_duplicate (
+public data class Type_subtype_dublicate (
     val id: Int,
     val id_type: Int,
     val sub_type: String

+ 4 - 0
Project_exvesta/app/src/main/java/com/example/exvesta/navigation/Navigation.kt

@@ -10,6 +10,7 @@ import com.example.exvesta.Screans.Login
 import com.example.exvesta.Screans.Preloading
 import com.example.exvesta.Screans.RegAuth
 import com.example.exvesta.Screans.Registration
+import com.example.exvesta.Screans.Wardrob
 
 @Composable
 fun Navigation(){
@@ -32,5 +33,8 @@ fun Navigation(){
         composable("Home"){
             Home(navController)
         }
+        composable("Wardrob"){
+            Wardrob(navController)
+        }
     }
 }

二進制
Project_exvesta/app/src/main/res/drawable/heart.png


+ 36 - 29
Project_exvesta/gradle/libs.versions.toml

@@ -1,41 +1,43 @@
 [versions]
 agp = "8.5.1"
-bom = "2.0"
+bom = "VERSION"
 bomVersion = "2.0"
-coil3Integration = "2.4"
-coilCompose = "3.0.0-rc02"
 coilComposeVersion = "2.4.0"
-githubBom = "3.0.0"
-githubStorageKt = "VERSION"
-githubStorageKtVersion = "3.0.1"
+githubBom = "2"
+githubBomVersion = "2.6.1"
 kotlin = "1.9.0"
-coreKtx = "1.13.1"
+coreKtx = "1.10.1"
 junit = "4.13.2"
-junitVersion = "1.2.1"
-espressoCore = "3.6.1"
-ktorClientAndroidVersion = "3.0.0"
-ktorClientEngine_z = "2.3.7"
-lifecycleRuntimeKtx = "2.8.6"
-activityCompose = "1.9.2"
+junitVersion = "1.1.5"
+espressoCore = "3.5.1"
 ktorClientAndroid = "2.3.7"
+lifecycleRuntimeKtx = "2.6.1"
+activityCompose = "1.8.0"
 composeBom = "2024.04.01"
 storageKt = "2.6.1"
 storageKtVersion = "1.9.0"
-volley = "1.2.1"
+navigationRuntimeKtx = "2.8.1"
+navigationCompose = "2.8.1"
+runtimeAndroid = "1.7.2"
 uiAndroid = "1.7.2"
-navigationCompose = "2.8.3"
-storage = "1.5.0"
+volley = "1.2.1"
+material = "1.7.5"
+coilCompose = "2.4.0"
 [libraries]
 androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
-auth-kt = { module = "io.github.jan-tennert.supabase:auth-kt" }
 bom = { module = "io.github.jan-tennert.supabase:bom", version.ref = "bom" }
-bom-v261 = { module = "io.github.jan-tennert.supabase:bom", version.ref = "bomVersion" }
-bom-v300 = { module = "io.github.jan-tennert.supabase:bom", version.ref = "githubBom" }
-coil-compose = { module = "io.coil-kt.coil3:coil-compose", version.ref = "coilCompose" }
-coil3-integration = { module = "io.github.jan-tennert.supabase:coil3-integration", version.ref = "coil3Integration" }
-github-auth-kt = { module = "io.github.jan-tennert.supabase:auth-kt" }
+bom-v2 = { module = "io.github.jan-tennert.supabase:bom", version.ref = "githubBom" }
+bom-v20 = { module = "io.github.jan-tennert.supabase:bom", version.ref = "bomVersion" }
+bom-v261 = { module = "io.github.jan-tennert.supabase:bom", version.ref = "githubBomVersion" }
+coil-compose = { module = "io.coil-kt:coil-compose", version.ref = "coilComposeVersion" }
+github-gotrue-kt = { module = "io.github.jan-tennert.supabase:gotrue-kt", version.ref = "bom" }
 github-postgrest-kt = { module = "io.github.jan-tennert.supabase:postgrest-kt" }
 github-realtime-kt = { module = "io.github.jan-tennert.supabase:realtime-kt" }
+gotrue-kt = { module = "io.github.jan-tennert.supabase:gotrue-kt" }
+io-github-jan-tennert-supabase-gotrue-kt = { module = "io.github.jan-tennert.supabase:gotrue-kt" }
+io-github-jan-tennert-supabase-gotrue-kt2 = { module = "io.github.jan-tennert.supabase:gotrue-kt" }
+io-github-jan-tennert-supabase-postgrest-kt = { module = "io.github.jan-tennert.supabase:postgrest-kt" }
+io-github-jan-tennert-supabase-postgrest-kt2 = { module = "io.github.jan-tennert.supabase:postgrest-kt" }
 junit = { group = "junit", name = "junit", version.ref = "junit" }
 androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" }
 androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" }
@@ -49,17 +51,22 @@ androidx-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-toolin
 androidx-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest" }
 androidx-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" }
 androidx-material3 = { group = "androidx.compose.material3", name = "material3" }
-ktor-client-android = { module = "io.ktor:ktor-client-android", version.ref = "ktorClientAndroidVersion" }
-ktor-client-engine_z = { module = "io.ktor:ktor-client-[engine]", version.ref = "ktorClientEngine_z" }
-postgrest-kt = { module = "io.github.jan-tenner.supabase:postgrest-kt" }
+androidx-material = { group = "androidx.compose.material", name = "material" }
+ktor-client-android = { module = "io.ktor:ktor-client-android", version.ref = "ktorClientAndroid" }
+ktor-client-android_z = { module = "io.ktor:ktor-client-[android]" }
+postgrest-kt = { module = "io.github.jan-tennert.supabase:postgrest-kt" }
 realtime-kt = { module = "io.github.jan-tennert.supabase:realtime-kt" }
-storage-kt = { module = "io.github.jan-tennert.supabase:storage-kt", version.ref = "githubStorageKt" }
-storage-kt-v301 = { module = "io.github.jan-tennert.supabase:storage-kt", version.ref = "githubStorageKtVersion" }
-supabase-auth-kt = { module = "io.github.jan-tennert.supabase:auth-kt" }
+storage-kt = { module = "io.github.jan-tennert.supabase:storage-kt", version.ref = "bom" }
+storage-kt-v190 = { module = "io.github.jan-tennert.supabase:storage-kt", version.ref = "storageKtVersion" }
+storage-kt-v261 = { module = "io.github.jan-tennert.supabase:storage-kt", version.ref = "storageKt" }
+supabase-gotrue-kt = { module = "io.github.jan-tennert.supabase:gotrue-kt" }
 supabase-postgrest-kt = { module = "io.github.jan-tennert.supabase:postgrest-kt" }
 supabase-realtime-kt = { module = "io.github.jan-tennert.supabase:realtime-kt" }
+androidx-navigation-runtime-ktx = { group = "androidx.navigation", name = "navigation-runtime-ktx", version.ref = "navigationRuntimeKtx" }
 androidx-navigation-compose = { group = "androidx.navigation", name = "navigation-compose", version.ref = "navigationCompose" }
-androidx-storage = { group = "androidx.test.services", name = "storage", version.ref = "storage" }
+androidx-runtime-android = { group = "androidx.compose.runtime", name = "runtime-android", version.ref = "runtimeAndroid" }
+androidx-ui-android = { group = "androidx.compose.ui", name = "ui-android", version.ref = "uiAndroid" }
+volley = { group = "com.android.volley", name = "volley", version.ref = "volley" }
 
 [plugins]
 android-application = { id = "com.android.application", version.ref = "agp" }