https://zenn.dev/hiroa365/articles/4d9154ba4fa85c
上記の方のアーキテクチャを参考にしており、以下MainScreen.ktファイル内の以下コードにおける、
onClickCountUp: () -> Unitを
onClickCountUp: (count: Int) -> Unit
のように引数を指定できるようにするには、どのように変更を加えればよろしいか教えていただければ幸いです。
MainScreen.kt
@Composable fun MainScreen( viewModel: MainScreenViewModel = hiltViewModel(), ) { /** * ViewModelで保持しているStateを監視 * 変化があった場合は再コンポーズされる */ val state by viewModel.state.collectAsState() /** * ViewModelがこの関数内だけで使用するため、 * ViewModelにイベントを渡す場合は、Eventを送るためのリスナーを渡している */ MainScreen( state = state, onClickCountUp = { viewModel.onEvent(OnClickCountUpEvent) } ) } @Composable private fun MainScreen( state: MainScreenState, onClickCountUp: () -> Unit ) { Column( ・・・
MainScreenViewModel.kt
@HiltViewModel class MainScreenViewModel @Inject constructor(): ViewModel() { /** * StateはStateFlowで保持 */ private val _state = MutableStateFlow(MainScreenState.initValue) val state = _state.asStateFlow() private fun currentState() = _state.value private fun updateState(newState: () -> MainScreenState) { _state.value = newState() } /** * Viewから送られるイベントを処理 */ fun onEvent(event: MainViewEvent) { when (event) { OnClickCountUpEvent -> onClickCountUpEvent() } } private fun onClickCountUpEvent() { val oldState = currentState() updateState { oldState.copy(counter = oldState.counter + 1) } } }
MainViewEvent.kt
package io.github.hiroa365.simple_compose_mvvm.screen.main sealed class MainViewEvent object OnClickCountUpEvent : MainViewEvent()
count をどう使いたいかにもよりますが、MainViewEvent.kt の OnClickCountUpEvent に引数というかプロパティを持たせるとか?
ご回答ありがとうございます。
以下のようにobjectにプロパティを持たせてみたのですが、呼び出し方がわかっておらず、お手数おかけして申し訳ないですが、記法等教えていただけますでしょうか?
object OnClickCountUpEvent : MainViewEvent() {
val count: Int = 1
}
fun onEvent(event: MainViewEvent) {
when (event) {
OnClickCountUpEvent -> onClickCountUpEvent(). // こちらの呼び出し方がわかっておらず。
}
}
回答1件
あなたの回答
tips
プレビュー