Все работает отлично, ПОКА я не приостанавливаю приложение и не использую другие приложения на своем телефоне, примерно через 1 минуту. при возобновлении работы приложения все остается по-прежнему, но текст продолжительности исчезает.
это компонуемая длительность:
Код: Выделить всё
@Composable
fun ParkingDurationText(startingDate: String?, startingTime: String?) {
val context = LocalContext.current
val dateFormatter = DateTimeFormatter.ofPattern(ConstHelper.TimePatterns.DATE_PATTERN)
val timeFormatter = DateTimeFormatter.ofPattern(ConstHelper.TimePatterns.TIME_PATTERN)
val dateTimeFormatter = DateTimeFormatter.ofPattern(ConstHelper.TimePatterns.DATE_TIME_PATTERN)
// State for duration
var duration by remember { mutableStateOf("") }
// Function to update duration
val updateDuration = {
val startDateTime = LocalDateTime.parse(
"${startingDate ?: LocalDate.now().format(dateFormatter)} ${
startingTime ?: LocalTime.now().format(timeFormatter)
}",
dateTimeFormatter
)
val currentDuration = Duration.between(startDateTime, LocalDateTime.now()).seconds
duration = "Days: ${currentDuration / 86400} Hours: ${(currentDuration % 86400) / 3600} Minutes: ${((currentDuration % 86400) % 3600) / 60} Seconds: ${currentDuration % 60}"
}
LaunchedEffect(Unit) {
while (true) {
Log.e("TAG", "ParkingDurationText:$duration ", )
delay(1000)
updateDuration()
}
}
Row(
modifier = Modifier
.fillMaxWidth()
.padding(5.dp),
horizontalArrangement = Arrangement.Start,
verticalAlignment = Alignment.CenterVertically
) {
Text(
modifier = Modifier.padding(end = 5.dp),
text = stringResource(id = R.string.parking_duration),
style = MaterialTheme.typography.bodyMedium,
fontWeight = FontWeight.Bold
)
Text(
text = duration,
modifier = Modifier,
style = MaterialTheme.typography.bodyMedium,
textAlign = TextAlign.Center
)
}
}
Код: Выделить всё
@Composable
fun ParkingInfoLayoutComposable(sharedViewModel: SharedViewModel, clicked: () -> Unit) {
val context = LocalContext.current
var showEditDialog by rememberSaveable { mutableStateOf(false) }
val lastParking by sharedViewModel.currentParking.collectAsState()
if (showEditDialog) {
EditParkingInfoDialog(
onDismiss = {
showEditDialog = false
},
onConfirm = {
showEditDialog = false
}
)
}
Column(
modifier = Modifier
.wrapContentHeight()
.padding(8.dp)
.clickable(
interactionSource = remember { MutableInteractionSource() },
indication = null,
onClick = clicked
)
) {
Row(
horizontalArrangement = Arrangement.Start,
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier.fillMaxWidth()
) {
InfoRow(
modifier = Modifier.weight(1f),
title = stringResource(R.string.parking_location_title),
value = lastParking?.parkingAddress ?: ""
)
Row(
modifier = Modifier.wrapContentWidth(),
horizontalArrangement = Arrangement.End
) {
Icon(
modifier = Modifier
.padding(horizontal = 8.dp)
.clickable(
interactionSource = remember { MutableInteractionSource() },
indication = null,
onClick = { showEditDialog = true }
),
painter = painterResource(id = R.drawable.edit_icon),
contentDescription = "Edit Icon"
)
Icon(
modifier = Modifier
.padding(horizontal = 8.dp)
.clickable(
interactionSource = remember { MutableInteractionSource() },
indication = null,
onClick = {
lastParking?.let {
openShareIntent(context, it)
}
}
),
painter = painterResource(id = R.drawable.share_icon),
contentDescription = "Share Icon"
)
}
}
InfoRow(
title = stringResource(R.string.parking_date),
value = lastParking?.startingDate ?: ""
)
InfoRow(
title = stringResource(id = R.string.parking_starting_time),
value = lastParking?.startingTime ?: ""
)
ParkingDurationText(lastParking?.startingDate, lastParking?.startingTime)
}
}
Код: Выделить всё
@Composable
fun NavigationInfoTopLayout(sharedViewModel: SharedViewModel) {
val onPrimaryColor = MaterialTheme.colorScheme.primary
var isExpandable by rememberSaveable { mutableStateOf(sharedViewModel.getIsNavigationLayoutExpanded()) }
Column(
modifier = Modifier
.fillMaxWidth()
.wrapContentSize()
.padding(vertical = 20.dp, horizontal = 30.dp)
.clip(RoundedCornerShape(16.dp))
.background(onPrimaryColor)
.padding(vertical = 8.dp),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
ParkingInfoLayoutComposable(sharedViewModel) {
isExpandable = !isExpandable
}
NavigationButtonsLayoutComposable(sharedViewModel, isExpandable)
}
}
Журнал в LanchEffect работает и без проблем показывает продолжительность, даже когда текст отсутствует.
Я также пытался сделать это с моделью представления и собрал состояние, но он сделал то же самое.
Мне здесь действительно может пригодиться помощь, спасибо!
Подробнее здесь: https://stackoverflow.com/questions/787 ... -backstack