# FilePicker

> Reservado — esqueleto vazio na API 2026 (não produz resultado).

Source: https://crossfly.dev/pt/docs/ui/widgets/filepicker — CrossFly documentation. Full docs as one file: https://crossfly.dev/llms-full.txt

# FilePicker

> 🔴 · **Pacote:** `dev.crossfly.ui.picker` · **Estende:** `Picker` · **Status: reservado (indisponível)**

`FilePicker` está **reservado** na API 2026: no código atual é apenas um esqueleto vazio —

```java
public class FilePicker extends Picker {}
```

— sem construtores, campos, layout ou `getAnswer()` próprio. Ele **herda o `getAnswer()` da base** ([`Picker`](/docs/ui/widgets/picker)), que devolve `null`; portanto **não produz resultado** e não deve ser usado.

## Exemplo completo (copiar, colar e rodar)
`FilePicker` está **reservado** e não produz resultado (herda `getAnswer()` da base, que devolve `null`). O exemplo abaixo é executável e demonstra **honestamente** essa limitação: ele mostra o picker, coleta o `getAnswer()` e reporta que veio `null`. Para escolher mídia de fato, o botão ao lado usa a alternativa disponível, [`PhotoPicker`](/docs/ui/widgets/photopicker).

```java
package com.exemplo;

import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;
import dev.crossfly.ui.picker.*;

/** Tela principal executável. Aponte o launcher (classname) e rode: gradlew :lwjgl3:run */
public class MainWindow extends Window
{
   @Override
   public void onShow() throws Exception
   {
      super.onShow();
      setLayout(new VerticalLayout());

      Label saida = new Label("Resultado: —");
      add(LAY_AUTO, saida);

      // FilePicker é um esqueleto reservado: getAnswer() sempre devolve null.
      Button tentarFilePicker = new Button("Tentar FilePicker (reservado)")
         .onAction(c ->
         {
            FilePicker fp = new FilePicker();
            fp.show(answer ->
               saida.setText("FilePicker devolveu: " + answer + " (reservado, sem resultado)"));
         });
      add(LAY_AUTO, tentarFilePicker);

      // Alternativa real para capturar mídia: PhotoPicker.
      Button usarPhotoPicker = new Button("Alternativa: PhotoPicker")
         .onAction(c ->
         {
            PhotoPicker pp = new PhotoPicker(PhotoPicker.Preview.PHOTO);
            pp.show(answer ->
            {
               String caminho = (String) answer;
               if (pp.isError())
                  saida.setText("Erro de câmera: " + caminho);
               else
                  saida.setText("Foto salva em: " + caminho);
            });
         });
      add(LAY_AUTO, usarPhotoPicker);
   }
}
```

> Os trechos abaixo mostram **só o miolo** (o que vai dentro de `onShow()`). Para rodar, coloque-os no esqueleto `MainWindow` acima.

## Objetivo pretendido
Navegar o sistema de arquivos e devolver o caminho do arquivo/pasta selecionado. O comentário no fonte indica a intenção de migrar de um seletor baseado em árvore lazy a partir de um root — mas isso **ainda não foi portado**.

## O que NÃO existe (não documente como disponível)
A implementação anterior (árvore lazy com `Tree`/`TreeModel`, preview de imagem, volumes via `Dropdown`, seleção múltipla) **foi removida**, coerente com a remoção do módulo `ui/tree` na modernização. As APIs antigas — `Filter`, `initialPath`, `multipleSelection`, `mountTree`, `getTree`, etc. — **não existem mais**.

## Alternativas enquanto está reservado
- Para capturar mídia da câmera, use [`PhotoPicker`](/docs/ui/widgets/photopicker).
- Para escolher uma cor/data/hora, use os pickers específicos.
- Trate `FilePicker` como indisponível até o código ganhar corpo.

## Veja também
- Guia da área: [`ui/`](/docs/ui) · Receitas: [`cookbook/`](/docs/cookbook)
- Base do padrão: [`Picker`](/docs/ui/widgets/picker)
