Flow Kotlin : guide complet avec exemples pratiques

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction à Flow : qu'est-ce que c'est et pourquoi l'utiliser ?

Flow est une bibliothèque pour travailler avec des flux de données réactifs (reactive streams) dans le langage de programmation Kotlin. Elle fait partie de l'écosystème Kotlin Coroutines et offre un moyen puissant, type-safe et asynchrone de traiter des séquences de données générées au fil du temps.

Contrairement aux collections classiques (List, Set) qui stockent tous les éléments en mémoire immédiatement, Flow est un flux froid (cold stream). Cela signifie que les données ne commencent à être générées que lorsqu'un abonné (collector) se manifeste. Flow est idéal pour :

  • Le traitement asynchrone des données : Récupération de données depuis le réseau, une base de données ou le système de fichiers sans bloquer le thread principal.
  • La gestion d'événements : Clics, mouvements de souris, mises à jour de l'interface utilisateur.
  • La programmation réactive : Création de chaînes de transformations de données (map, filter, flatMap) avec gestion automatique des erreurs et annulation.
  • L'intégration avec les coroutines : Flow est entièrement compatible avec Kotlin Coroutines, ce qui permet de le combiner facilement avec d'autres opérations asynchrones.

Pourquoi utiliser Flow plutôt que les anciennes approches (comme RxJava ou les callbacks) ?

  • Simplicité et concision : L'API de Flow est minimaliste et intuitive pour les développeurs Kotlin.
  • Sécurité : Type-safe au niveau du compilateur.
  • Intégration avec les coroutines : Il exploite tous les avantages de la concurrence structurée (structured concurrency).
  • Performance : Léger et efficace, il ne crée pas d'objets superflus.

Installation de Flow

Flow fait partie de la bibliothèque kotlinx.coroutines. Pour l'utiliser, vous devez ajouter la dépendance dans votre fichier build.gradle.kts (pour Gradle) ou pom.xml (pour Maven).

Gradle (Kotlin DSL)

dependencies {
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1")
    // Pour utiliser Flow sur Android (avec support Lifecycle)
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1")
}

Gradle (Groovy)

dependencies {
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1'
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1'
}

Maven


    org.jetbrains.kotlinx
    kotlinx-coroutines-core
    1.8.1

Important : Assurez-vous que la version de Kotlin et celle de kotlinx-coroutines sont compatibles. La version la plus récente est disponible sur GitHub.

Démarrage rapide : votre premier Flow

Créons un Flow simple qui émet trois nombres avec un délai, puis abonnons-nous à lui.

import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*

fun simpleFlow(): Flow<Int> = flow {
    println("Flow démarré")
    for (i in 1..3) {
        delay(100) // Simulation d'un travail asynchrone
        emit(i)    // Émission de la valeur
    }
}

fun main() = runBlocking {
    println("Thread principal : ${Thread.currentThread().name}")

    // Abonnement au Flow (collecte des données)
    simpleFlow().collect { value ->
        println("Reçu : $value")
    }

    println("Flow terminé")
}

Sortie :

Thread principal : main
Flow démarré
Reçu : 1
Reçu : 2
Reçu : 3
Flow terminé

Explication :

  • flow { ... } — crée un flux froid

Recommendations