Wklej Dart po lewej i kliknij "Konwertuj" — zamienimy to na XMLWklej kod Dart

Co robi to narzędzie

Jeśli kiedyś musiałeś ulepić payload XML tak, żeby pasował do modelu Dart — dla aplikacji Flutter gadającej z leciwym endpointem SOAP, konfiguracji XML w stylu Androida albo czytnika RSS — wiesz, ile to boilerplate’u. Wklej tu Dart, a narzędzie odda ci dobrze sformowany XML w jednym przebiegu. Jedna klasa z polami final, cały plik z modelami albo gotowa instancja — efekt ten sam: kompletny dokument XML z zachowanym każdym polem.

To nie jest naiwne podmienianie stringów. Konwerter czyta prawdziwy Dart: nazwane parametry required stają się elementami w kolejności deklaracji, pola final zachowują się identycznie jak nie-final, wartości DateTime renderują się jako stringi ISO-8601, Duration używa formatu czasu trwania ISO-8601, num, int i double trzymają swój kształt liczbowy, null (z typów nullable, np. String?) staje się pustym elementem zamiast znikać, a List<T> zamienia się w element kontener z jednym dzieckiem na pozycję — dokładnie to, co wypluł by XmlBuilder z pakietu xml.

Struktura klas jest zachowana. Każda klasa najwyższego poziomu zostaje elementem głównym nazwanym jak ta klasa, każde pole staje się elementem dzieckiem, klasy zagnieżdżone rozwijają się inline, a Map<K, V> zamienia się w pary <entry><key/><value/></entry>. Adnotacje typu @JsonKey(name: "x") z json_annotation są honorowane jako wskazówki do zmiany nazwy elementu. Wklej model Flutter, klasę danych w stylu freezed albo zwykły Dartowy POJO — XML wygląda tak, jakby napisał go ręcznie XmlBuilder, tylko bez całej ceremonii.

Jak tego używać

Trzy kroki. Ten sam przepływ, czy wklejasz jeden model, czy cały katalog <code>lib/models</code>.

1

Wklej swój Dart (albo spróbuj przykładu)

Rzuć swój Dart w lewy edytor tak, jak stoi. Zwykła klasa, data class z nazwanym konstruktorem, kilka klas albo wypełniona instancja — wszystko przejdzie. Kliknij Wczytaj przykład, żeby najpierw zobaczyć realistyczny przykład z Order.

Nie musisz usuwać importów, kasować dyrektyw part ani zdejmować adnotacji. Zostaw kod w takiej formie, w jakiej widzisz go w IDE. Wystarczy wkleić.

2

Wciśnij Konwertuj

Kliknij zielony przycisk Konwertuj. Narzędzie czyta Dart, zachowuje każdą klasę i pole, a XML buduje w jednym przebiegu. Podczas pracy pokazuje się krótki wskaźnik ładowania.

3

Skopiuj XML

Prawy panel wypełnia się wciętym, dobrze sformowanym XML-em, który przyjmie każdy parser zgodny ze standardem. Wrzuć go do żądania SOAP, pliku zasobów Fluttera, konfiguracji w stylu Androida albo fixture’a do testu jednostkowego.

Kiedy naprawdę się przydaje

Aplikacje Flutter gadające z usługami SOAP

Twoja aplikacja Flutter musi wywołać leciwy endpoint SOAP, a ciało żądania musi pasować do modelu Dart. Wklej model, weź XML, podaj go do <code>http.post</code> albo pakietu <a href="https://pub.dev/packages/xml" target="_blank" rel="noopener">xml</a>.

Generatory kanałów RSS i Atom

Budujesz aplikację podcastową lub z newsami, która publikuje RSS? Wklej model odcinka, weź wymagany kształt XML, a potem owiń go kopertą kanału — bez ręcznego liczenia dzieci <code>&lt;item&gt;</code>.

Natywne konfiguracje XML Android/iOS

Musisz wygenerować XML preferencji w stylu Androida albo strukturę plist-podobną dla iOS z modelu Dart używanego w platform channels? Wklej klasę i dostań szablon gotowy do dopięcia.

Fixture’y testowe dla flutter_test

Zamień wypełniony model w plik fixture XML dla <code>flutter_test</code>, testów golden widgetów albo zamockowanych odpowiedzi HTTP — to dużo szybsza ścieżka niż ręczne klepanie stringów fixture.

Częste pytania

Mogę wkleić kilka klas naraz?

Tak — wklej cały models.dart albo cały katalog z modelami. Każda klasa najwyższego poziomu wychodzi z rozwiniętymi klasami zagnieżdżonymi i wciągniętymi polami z klas rodziców. Miksy traktowane są jako wnoszące swoje pola. Nic nie znika po cichu.

Działa z klasami freezed lub json_serializable?

Tak. Niezmienne klasy w stylu freezed i modele z adnotacją json_serializable są traktowane jak zwykłe klasy Dart — pola idą dalej, @JsonKey(name: "x") honorujemy jako wskazówkę do zmiany nazwy elementu. Nie musisz wcześniej uruchamiać build_runner ani wklejać wygenerowanego pliku .g.dart.

Jak obsługiwane są DateTime, Duration, null i num?

DateTime renderuje się jako string ISO-8601 (2026-04-21T10:15:00.000Z). Duration jako czas trwania ISO-8601 (PT2H30M) albo z fallbackiem HH:mm:ss. Typy nullable z wartością null stają się pustymi elementami (<field/>) zamiast być pomijane, żeby kształt XML pozostał spójny. num, int i double są serializowane jako zwykły tekst dziesiętny.

A co z List, Map i klasami zagnieżdżonymi?

List<T> staje się elementem kontenerem z jednym dzieckiem na pozycję, nazwanym od typu — List<OrderItem> items zamienia się w <items><OrderItem/><OrderItem/></items>. Map<K, V> zamienia się w pary <entry><key/><value/></entry>. Klasy zagnieżdżone rozwijają się inline, tak samo jak XmlBuilder z pakietu xml tworzy elementy zagnieżdżone.

Czy mój kod jest zapisywany?

Twój Dart trafia do backendu na potrzeby konwersji i nie jest przechowywany — nie logujemy payloadu. Jak zawsze z narzędziami online: jeśli w kodzie są naprawdę wrażliwe literały (klucze API, tokeny), wyczyść je albo zastąp mockami przed wklejeniem.

A jeśli klasa używa pól dynamic albo Object??

Pola typowane jako dynamic lub Object? są serializowane jako tekst oparty na przypisanej wartości literalnej, bo prawdziwy kształt znamy dopiero w runtime. Jeśli chcesz mocniejszego XML-a, zawęź typ (String, int, konkretna klasa) — konwerter sam podchwyci strukturę.

Inne narzędzia, które mogą ci się przydać

Dart na XML to tylko kawałek układanki. Te dobrze z tym pasują: