0Pricing
Jetpack Compose Academy · Lezione

Eventi una tantum con i Channel

Distribuisca in sicurezza eventi di navigazione e toast.

Eventi una tantum con i Channel è una lezione Jetpack Compose Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Jetpack Compose Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Jetpack Compose Academy include 4 lezioni in totale.

Lo stato non è un evento

Alcune azioni dovrebbero verificarsi una sola volta, come la navigazione o la visualizzazione di un toast. Modellarle come state fa sì che vengano ripetute a ogni rotazione.

Il problema della ripetizione

Se memorizza un messaggio per uno snackbar in StateFlow, una modifica della configurazione lo legge di nuovo e il messaggio viene visualizzato inaspettatamente un’altra volta.

Ecco Channel

Un Channel è un canale hot in cui ogni valore viene consegnato a un solo ricevitore e poi consumato, senza mai essere ripetuto.

private val _events = Channel<UiEvent>()

Send contro Emit

Inserisca valori in un Channel con send, una chiamata sospendibile. L’evento resta nel buffer finché qualcosa non è pronto a riceverlo.

_events.send(UiEvent.NavigateBack)

Esponga un Flow

Trasformi il channel in un flusso per l’interfaccia con receiveAsFlow, che consente a un solo collector di consumare ogni evento.

val events = _events.receiveAsFlow()

Consumato una volta, per sempre

Quando un collector preleva un evento dal Channel, l’evento scompare. Una rotazione successiva non può leggerlo di nuovo, evitando così ripetizioni accidentali.

Modelli gli eventi come tipo

Definisca un tipo sealed UiEvent, così ogni azione singola, come la navigazione o i messaggi, è esplicita e gestita in modo esaustivo.

sealed interface UiEvent {
    data class ShowToast(val msg: String) : UiEvent
}

Raccolga gli eventi in Compose

Raccolga il flusso degli eventi all’interno di un LaunchedEffect, così viene collegato al ciclo di vita della schermata e ogni gestore viene eseguito una sola volta per evento.

LaunchedEffect(Unit) {
    events.collect { handle(it) }
}

Scelga la policy del buffer

Un Channel predefinito sospende il mittente se nessuno riceve. Può assegnargli un buffer, così le operazioni di invio non bloccano mai la logica.

Channel<UiEvent>(Channel.BUFFERED)

SharedFlow è un’alternativa

Anche uno SharedFlow con replay zero può trasportare eventi, ma un Channel garantisce la consegna singola anche quando non è presente alcun collector attivo.

Tenga separati stato ed eventi

Il modello più chiaro è il seguente: uno StateFlow per lo stato della schermata e un Channel per gli eventi da attivare una sola volta. Non verranno più confusi.

Verifica rapida

Decida cosa è adatto a un’azione singola.

Riepilogo: eventi singoli

Fantastico! Un Channel consegna una sola volta eventi come la navigazione e i toast, tenendoli separati dallo stato della schermata, che può essere ripetuto. 🎯

Domande Frequenti

La lezione «Eventi una tantum con i Channel» è gratuita?

Sì — il testo completo di «Eventi una tantum con i Channel» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Jetpack Compose Academy, passa a CoddyKit PRO. Il corso Jetpack Compose Academy include 4 lezioni in totale.

Cosa imparerò in «Eventi una tantum con i Channel»?

Distribuisca in sicurezza eventi di navigazione e toast. Eserciti Jetpack Compose Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Jetpack Compose Academy?

Non è richiesta alcuna esperienza precedente. Jetpack Compose Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Eventi una tantum con i Channel»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Jetpack Compose Academy?

Sì. Ogni lezione Jetpack Compose Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. StateFlow e SharedFlow a confronto
  2. Mappare e combinare i Flow
  3. stateIn e WhileSubscribed
  4. Eventi una tantum con i Channel
← Torna a Jetpack Compose Academy