Snackbar 띄우기

sumi Yoo·2024년 10월 3일
  1. 스낵바로 안내 메시지를 띄우려고 한다.

  2. Snackbar 을 만들기 위해서는 Scaffold Layout 을 사용해야 한다. Scaffold 란 Material Component 들을 편하게 사용할 수 있도록 하기 위해 미리 디자인된 레이아웃이다.

  3. 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")
            }
        }
    }
}

https://kotlinworld.com/206

  1. 대신 SnackbarHostState() 을 사용한다.
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 = {
        …
    }
)

https://stackoverflow.com/questions/71363542/not-able-to-use-rememberscaffoldstate-in-android-compose-material3

0개의 댓글