Skip to content

Instantly share code, notes, and snippets.

View CostaFot's full-sized avatar
🍦

Costa Fotiadis CostaFot

🍦
View GitHub Profile
// viewModel layer
class MyViewModel: ViewModel() {
private val _eventWithChannel = Channel<Event>()
val eventFlowFromChannel = _eventWithChannel.receiveAsFlow()
}
// compose layer
LaunchedEffect(lifecycleOwner) {
lifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
viewModel.eventFlowFromChannel.collect {
@Composable
private fun SecondComposable(onDoSomethingElse: suspend () -> Unit) {
LaunchedEffect(Unit) {
onDoSomethingElse()
}
Text(text = "hello second")
Button(
onClick = {}
) {
Text(text = "Click me to do something else")
restartable scheme("[androidx.compose.ui.UiComposable]") fun SecondComposable(
unstable onDoSomethingElse: SuspendFunction0<Unit>
)
@Composable
private fun SecondComposable(onDoSomethingElse: suspend () -> Unit) {
val scope = rememberCoroutineScope()
Text(text = "hello second")
Button(
onClick = {
scope.launch {
onDoSomethingElse()
}
}
@Composable
fun MainScreen(
viewModel: MainViewModel = hiltViewModel(),
) {
val onUpdateState: () -> Unit = remember(viewModel) {
return@remember viewModel::updateState
}
val onDoSomethingElse: () -> Unit = remember(viewModel) {
return@remember viewModel::doSomethingElse
restartable skippable scheme("[androidx.compose.ui.UiComposable]") fun TextThatDisplaysState(
stable state: String
)
restartable skippable scheme("[androidx.compose.ui.UiComposable]") fun FirstComposable(
stable onUpdateState: Function0<Unit>
)
restartable skippable scheme("[androidx.compose.ui.UiComposable]") fun SecondComposable(
stable onDoSomethingElse: Function0<Unit>
)
@Composable
fun TextThatDisplaysState(state: String) {
Text(text = state)
}
@Composable
private fun FirstComposable(onUpdateState: () -> Unit) {
Text(text = "hello first")
Button(
onClick = {
@Composable
fun MainContent(
state: String,
onUpdateState: () -> Unit,
onDoSomethingElse: () -> Unit
) {
Column {
TextThatDisplaysState(state = state)
FirstComposable(onUpdateState = onUpdateState)
SecondComposable(onDoSomethingElse = onDoSomethingElse)
@Composable
fun MainScreen(
viewModel: MainViewModel = hiltViewModel(),
) {
val state: String by viewModel.state.collectAsStateWithLifecycle()
MainContent(
state = state,
onUpdateState = viewModel::updateState,
onDoSomethingElse = viewModel::doSomethingElse,
)
@Composable
fun MainContent(
state: String,
onUpdateState: () -> Unit,
onDoSomethingElse: () -> Unit
) {
Column {
Text(text = state)
Text(text = "hello first")
Button(