Saltar al contenido

Arrastrar hacia fuera

Lo contrario del nivel 40.5: sacar algo de tu aplicación arrastrándolo a otra. Qué hace falta, por qué es más difícil que recibir, y cuándo compensa.

Por qué es más difícil

El tercer paso de la derecha es el problema real: si lo que el usuario arrastra corresponde a un fichero que ya existe en el disco, es sencillo. Si hay que generarlo —exportar, convertir, renderizar— hay que decidir si se genera al empezar el arrastre, lo que puede tardar, o si se ofrece de otra forma.

Qué ofrecer

Lo mismo del nivel 52.2, y aquí es todavía más importante porque el destino es desconocido:

  • Un fichero, si tu elemento es o puede ser un fichero. Es lo que espera el escritorio y el explorador.
  • Texto, para editores y campos de texto.
  • Una imagen, si lo que se arrastra es visual.
  • Y tu formato propio, para arrastrar entre ventanas de tu aplicación.

El fichero es el que abre más destinos —el explorador, el correo, cualquier aplicación que acepte adjuntos— y es el que más trabajo da si hay que generarlo.

El caso del fichero que hay que crear

Tres estrategias, de peor a mejor:

La tercera es perfectamente respetable y es la que conviene tomar si la generación tarda segundos: un arrastre que tarda tres segundos en empezar se siente roto, y un botón de exportar que tarda tres segundos con una barra, no.

El gesto y la webview

Un detalle de implementación que hay que resolver: el frontend recibe el gesto y el core hace el arrastre nativo.

  • El frontend detecta que empieza un arrastre sobre un elemento y avisa al core con qué se arrastra.
  • El core inicia la operación nativa con los formatos correspondientes.
  • Y hay que desactivar el arrastre propio del navegador en esa zona, o los dos compiten y el resultado es impredecible.

La zona importa: en un campo de texto quieres el arrastre del navegador, que permite mover texto; sobre un elemento de una lista quieres el nativo. Decidirlo por zona es parte del trabajo.

Cuándo compensa

Ser honesto con el coste:

  • Sí, si tu aplicación produce cosas que el usuario va a llevar a otros sitios a menudo: ficheros, imágenes, exportaciones.
  • Sí, para reordenar dentro de tu aplicación — pero eso es arrastre interno del navegador, mucho más simple, y no necesita nada de este nivel.
  • No, si lo que se arrastraría ya se puede conseguir con dos clics y un selector de guardado.

Es una función de las que impresionan y no de las que se echan de menos, así que va después de las ocho baratas del nivel 49.4.