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()
            }

        }
    }

🟡

.

🟩

🟡

.

🟩

🟡

.

🟩

🟡

.

🟩

🟡

.

🟩

🟡

.

🟩

🟡

.

🟩

🟡

.

🟩

🟡

.