If you've ever wanted something that's in between ...
# compose
d
If you've ever wanted something that's in between
remember
and
DisposableEffect
, here you go!
Copy code
private class Wrapper<T : Closeable>(val obj: T) : RememberObserver {
    override fun onAbandoned() { obj.close() }
    override fun onForgotten() { obj.close() }
    override fun onRemembered() {}
}

@Composable
fun <T : Closeable> rememberCloseable(calculation: () -> T): T {
    val wrapper = remember { Wrapper(calculation()) }
    return wrapper.obj
}

@Composable
fun demo() { // A little contrived but I use this to close my view models.
    val log = rememberCloseable { File("./log.txt").outputStream().writer() }
    log.write("I just recomposed")
}
❤️ 1
👍 1