Android/Android
Android | Mavericks 사용할 때 MavericksState 초기값 설정하기
si8ae
2024. 1. 6. 23:50
Mavericks 라이브러리를 사용하여 MVI 아키텍처의 안드로이드 앱 개발 시, MavericksState의 UiState 초기값을 동적으로 어떻게 설정하는지에 대해 알아보려고 합니다.
data class TestUiState(
val test: Test
) : MavericksState
data class Test(
val abc: String = ""
)
간단하게 UI에서 TestUiState를 구독하여 Test 데이터 클래스의 초기값을 동적으로 설정하고자 합니다.
data class TestUiState(
val test: Test
) : MavericksState {
constructor(args: Bundle) : this(
test = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
args.getParcelable(
Mavericks.KEY_ARG,
Test::class.java
)
} else {
args.getParcelable(Mavericks.KEY_ARG)
} ?: Test()
)
}
@Parcelize
data class Test(
val abc: String = ""
) : Parcelable
우선 Test클래스를 Bundle을 통해 전달해야 하므로 Parcelize를 통해 직렬화 하도록 합니다.
보조 생성자(constructor)를 통해 Bundle을 매개변수로 받아와서 getParcelable을 버전에 따라 분기 처리하여 TestUiState를 초기화합니다.
val viewModel: TestViewModel = mavericksActivityViewModel(
argsFactory = {
Test(abc = "Dynamic").asMavericksArgs()
}
)
Mavericks에서 제공하는 mavericksActivityViewModel을 통해 viewModel을 초기화하는데 이때 argsFactory를 통해 Test 데이터 클래스를 asMavericksArgs() 확장함수를 통해 전달합니다.
이 방법을 통해 MaverickState를 동적으로 초기화 할 수 있습니다.