Artur Matsehor
06/16/2020, 2:45 PM@Composable
fun SampleScreen() {
SampleScreenBody(viewModel = SampleViewModel())
}
@Composable
fun SampleScreenBody(viewModel: SampleViewModel) {
Button(onClick = {
viewModel.doSmth("Parameter") { response ->
if (response == "Success") {
//TODO: this is where I want to, for ex, move to another screen
//or show a dialog.
//How?
}
}
}) {
Text("Text")
}
}
andylamax
06/16/2020, 2:48 PMArtur Matsehor
06/16/2020, 2:48 PMandylamax
06/16/2020, 2:49 PMhenrikhorbovyi
06/16/2020, 2:51 PMLiveData
or RX
use the delegate observable
from kotlin or StateFlow
from kotlinx.coroutinesArtur Matsehor
06/16/2020, 2:53 PM@Composable
fun SampleScreenBody(viewModel: SampleViewModel) {
Button(onClick = {
val resultState = viewModel.doSmth("Parameter").observeAsState()
// ???
}) {
Text("Text")
}
}
andylamax
06/16/2020, 3:03 PM// If you are using viewModel
data class User(val name: String)
class VM : ViewModel {
private val _user = MutableLiveData<User>
val user : LiveData get() = _value
fun updateUser(name: String) {
_user.value = User(name)
}
}
class Activity : AppCompatActivity {
private lateinit var vm:VM
override fun onCreate(bundle: Bundle?) {
vm = ViewModelProvidors.of(this)
setContent {
SampleScreen(vm.user.value) {vm.updateUser(it)}
}
}
}
@Composable
fun SampleScreen(user:User,onUserNameChanged:(String)->Unit) {
// . . . User UI Implementation
Button(onClick = {
onUserNameChanged("New User")
}) {
Text(user.name)
}
}
// Or Even this
data class User(val name: String)
class VM : ViewModel {
private val _user = MutableLiveData<User>
val user : LiveData get() = _value
fun updateUser(name: String) {
_user.value = User(name)
}
}
class Activity : AppCompatActivity {
private lateinit var vm:VM
override fun onCreate(bundle: Bundle?) {
vm = ViewModelProvidors.of(this)
setContent {
SampleScreen(vm.user) {vm.updateUser(it)}
}
}
}
@Composable
fun SampleScreen(u:LiveData<User>,onUserNameChanged:(String)->Unit) {
// . . . User UI Implementation
val user = u.asObservableState()
Button(onClick = {
onUserNameChanged("New User")
}) {
Text(user.name)
}
}
Artur Matsehor
06/17/2020, 9:31 PMandylamax
06/18/2020, 11:53 AM