Dominaezzz
06/24/2021, 6:31 PMremember
and DisposableEffect
, here you go!
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")
}