Home > Software engineering >  How to get flow output from non flow fuction
How to get flow output from non flow fuction

Time:10-12

I want flow output (return type Flow<T>) from a non-flow function (return typeT).

fun getTotalFiles(): Int 
// Say, This is a library function it'll return the number of files (Int) in that folder at that specific moment.

//And,
fun getAllFiles(): List<File> 
// Say, This is a library function it'll return all the files (List<File>) in that folder.

The files in that folder can and will change in the future.

Now, I want to constantly observe the output, so how do I implement it?

fun getFlowOfTotalFiles(): Flow<Int> =
// A wrapper function that converts the library function return type to an observable flow, Flow<Int>

//And,
fun getFlowOfAllFiles(): Flow<List<File>> =
// A wrapper function that converts the library function return type to an observable flow, Flow<List<File>>

CodePudding user response:

I believe you need an infinite loop inside a flow builder, something like the following:

fun getFlowOfTotalFiles(): Flow<Int> = flow {
    while (true) {
        emit(getTotalFiles())
        // delays for 5 sec before next request and 
        // terminates the infinite cycle when a coroutine, 
        // that collects this Flow, is canceled
        delay(5000) 
    }
}

fun getAllFilesFlow(): Flow<List<File>> = flow {
    while (true) {
        emit(getAllFiles())
        delay(5000)
    }
}
  • Related