commonMain.coil3.compose.SingletonAsyncImagePainter.kt Maven / Gradle / Ivy
package coil3.compose
import androidx.compose.foundation.Image
import androidx.compose.runtime.Composable
import androidx.compose.runtime.NonRestartableComposable
import androidx.compose.ui.graphics.FilterQuality
import androidx.compose.ui.graphics.drawscope.DrawScope.Companion.DefaultFilterQuality
import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.layout.ContentScale
import coil3.SingletonImageLoader
import coil3.compose.AsyncImagePainter.Companion.DefaultTransform
import coil3.compose.AsyncImagePainter.State
import coil3.request.ImageRequest
/**
* Return an [AsyncImagePainter] that executes an [ImageRequest] asynchronously and renders the result.
*
* ** This is a lower-level API than [AsyncImage] and may not work as expected in all situations. **
*
* @param model Either an [ImageRequest] or the [ImageRequest.data] value.
* @param placeholder A [Painter] that is displayed while the image is loading.
* @param error A [Painter] that is displayed when the image request is unsuccessful.
* @param fallback A [Painter] that is displayed when the request's [ImageRequest.data] is null.
* @param onLoading Called when the image request begins loading.
* @param onSuccess Called when the image request completes successfully.
* @param onError Called when the image request completes unsuccessfully.
* @param contentScale Used to determine the aspect ratio scaling to be used if the canvas bounds
* are a different size from the intrinsic size of the image loaded by [model]. This should be set
* to the same value that's passed to [Image].
* @param filterQuality Sampling algorithm applied to a bitmap when it is scaled and drawn into the
* destination.
* @param modelEqualityDelegate Determines the equality of [model]. This controls whether this
* composable is redrawn and a new image request is launched when the outer composable recomposes.
*/
@Composable
@NonRestartableComposable
fun rememberAsyncImagePainter(
model: Any?,
placeholder: Painter? = null,
error: Painter? = null,
fallback: Painter? = error,
onLoading: ((State.Loading) -> Unit)? = null,
onSuccess: ((State.Success) -> Unit)? = null,
onError: ((State.Error) -> Unit)? = null,
contentScale: ContentScale = ContentScale.Fit,
filterQuality: FilterQuality = DefaultFilterQuality,
modelEqualityDelegate: EqualityDelegate = DefaultModelEqualityDelegate,
) = rememberAsyncImagePainter(
model = model,
imageLoader = SingletonImageLoader.get(LocalPlatformContext.current),
placeholder = placeholder,
error = error,
fallback = fallback,
onLoading = onLoading,
onSuccess = onSuccess,
onError = onError,
contentScale = contentScale,
filterQuality = filterQuality,
modelEqualityDelegate = modelEqualityDelegate,
)
/**
* Return an [AsyncImagePainter] that executes an [ImageRequest] asynchronously and renders the result.
*
* ** This is a lower-level API than [AsyncImage] and may not work as expected in all situations. **
*
* @param model Either an [ImageRequest] or the [ImageRequest.data] value.
* @param transform A callback to transform a new [State] before it's applied to the
* [AsyncImagePainter]. Typically this is used to overwrite the state's [Painter].
* @param onState Called when the state of this painter changes.
* @param contentScale Used to determine the aspect ratio scaling to be used if the canvas bounds
* are a different size from the intrinsic size of the image loaded by [model]. This should be set
* to the same value that's passed to [Image].
* @param filterQuality Sampling algorithm applied to a bitmap when it is scaled and drawn into the
* destination.
* @param modelEqualityDelegate Determines the equality of [model]. This controls whether this
* composable is redrawn and a new image request is launched when the outer composable recomposes.
*/
@Composable
@NonRestartableComposable
fun rememberAsyncImagePainter(
model: Any?,
transform: (State) -> State = DefaultTransform,
onState: ((State) -> Unit)? = null,
contentScale: ContentScale = ContentScale.Fit,
filterQuality: FilterQuality = DefaultFilterQuality,
modelEqualityDelegate: EqualityDelegate = DefaultModelEqualityDelegate,
) = rememberAsyncImagePainter(
model = model,
imageLoader = SingletonImageLoader.get(LocalPlatformContext.current),
transform = transform,
onState = onState,
contentScale = contentScale,
filterQuality = filterQuality,
modelEqualityDelegate = modelEqualityDelegate,
)
© 2015 - 2024 Weber Informatics LLC | Privacy Policy