Dialogues de fichiers natifs
FileKit — pickers natifs open / save / folder qui rendent bien sur chaque OS.
Compose Multiplatform ne livre pas de dialogues de fichiers. Nucleus délibérément non plus — la communauté a déjà livré la bonne réponse.
TL;DR
- Utilise FileKit par @vinceglb.
- Pickers natifs :
NSOpenPanel/NSSavePanelsur macOS,IFileOpenDialog/IFileSaveDialogsur Windows, xdg-desktop-portal sur Linux. - Nucleus livre des métadonnées de reachability GraalVM préchargées pour FileKit — Native Image marche direct.
Installation
dependencies {
implementation("io.github.vinceglb:filekit-compose:<version>")
}Démarrage rapide
val launcher = rememberFilePickerLauncher(
type = PickerType.File(extensions = listOf("png", "jpg")),
title = "Choisis une image",
) { file ->
// file: PlatformFile?
}
Button(onClick = { launcher.launch() }) {
Text("Choisir une image")
}Comment ça marche
FileKit pilote le vrai dialogue natif sur chaque OS :
- macOS —
NSOpenPanel/NSSavePanelvia Cocoa. - Windows —
IFileOpenDialog/IFileSaveDialogvia JNA COM. - Linux —
FileChooserde xdg-desktop-portal, avec fallback GTK / zenity.
Filtres de types de fichiers avec descriptions, modes single-file / multi-file / folder / save, API Compose-friendly (rememberFilePickerLauncher) et une abstraction cross-platform PlatformFile avec helpers read/write/metadata.
GraalVM native image — zéro config
Le plugin Gradle Nucleus livre des métadonnées de reachability préchargées pour FileKit dans son bundle de métadonnées de bibliothèques. Les métadonnées sont incluses conditionnellement uniquement quand io.github.vinceglb.filekit est sur le classpath runtime, et couvrent :
- Types Foundation proxy + callbacks macOS (
FoundationLibrary,ID, callbacks runnable). - Bindings COM JNA Windows (
FileDialog,FileOpenDialog,FileSaveDialog,ShellItem,Shell32,COMDLG_FILTERSPEC,PROPERTYKEY, …). - Proxy D-Bus xdg-desktop-portal (
FileChooserDbusInterface) pour Linux.
Si on package avec le plugin Nucleus et cibles native-image, FileKit marche out of the box — pas de reachability-metadata.json manuel, pas de tracing-agent.
Pourquoi Nucleus ne livre pas ça
FileKit couvre déjà toute la surface nativement, est maintenu activement, et s'intègre proprement avec l'état Compose. Le réimplémenter dans Nucleus dupliquerait l'effort sans bénéfice.
Trente ans de bibliothèques matures, natives à le app
IA, search, data, documents, imaging, réseau — un demi-million de bibliothèques JVM, toutes à un `implementation`.
Correcteur orthographique natif
PlatformSpellCheckerKt — un wrapper Kotlin Multiplatform sur le moteur de correction natif de chaque OS.