Open philipy355 opened 8 months ago
class MainViewModel: ViewModel(){ /** * @Stable interface MutableState<T> : State<T> { override var value: T operator fun component1(): T ==> getter operator fun component2(): (T) -> Unit ==> setter } */ private val _value : MutableState<String> = mutableStateOf("Hello World") //State:읽기만 가능 val value : State<String> = _value private val _liveData = MutableLiveData<String>() val liveData: LiveData<String> = _liveData fun changeValue(value: String){ _value.value = value } } class MainActivity : ComponentActivity() { @OptIn(ExperimentalMaterial3Api::class, ExperimentalComposeUiApi::class) @SuppressLint("UnusedMaterial3ScaffoldPaddingParameter", "UnusedMaterialScaffoldPaddingParameter" ) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { HomeScreen() } } } @OptIn(ExperimentalMaterial3Api::class) @Composable fun HomeScreen(viewModel: MainViewModel = viewModel()){ val text1 : MutableState<String> = remember { mutableStateOf("Hello World") } var text2 : String by remember { mutableStateOf("Hello World") } val (text : String, setText: (String) -> Unit) = remember { mutableStateOf("Hello World") } //observeAsState를 통해 Compose에서 liveData 사용 할 수 있다. //kotlin flow도 Compose에서 제공해준다. val text3 = viewModel.liveData.observeAsState("Hello World") Column() { Text("Hello World") Button(onClick = { text1.value = "변경" println(text1.value) text2 = "변경" println(text2) setText("변경") viewModel.changeValue("변경") // println(text) }){ Text("클릭") } //recomposition ==> 다시 그려지는 행위.. TextField(value = text, onValueChange = setText) } }
//LiveData implementation 'androidx.compose.runtime:runtime-livedata:1.5.0'