Dialogues de fichiers natifs
Utilisez FileKit pour les dialogues natifs open, save et folder, avec les métadonnées GraalVM fournies par le plugin Nucleus.
Compose Multiplatform n'inclut pas de dialogues de fichiers, et Nucleus n'en ajoute pas non plus. Utilisez FileKit pour les dialogues natifs d'ouverture, d'enregistrement et de sélection de dossier. Le plugin Gradle Nucleus fournit les métadonnées de reachability GraalVM pour FileKit, de sorte que les dialogues fonctionnent sous native-image sans configuration supplémentaire.
Ajouter la dépendance
dependencies {
implementation("io.github.vinceglb:filekit-compose:<version>")
}Afficher un sélecteur de fichier
Créez un launcher avec rememberFilePickerLauncher et appelez launch() depuis un gestionnaire de clic :
val launcher = rememberFilePickerLauncher(
type = PickerType.File(extensions = listOf("png", "jpg")),
title = "Choisissez une image",
) { file ->
// file: PlatformFile?
}
Button(onClick = { launcher.launch() }) {
Text("Choisir une image")
}Le callback reçoit un PlatformFile?, qui vaut null lorsque l'utilisateur annule. PlatformFile est le handle de fichier cross-plateforme de FileKit, avec des helpers de lecture, d'écriture et de métadonnées.
Fonctionnement
FileKit appelle le dialogue natif sur chaque système d'exploitation :
- macOS —
NSOpenPaneletNSSavePanelvia Cocoa. - Windows —
IFileOpenDialogetIFileSaveDialogvia JNA COM. - Linux — le
FileChooserde xdg-desktop-portal, avec repli sur GTK et zenity.
Il prend en charge les filtres de type avec descriptions ; les modes single-file, multi-file, folder et save ; et une API Compose (rememberFilePickerLauncher) construite autour du handle PlatformFile.
Parenter un dialogue à la fenêtre Tao
Depuis 2.3.1, Tao expose les identités plateforme dont FileKit et les dialogues natifs ont besoin pour attacher les sélecteurs à votre fenêtre plutôt que de les laisser flotter indépendamment :
| Plateforme | API | Valeur |
|---|---|---|
| Linux X11 / XWayland | TaoWindow.x11PortalParent ou xdgPortalParent() | x11:<xid-hex-minuscule> |
| Linux Wayland | TaoWindow.xdgPortalParent() / exportXdgForeignHandle() | wayland:<token xdg_foreign> |
| macOS | TaoWindow.nsWindowHandle | le NSWindow* propriétaire (pas le NSView* Compose) |
| Windows | TaoWindow.nativeHandle | HWND |
// Préférez le helper agnostique du backend sous Linux :
val parent = window.xdgPortalParent()
// X11 → XdgPortalParent.X11(xid) ; Wayland → XdgPortalParent.Wayland(export)
// Gardez un export Wayland ouvert jusqu'à la fin du dialogue portal, puis fermez-le.
(parent as? AutoCloseable)?.close()
// Parent de sheet macOS (une fois que FileKit accepte un parent NSWindow) :
// window.nsWindowHandle?.let { FileKitDialogParent.macos(it) }Sous Wayland, exportXdgForeignHandle() / XdgPortalParent.Wayland encapsule un
XdgForeignExport qui doit rester ouvert tant que le dialogue portal emprunte son handle.
Un wl_surface* brut ou le NSView* Compose n'est pas un parent portal / sheet valide.
Exécuter sous GraalVM native image
Le plugin Gradle Nucleus fournit les métadonnées de reachability pour FileKit dans son bundle de métadonnées de bibliothèques. Les métadonnées ne sont incluses que lorsque io.github.vinceglb.filekit est présent sur le classpath d'exécution, et couvrent :
- Les types de proxy et de callback Foundation sur macOS (
FoundationLibrary,ID, callbacks runnable). - Les bindings COM JNA Windows (
FileDialog,FileOpenDialog,FileSaveDialog,ShellItem,Shell32,COMDLG_FILTERSPEC,PROPERTYKEY). - Le proxy D-Bus xdg-desktop-portal pour Linux (
FileChooserDbusInterface).
Lorsque vous construisez avec le plugin Nucleus et que vous ciblez native-image, les dialogues fonctionnent sans reachability-metadata.json manuel ni passage du tracing-agent.
Notes
FileKit encapsule déjà chaque dialogue natif et s'intègre à l'état Compose, donc Nucleus en dépend plutôt que de réimplémenter la même surface.
Et ensuite
- Métadonnées GraalVM automatiques — comment le plugin fournit les métadonnées de reachability pour les bibliothèques connues.
- Vérification orthographique native — une autre bibliothèque de l'écosystème adossée au natif.
- Vue d'ensemble de l'écosystème — les bibliothèques qui s'associent à Nucleus.
Trente ans de bibliothèques matures, natives à votre application
Les applications Nucleus tournent sur la JVM, donc chaque bibliothèque de Maven Central s'ajoute avec une dépendance Gradle ; cette page regroupe les choix desktop courants par tâche.
Correcteur orthographique natif
Vérifiez l'orthographe dans une application Kotlin avec PlatformSpellCheckerKt, un wrapper sur le moteur de correction natif de chaque système d'exploitation.