안녕하세요. Narvis2 입니다.
이번 포스팅에서는 Android Jetpack Compose 에서 snackbar
를 사용하는 방법에 대하여 간단한 예제를 통해 알아보고자 합니다.
🍎 Scaffold 를 사용하여 Snackbar 만들기
Compose
에서Snackbar
를 기존Snackbar
의 동작대로 이용하기 위해서는Scaffold State
로 감싸야 함⚠️ 주의 ⚠️
- 최상단
Component
를Scaffold
로 감싸줘야rememberScaffoldState()
를 사용하여snackbar
사용가능
- 최상단
- 만약
Scaffold
로 감싸지 않으면 보통의Composable
과 같이 동작함 Coroutine Builder
내부에서Snackbar
가 불려야함rememberScaffoldState()
👉Scaffold
를 사용
예제 👇
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
@Composable
fun NoteScreen(
navController: NavController,
scaffoldState: ScaffoldState,
onActionButtonClick: () -> Unit
) {
Scaffold(
topBar = {
TopAppBar(
title = {
Text(text = stringResource(id = R.string.app_name))
},
actions = {
IconButton(
onClick = { navController.navigate(route = NavigationType.SEARCH_SCREEN.name) }
) {
Icon(imageVector = Icons.Default.Search, contentDescription = "Search")
}
},
backgroundColor = Color.White
)
},
scaffoldState = scaffoldState, // state 연결
floatingActionButton = {
onActionButtonClick()
},
floatingActionButtonPosition = FabPosition.End,
) {
// TODO:: do something...
}
}
fun NoteNavigation(viewModel: NoteViewModel) {
val navController = rememberNavController()
// SnackBar
val scaffoldState = rememberScaffoldState()
val coroutineScope = rememberCoroutineScope()
NavHost(
navController = navController,
startDestination = NavigationType.HOME_SCREEN.name
) {
composable (route = NavigationType.HOME_SCREEN.name) {
NoteScreen(
navController = navController,
scaffoldState = scaffoldState,
) {
scaffoldState.snackbarHostState.showSnackbar("Floating Action Button Click")
}
}
}
}