Added a custom factory
diff --git a/lottie-compose/src/main/java/com/airbnb/lottie/compose/LottieCompositionSpec.kt b/lottie-compose/src/main/java/com/airbnb/lottie/compose/LottieCompositionSpec.kt index 9444a5b..ba38a5b 100644 --- a/lottie-compose/src/main/java/com/airbnb/lottie/compose/LottieCompositionSpec.kt +++ b/lottie-compose/src/main/java/com/airbnb/lottie/compose/LottieCompositionSpec.kt
@@ -1,5 +1,7 @@ package com.airbnb.lottie.compose +import com.airbnb.lottie.LottieComposition + /** * Specification for a [com.airbnb.lottie.LottieComposition]. Each subclass represents a different source. * A [com.airbnb.lottie.LottieComposition] is the stateless parsed version of a Lottie json file and is @@ -41,4 +43,9 @@ * Load an animation from its json string. */ inline class JsonString(val jsonString: String) : LottieCompositionSpec + + /** + * Load an animation from a custom factory. This will be called on an IO thread pool. + */ + inline class Custom(val factory: () -> LottieComposition) : LottieCompositionSpec }
diff --git a/lottie-compose/src/main/java/com/airbnb/lottie/compose/rememberLottieComposition.kt b/lottie-compose/src/main/java/com/airbnb/lottie/compose/rememberLottieComposition.kt index 9b9bed5..f4f4187 100644 --- a/lottie-compose/src/main/java/com/airbnb/lottie/compose/rememberLottieComposition.kt +++ b/lottie-compose/src/main/java/com/airbnb/lottie/compose/rememberLottieComposition.kt
@@ -163,6 +163,13 @@ val jsonStringCacheKey = if (cacheKey == DefaultCacheKey) spec.jsonString.hashCode().toString() else cacheKey LottieCompositionFactory.fromJsonStringSync(spec.jsonString, jsonStringCacheKey) } + is LottieCompositionSpec.Custom -> { + try { + LottieResult(spec.factory()) + } catch (e: Throwable) { + LottieResult<LottieComposition>(e) + } + } } }