fixed warning, fixed pullrefresh items

This commit is contained in:
Zyzf 2023-12-04 22:53:03 +04:00
parent 702d8972bd
commit 638b9d6aaf
10 changed files with 68 additions and 90 deletions

View File

@ -75,16 +75,16 @@ dependencies {
implementation("androidx.compose.ui:ui-graphics:1.6.0-beta02")
implementation("androidx.compose.ui:ui-tooling-preview:1.6.0-beta02")
implementation("androidx.compose.material3:material3:1.1.2")
implementation("androidx.compose.material:material:1.5.4")
implementation("androidx.paging:paging-compose:3.2.1")
implementation("eu.bambooapps:compose-material3-pullrefresh:1.0.0")
// Room
val room_version = "2.6.1"
implementation("androidx.room:room-runtime:$room_version")
annotationProcessor("androidx.room:room-compiler:$room_version")
ksp("androidx.room:room-compiler:$room_version")
implementation("androidx.room:room-ktx:$room_version")
implementation("androidx.room:room-paging:$room_version")
val roomVersion = "2.6.1"
implementation("androidx.room:room-runtime:$roomVersion")
annotationProcessor("androidx.room:room-compiler:$roomVersion")
ksp("androidx.room:room-compiler:$roomVersion")
implementation("androidx.room:room-ktx:$roomVersion")
implementation("androidx.room:room-paging:$roomVersion")
// Tests
testImplementation("junit:junit:4.13.2")

View File

@ -6,7 +6,6 @@ import androidx.room.Delete
import androidx.room.Query
import com.zyzf.coffeepreorder.database.model.Coffee
import com.zyzf.coffeepreorder.database.model.CoffeeWithCart
import kotlinx.coroutines.flow.Flow
@Dao
interface CoffeeDao {

View File

@ -59,6 +59,6 @@ data class Coffee(
}
override fun hashCode(): Int {
return uid ?: -1
return uid
}
}

View File

@ -1,6 +1,5 @@
package com.zyzf.coffeepreorder.ui.cart
import android.content.Context
import android.content.res.Configuration
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
@ -13,32 +12,25 @@ import androidx.compose.foundation.layout.heightIn
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.ExperimentalMaterialApi
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Add
import androidx.compose.material.icons.filled.Clear
import androidx.compose.material.pullrefresh.PullRefreshIndicator
import androidx.compose.material.pullrefresh.rememberPullRefreshState
import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.ExtendedFloatingActionButton
import androidx.compose.material3.FloatingActionButton
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.material3.rememberModalBottomSheetState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateListOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
@ -62,20 +54,17 @@ import androidx.paging.compose.itemKey
import coil.compose.AsyncImage
import coil.request.ImageRequest
import com.zyzf.coffeepreorder.R
import com.zyzf.coffeepreorder.database.AppDatabase
import com.zyzf.coffeepreorder.database.model.Coffee
import com.zyzf.coffeepreorder.ui.AppViewModelProvider
import com.zyzf.coffeepreorder.ui.coffee.CoffeeList
import com.zyzf.coffeepreorder.ui.coffee.CoffeeListViewModel
import com.zyzf.coffeepreorder.ui.navigation.Screen
import com.zyzf.coffeepreorder.ui.theme.CoffeePreorderTheme
import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import eu.bambooapps.material3.pullrefresh.PullRefreshIndicator
import eu.bambooapps.material3.pullrefresh.pullRefresh
import eu.bambooapps.material3.pullrefresh.rememberPullRefreshState
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
@OptIn(DelicateCoroutinesApi::class, ExperimentalMaterialApi::class)
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun Cart(
navController: NavController?,
@ -106,21 +95,21 @@ fun Cart(
)
}
) { innerPadding ->
PullRefreshIndicator(
refreshing, state,
Modifier
.zIndex(100f)
)
CartList(
modifier = Modifier
.padding(innerPadding)
.fillMaxSize(),
coffeeList = coffeeListUiState,
onDeleteFromCartClick = {currentCoffee: Coffee ->
coffee.value = currentCoffee
openDialog.value = true
}
)
Box (modifier = Modifier.padding(0.dp).pullRefresh(state)) {
PullRefreshIndicator(refreshing = refreshing, state = state,
modifier = Modifier.zIndex(100f).align(Alignment.TopCenter)
)
CartList(
modifier = Modifier
.padding(innerPadding).pullRefresh(state)
.fillMaxSize(),
coffeeList = coffeeListUiState,
onDeleteFromCartClick = {currentCoffee: Coffee ->
coffee.value = currentCoffee
openDialog.value = true
}
)
}
}
DeleteFromCartAlertDialog(
openDialog = openDialog,

View File

@ -11,6 +11,7 @@ import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.foundation.border
import androidx.compose.foundation.clickable
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
@ -20,18 +21,12 @@ import androidx.compose.foundation.layout.heightIn
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.ExperimentalMaterialApi
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Add
import androidx.compose.material.icons.outlined.Create
import androidx.compose.material.pullrefresh.PullRefreshIndicator
import androidx.compose.material.pullrefresh.rememberPullRefreshState
import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.ExperimentalMaterial3Api
@ -48,7 +43,6 @@ import androidx.compose.material3.Text
import androidx.compose.material3.rememberModalBottomSheetState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableDoubleStateOf
import androidx.compose.runtime.mutableStateOf
@ -56,7 +50,6 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Alignment.Companion.CenterHorizontally
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.layout.ContentScale
@ -80,10 +73,13 @@ import com.zyzf.coffeepreorder.R
import com.zyzf.coffeepreorder.database.model.Coffee
import com.zyzf.coffeepreorder.ui.AppViewModelProvider
import com.zyzf.coffeepreorder.ui.theme.CoffeePreorderTheme
import eu.bambooapps.material3.pullrefresh.PullRefreshIndicator
import eu.bambooapps.material3.pullrefresh.pullRefresh
import eu.bambooapps.material3.pullrefresh.rememberPullRefreshState
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.launch
@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterialApi::class)
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun CoffeeList(
viewModel: CoffeeListViewModel = viewModel(factory = AppViewModelProvider.Factory)
@ -132,46 +128,46 @@ fun CoffeeList(
}
}
) { innerPadding ->
PullRefreshIndicator(
refreshing, state,
Modifier
.zIndex(100f)
)
CoffeeList(
modifier = Modifier
.padding(innerPadding)
.fillMaxSize(),
coffeeList = coffeeListUiState,
onAddToCartClick = { coffeeUid: Int ->
coroutineScope.launch {
viewModel.addCoffeeToCart(coffeeUid = coffeeUid)
Box (modifier = Modifier.padding(0.dp).pullRefresh(state)) {
PullRefreshIndicator(refreshing = refreshing, state = state,
modifier = Modifier.zIndex(100f).align(Alignment.TopCenter)
)
CoffeeList(
modifier = Modifier
.padding(innerPadding)
.fillMaxSize(),
coffeeList = coffeeListUiState,
onAddToCartClick = { coffeeUid: Int ->
coroutineScope.launch {
viewModel.addCoffeeToCart(coffeeUid = coffeeUid)
}
},
onEditClick = { currentCoffee: Coffee ->
coroutineScope.launch {
coffee.value = currentCoffee
openDialog.value = true
}
}
},
onEditClick = { curcoffee: Coffee ->
coroutineScope.launch {
coffee.value = curcoffee
openDialog.value = true
}
}
)
)
}
}
AddEditModalBottomSheet(
coffee = coffee,
sheetState = sheetState,
openDialog = openDialog,
onAddClick = { coffee: Coffee, context: Context ->
onAddClick = { currentCoffee: Coffee, context: Context ->
coroutineScope.launch {
viewModel.createCoffee(coffee, imageUri as Uri, context)
viewModel.createCoffee(currentCoffee, imageUri as Uri, context)
}
},
onEditClick = { coffee: Coffee, context: Context ->
onEditClick = { currentCoffee: Coffee, context: Context ->
coroutineScope.launch {
viewModel.editCoffee(coffee, imageUri as Uri, context)
viewModel.editCoffee(currentCoffee, imageUri as Uri, context)
}
},
onDeleteClick = { coffee: Coffee ->
onDeleteClick = { currentCoffee: Coffee ->
coroutineScope.launch {
viewModel.deleteCoffee(coffee)
viewModel.deleteCoffee(currentCoffee)
}
},
photoPicker = photoPicker,
@ -189,8 +185,7 @@ private fun AddEditModalBottomSheet(
onEditClick: (coffee: Coffee, context: Context) -> Unit,
onDeleteClick: (coffee: Coffee) -> Unit,
photoPicker: ManagedActivityResultLauncher<PickVisualMediaRequest, Uri?>,
imageUri: Any?,
modifier: Modifier = Modifier
imageUri: Any?
) {
var name: String by remember { mutableStateOf("")}
var cost: Double by remember { mutableDoubleStateOf(0.0) }
@ -350,7 +345,7 @@ private fun CoffeeListItem(
.padding(top = 5.dp)) {
Button(
onClick = {
coffee.uid.let { onAddToCartClick(it) }
onAddToCartClick(coffee.uid)
},
shape = CircleShape,
modifier = Modifier.fillMaxWidth(fraction = 0.75f)

View File

@ -55,7 +55,7 @@ class CoffeeListViewModel(
copyFileToSftp(f, "/mnt/nextcloud/data/Zyzf/files/Images")
}
suspend fun editCoffee(coffee: Coffee, imageUri: Uri, context: Context) {
val editedCoffee: Int = coffeeRepository.update(coffee.uid!!, coffee.name, coffee.cost, coffee.ingredients, coffee.cartId, coffee.count)!!
val editedCoffee: Int = coffeeRepository.update(coffee.uid, coffee.name, coffee.cost, coffee.ingredients, coffee.cartId, coffee.count)!!
val inputStream = context.contentResolver.openInputStream(imageUri)
val bitmap = BitmapFactory.decodeStream(inputStream)

View File

@ -1,4 +1,4 @@
package com.zyzf.coffeepreorder.composeui
package com.zyzf.coffeepreorder.ui.login
import android.content.res.Configuration
import androidx.compose.foundation.layout.Column

View File

@ -1,6 +1,5 @@
package com.zyzf.coffeepreorder.ui.navigation
import android.content.res.Configuration
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
@ -12,7 +11,6 @@ import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.NavigationBar
import androidx.compose.material3.NavigationBarItem
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.material3.TopAppBarDefaults
@ -20,7 +18,6 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.navigation.NavDestination
import androidx.navigation.NavDestination.Companion.hierarchy
import androidx.navigation.NavGraph.Companion.findStartDestination
@ -30,13 +27,12 @@ import androidx.navigation.compose.composable
import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController
import com.zyzf.coffeepreorder.R
import com.zyzf.coffeepreorder.composeui.Login
import com.zyzf.coffeepreorder.ui.cart.Cart
import com.zyzf.coffeepreorder.ui.coffee.CoffeeList
import com.zyzf.coffeepreorder.ui.login.Login
import com.zyzf.coffeepreorder.ui.order.Order
import com.zyzf.coffeepreorder.ui.profile.Profile
import com.zyzf.coffeepreorder.ui.register.Register
import com.zyzf.coffeepreorder.ui.theme.CoffeePreorderTheme
@OptIn(ExperimentalMaterial3Api::class)
@Composable
@ -115,7 +111,6 @@ fun Navhost(
}
}
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun MainNavbar() {
val navController = rememberNavController()

View File

@ -43,7 +43,7 @@ enum class Screen(
fun getItem(route: String): Screen? {
val findRoute = route.split("/").first()
return values().find { value -> value.route.startsWith(findRoute) }
return entries.find { value -> value.route.startsWith(findRoute) }
}
}
}

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<selector>
</selector>