티스토리 뷰
문제 상황
HomeViewModel에 있는 message라는 변수를 통해서 snackbar를 관리하고 있습니다. 그런데 다른 뷰모델에서 api 통신시 발생하는 에러도 사용자에게 snackbar로 알려주고 싶어서, 뷰모델에 관련 없이 사용할 수 있도록 snackbar에 관련된 기능을 모아둔 유틸 파일을 하나 만들려고 합니다.
Snackbar
Snackbar는 Android 애플리케이션에서 사용자에게 간단한 메시지를 제공하는 데 사용되는 UI 요소입니다. Snackbar는 화면 하단에 잠시 나타났다 사라지는 방식으로, 사용자에게 피드백이나 안내 메시지를 제공할 때 유용합니다. 이는 사용자가 현재 작업 중에 다른 화면으로 이동하지 않고도 정보를 받을 수 있도록 합니다.
Snackbar.make(view, "Item deleted", Snackbar.LENGTH_LONG)
.setAction("UNDO") {
// Perform the undo operation
}
.show()
그리고 버튼을 추가하여 사용자가 특정 작업을 수행할 수 있도록 할 수 있습니다.
SnackBarUtils
object SnackBarUtils {
private lateinit var snackBarHostState: SnackbarHostState
fun init(snackBarHostState: SnackbarHostState) {
this.snackBarHostState = snackBarHostState
}
suspend fun showSnackBar(
message: String,
actionLabel: String? = null,
onActionClick: (() -> Unit)? = null,
duration: SnackbarDuration = SnackbarDuration.Short,
) {
if (this::snackBarHostState.isInitialized) {
val result = snackBarHostState.showSnackbar(
message = message,
actionLabel = actionLabel,
duration = duration
)
if (result == SnackbarResult.ActionPerformed) {
onActionClick?.invoke()
}
} else {
throw UninitializedPropertyAccessException("SnackBarHostState is not initialized. Call init() first.")
}
}
}
@Composable
fun BottomNavigationBar(
paddingValues: PaddingValues,
callbackManager: CallbackManager,
) {
val navController = rememberNavController()
val viewModel: HomeViewModel = hiltViewModel()
val dialogMessage by viewModel.dialogMessage.collectAsState()
val snackbarHostState = remember { SnackbarHostState() }
LaunchedEffect(Unit) {
SnackBarUtils.init(snackbarHostState)
}
Scaffold(
modifier = Modifier.padding(paddingValues),
bottomBar = {
if (showBottomBar.value) {
BottomBar(navController = navController)
}
},
snackbarHost = {
SnackbarHost(hostState = snackbarHostState)
},
) {
dialogMessage?.let { message ->
LaunchedEffect(message) {
SnackBarUtils.showSnackBar(message = message)
viewModel.updateMessage(null)
}
}
}
}
참고 링크
https://developer.android.com/reference/com/google/android/material/snackbar/Snackbar
Snackbar | Android Developers
Stay organized with collections Save and categorize content based on your preferences. Snackbar public class Snackbar extends BaseTransientBottomBar Snackbars provide lightweight feedback about an operation. They show a brief message at the bottom of the s
developer.android.com
'질문 정리' 카테고리의 다른 글
안드로이드 PDF 파일 저장하기 구현 (1) | 2024.06.28 |
---|---|
컴포즈 블루투스 권한 없을 때 처리 (0) | 2024.06.27 |
Intent 정리: 문의하기 클릭 시 이메일 앱으로만 연결 (0) | 2024.06.19 |
Kotlin에서 리스트와 맵의 변환: 순서가 유지될까? (0) | 2024.06.18 |
안드로이드 알림 구현(헤드업 알림 포함) (0) | 2024.06.17 |
- Total
- Today
- Yesterday
- 데이터무결성체크
- 디버그 빌드
- 백준
- hilt
- Android
- compose
- missingbinding
- retrofit
- java
- newtoken
- this
- @provides
- 싸피
- 상단알람
- api 경로
- 블루투스개념정리
- Kotlin
- connecttimeout
- okhttp
- SWEA
- 안드로이드
- 릴리즈 빌드
- 빌드 타입
- SSAFY
- 알고리즘
- build type
- release build
- 모바일트랙
- tomap
- 코틀린
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |