- 
                Notifications
    You must be signed in to change notification settings 
- Fork 24
Flow Context
        Devrath edited this page Jan 19, 2024 
        ·
        2 revisions
      
    
- Say you have a flow that is generating certain values and if you want to modify the context within the scope as below
- It would result in an error java.lang.IllegalStateException: Flow invariant is violated
Code(That generates error)
    private fun generateIntegers() = flow {
        withContext(Dispatchers.Default){
            var currentValue = 0
            repeat(15){
                // Increment value
                currentValue ++
                // keep a delay
                delay(1000)
                // Emit a value
                println("Value on emission: $currentValue")
                emit(currentValue)
            }
        }
    }
    fun flowContextDemo() = viewModelScope.launch {
        generateIntegers().collect{
            println("Value on received: $it")
        }
    }Code(Solution)
    private fun generateIntegers() = flow {
        var currentValue = 0
        repeat(15){
            // Increment value
            currentValue ++
            // keep a delay
            delay(1000)
            // Emit a value
            println("Value on emission: $currentValue")
            emit(currentValue)
        }
    }.flowOn(Dispatchers.IO)
    fun flowContextDemo() = viewModelScope.launch {
        generateIntegers().collect{
            println("Value on received: $it")
        }
    }