Как передать дополнительные данные в ViewModel с экрана Jetpack Compose?Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Как передать дополнительные данные в ViewModel с экрана Jetpack Compose?

Сообщение Anonymous »

Я перехожу к месту назначения, которое изначально отображает DatePickerModal и набор кнопок на экране. Когда пользователь выбирает дату и нажимает одну из кнопок, я хочу передать выбранную дату и кнопку, которая была нажата, в ViewModel, чтобы на основе этих данных можно было выполнить действия в хранилище данных.
Моя проблема в том, что я не знаю, как передать оба данных одновременно.
Это соответствующие части моего кода:

Код: Выделить всё

CalendarScreen

Код: Выделить всё

@ExperimentalLayoutApi
@ExperimentalCoroutinesApi
@Composable
internal fun CalendarScreen(
viewModel: CalendarViewModel = hiltViewModel()
) {
val selectedTopicId by viewModel.selectedTopicIdd.collectAsStateWithLifecycle()
var showModal by remember { mutableStateOf(true) }
ButtonsScreenCalendar(
onTopicButtonClicked = viewModel::onTopicClick,
onDateSelected = viewModel::onDateSelected
)
var selectedDate by remember { mutableStateOf(null) }
if (selectedDate != null) {
val date = Date(selectedDate!!)
val formattedDate = SimpleDateFormat("MMM dd, yyyy", Locale.getDefault()).format(date)
Text("Selected date: $formattedDate")
} else {
Text("No date selected")
}

if (showModal) {
DatePickerModal(
onDateSelected = {
selectedDate = it
viewModel::onDateSelected
showModal = false
},
onDismiss = { showModal = false }
)
}
}

Код: Выделить всё

ButtonsScreenCalendar

Код: Выделить всё

@ExperimentalLayoutApi
@Composable
fun ButtonsScreenCalendar(
onTopicButtonClicked: (String) -> Unit,
onDateSelected: (Long)-> Unit
) {
/* Some code */
FlowRow(modifier = rowModifier) {
it.items.forEach {
HomeButton(it) {
onTopicButtonClicked(it.id.toString())
onDateSelected
}
Spacer(modifier = chipModifier)
}
}
}

Код: Выделить всё

HomeButton

Код: Выделить всё

@Composable
fun HomeButton(
itemUI: ItemUI,
onClick: () -> Unit
) {
AssistChip(
onClick = { onClick() },
label = { Text(itemUI.title) }
)
}

Код: Выделить всё

CalendarViewModel

Код: Выделить всё

@HiltViewModel
class CalendarViewModel @Inject constructor(
private val savedStateHandle: SavedStateHandle,
val universalisRepository: UniversalisRepository,
getTopicWithDate: GetTopicWithDateUseCase,
) : ViewModel() {

private val selectedTopicIdKey = "selectedTopicIdKey"
private val selectedTopicId = savedStateHandle.getStateFlow(
key = selectedTopicIdKey,
initialValue = 1, //TODO
)

//TODO Invoque use case passing topic and date

/* Some code */

fun onTopicClick(topicId: String?) {
savedStateHandle[TOPIC_ID_ARG] = topicId
}
}
В методе onTopicClick CalendarViewModel я вижу нажатую кнопку, но не знаю, как получить дату.< /п>

Подробнее здесь: https://stackoverflow.com/questions/790 ... ose-screen
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»