imagepicker is a Kotlin Multiplatform image picker/camera library for GearUI apps.
implementation("com.gearui:imagepicker:<version>")imagepicker: image picker core librarysample: GearUI sample app (Android + iOS)gearui-kit-local: local linkage to GearUI kit for sample development
import com.gearui.kit.imagepicker.presentation.api.ImagePicker
import com.gearui.kit.imagepicker.presentation.api.ImagePickerSimpleConfig
import com.gearui.kit.imagepicker.presentation.api.ImagePickerSource
import com.gearui.kit.imagepicker.presentation.api.rememberImagePickerState
val pickerState = rememberImagePickerState()
Button(onClick = { pickerState.show() }) { Text("Pick image") }
ImagePicker(
state = pickerState,
onResult = { result -> /* handle Single/Multiple */ },
onError = { e -> /* handle error */ },
config = ImagePickerSimpleConfig(
source = ImagePickerSource.CameraOrGallery,
multiple = false,
cropEnabled = true
)
)Only state-driven APIs are supported.
Single-image launcher:
import com.gearui.kit.imagepicker.presentation.api.ImagePickerSource
import com.gearui.kit.imagepicker.presentation.api.rememberSingleImagePickerLauncher
val launchSinglePicker = rememberSingleImagePickerLauncher(
source = ImagePickerSource.GalleryOnly,
onPicked = { asset -> /* upload */ },
onError = { e -> /* handle */ }
)
Button(onClick = launchSinglePicker) { Text("Pick") }import com.gearui.kit.imagepicker.domain.extensions.readBytes
import com.gearui.kit.imagepicker.domain.models.BytesPolicy
val original = asset.readBytes(BytesPolicy.ORIGINAL)
val optimized = asset.readBytes(BytesPolicy.OPTIMIZED)readBytes()is async and policy-driven.loadBytes()remains as a compatibility wrapper (sync, internally maps to optimized policy).
| Platform | Gallery | Camera | Crop |
|---|---|---|---|
| Android | ✅ | ✅ | ✅ |
| iOS (real device) | ✅ | ✅ | ✅ |
| iOS Simulator | ✅ | ✅ | |
| JVM Desktop | ✅ (file picker) | ❌ | ❌ |
| JS (Browser) | ✅ | ✅ (browser permission/device support) | ✅ |
| WASM | ❌ | ❌ | ❌ |
Unsupported capability returns UnsupportedPlatformException with ImagePickerErrorCode:
PLATFORM_NOT_SUPPORTEDCAMERA_NOT_SUPPORTEDGALLERY_NOT_SUPPORTEDCROP_NOT_SUPPORTED
./gradlew :imagepicker:build
./gradlew :sample:assembleDebugMIT (follow upstream project policy in LICENSE).