Jetpack Compose Academy · レッスン

SnackbarとSnackbarHostState

Materialらしい一時メッセージを表示します。

レッスン 4/413 ステップ

「SnackbarとSnackbarHostState」はCoddyKit上の無料Jetpack Compose Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJetpack Compose Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Jetpack Compose Academyコースには全4レッスンが含まれています。

Snackbarとは

Snackbarは、たとえば「メッセージを送信しました」のような短いメッセージを画面下部から一時的に表示し、その後自動的に消えるものです。画面を操作できる状態のまま通知できます。💬

SnackbarとDialogの違い

Dialogは応答を求めますが、Snackbarは求めません。すぐに伝えたい確認にはSnackbarを使い、ユーザーが必ず選択しなければならない内容には使わないでください。

SnackbarHostStateを知る

Snackbarの表示はSnackbarHostStateによって制御します。このオブジェクトがキューを保持し、メッセージを表示する関数を提供します。

val hostState = remember { SnackbarHostState() }

rememberで保持する

同じSnackbarHostStateを再コンポジション後も維持できるよう、状態をrememberでラップします。フレームごとに新しい状態を作ると、保留中のメッセージが失われます。

snackbarHostスロット

SnackbarHostを状態にバインドしてsnackbarHostスロットに設定し、Snackbarをどこに表示するかをScaffoldに伝えます。

snackbarHost = { SnackbarHost(hostState) }

showSnackbarはSuspend関数

showSnackbar関数は、メッセージが表示されている間待機するためサスペンドします。そのため、クリック処理から直接呼び出さず、コルーチンから呼び出す必要があります。

スコープから起動する

rememberCoroutineScopeを取得し、その中でshowSnackbarを起動します。これにより、通常のonClickからsuspend呼び出しへ安全につなげられます。

scope.launch {
    hostState.showSnackbar("Saved")
}

アクションを追加する

actionLabelを渡して、Undoなどのボタンを追加します。呼び出しは、ユーザーがそのアクションをタップしたかどうかを示す結果を返します。

val result = hostState.showSnackbar(
    "Deleted", actionLabel = "Undo"
)

結果に応じて処理する

返されたSnackbarResultを確認します。ActionPerformedと等しければ元に戻す処理を実行し、それ以外の場合はSnackbarが閉じただけです。

if (result == SnackbarResult.ActionPerformed) {
    restoreItem()
}

表示時間を制御する

SnackbarDurationで表示時間を設定します。指定できるのはShort、Long、Indefiniteです。Indefiniteは、ユーザーの操作が本当に必要な場合だけ使います。

1つのホストで複数のメッセージ

1つのSnackbarHostStateがメッセージをキューに入れ、1つずつ表示します。そのため、複数作成するのではなく、Scaffoldごとに1つのホストを共有します。

クイックチェック

なぜshowSnackbarをコルーチンスコープ内で起動する必要があるのでしょうか?

まとめ

SnackbarHostStateをrememberで保持し、ScaffoldのsnackbarHostに接続してから、スコープ内でshowSnackbarを起動します。これで完成度の高いアプリの外枠を仕上げられます。🎉

無料で開始

AI チューターと学ぶ Kotlin — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
30
レッスン
120

よくある質問

「SnackbarとSnackbarHostState」レッスンは無料ですか?

はい。「SnackbarとSnackbarHostState」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Jetpack Compose Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Jetpack Compose Academyコースには全4レッスンが含まれています。

「SnackbarとSnackbarHostState」で何を学びますか?

Materialらしい一時メッセージを表示します。 ブラウザで直接実行するハンズオンコードでJetpack Compose Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Jetpack Compose Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのJetpack Compose Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「SnackbarとSnackbarHostState」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このJetpack Compose Academyレッスンでコードを書いて実行できますか?

はい。すべてのJetpack Compose Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Scaffold:画面の骨組み
  2. TopAppBarとアクションアイコン
  3. 下部バーとフローティングアクションボタン
  4. SnackbarとSnackbarHostState
← Jetpack Compose Academyに戻る