시배's Android

Android | Mavericks 사용할 때 MavericksState 초기값 설정하기 본문

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를 동적으로 초기화 할 수 있습니다.