Pega Dart a la izquierda y pulsa "Convertir" — lo transformamos en XMLPega código Dart

Qué hace esta herramienta

Si alguna vez has tenido que modelar un payload XML que encaje con un modelo Dart —para una app Flutter que habla con un endpoint SOAP heredado, una config XML al estilo Android o un lector de feeds RSS—, sabes lo pesado que resulta el boilerplate. Pega aquí el Dart y la herramienta devuelve XML bien formado en una sola pasada. Una clase con campos final, un fichero de modelo entero o una instancia ya rellena — el resultado es el mismo: un documento XML completo con cada campo preservado.

No es una sustitución ingenua de cadenas. El conversor lee Dart real: los parámetros nombrados required se convierten en elementos en su orden de declaración, los campos final se comportan igual que los no final, los valores DateTime se renderizan como cadenas ISO-8601, Duration usa formato ISO-8601 de duración, num, int y double conservan su forma numérica, null (de tipos nullable como String?) se convierte en un elemento vacío en lugar de descartarse, y List<T> se convierte en un elemento contenedor con un hijo por elemento — coincidiendo con lo que emitiría el XmlBuilder del paquete xml.

La estructura de clases se preserva. Cada clase de nivel superior se convierte en un elemento raíz con el nombre de la clase, cada campo pasa a ser un elemento hijo, las clases anidadas se expanden inline, y Map<K, V> se transforma en pares <entry><key/><value/></entry>. Las anotaciones como @JsonKey(name: "x") de json_annotation se respetan como pistas para renombrar elementos. Pega un modelo de Flutter, una clase de datos estilo freezed o un POJO Dart sencillo — el XML resultante se parece a lo que produciría una llamada a XmlBuilder escrita a mano, pero sin la ceremonia.

Cómo usarla

Tres pasos. El mismo flujo tanto si pegas un único modelo como una carpeta <code>lib/models</code> entera.

1

Pega tu Dart (o prueba el ejemplo)

Suelta tu Dart tal cual en el editor de la izquierda. Una clase normal, una clase de datos con constructor nombrado, varias clases o una instancia rellena — todo vale. Pulsa Cargar ejemplo para ver primero un caso realista de Order.

No hace falta eliminar imports, quitar directivas part ni borrar anotaciones. Deja el código tal y como se ve en tu IDE. Solo pega.

2

Pulsa Convertir

Haz clic en el botón verde Convertir. La herramienta lee el Dart, conserva cada clase y campo, y construye el XML en una sola pasada. Aparece un pequeño indicador mientras trabaja.

3

Copia el XML

El panel derecho se llena con XML indentado y bien formado que cualquier parser estándar aceptará. Pásalo a una petición SOAP, a un fichero de assets de Flutter, a una config estilo Android o a un fixture de pruebas.

Cuándo te viene realmente bien

Apps Flutter hablando con servicios SOAP

Tu app Flutter tiene que llamar a un endpoint SOAP heredado y el cuerpo de la petición debe casar con un modelo Dart. Pega el modelo, copia el XML y mándalo a <code>http.post</code> o al paquete <a href="https://pub.dev/packages/xml" target="_blank" rel="noopener">xml</a>.

Generadores de feeds RSS y Atom

¿Montas una app de podcasts o noticias que publica RSS? Pega el modelo del episodio, obtén la forma XML que necesitas y envuélvela después con el sobre del feed — sin contar a mano los hijos <code>&lt;item&gt;</code>.

Configs XML nativas de Android/iOS

¿Necesitas producir un XML de preferencias al estilo Android o una estructura tipo plist de iOS a partir de un modelo Dart usado en platform channels? Pega la clase y obtén una plantilla lista para retocar.

Fixtures de tests para flutter_test

Convierte un modelo rellenado en un fixture XML para <code>flutter_test</code>, tests golden de widgets o respuestas HTTP mockeadas — más rápido que escribir cadenas de fixture a mano.

Preguntas habituales

¿Puedo pegar varias clases a la vez?

Sí — pega un models.dart entero o una carpeta de modelos completa. Cada clase de nivel superior sale con las clases anidadas expandidas y los campos de las clases padre integrados. Los mixins se tratan como aportando sus campos. No se descarta nada en silencio.

¿Funciona con clases de freezed o json_serializable?

Sí. Las clases inmutables al estilo freezed y los modelos anotados con json_serializable se tratan como clases Dart normales — los campos pasan, y @JsonKey(name: "x") se respeta como pista para renombrar elementos. No hace falta ejecutar build_runner ni pegar el .g.dart generado.

¿Cómo se manejan DateTime, Duration, null y num?

DateTime se renderiza como cadena ISO-8601 (2026-04-21T10:15:00.000Z). Duration se renderiza como duración ISO-8601 (PT2H30M) o con fallback HH:mm:ss. Los tipos nullable con valor null se convierten en elementos vacíos (<field/>) en lugar de omitirse, para que la forma del XML se mantenga consistente. num, int y double se serializan todos como texto decimal plano.

¿Y con List, Map y clases anidadas?

List<T> pasa a ser un elemento contenedor con un hijo por elemento, nombrado según el tipo — una List<OrderItem> items se convierte en <items><OrderItem/><OrderItem/></items>. Map<K, V> se convierte en pares <entry><key/><value/></entry>. Las clases anidadas se expanden inline, igual que el XmlBuilder del paquete xml produce elementos anidados.

¿Se guarda mi código?

Tu Dart se envía al backend para la conversión y no se persiste — no registramos el payload. Como siempre con herramientas online, si el código contiene literales realmente sensibles (API keys, tokens), límpialos o sustitúyelos antes de pegar.

¿Y si la clase usa campos dynamic u Object?

Los campos tipados como dynamic u Object? se serializan como texto basado en el literal asignado, ya que la forma real solo se conoce en tiempo de ejecución. Si quieres una salida XML más fuerte, acota el tipo (String, int, una clase concreta) y el conversor captará la estructura automáticamente.

Otras herramientas que te pueden interesar

Dart a XML es solo una pieza. Estas encajan bien con ella: