|
@@ -4,20 +4,21 @@ import androidx.compose.foundation.layout.*
|
|
import androidx.compose.foundation.lazy.LazyColumn
|
|
import androidx.compose.foundation.lazy.LazyColumn
|
|
import androidx.compose.foundation.lazy.itemsIndexed
|
|
import androidx.compose.foundation.lazy.itemsIndexed
|
|
import androidx.compose.foundation.text.KeyboardOptions
|
|
import androidx.compose.foundation.text.KeyboardOptions
|
|
-import androidx.compose.material.ScaffoldState
|
|
|
|
|
|
+import androidx.compose.material3.SnackbarHost
|
|
|
|
+import androidx.compose.material3.SnackbarHostState
|
|
|
|
+
|
|
import androidx.compose.material.icons.Icons
|
|
import androidx.compose.material.icons.Icons
|
|
import androidx.compose.material.icons.filled.ArrowBack
|
|
import androidx.compose.material.icons.filled.ArrowBack
|
|
import androidx.compose.material.icons.filled.Home
|
|
import androidx.compose.material.icons.filled.Home
|
|
-import androidx.compose.material.rememberScaffoldState
|
|
|
|
-import androidx.compose.material3.Scaffold
|
|
|
|
-
|
|
|
|
|
|
|
|
|
|
+import androidx.compose.material3.Scaffold
|
|
import androidx.compose.material3.*
|
|
import androidx.compose.material3.*
|
|
import androidx.compose.runtime.Composable
|
|
import androidx.compose.runtime.Composable
|
|
import androidx.compose.runtime.LaunchedEffect
|
|
import androidx.compose.runtime.LaunchedEffect
|
|
import androidx.compose.runtime.collectAsState
|
|
import androidx.compose.runtime.collectAsState
|
|
import androidx.compose.runtime.mutableStateListOf
|
|
import androidx.compose.runtime.mutableStateListOf
|
|
import androidx.compose.runtime.remember
|
|
import androidx.compose.runtime.remember
|
|
|
|
+import androidx.compose.runtime.rememberCoroutineScope
|
|
import androidx.compose.ui.Alignment
|
|
import androidx.compose.ui.Alignment
|
|
import androidx.compose.ui.Modifier
|
|
import androidx.compose.ui.Modifier
|
|
import androidx.compose.ui.res.painterResource
|
|
import androidx.compose.ui.res.painterResource
|
|
@@ -30,18 +31,23 @@ import com.example.pda.R
|
|
import com.example.pda.function.ResultCount
|
|
import com.example.pda.function.ResultCount
|
|
import com.example.pda.function.ResultCounter
|
|
import com.example.pda.function.ResultCounter
|
|
import com.example.pda.ui.viewmodel.InventoryViewModel
|
|
import com.example.pda.ui.viewmodel.InventoryViewModel
|
|
-
|
|
|
|
|
|
+import com.example.pda.model.InventoryItem
|
|
|
|
+import com.example.pda.ui.viewmodel.PingViewmodel
|
|
|
|
+import kotlinx.coroutines.launch
|
|
|
|
|
|
|
|
|
|
@OptIn(ExperimentalMaterial3Api::class)
|
|
@OptIn(ExperimentalMaterial3Api::class)
|
|
@Composable
|
|
@Composable
|
|
|
|
+
|
|
fun DetailsScreen(
|
|
fun DetailsScreen(
|
|
result: String,
|
|
result: String,
|
|
onBack: () -> Unit,
|
|
onBack: () -> Unit,
|
|
onMainScreen: () -> Unit,
|
|
onMainScreen: () -> Unit,
|
|
onShelfScan: () -> Unit,
|
|
onShelfScan: () -> Unit,
|
|
- scaffoldState: ScaffoldState = rememberScaffoldState() // 添加 ScaffoldState
|
|
|
|
|
|
+
|
|
) {
|
|
) {
|
|
|
|
+ val snackbarHostState = remember { SnackbarHostState() }
|
|
|
|
+ val scope = rememberCoroutineScope()
|
|
val resultCounter = ResultCounter()
|
|
val resultCounter = ResultCounter()
|
|
val viewModel: InventoryViewModel = viewModel()
|
|
val viewModel: InventoryViewModel = viewModel()
|
|
val editableResults = remember {
|
|
val editableResults = remember {
|
|
@@ -49,6 +55,7 @@ fun DetailsScreen(
|
|
addAll(resultCounter.getStatistics())
|
|
addAll(resultCounter.getStatistics())
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ val Inventoryitems: MutableList<InventoryItem> = mutableListOf()
|
|
// 初始化数据
|
|
// 初始化数据
|
|
LaunchedEffect(Unit) {
|
|
LaunchedEffect(Unit) {
|
|
result.split(",").forEach {
|
|
result.split(",").forEach {
|
|
@@ -58,25 +65,29 @@ fun DetailsScreen(
|
|
editableResults.addAll(resultCounter.getStatistics())
|
|
editableResults.addAll(resultCounter.getStatistics())
|
|
}
|
|
}
|
|
val uiState = viewModel.uiState.collectAsState()
|
|
val uiState = viewModel.uiState.collectAsState()
|
|
- LaunchedEffect(uiState) {
|
|
|
|
- when (uiState) {
|
|
|
|
|
|
+
|
|
|
|
+ LaunchedEffect(uiState.value) {
|
|
|
|
+ when (val currentState = uiState.value) {
|
|
is InventoryViewModel.UiState.Success -> {
|
|
is InventoryViewModel.UiState.Success -> {
|
|
- val message = (uiState as InventoryViewModel.UiState.Success).message
|
|
|
|
- scaffoldState.snackbarHostState.showSnackbar(message)
|
|
|
|
|
|
+ scope.launch {
|
|
|
|
+ snackbarHostState.showSnackbar(currentState.message)
|
|
|
|
+ viewModel.resetState()
|
|
|
|
+ }
|
|
resultCounter.clear()
|
|
resultCounter.clear()
|
|
editableResults.clear()
|
|
editableResults.clear()
|
|
- viewModel.resetState()
|
|
|
|
}
|
|
}
|
|
is InventoryViewModel.UiState.Error -> {
|
|
is InventoryViewModel.UiState.Error -> {
|
|
- val error = (uiState as InventoryViewModel.UiState.Error).message
|
|
|
|
- scaffoldState.snackbarHostState.showSnackbar("错误:$error")
|
|
|
|
- viewModel.resetState()
|
|
|
|
|
|
+ scope.launch {
|
|
|
|
+ snackbarHostState.showSnackbar("错误:${currentState.message}")
|
|
|
|
+ viewModel.resetState()
|
|
|
|
+ }
|
|
}
|
|
}
|
|
else -> {}
|
|
else -> {}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
Scaffold(
|
|
Scaffold(
|
|
-// scaffoldState = scaffoldState,
|
|
|
|
|
|
+ snackbarHost = { SnackbarHost(snackbarHostState) },
|
|
topBar = {
|
|
topBar = {
|
|
TopAppBar(
|
|
TopAppBar(
|
|
title = { Text("扫描结果详情") },
|
|
title = { Text("扫描结果详情") },
|
|
@@ -94,14 +105,14 @@ fun DetailsScreen(
|
|
Box(
|
|
Box(
|
|
modifier = Modifier.fillMaxWidth(),
|
|
modifier = Modifier.fillMaxWidth(),
|
|
contentAlignment = Alignment.Center
|
|
contentAlignment = Alignment.Center
|
|
-
|
|
|
|
|
|
+
|
|
) {
|
|
) {
|
|
Row(
|
|
Row(
|
|
modifier = Modifier
|
|
modifier = Modifier
|
|
.fillMaxWidth().padding(20.dp) ,
|
|
.fillMaxWidth().padding(20.dp) ,
|
|
verticalAlignment = Alignment.CenterVertically,
|
|
verticalAlignment = Alignment.CenterVertically,
|
|
- horizontalArrangement = Arrangement.SpaceEvenly,
|
|
|
|
-
|
|
|
|
|
|
+ horizontalArrangement = Arrangement.SpaceEvenly,
|
|
|
|
+
|
|
) {
|
|
) {
|
|
ExtendedFloatingActionButton(
|
|
ExtendedFloatingActionButton(
|
|
modifier = Modifier.weight(1f),
|
|
modifier = Modifier.weight(1f),
|
|
@@ -114,7 +125,7 @@ fun DetailsScreen(
|
|
},
|
|
},
|
|
text = { Text("主页") }
|
|
text = { Text("主页") }
|
|
)
|
|
)
|
|
-
|
|
|
|
|
|
+
|
|
Spacer(Modifier.width(8.dp)) // 添加间距
|
|
Spacer(Modifier.width(8.dp)) // 添加间距
|
|
|
|
|
|
ExtendedFloatingActionButton(
|
|
ExtendedFloatingActionButton(
|
|
@@ -132,7 +143,7 @@ fun DetailsScreen(
|
|
|
|
|
|
ExtendedFloatingActionButton(
|
|
ExtendedFloatingActionButton(
|
|
modifier = Modifier.weight(1f),
|
|
modifier = Modifier.weight(1f),
|
|
- onClick ={onsubmit(resultCounter,editableResults)} ,
|
|
|
|
|
|
+ onClick ={onsubmit(resultCounter,editableResults,Inventoryitems)} ,
|
|
icon = {
|
|
icon = {
|
|
Icon(
|
|
Icon(
|
|
painter = painterResource(id = R.drawable.ic_scan),
|
|
painter = painterResource(id = R.drawable.ic_scan),
|
|
@@ -142,14 +153,18 @@ fun DetailsScreen(
|
|
text = { Text("确认入库") }
|
|
text = { Text("确认入库") }
|
|
)
|
|
)
|
|
|
|
|
|
-// ExtendedFloatingActionButton(
|
|
|
|
-// onClick = {
|
|
|
|
-// val submitData = editableResults.map {
|
|
|
|
-// InventoryItem(it.normalizedResult, it.occurrences)
|
|
|
|
-// }
|
|
|
|
-// viewModel.submitData(submitData)
|
|
|
|
-// }
|
|
|
|
-// )
|
|
|
|
|
|
+ ExtendedFloatingActionButton(
|
|
|
|
+ modifier = Modifier.weight(1f),
|
|
|
|
+ onClick ={viewModel.submitData(Inventoryitems)} ,
|
|
|
|
+ icon = {
|
|
|
|
+ Icon(
|
|
|
|
+ painter = painterResource(id = R.drawable.ic_scan),
|
|
|
|
+ contentDescription = "ping"
|
|
|
|
+ )
|
|
|
|
+ },
|
|
|
|
+ text = { Text("ping") }
|
|
|
|
+ )
|
|
|
|
+
|
|
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -240,7 +255,17 @@ fun DetailsScreen(
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-private fun onsubmit( resultCounter: ResultCounter, editableResults: MutableList<ResultCount>){
|
|
|
|
|
|
+private fun onsubmit(resultCounter: ResultCounter, editableResults: MutableList<ResultCount>, items: MutableList<InventoryItem>) {
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ // 使用 map 进行转换,并更新 items
|
|
|
|
+ items.clear()
|
|
|
|
+ items.addAll(editableResults.map { result ->
|
|
|
|
+ InventoryItem(
|
|
|
|
+ normalizedResult = result.normalizedResult, // 将对应字段映射到 InventoryItem 中
|
|
|
|
+ occurrences = result.occurrences // 将对应字段映射到 InventoryItem 中
|
|
|
|
+ )
|
|
|
|
+ })
|
|
resultCounter.clear()
|
|
resultCounter.clear()
|
|
editableResults.clear()
|
|
editableResults.clear()
|
|
}
|
|
}
|