Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ graph TD

The Flutter Gen UI SDK uses the [A2UI protocol](https://a2ui.org) to represent UI content internally. The [genui_a2a](packages/genui_a2a/) package allows it to act as a renderer for UIs generated by an A2UI backend agent, similar to the [other A2UI renderers](https://github.com/google/A2UI/tree/main/renderers) which are maintained within the A2UI repository.

The Flutter Gen UI SDK currently supports A2UI v0.9.
The Flutter Gen UI SDK currently supports A2UI v1.0.

## Getting started

Expand Down
4 changes: 1 addition & 3 deletions dev_tools/catalog_gallery/integration_test/app_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,7 @@ void main() {
testWidgets('catalog_gallery smoke test - verify initial state', (
tester,
) async {
await tester.pumpWidget(
CatalogGalleryApp(sampleSource: sampleSource),
);
await tester.pumpWidget(CatalogGalleryApp(sampleSource: sampleSource));
await tester.pumpAndSettle();

expect(find.text('Catalog Gallery'), findsOneWidget);
Expand Down
4 changes: 1 addition & 3 deletions dev_tools/catalog_gallery/lib/sample_source.dart
Original file line number Diff line number Diff line change
Expand Up @@ -86,9 +86,7 @@ class DirectorySampleSource implements SampleSource {
final List<SampleRef> refs = files
.map(
(file) => SampleRef(
name: directory.fileSystem.path.basenameWithoutExtension(
file.path,
),
name: directory.fileSystem.path.basenameWithoutExtension(file.path),
load: file.readAsString,
),
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,5 +38,5 @@ prompt: |
IMPORTANT: Do not skip any of the classes, orders, or species above. Include every item that is mentioned.

---
{"version":"v0.9","createSurface":{"surfaceId":"main","catalogId":"https://a2ui.org/specification/v0_9/basic_catalog.json"}}
{"version":"v0.9","updateComponents":{"surfaceId":"main","components":[{"id":"root","component":"List","children":["mainHeading","mainTabs"]},{"id":"mainHeading","component":"Text","text":"Simple Animal Explorer","variant":"h1"},{"id":"mainTabs","component":"Tabs","tabs":[{"title":"Mammals","child":"mammalsTabContent"},{"title":"Birds","child":"birdsTabContent"},{"title":"Reptiles","child":"reptilesTabContent"}]},{"id":"mammalsTabContent","component":"Column","children":["mammalsSearchField","mammaliaCard"]},{"id":"mammalsSearchField","component":"TextField","label":"Search...","value":""},{"id":"mammaliaCard","component":"Card","child":"mammaliaColumn"},{"id":"mammaliaColumn","component":"Column","children":["mammaliaText","carnivoraCard","artiodactylaCard"]},{"id":"mammaliaText","component":"Text","text":"Class: Mammalia"},{"id":"carnivoraCard","component":"Card","child":"carnivoraColumn"},{"id":"carnivoraColumn","component":"Column","children":["carnivoraText","lionCard","tigerCard","wolfCard"]},{"id":"carnivoraText","component":"Text","text":"Order: Carnivora"},{"id":"lionCard","component":"Card","child":"lionRow"},{"id":"lionRow","component":"Row","children":["lionImage","lionText"]},{"id":"lionImage","component":"Image","url":"https://example.com/lion.jpg"},{"id":"lionText","component":"Text","text":"Lion"},{"id":"tigerCard","component":"Card","child":"tigerRow"},{"id":"tigerRow","component":"Row","children":["tigerImage","tigerText"]},{"id":"tigerImage","component":"Image","url":"https://example.com/tiger.jpg"},{"id":"tigerText","component":"Text","text":"Tiger"},{"id":"wolfCard","component":"Card","child":"wolfRow"},{"id":"wolfRow","component":"Row","children":["wolfImage","wolfText"]},{"id":"wolfImage","component":"Image","url":"https://example.com/wolf.jpg"},{"id":"wolfText","component":"Text","text":"Wolf"},{"id":"artiodactylaCard","component":"Card","child":"artiodactylaColumn"},{"id":"artiodactylaColumn","component":"Column","children":["artiodactylaText","giraffeCard","hippopotamusCard"]},{"id":"artiodactylaText","component":"Text","text":"Order: Artiodactyla"},{"id":"giraffeCard","component":"Card","child":"giraffeRow"},{"id":"giraffeRow","component":"Row","children":["giraffeImage","giraffeText"]},{"id":"giraffeImage","component":"Image","url":"https://example.com/giraffe.jpg"},{"id":"giraffeText","component":"Text","text":"Giraffe"},{"id":"hippopotamusCard","component":"Card","child":"hippopotamusRow"},{"id":"hippopotamusRow","component":"Row","children":["hippopotamusImage","hippopotamusText"]},{"id":"hippopotamusImage","component":"Image","url":"https://example.com/hippopotamus.jpg"},{"id":"hippopotamusText","component":"Text","text":"Hippopotamus"},{"id":"birdsTabContent","component":"Column","children":["birdsSearchField","avesCard"]},{"id":"birdsSearchField","component":"TextField","label":"Search...","value":""},{"id":"avesCard","component":"Card","child":"avesColumn"},{"id":"avesColumn","component":"Column","children":["avesText","accipitriformesCard","struthioniformesCard","sphenisciformesCard"]},{"id":"avesText","component":"Text","text":"Class: Aves"},{"id":"accipitriformesCard","component":"Card","child":"accipitriformesColumn"},{"id":"accipitriformesColumn","component":"Column","children":["accipitriformesText","baldEagleCard"]},{"id":"accipitriformesText","component":"Text","text":"Order: Accipitriformes"},{"id":"baldEagleCard","component":"Card","child":"baldEagleRow"},{"id":"baldEagleRow","component":"Row","children":["baldEagleImage","baldEagleText"]},{"id":"baldEagleImage","component":"Image","url":"https://example.com/baldeagle.jpg"},{"id":"baldEagleText","component":"Text","text":"Bald Eagle"},{"id":"struthioniformesCard","component":"Card","child":"struthioniformesColumn"},{"id":"struthioniformesColumn","component":"Column","children":["struthioniformesText","ostrichCard"]},{"id":"struthioniformesText","component":"Text","text":"Order: Struthioniformes"},{"id":"ostrichCard","component":"Card","child":"ostrichRow"},{"id":"ostrichRow","component":"Row","children":["ostrichImage","ostrichText"]},{"id":"ostrichImage","component":"Image","url":"https://example.com/ostrich.jpg"},{"id":"ostrichText","component":"Text","text":"Ostrich"},{"id":"sphenisciformesCard","component":"Card","child":"sphenisciformesColumn"},{"id":"sphenisciformesColumn","component":"Column","children":["sphenisciformesText","penguinCard"]},{"id":"sphenisciformesText","component":"Text","text":"Order: Sphenisciformes"},{"id":"penguinCard","component":"Card","child":"penguinRow"},{"id":"penguinRow","component":"Row","children":["penguinImage","penguinText"]},{"id":"penguinImage","component":"Image","url":"https://example.com/penguin.jpg"},{"id":"penguinText","component":"Text","text":"Penguin"},{"id":"reptilesTabContent","component":"Column","children":["reptilesSearchField","reptiliaCard"]},{"id":"reptilesSearchField","component":"TextField","label":"Search...","value":""},{"id":"reptiliaCard","component":"Card","child":"reptiliaColumn"},{"id":"reptiliaColumn","component":"Column","children":["reptiliaText","crocodiliaCard","squamataCard"]},{"id":"reptiliaText","component":"Text","text":"Class: Reptilia"},{"id":"crocodiliaCard","component":"Card","child":"crocodiliaColumn"},{"id":"crocodiliaColumn","component":"Column","children":["crocodiliaText","nileCrocodileCard"]},{"id":"crocodiliaText","component":"Text","text":"Order: Crocodilia"},{"id":"nileCrocodileCard","component":"Card","child":"nileCrocodileRow"},{"id":"nileCrocodileRow","component":"Row","children":["nileCrocodileImage","nileCrocodileText"]},{"id":"nileCrocodileImage","component":"Image","url":"https://example.com/nilecrocodile.jpg"},{"id":"nileCrocodileText","component":"Text","text":"Nile Crocodile"},{"id":"squamataCard","component":"Card","child":"squamataColumn"},{"id":"squamataColumn","component":"Column","children":["squamataText","komodoDragonCard","ballPythonCard"]},{"id":"squamataText","component":"Text","text":"Order: Squamata"},{"id":"komodoDragonCard","component":"Card","child":"komodoDragonRow"},{"id":"komodoDragonRow","component":"Row","children":["komodoDragonImage","komodoDragonText"]},{"id":"komodoDragonImage","component":"Image","url":"https://example.com/komododragon.jpg"},{"id":"komodoDragonText","component":"Text","text":"Komodo Dragon"},{"id":"ballPythonCard","component":"Card","child":"ballPythonRow"},{"id":"ballPythonRow","component":"Row","children":["ballPythonImage","ballPythonText"]},{"id":"ballPythonImage","component":"Image","url":"https://example.com/ballpython.jpg"},{"id":"ballPythonText","component":"Text","text":"Ball Python"}]}}
{"version":"v1.0","createSurface":{"surfaceId":"main","catalogId":"https://a2ui.org/specification/v1_0/catalogs/basic/catalog.json"}}
{"version":"v1.0","updateComponents":{"surfaceId":"main","components":[{"id":"root","component":"List","children":["mainHeading","mainTabs"]},{"id":"mainHeading","component":"Text","text":"Simple Animal Explorer","variant":"h1"},{"id":"mainTabs","component":"Tabs","tabs":[{"title":"Mammals","child":"mammalsTabContent"},{"title":"Birds","child":"birdsTabContent"},{"title":"Reptiles","child":"reptilesTabContent"}]},{"id":"mammalsTabContent","component":"Column","children":["mammalsSearchField","mammaliaCard"]},{"id":"mammalsSearchField","component":"TextField","label":"Search...","value":""},{"id":"mammaliaCard","component":"Card","child":"mammaliaColumn"},{"id":"mammaliaColumn","component":"Column","children":["mammaliaText","carnivoraCard","artiodactylaCard"]},{"id":"mammaliaText","component":"Text","text":"Class: Mammalia"},{"id":"carnivoraCard","component":"Card","child":"carnivoraColumn"},{"id":"carnivoraColumn","component":"Column","children":["carnivoraText","lionCard","tigerCard","wolfCard"]},{"id":"carnivoraText","component":"Text","text":"Order: Carnivora"},{"id":"lionCard","component":"Card","child":"lionRow"},{"id":"lionRow","component":"Row","children":["lionImage","lionText"]},{"id":"lionImage","component":"Image","url":"https://example.com/lion.jpg"},{"id":"lionText","component":"Text","text":"Lion"},{"id":"tigerCard","component":"Card","child":"tigerRow"},{"id":"tigerRow","component":"Row","children":["tigerImage","tigerText"]},{"id":"tigerImage","component":"Image","url":"https://example.com/tiger.jpg"},{"id":"tigerText","component":"Text","text":"Tiger"},{"id":"wolfCard","component":"Card","child":"wolfRow"},{"id":"wolfRow","component":"Row","children":["wolfImage","wolfText"]},{"id":"wolfImage","component":"Image","url":"https://example.com/wolf.jpg"},{"id":"wolfText","component":"Text","text":"Wolf"},{"id":"artiodactylaCard","component":"Card","child":"artiodactylaColumn"},{"id":"artiodactylaColumn","component":"Column","children":["artiodactylaText","giraffeCard","hippopotamusCard"]},{"id":"artiodactylaText","component":"Text","text":"Order: Artiodactyla"},{"id":"giraffeCard","component":"Card","child":"giraffeRow"},{"id":"giraffeRow","component":"Row","children":["giraffeImage","giraffeText"]},{"id":"giraffeImage","component":"Image","url":"https://example.com/giraffe.jpg"},{"id":"giraffeText","component":"Text","text":"Giraffe"},{"id":"hippopotamusCard","component":"Card","child":"hippopotamusRow"},{"id":"hippopotamusRow","component":"Row","children":["hippopotamusImage","hippopotamusText"]},{"id":"hippopotamusImage","component":"Image","url":"https://example.com/hippopotamus.jpg"},{"id":"hippopotamusText","component":"Text","text":"Hippopotamus"},{"id":"birdsTabContent","component":"Column","children":["birdsSearchField","avesCard"]},{"id":"birdsSearchField","component":"TextField","label":"Search...","value":""},{"id":"avesCard","component":"Card","child":"avesColumn"},{"id":"avesColumn","component":"Column","children":["avesText","accipitriformesCard","struthioniformesCard","sphenisciformesCard"]},{"id":"avesText","component":"Text","text":"Class: Aves"},{"id":"accipitriformesCard","component":"Card","child":"accipitriformesColumn"},{"id":"accipitriformesColumn","component":"Column","children":["accipitriformesText","baldEagleCard"]},{"id":"accipitriformesText","component":"Text","text":"Order: Accipitriformes"},{"id":"baldEagleCard","component":"Card","child":"baldEagleRow"},{"id":"baldEagleRow","component":"Row","children":["baldEagleImage","baldEagleText"]},{"id":"baldEagleImage","component":"Image","url":"https://example.com/baldeagle.jpg"},{"id":"baldEagleText","component":"Text","text":"Bald Eagle"},{"id":"struthioniformesCard","component":"Card","child":"struthioniformesColumn"},{"id":"struthioniformesColumn","component":"Column","children":["struthioniformesText","ostrichCard"]},{"id":"struthioniformesText","component":"Text","text":"Order: Struthioniformes"},{"id":"ostrichCard","component":"Card","child":"ostrichRow"},{"id":"ostrichRow","component":"Row","children":["ostrichImage","ostrichText"]},{"id":"ostrichImage","component":"Image","url":"https://example.com/ostrich.jpg"},{"id":"ostrichText","component":"Text","text":"Ostrich"},{"id":"sphenisciformesCard","component":"Card","child":"sphenisciformesColumn"},{"id":"sphenisciformesColumn","component":"Column","children":["sphenisciformesText","penguinCard"]},{"id":"sphenisciformesText","component":"Text","text":"Order: Sphenisciformes"},{"id":"penguinCard","component":"Card","child":"penguinRow"},{"id":"penguinRow","component":"Row","children":["penguinImage","penguinText"]},{"id":"penguinImage","component":"Image","url":"https://example.com/penguin.jpg"},{"id":"penguinText","component":"Text","text":"Penguin"},{"id":"reptilesTabContent","component":"Column","children":["reptilesSearchField","reptiliaCard"]},{"id":"reptilesSearchField","component":"TextField","label":"Search...","value":""},{"id":"reptiliaCard","component":"Card","child":"reptiliaColumn"},{"id":"reptiliaColumn","component":"Column","children":["reptiliaText","crocodiliaCard","squamataCard"]},{"id":"reptiliaText","component":"Text","text":"Class: Reptilia"},{"id":"crocodiliaCard","component":"Card","child":"crocodiliaColumn"},{"id":"crocodiliaColumn","component":"Column","children":["crocodiliaText","nileCrocodileCard"]},{"id":"crocodiliaText","component":"Text","text":"Order: Crocodilia"},{"id":"nileCrocodileCard","component":"Card","child":"nileCrocodileRow"},{"id":"nileCrocodileRow","component":"Row","children":["nileCrocodileImage","nileCrocodileText"]},{"id":"nileCrocodileImage","component":"Image","url":"https://example.com/nilecrocodile.jpg"},{"id":"nileCrocodileText","component":"Text","text":"Nile Crocodile"},{"id":"squamataCard","component":"Card","child":"squamataColumn"},{"id":"squamataColumn","component":"Column","children":["squamataText","komodoDragonCard","ballPythonCard"]},{"id":"squamataText","component":"Text","text":"Order: Squamata"},{"id":"komodoDragonCard","component":"Card","child":"komodoDragonRow"},{"id":"komodoDragonRow","component":"Row","children":["komodoDragonImage","komodoDragonText"]},{"id":"komodoDragonImage","component":"Image","url":"https://example.com/komododragon.jpg"},{"id":"komodoDragonText","component":"Text","text":"Komodo Dragon"},{"id":"ballPythonCard","component":"Card","child":"ballPythonRow"},{"id":"ballPythonRow","component":"Row","children":["ballPythonImage","ballPythonText"]},{"id":"ballPythonImage","component":"Image","url":"https://example.com/ballpython.jpg"},{"id":"ballPythonText","component":"Text","text":"Ball Python"}]}}
4 changes: 2 additions & 2 deletions dev_tools/catalog_gallery/samples/audioPlayer.sample
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@ name: audioPlayer
prompt: |
Generate a 'createSurface' message and a 'updateComponents' message with surfaceId 'main' for an AudioPlayer component that plays a short audio clip.
---
{"version":"v0.9","createSurface":{"surfaceId":"main","catalogId":"https://a2ui.org/specification/v0_9/basic_catalog.json"}}
{"version":"v0.9","updateComponents":{"surfaceId":"main","components":[{"id":"root","component":"Column","children":["audioPlayerComponent"]},{"id":"audioPlayerComponent","component":"AudioPlayer","url":"https://upload.wikimedia.org/wikipedia/commons/d/db/Minuet_in_G_%28Beethoven%29%2C_piano.ogg","description":"Beethoven — Minuet in G (public domain)"}]}}
{"version":"v1.0","createSurface":{"surfaceId":"main","catalogId":"https://a2ui.org/specification/v1_0/catalogs/basic/catalog.json"}}
{"version":"v1.0","updateComponents":{"surfaceId":"main","components":[{"id":"root","component":"Column","children":["audioPlayerComponent"]},{"id":"audioPlayerComponent","component":"AudioPlayer","url":"https://upload.wikimedia.org/wikipedia/commons/d/db/Minuet_in_G_%28Beethoven%29%2C_piano.ogg","description":"Beethoven — Minuet in G (public domain)"}]}}
4 changes: 2 additions & 2 deletions dev_tools/catalog_gallery/samples/calendarEventCreator.sample
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@ name: calendarEventCreator
prompt: |
Generate a 'createSurface' message and a 'updateComponents' message with surfaceId 'main' for a calendar event creation form. It should have a 'Text' (variant 'h1') "New Event". Include a 'TextField' for the "Event Title". Use a 'Row' for two 'DateTimeInput's for "Start Time" and "End Time" (initialize both with a literal empty string value: '' (do not bind to a data path)). Add a 'CheckBox' labeled "All-day event". Finally, a 'Row' with two 'Button's: "Save" and "Cancel".
---
{"version":"v0.9","createSurface":{"surfaceId":"main","catalogId":"https://a2ui.org/specification/v0_9/basic_catalog.json"}}
{"version":"v0.9","updateComponents":{"surfaceId":"main","components":[{"id":"root","component":"Column","children":["newEventTitle","eventTitleField","timeInputsRow","allDayCheckbox","actionButtonsRow"]},{"id":"newEventTitle","component":"Text","text":"New Event","variant":"h1"},{"id":"eventTitleField","component":"TextField","label":"Event Title","value":""},{"id":"timeInputsRow","component":"Row","children":["startTimeInput","endTimeInput"],"justify":"spaceBetween"},{"id":"startTimeInput","component":"DateTimeInput","value":"","enableDate":true,"enableTime":true,"label":"Start Time"},{"id":"endTimeInput","component":"DateTimeInput","value":"","enableDate":true,"enableTime":true,"label":"End Time"},{"id":"allDayCheckbox","component":"CheckBox","label":"All-day event","value":false},{"id":"actionButtonsRow","component":"Row","children":["saveButton","cancelButton"],"justify":"end"},{"id":"saveButton","component":"Button","child":"saveButtonText","action":{"event":{"name":"saveEvent"}},"variant":"primary"},{"id":"saveButtonText","component":"Text","text":"Save"},{"id":"cancelButton","component":"Button","child":"cancelButtonText","action":{"event":{"name":"cancelEvent"}}},{"id":"cancelButtonText","component":"Text","text":"Cancel"}]}}
{"version":"v1.0","createSurface":{"surfaceId":"main","catalogId":"https://a2ui.org/specification/v1_0/catalogs/basic/catalog.json"}}
{"version":"v1.0","updateComponents":{"surfaceId":"main","components":[{"id":"root","component":"Column","children":["newEventTitle","eventTitleField","timeInputsRow","allDayCheckbox","actionButtonsRow"]},{"id":"newEventTitle","component":"Text","text":"New Event","variant":"h1"},{"id":"eventTitleField","component":"TextField","label":"Event Title","value":""},{"id":"timeInputsRow","component":"Row","children":["startTimeInput","endTimeInput"],"justify":"spaceBetween"},{"id":"startTimeInput","component":"DateTimeInput","value":"","enableDate":true,"enableTime":true,"label":"Start Time"},{"id":"endTimeInput","component":"DateTimeInput","value":"","enableDate":true,"enableTime":true,"label":"End Time"},{"id":"allDayCheckbox","component":"CheckBox","label":"All-day event","value":false},{"id":"actionButtonsRow","component":"Row","children":["saveButton","cancelButton"],"justify":"end"},{"id":"saveButton","component":"Button","child":"saveButtonText","action":{"event":{"name":"saveEvent"}},"variant":"primary"},{"id":"saveButtonText","component":"Text","text":"Save"},{"id":"cancelButton","component":"Button","child":"cancelButtonText","action":{"event":{"name":"cancelEvent"}}},{"id":"cancelButtonText","component":"Text","text":"Cancel"}]}}
Loading
Loading