
@Composable
fun SnackbarEx() {
var counter by remember { mutableStateOf(0) }
// 단계 3: couroutineScope를 만듭시다.
// `rememberCoroutineScope`를 사용합니다.
val coroutineScope = rememberCoroutineScope() // 단계 3: couroutineScope를 만듭시다. suspend 함수를 실행하기 위해 사용하는 코루틴 스코프
// 단계 1: scaffoldState를 만들고 Scaffold에 설정합시다.
// scaffoldState를 만들기 위해 `rememberScaffoldState`를 사용합니다.
// val snackbarHostState = remember { SnackbarHostState() }
// val scaffoldState = rememberScaffoldState(snackbarHostState = snackbarHostState)
val scaffoldState = rememberScaffoldState()
Scaffold(scaffoldState = scaffoldState) {
// 단계 2: "더하기" 버튼을 만들어 봅시다.
// action에서 counter를 증가시킵시다.
// LaunchedEffect(scaffoldState.snackbarHostState) {
// scaffoldState.snackbarHostState.showSnackbar(
// message = "더하기가 눌렸습니다 ${counter}.",
// actionLabel = "close",
// duration = SnackbarDuration.Short
// )
// }
Button(onClick = {
counter++
coroutineScope.launch {
val result = scaffoldState.snackbarHostState.showSnackbar(
message = "더하기가 눌렸습니다 ${counter}.",
actionLabel = "close",
duration = SnackbarDuration.Short
)
// when (result){
// SnackbarResult.ActionPerformed -> {}
// SnackbarResult.Dismissed -> {}
// } 활용 가능
}
}) {
Text("더하기")
}
// 단계 4: 버튼의 onClick에서 `coroutineScope.launch`를
// 사용합니다.
// 단계 5: 스낵바를 사용하기 위해 `scaffoldState.snackbarHostState.showSnackbar`
// 사용합니다.
// `message`에 카운터를 출력합시다.
// `actionLabel`를 "닫기"로 지정합시다.
// `duration`에 `SnackbarDuration.Short`를 사용합니다.
}
}