스낵바로 안내 메시지를 띄우려고 한다.

Snackbar 을 만들기 위해서는 Scaffold Layout 을 사용해야 한다. Scaffold 란 Material Component 들을 편하게 사용할 수 있도록 하기 위해 미리 디자인된 레이아웃이다.
rememberScaffoldState() 를 사용해서 구현하려 했지만, Material3 에서는 사용할 수 없다.(Material2 에서 사용가능)
@Composable
fun KotlinWorldSnackbar(lifecycleScope: CoroutineScope) {
val scaffoldState = rememberScaffoldState()
var textState by remember {
mutableStateOf("")
}
Scaffold(
modifier = Modifier.fillMaxSize(),
scaffoldState = scaffoldState
) {
Column(
modifier = Modifier
.fillMaxSize()
.padding(12.dp)
) {
TextField(value = textState, onValueChange = { textValue -> textState = textValue })
Spacer(modifier = Modifier.size(12.dp))
Button(onClick = {
lifecycleScope.launch {
scaffoldState.snackbarHostState.showSnackbar("textState : ${textState}")
}
}) {
Text(text = "Show Snackbar")
}
}
}
}
val snackbarHostState = remember { SnackbarHostState() }
val scope = rememberCoroutineScope()
// check permission
val context = LocalContext.current
val launcherMultiplePermissions = rememberLauncherForActivityResult(
ActivityResultContracts.RequestMultiplePermissions()
) { permissionsMap ->
val areGranted = permissionsMap.values.reduce { acc, next -> acc && next }
if (areGranted) {
galleryLauncher.launch(
PickVisualMediaRequest(
ActivityResultContracts.PickVisualMedia.ImageOnly
)
)
} else {
scope.launch {
snackbarHostState.showSnackbar(message = context.getString(R.string.msg_permission_photo))
}
}
}
Scaffold(
snackbarHost = { SnackbarHost(snackbarHostState) },
topBar = {
…
},
content = {
…
}
)