Snackbar - Ki-Kobayashi/Android-Wiki GitHub Wiki
🟩 方法1(「💎」箇所参照)
@OptIn(ExperimentalMaterial3Api::class)
@Composable
private fun EditTaskScreen(
uiState: EditTaskViewModel.UiState,
back: () -> Unit,
loadData: () -> Unit,
changeIdle: () -> Unit,
updateTask: (String, String) -> Unit,
showDeleteDialog: () -> Unit,
deleteTask: () -> Unit,
) {
// TODO: 「by」で書くと、.valueに直接アクセスできる(titleだけで中身の取得が可能)。
// 「=」で書くと、title.valueのように、「.value」とつけないと中身にアクセスできない
var title by rememberSaveable { mutableStateOf("") }
var description by rememberSaveable { mutableStateOf("") }
var menuExpandedState by rememberSaveable { mutableStateOf(false) }
// 💎【SnackBarの表示:設定】やり方1: 下記2行が各Composable(主に表示したい画面のComposable)に必要
val snackbarHostState = remember { SnackbarHostState() }
// 💎 LaunchedEffectを使用しない場合は、以下が必要
// val scope = rememberCoroutineScope()
val context = LocalContext.current
// TODO: 状態(uiState)によって見た目を出し分ける:when使用
Scaffold(・・・)
// 👇👇👇 状態(uiState)によって、処理する内容を出し分ける👇👇👇
LaunchedEffect(uiState) {
when (uiState) {
EditTaskViewModel.UiState.Initial -> {
loadData()
}
EditTaskViewModel.UiState.Loading -> {}
is EditTaskViewModel.UiState.LoadSuccess -> {
//LoadSuccessステートに変化したら、ステートに格納されたTaskを画面にセットし、Idle状態へ変更
title = uiState.task.title
description = uiState.task.description
changeIdle()
}
is EditTaskViewModel.UiState.LoadError -> {}
is EditTaskViewModel.UiState.InputError -> {
// 💎入力値エラーステートに変化したら、スナックバー表示 + Idle状態へ変更
// 💎TODO: 【SnackBarの表示】
snackbarHostState.showSnackbar(message = uiState.errMessage)
// 💎TODO: 【非同期内でstringリソース値を呼ぶ方法👇】 @Composable内でないため、stringResorcesは使用不可
snackbarHostState.showSnackbar(message = context.getString(R.string.xxx_xxx))
changeIdle()
}
is EditTaskViewModel.UiState.Idle -> {}
// Task更新時
EditTaskViewModel.UiState.UpdateInProgress -> {}
EditTaskViewModel.UiState.UpdateSuccess -> {
back()
}
is EditTaskViewModel.UiState.UpdateError -> {
// 更新失敗ステートに変化したら、スナックバー表示
snackbarHostState.showSnackbar(message = uiState.err.toString())
changeIdle()
}
// 削除ダイアログ表示時
is EditTaskViewModel.UiState.ConfirmDelete -> {}
// Task削除時
EditTaskViewModel.UiState.DeleteInProgress -> {}
EditTaskViewModel.UiState.DeleteSuccess -> {
back()
snackbarHostState.showSnackbar(message = context.getString(R.string.deleted_task_sccess))
}
is EditTaskViewModel.UiState.DeleteError -> {
snackbarHostState.showSnackbar(message = uiState.err.toString())
changeIdle()
}
}
}
🟡
.
🟩
🟡
.
🟩
🟡
.
🟩
🟡
.
🟩
🟡
.
🟩
🟡
.
🟩
🟡
.
🟩
🟡
.
🟩
🟡
.