From f38b6f080e8a7bff6a647784d6899c1253e659bf Mon Sep 17 00:00:00 2001 From: Polina Cherkasova Date: Mon, 4 Aug 2025 13:13:18 -0700 Subject: [PATCH 01/20] - --- examples/travel_app/lib/main.dart | 2 + examples/travel_app/lib/src/images.dart | 104 ++++++++++++------------ examples/travel_app/pubspec.yaml | 2 + 3 files changed, 56 insertions(+), 52 deletions(-) diff --git a/examples/travel_app/lib/main.dart b/examples/travel_app/lib/main.dart index 6e053bd19..3eff0b019 100644 --- a/examples/travel_app/lib/main.dart +++ b/examples/travel_app/lib/main.dart @@ -57,6 +57,8 @@ $imagesJson void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform); + // TODO: we should remove FirebaseAppCheck, as it adds complexity + //to the example. await FirebaseAppCheck.instance.activate( appleProvider: AppleProvider.debug, androidProvider: AndroidProvider.debug, diff --git a/examples/travel_app/lib/src/images.dart b/examples/travel_app/lib/src/images.dart index baa8a546a..f72f91205 100644 --- a/examples/travel_app/lib/src/images.dart +++ b/examples/travel_app/lib/src/images.dart @@ -1,211 +1,211 @@ final imagesJson = ''' [ { - "url": "https://genui-demo-stockimages.web.app/Earth_Day_Flag.png", + "url": "assets/travel_images/Earth_Day_Flag.png", "description": "Higher-quality PNG version of John McConnell's Earth Day flag, based on this photograph. Requested" }, { - "url": "https://genui-demo-stockimages.web.app/Lewis_overthrust_fault_nh10f.jpg", + "url": "assets/travel_images/Lewis_overthrust_fault_nh10f.jpg", "description": "schematic illustration of the Lewis overthrust fault in northern Montana, USA and Southern Alberta" }, { - "url": "https://genui-demo-stockimages.web.app/Hiking_fashion,_11_July_1932_slnsw.jpg", + "url": "assets/travel_images/Hiking_fashion,_11_July_1932_slnsw.jpg", "description": "Hiking fashion, 11 July 1932, Sun Newspaper, from film negative, State Library of New South Wale" }, { - "url": "https://genui-demo-stockimages.web.app/P\u00e5ske.jpg", + "url": "assets/travel_images/P\u00e5ske.jpg", "description": "Snow and skiing on Hardangervidda, near Vegglifjell, Norway." }, { - "url": "https://genui-demo-stockimages.web.app/Hanauma_Bay_snorkelers_1973.png", + "url": "assets/travel_images/Hanauma_Bay_snorkelers_1973.png", "description": "Snorkelers at Hanauma Bay, Oahu, Hawaii." }, { - "url": "https://genui-demo-stockimages.web.app/Snorkeling_gear.jpg", + "url": "assets/travel_images/Snorkeling_gear.jpg", "description": "Typical snorkeling equipment: snorkel, diving mask and swimfins." }, { - "url": "https://genui-demo-stockimages.web.app/Zavorra.JPG", + "url": "assets/travel_images/Zavorra.JPG", "description": "Cintura zavorra" }, { - "url": "https://genui-demo-stockimages.web.app/Contender_sailing_dinghy.jpg", + "url": "assets/travel_images/Contender_sailing_dinghy.jpg", "description": "User:Gwicke sailing a Contender dinghy at the '98 Worlds." }, { - "url": "https://genui-demo-stockimages.web.app/Corrientes-oceanicas.png", + "url": "assets/travel_images/Corrientes-oceanicas.png", "description": "the ocean currents. Note that E. Greenland + Labrador + Norwegian = Viking gyre Gulf stream + N. A" }, { - "url": "https://genui-demo-stockimages.web.app/La_Marine-Pacini-140.png", + "url": "assets/travel_images/La_Marine-Pacini-140.png", "description": "A line of battle. Illustration from La Marine, by Pacini." }, { - "url": "https://genui-demo-stockimages.web.app/SantaMaria.jpg", + "url": "assets/travel_images/SantaMaria.jpg", "description": "Spanish carrack Santa Maria" }, { - "url": "https://genui-demo-stockimages.web.app/Sports_icon.png", + "url": "assets/travel_images/Sports_icon.png", "description": "Sports icon for Portals" }, { - "url": "https://genui-demo-stockimages.web.app/Tacking_near_Britannia_Bridge.jpg", + "url": "assets/travel_images/Tacking_near_Britannia_Bridge.jpg", "description": "Tacking near Britannia Bridge - Round Anglesey race Author: User:Velela. Location: Nelson statue n" }, { - "url": "https://genui-demo-stockimages.web.app/Alimini_Otranto.jpg", + "url": "assets/travel_images/Alimini_Otranto.jpg", "description": "Laghi Alimini Otranto" }, { - "url": "https://genui-demo-stockimages.web.app/Brighton,_the_front_and_the_chain_pier_seen_in_the_distance.jpg", + "url": "assets/travel_images/Brighton,_the_front_and_the_chain_pier_seen_in_the_distance.jpg", "description": ""Brighton: the front and the chain pier seen in the distance," by Frederick William Woledge (active" }, { - "url": "https://genui-demo-stockimages.web.app/Carters_Beach-_Sand.jpg", + "url": "assets/travel_images/Carters_Beach-_Sand.jpg", "description": "Carters Beach- Sand" }, { - "url": "https://genui-demo-stockimages.web.app/Castelldefels_September.JPG", + "url": "assets/travel_images/Castelldefels_September.JPG", "description": "September in Castelldefels" }, { - "url": "https://genui-demo-stockimages.web.app/Green_sand_closeup_1.jpg", + "url": "assets/travel_images/Green_sand_closeup_1.jpg", "description": "Closeup of green sand taken from Mahana Beach in Hawai\u02bbi." }, { - "url": "https://genui-demo-stockimages.web.app/HIHWNMS_trash_on_the_beach_(50093889173).jpg", + "url": "assets/travel_images/HIHWNMS_trash_on_the_beach_(50093889173).jpg", "description": "Close up of trash covering a tide line on a beach in Hawaiian Islands Humpback Whale National Marine" }, { - "url": "https://genui-demo-stockimages.web.app/Kemp's_Ridley_sea_turtle_nesting.JPG", + "url": "assets/travel_images/Kemp's_Ridley_sea_turtle_nesting.JPG", "description": "Kemp's Ridley sea turtle nesting." }, { - "url": "https://genui-demo-stockimages.web.app/Man_o'war_cove_near_lulworth_dorset_arp.jpg", + "url": "assets/travel_images/Man_o'war_cove_near_lulworth_dorset_arp.jpg", "description": "Man O\u2019War Cove in St Oswalds Bay, Dorset, England (near Lulworth Cove and the natural rock arch of" }, { - "url": "https://genui-demo-stockimages.web.app/Monte_Carlo_Casino_seaside_facade_before_1878_-_Bonillo_2004_p113.jpg", + "url": "assets/travel_images/Monte_Carlo_Casino_seaside_facade_before_1878_-_Bonillo_2004_p113.jpg", "description": "Photograph of the seaside facade of the Monte Carlo Casino before the construction of the Salle Garn" }, { - "url": "https://genui-demo-stockimages.web.app/Ramla_Bay.jpg", + "url": "assets/travel_images/Ramla_Bay.jpg", "description": "Ramla Bay, Gozo, Malta. Taken from the western cliff." }, { - "url": "https://genui-demo-stockimages.web.app/Scala_dei_Turchi_Sand_062313.jpg", + "url": "assets/travel_images/Scala_dei_Turchi_Sand_062313.jpg", "description": "Sand from the beach at Scala dei Turchi, Sicily." }, { - "url": "https://genui-demo-stockimages.web.app/The_Queen_Mary's_Army_Auxiliary_Corps_during_the_First_World_War,_France_Q11512.jpg", + "url": "assets/travel_images/The_Queen_Mary's_Army_Auxiliary_Corps_during_the_First_World_War,_France_Q11512.jpg", "description": "The Queen Mary's Army Auxiliary Corps during the First World War, France Members of Queen Mary's Ar" }, { - "url": "https://genui-demo-stockimages.web.app/The_promenade,_Blackpool,_Lancashire,_England,_ca._1898.jpg", + "url": "assets/travel_images/The_promenade,_Blackpool,_Lancashire,_England,_ca._1898.jpg", "description": "11103. Blackpool, the promenade." }, { - "url": "https://genui-demo-stockimages.web.app/Checkerboard_forest_in_Idaho.jpg", + "url": "assets/travel_images/Checkerboard_forest_in_Idaho.jpg", "description": "An astronaut aboard the International Space Station observed this distinctive checkerboard pattern a" }, { - "url": "https://genui-demo-stockimages.web.app/Climate_change_icon.png", + "url": "assets/travel_images/Climate_change_icon.png", "description": "Climate change is a change in the statistical distribution of weather patterns when that change last" }, { - "url": "https://genui-demo-stockimages.web.app/Earth_Day_Flag.png", + "url": "assets/travel_images/Earth_Day_Flag.png", "description": "Higher-quality PNG version of John McConnell's Earth Day flag, based on this photograph. Requested" }, { - "url": "https://genui-demo-stockimages.web.app/Garibaldi_National_Park_-_Garibaldi_Mountain.jpg", + "url": "assets/travel_images/Garibaldi_National_Park_-_Garibaldi_Mountain.jpg", "description": "Forest on Mount Garibaldi, Garibaldi Provincial Park, British Columbia, Canada" }, { - "url": "https://genui-demo-stockimages.web.app/Niepolomice_oli_2013251.jpg", + "url": "assets/travel_images/Niepolomice_oli_2013251.jpg", "description": "Since the 1200s it has been a forest of special use and protection in Poland. In this view from spac" }, { - "url": "https://genui-demo-stockimages.web.app/Redwood_M_D_Vaden.jpg", + "url": "assets/travel_images/Redwood_M_D_Vaden.jpg", "description": "Simpson Reed Discovery Trail, Jedediah Smith Redwoods State Park, Northern California. Image shows" }, { - "url": "https://genui-demo-stockimages.web.app/The_Earth_seen_from_Apollo_17_with_transparent_background.png", + "url": "assets/travel_images/The_Earth_seen_from_Apollo_17_with_transparent_background.png", "description": ""The Blue Marble" is a famous photograph of the Earth taken on December 7, 1972 by the crew of the" }, { - "url": "https://genui-demo-stockimages.web.app/Leaf_1_web.jpg", + "url": "assets/travel_images/Leaf_1_web.jpg", "description": "A leaf." }, { - "url": "https://genui-demo-stockimages.web.app/A_mine_explodes_close_to_a_British_truck_as_it_carries_infantry_through_enemy_minefields_and_wire_to_the_new_front_lines.jpg", + "url": "assets/travel_images/A_mine_explodes_close_to_a_British_truck_as_it_carries_infantry_through_enemy_minefields_and_wire_to_the_new_front_lines.jpg", "description": "A mine explodes close to a British truck as it carries infantry through enemy minefields and wire to" }, { - "url": "https://genui-demo-stockimages.web.app/Aerial_view_of_dunefield,_White_Sands_National_Park,_New_Mexico,_United_States.png", + "url": "assets/travel_images/Aerial_view_of_dunefield,_White_Sands_National_Park,_New_Mexico,_United_States.png", "description": "Aerial view of dunefield, White Sands National Park, New Mexico, United States" }, { - "url": "https://genui-demo-stockimages.web.app/DesertIguana031611.jpg", + "url": "assets/travel_images/DesertIguana031611.jpg", "description": "Desert Iguana (Dipsosaurus dorsalis) near Amboy Crater, Mojave Desert, California." }, { - "url": "https://genui-demo-stockimages.web.app/Desert_Lake,_near_Ragtown,_Nevada_MET_DP243000.jpg", + "url": "assets/travel_images/Desert_Lake,_near_Ragtown,_Nevada_MET_DP243000.jpg", "description": "Photograph; Photographs" }, { - "url": "https://genui-demo-stockimages.web.app/Desert_Pavement_Mojave_2000.jpg", + "url": "assets/travel_images/Desert_Pavement_Mojave_2000.jpg", "description": "Desert pavement in the Cima Volcanic Field of the Mojave Desert." }, { - "url": "https://genui-demo-stockimages.web.app/Deserts.png", + "url": "assets/travel_images/Deserts.png", "description": "NASA World Wind 1.4 used." }, { - "url": "https://genui-demo-stockimages.web.app/Gusev_Spirit_01.jpg", + "url": "assets/travel_images/Gusev_Spirit_01.jpg", "description": "This full-resolution image taken by the panoramic camera onboard the Mars Exploration Rover Spirit b" }, { - "url": "https://genui-demo-stockimages.web.app/Marco_Polo_traveling.JPG", + "url": "assets/travel_images/Marco_Polo_traveling.JPG", "description": "Marco Polo travelling, Miniature from the Book "The Travels of Marco Polo" ("Il milione"), origina" }, { - "url": "https://genui-demo-stockimages.web.app/Saltation-mechanics-i18n.png", + "url": "assets/travel_images/Saltation-mechanics-i18n.png", "description": "Internationalization of the diagram showing the mechanics of eolian transport. 1=Creep 2=Saltation 3" }, { - "url": "https://genui-demo-stockimages.web.app/The_World_Factbook_-_Algeria_-_Flickr_-_The_Central_Intelligence_Agency_(7).jpg", + "url": "assets/travel_images/The_World_Factbook_-_Algeria_-_Flickr_-_The_Central_Intelligence_Agency_(7).jpg", "description": "Sahara dunes at sunset. Visit The World Factbook for more information about Algeria." }, { - "url": "https://genui-demo-stockimages.web.app/Sandstorm_in_Al_Asad,_Iraq.jpg", + "url": "assets/travel_images/Sandstorm_in_Al_Asad,_Iraq.jpg", "description": "A massive dust storm cloud (haboob) is close to enveloping a military camp as it rolls over Al Asad" }, { - "url": "https://genui-demo-stockimages.web.app/The_Earth_seen_from_Apollo_17.jpg", + "url": "assets/travel_images/The_Earth_seen_from_Apollo_17.jpg", "description": ""The Blue Marble" is a famous photograph of the Earth taken on December 7, 1972, by the crew of th" }, { - "url": "https://genui-demo-stockimages.web.app/Ulaan_tsutgalan,_Mongolia.jpg", + "url": "assets/travel_images/Ulaan_tsutgalan,_Mongolia.jpg", "description": "Ulaan tsutgalan, Mongolia" }, { - "url": "https://genui-demo-stockimages.web.app/Ancient_coral_reefs.jpg", + "url": "assets/travel_images/Ancient_coral_reefs.jpg", "description": "Antiguas Arrecifes de Coral" }, { - "url": "https://genui-demo-stockimages.web.app/Atoll_forming-Atoll.png", + "url": "assets/travel_images/Atoll_forming-Atoll.png", "description": "Internationalization of the diagram:Atoll forming. 1=Volcanic Island 2=Fringing reef 3=Barrier reeef" }, { - "url": "https://genui-demo-stockimages.web.app/Atoll_forming-Barrier_reef.png", + "url": "assets/travel_images/Atoll_forming-Barrier_reef.png", "description": "Internationalization of the diagram:Atoll forming. 1=Volcanic Island 2=Fringing reef 3=Barrier reeef" }, { - "url": "https://genui-demo-stockimages.web.app/Atoll_forming-Fringing_reef.png", + "url": "assets/travel_images/Atoll_forming-Fringing_reef.png", "description": "Internationalization of the diagram:Atoll forming. 1=Volcanic Island 2=Fringing reef 3=Barrier reeef" }, { - "url": "https://genui-demo-stockimages.web.app/Atoll_forming-volcano.png", + "url": "assets/travel_images/Atoll_forming-volcano.png", "description": "Internationalization of the diagram:Atoll forming. 1=Volcanic Island 2=Fringing reef 3=Barrier reeef" }, ]'''; diff --git a/examples/travel_app/pubspec.yaml b/examples/travel_app/pubspec.yaml index 26137a1e5..d2d8388fb 100644 --- a/examples/travel_app/pubspec.yaml +++ b/examples/travel_app/pubspec.yaml @@ -31,3 +31,5 @@ dev_dependencies: flutter: uses-material-design: true + assets: + - assets/travel_images/ From 3bcf4cbb65496acc749344da766d97a0ad85652c Mon Sep 17 00:00:00 2001 From: Polina Cherkasova Date: Mon, 4 Aug 2025 13:22:46 -0700 Subject: [PATCH 02/20] Update images.dart --- examples/travel_app/lib/src/images.dart | 731 ++++++++++++++++++++---- 1 file changed, 626 insertions(+), 105 deletions(-) diff --git a/examples/travel_app/lib/src/images.dart b/examples/travel_app/lib/src/images.dart index f72f91205..efe0c3ec8 100644 --- a/examples/travel_app/lib/src/images.dart +++ b/examples/travel_app/lib/src/images.dart @@ -1,211 +1,732 @@ final imagesJson = ''' [ { - "url": "assets/travel_images/Earth_Day_Flag.png", - "description": "Higher-quality PNG version of John McConnell's Earth Day flag, based on this photograph. Requested" + "url": "assets/travel_images/abbey_road_studios_london.jpg", + "description": "" }, { - "url": "assets/travel_images/Lewis_overthrust_fault_nh10f.jpg", - "description": "schematic illustration of the Lewis overthrust fault in northern Montana, USA and Southern Alberta" + "url": "assets/travel_images/akrotiri_spring_fresco_santorini.jpg", + "description": "" }, { - "url": "assets/travel_images/Hiking_fashion,_11_July_1932_slnsw.jpg", - "description": "Hiking fashion, 11 July 1932, Sun Newspaper, from film negative, State Library of New South Wale" + "url": "assets/travel_images/al_fahidi_fort_dubai.jpg", + "description": "" }, { - "url": "assets/travel_images/P\u00e5ske.jpg", - "description": "Snow and skiing on Hardangervidda, near Vegglifjell, Norway." + "url": "assets/travel_images/alimini_lake_otranto_italy.jpg", + "description": "" }, { - "url": "assets/travel_images/Hanauma_Bay_snorkelers_1973.png", - "description": "Snorkelers at Hanauma Bay, Oahu, Hawaii." + "url": "assets/travel_images/amsterdam_gay_pride_2013.jpg", + "description": "" }, { - "url": "assets/travel_images/Snorkeling_gear.jpg", - "description": "Typical snorkeling equipment: snorkel, diving mask and swimfins." + "url": "assets/travel_images/anchieta_neighborhood_rio_de_janeiro.jpg", + "description": "" }, { - "url": "assets/travel_images/Zavorra.JPG", - "description": "Cintura zavorra" + "url": "assets/travel_images/ancient_coral_reefs.jpg", + "description": "" }, { - "url": "assets/travel_images/Contender_sailing_dinghy.jpg", - "description": "User:Gwicke sailing a Contender dinghy at the '98 Worlds." + "url": "assets/travel_images/augustine_volcano_alaska.jpg", + "description": "" }, { - "url": "assets/travel_images/Corrientes-oceanicas.png", - "description": "the ocean currents. Note that E. Greenland + Labrador + Norwegian = Viking gyre Gulf stream + N. A" + "url": "assets/travel_images/baker_street_station_london_1906.jpg", + "description": "" }, { - "url": "assets/travel_images/La_Marine-Pacini-140.png", - "description": "A line of battle. Illustration from La Marine, by Pacini." + "url": "assets/travel_images/bali_memorial.jpg", + "description": "" }, { - "url": "assets/travel_images/SantaMaria.jpg", - "description": "Spanish carrack Santa Maria" + "url": "assets/travel_images/banded_cleaner_shrimp.jpg", + "description": "" }, { - "url": "assets/travel_images/Sports_icon.png", - "description": "Sports icon for Portals" + "url": "assets/travel_images/banff_from_sulphur_mountain.jpg", + "description": "" }, { - "url": "assets/travel_images/Tacking_near_Britannia_Bridge.jpg", - "description": "Tacking near Britannia Bridge - Round Anglesey race Author: User:Velela. Location: Nelson statue n" + "url": "assets/travel_images/banff_springs_hotel_1902.jpg", + "description": "" }, { - "url": "assets/travel_images/Alimini_Otranto.jpg", - "description": "Laghi Alimini Otranto" + "url": "assets/travel_images/bank_of_england_london.jpg", + "description": "" }, { - "url": "assets/travel_images/Brighton,_the_front_and_the_chain_pier_seen_in_the_distance.jpg", - "description": ""Brighton: the front and the chain pier seen in the distance," by Frederick William Woledge (active" + "url": "assets/travel_images/barcelona_drawing_1563.jpg", + "description": "" }, { - "url": "assets/travel_images/Carters_Beach-_Sand.jpg", - "description": "Carters Beach- Sand" + "url": "assets/travel_images/barcelona_sants_station.jpg", + "description": "" }, { - "url": "assets/travel_images/Castelldefels_September.JPG", - "description": "September in Castelldefels" + "url": "assets/travel_images/blackpool_promenade_england.jpg", + "description": "" }, { - "url": "assets/travel_images/Green_sand_closeup_1.jpg", - "description": "Closeup of green sand taken from Mahana Beach in Hawai\u02bbi." + "url": "assets/travel_images/borobudur_indonesia.jpg", + "description": "" }, { - "url": "assets/travel_images/HIHWNMS_trash_on_the_beach_(50093889173).jpg", - "description": "Close up of trash covering a tide line on a beach in Hawaiian Islands Humpback Whale National Marine" + "url": "assets/travel_images/botafogo_bay_rio_de_janeiro.jpg", + "description": "" }, { - "url": "assets/travel_images/Kemp's_Ridley_sea_turtle_nesting.JPG", - "description": "Kemp's Ridley sea turtle nesting." + "url": "assets/travel_images/brain_coral_spawning.jpg", + "description": "" }, { - "url": "assets/travel_images/Man_o'war_cove_near_lulworth_dorset_arp.jpg", - "description": "Man O\u2019War Cove in St Oswalds Bay, Dorset, England (near Lulworth Cove and the natural rock arch of" + "url": "assets/travel_images/brain_coral.jpg", + "description": "" }, { - "url": "assets/travel_images/Monte_Carlo_Casino_seaside_facade_before_1878_-_Bonillo_2004_p113.jpg", - "description": "Photograph of the seaside facade of the Monte Carlo Casino before the construction of the Salle Garn" + "url": "assets/travel_images/brighton_beach_england.jpg", + "description": "" }, { - "url": "assets/travel_images/Ramla_Bay.jpg", - "description": "Ramla Bay, Gozo, Malta. Taken from the western cliff." + "url": "assets/travel_images/broadway_new_york_1840.jpg", + "description": "" }, { - "url": "assets/travel_images/Scala_dei_Turchi_Sand_062313.jpg", - "description": "Sand from the beach at Scala dei Turchi, Sicily." + "url": "assets/travel_images/brooklyn_bridge_new_york.jpg", + "description": "" }, { - "url": "assets/travel_images/The_Queen_Mary's_Army_Auxiliary_Corps_during_the_First_World_War,_France_Q11512.jpg", - "description": "The Queen Mary's Army Auxiliary Corps during the First World War, France Members of Queen Mary's Ar" + "url": "assets/travel_images/calle_loiza_san_juan_puerto_rico_hurricane_maria.jpg", + "description": "" }, { - "url": "assets/travel_images/The_promenade,_Blackpool,_Lancashire,_England,_ca._1898.jpg", - "description": "11103. Blackpool, the promenade." + "url": "assets/travel_images/canadian_pacific_railway_banff_ad.jpg", + "description": "" }, { - "url": "assets/travel_images/Checkerboard_forest_in_Idaho.jpg", - "description": "An astronaut aboard the International Space Station observed this distinctive checkerboard pattern a" + "url": "assets/travel_images/canyonlands_national_park_utah.jpg", + "description": "" }, { - "url": "assets/travel_images/Climate_change_icon.png", - "description": "Climate change is a change in the statistical distribution of weather patterns when that change last" + "url": "assets/travel_images/capulin_volcano_new_mexico.jpg", + "description": "" }, { - "url": "assets/travel_images/Earth_Day_Flag.png", - "description": "Higher-quality PNG version of John McConnell's Earth Day flag, based on this photograph. Requested" + "url": "assets/travel_images/caribbean_reef_squid.jpg", + "description": "" }, { - "url": "assets/travel_images/Garibaldi_National_Park_-_Garibaldi_Mountain.jpg", - "description": "Forest on Mount Garibaldi, Garibaldi Provincial Park, British Columbia, Canada" + "url": "assets/travel_images/carioca_aqueduct_rio_de_janeiro.jpg", + "description": "" }, { - "url": "assets/travel_images/Niepolomice_oli_2013251.jpg", - "description": "Since the 1200s it has been a forest of special use and protection in Poland. In this view from spac" + "url": "assets/travel_images/carters_beach_sand.jpg", + "description": "" }, { - "url": "assets/travel_images/Redwood_M_D_Vaden.jpg", - "description": "Simpson Reed Discovery Trail, Jedediah Smith Redwoods State Park, Northern California. Image shows" + "url": "assets/travel_images/castelldefels_spain_september.jpg", + "description": "" }, { - "url": "assets/travel_images/The_Earth_seen_from_Apollo_17_with_transparent_background.png", - "description": ""The Blue Marble" is a famous photograph of the Earth taken on December 7, 1972 by the crew of the" + "url": "assets/travel_images/cathedral_of_christ_the_saviour_moscow_russia.jpg", + "description": "" }, { - "url": "assets/travel_images/Leaf_1_web.jpg", - "description": "A leaf." + "url": "assets/travel_images/checkerboard_forest_idaho.jpg", + "description": "" }, { - "url": "assets/travel_images/A_mine_explodes_close_to_a_British_truck_as_it_carries_infantry_through_enemy_minefields_and_wire_to_the_new_front_lines.jpg", - "description": "A mine explodes close to a British truck as it carries infantry through enemy minefields and wire to" + "url": "assets/travel_images/circuit_de_catalunya_f1.jpg", + "description": "" }, { - "url": "assets/travel_images/Aerial_view_of_dunefield,_White_Sands_National_Park,_New_Mexico,_United_States.png", - "description": "Aerial view of dunefield, White Sands National Park, New Mexico, United States" + "url": "assets/travel_images/circular_quay_sydney_1938.jpg", + "description": "" }, { - "url": "assets/travel_images/DesertIguana031611.jpg", - "description": "Desert Iguana (Dipsosaurus dorsalis) near Amboy Crater, Mojave Desert, California." + "url": "assets/travel_images/comptons_of_soho_london.jpg", + "description": "" }, { - "url": "assets/travel_images/Desert_Lake,_near_Ragtown,_Nevada_MET_DP243000.jpg", - "description": "Photograph; Photographs" + "url": "assets/travel_images/conseil_detat_paris.jpg", + "description": "" }, { - "url": "assets/travel_images/Desert_Pavement_Mojave_2000.jpg", - "description": "Desert pavement in the Cima Volcanic Field of the Mojave Desert." + "url": "assets/travel_images/coral_polyp_anatomy.jpg", + "description": "" }, { - "url": "assets/travel_images/Deserts.png", - "description": "NASA World Wind 1.4 used." + "url": "assets/travel_images/crab_on_beach_phuket_thailand.jpg", + "description": "" }, { - "url": "assets/travel_images/Gusev_Spirit_01.jpg", - "description": "This full-resolution image taken by the panoramic camera onboard the Mars Exploration Rover Spirit b" + "url": "assets/travel_images/crowded_tram_tokyo.jpg", + "description": "" }, { - "url": "assets/travel_images/Marco_Polo_traveling.JPG", - "description": "Marco Polo travelling, Miniature from the Book "The Travels of Marco Polo" ("Il milione"), origina" + "url": "assets/travel_images/cruise_ship_bridge.jpg", + "description": "" }, { - "url": "assets/travel_images/Saltation-mechanics-i18n.png", - "description": "Internationalization of the diagram showing the mechanics of eolian transport. 1=Creep 2=Saltation 3" + "url": "assets/travel_images/cruise_ship_casino.jpg", + "description": "" }, { - "url": "assets/travel_images/The_World_Factbook_-_Algeria_-_Flickr_-_The_Central_Intelligence_Agency_(7).jpg", - "description": "Sahara dunes at sunset. Visit The World Factbook for more information about Algeria." + "url": "assets/travel_images/cruise_ship_luggage.jpg", + "description": "" }, { - "url": "assets/travel_images/Sandstorm_in_Al_Asad,_Iraq.jpg", - "description": "A massive dust storm cloud (haboob) is close to enveloping a military camp as it rolls over Al Asad" + "url": "assets/travel_images/cruise_ship_medical_area.jpg", + "description": "" }, { - "url": "assets/travel_images/The_Earth_seen_from_Apollo_17.jpg", - "description": ""The Blue Marble" is a famous photograph of the Earth taken on December 7, 1972, by the crew of th" + "url": "assets/travel_images/dam_square_amsterdam.jpg", + "description": "" }, { - "url": "assets/travel_images/Ulaan_tsutgalan,_Mongolia.jpg", - "description": "Ulaan tsutgalan, Mongolia" + "url": "assets/travel_images/deep_sea_corals_wagner_seamount.jpg", + "description": "" }, { - "url": "assets/travel_images/Ancient_coral_reefs.jpg", - "description": "Antiguas Arrecifes de Coral" + "url": "assets/travel_images/desert_iguana_mojave_desert_california.jpg", + "description": "" }, { - "url": "assets/travel_images/Atoll_forming-Atoll.png", - "description": "Internationalization of the diagram:Atoll forming. 1=Volcanic Island 2=Fringing reef 3=Barrier reeef" + "url": "assets/travel_images/desert_pavement_mojave.jpg", + "description": "" }, { - "url": "assets/travel_images/Atoll_forming-Barrier_reef.png", - "description": "Internationalization of the diagram:Atoll forming. 1=Volcanic Island 2=Fringing reef 3=Barrier reeef" + "url": "assets/travel_images/downtown_rio_de_janeiro.jpg", + "description": "" }, { - "url": "assets/travel_images/Atoll_forming-Fringing_reef.png", - "description": "Internationalization of the diagram:Atoll forming. 1=Volcanic Island 2=Fringing reef 3=Barrier reeef" + "url": "assets/travel_images/dubai_artificial_archipelagos_from_space.jpg", + "description": "" }, { - "url": "assets/travel_images/Atoll_forming-volcano.png", - "description": "Internationalization of the diagram:Atoll forming. 1=Volcanic Island 2=Fringing reef 3=Barrier reeef" + "url": "assets/travel_images/dubai_creek_1964.jpg", + "description": "" }, -]'''; + { + "url": "assets/travel_images/dubai_fountain.jpg", + "description": "" + }, + { + "url": "assets/travel_images/dubai_future_forum_2024.jpg", + "description": "" + }, + { + "url": "assets/travel_images/dubai_uae.jpg", + "description": "" + }, + { + "url": "assets/travel_images/earth_from_apollo_17.jpg", + "description": "" + }, + { + "url": "assets/travel_images/edo_panorama_tokyo.jpg", + "description": "" + }, + { + "url": "assets/travel_images/eiffel_tower_construction_1888.jpg", + "description": "" + }, + { + "url": "assets/travel_images/fairmont_chateau_lake_louise.jpg", + "description": "" + }, + { + "url": "assets/travel_images/fira_santorini_1919.jpg", + "description": "" + }, + { + "url": "assets/travel_images/first_electric_tram_berlin_1881.jpg", + "description": "" + }, + { + "url": "assets/travel_images/fluorescent_coral_monterey_bay_aquarium.jpg", + "description": "" + }, + { + "url": "assets/travel_images/fontana_della_barcaccia_rome.jpg", + "description": "" + }, + { + "url": "assets/travel_images/fringing_coral_reef_eilat_israel.jpg", + "description": "" + }, + { + "url": "assets/travel_images/fushimi_yagura_imperial_palace_tokyo.jpg", + "description": "" + }, + { + "url": "assets/travel_images/ganz_electric_locomotive_italy_1901.jpg", + "description": "" + }, + { + "url": "assets/travel_images/geikie_plateau_glacier_greenland.jpg", + "description": "" + }, + { + "url": "assets/travel_images/george_street_sydney.jpg", + "description": "" + }, + { + "url": "assets/travel_images/glacial_moraines_lake_louise_canada.jpg", + "description": "" + }, + { + "url": "assets/travel_images/glacially_plucked_granite_aland_finland.jpg", + "description": "" + }, + { + "url": "assets/travel_images/gray_wolf.jpg", + "description": "" + }, + { + "url": "assets/travel_images/green_sand_mahana_beach_hawaii.jpg", + "description": "" + }, + { + "url": "assets/travel_images/gusev_crater_mars.jpg", + "description": "" + }, + { + "url": "assets/travel_images/hapag_steamship_prinzessin_victoria_luise.jpg", + "description": "" + }, + { + "url": "assets/travel_images/hawaii_archipelago_satellite_view.jpg", + "description": "" + }, + { + "url": "assets/travel_images/hiram_bingham_machu_picchu_1912.jpg", + "description": "" + }, + { + "url": "assets/travel_images/holyland_model_of_jerusalem.jpg", + "description": "" + }, + { + "url": "assets/travel_images/intihuatana_stone_machu_picchu.jpg", + "description": "" + }, + { + "url": "assets/travel_images/islamic_cultural_center_new_york.jpg", + "description": "" + }, + { + "url": "assets/travel_images/island_princess_cruise_ship.jpg", + "description": "" + }, + { + "url": "assets/travel_images/jedediah_smith_redwoods_california.jpg", + "description": "" + }, + { + "url": "assets/travel_images/kata_noi_beach_phuket_thailand.jpg", + "description": "" + }, + { + "url": "assets/travel_images/kensington_museums_london_aerial.jpg", + "description": "" + }, + { + "url": "assets/travel_images/kinkaku_ji_golden_pavilion_kyoto.jpg", + "description": "" + }, + { + "url": "assets/travel_images/koryaksky_volcano_kamchatka_russia.jpg", + "description": "" + }, + { + "url": "assets/travel_images/kurumba_island_maldives.jpg", + "description": "" + }, + { + "url": "assets/travel_images/kyoto_railway_map.jpg", + "description": "" + }, + { + "url": "assets/travel_images/kyoto_subway.jpg", + "description": "" + }, + { + "url": "assets/travel_images/kyoto_view_from_kiyomizu_dera_1870s.jpg", + "description": "" + }, + { + "url": "assets/travel_images/lahaina_maui_wildfire_damage.jpg", + "description": "" + }, + { + "url": "assets/travel_images/lake_vostok_antarctica.jpg", + "description": "" + }, + { + "url": "assets/travel_images/le_moulin_de_la_galette_renoir.jpg", + "description": "" + }, + { + "url": "assets/travel_images/les_deux_magots_cafe_paris.jpg", + "description": "" + }, + { + "url": "assets/travel_images/lincoln_tunnel_manhattan.jpg", + "description": "" + }, + { + "url": "assets/travel_images/linha_vermelha_rio_de_janeiro.jpg", + "description": "" + }, + { + "url": "assets/travel_images/litli_hrutur_eruption_iceland.jpg", + "description": "" + }, + { + "url": "assets/travel_images/llandudno_wales.jpg", + "description": "" + }, + { + "url": "assets/travel_images/lucerne_train_station_switzerland.jpg", + "description": "" + }, + { + "url": "assets/travel_images/lumiere_brothers_cinematographe_poster.jpg", + "description": "" + }, + { + "url": "assets/travel_images/macba_barcelona.jpg", + "description": "" + }, + { + "url": "assets/travel_images/machu_picchu_sacred_plaza.jpg", + "description": "" + }, + { + "url": "assets/travel_images/machu_picchu_urubamba_canyon.jpg", + "description": "" + }, + { + "url": "assets/travel_images/magere_brug_amsterdam.jpg", + "description": "" + }, + { + "url": "assets/travel_images/maldives_islands.jpg", + "description": "" + }, + { + "url": "assets/travel_images/man_o_war_cove_dorset_england.jpg", + "description": "" + }, + { + "url": "assets/travel_images/map_of_izu_islands_japan.jpg", + "description": "" + }, + { + "url": "assets/travel_images/map_of_new_amsterdam_1660.jpg", + "description": "" + }, + { + "url": "assets/travel_images/map_of_paris_1657.jpg", + "description": "" + }, + { + "url": "assets/travel_images/marco_polo_traveling.jpg", + "description": "" + }, + { + "url": "assets/travel_images/monte_carlo_casino_monaco.jpg", + "description": "" + }, + { + "url": "assets/travel_images/moraine_lake_banff.jpg", + "description": "" + }, + { + "url": "assets/travel_images/morro_do_borel_rio_de_janeiro.jpg", + "description": "" + }, + { + "url": "assets/travel_images/mount_garibaldi_british_columbia.jpg", + "description": "" + }, + { + "url": "assets/travel_images/mount_st_helens_east_dome.jpg", + "description": "" + }, + { + "url": "assets/travel_images/mount_vesuvius_italy.jpg", + "description": "" + }, + { + "url": "assets/travel_images/mulberry_street_new_york_1900.jpg", + "description": "" + }, + { + "url": "assets/travel_images/museum_of_the_future_dubai.jpg", + "description": "" + }, + { + "url": "assets/travel_images/niagara_falls_american_side.jpg", + "description": "" + }, + { + "url": "assets/travel_images/noaa_coral_nurseries.jpg", + "description": "" + }, + { + "url": "assets/travel_images/nyepi_festival_bali.jpg", + "description": "" + }, + { + "url": "assets/travel_images/olympus_mons_mars.jpg", + "description": "" + }, + { + "url": "assets/travel_images/palais_de_la_cite_paris.jpg", + "description": "" + }, + { + "url": "assets/travel_images/paris_19th_arrondissement.jpg", + "description": "" + }, + { + "url": "assets/travel_images/paternoster_square_london.jpg", + "description": "" + }, + { + "url": "assets/travel_images/phuket_thailand.jpg", + "description": "" + }, + { + "url": "assets/travel_images/piazza_navona_rome.jpg", + "description": "" + }, + { + "url": "assets/travel_images/piazzetta_san_marco_venice.jpg", + "description": "" + }, + { + "url": "assets/travel_images/pillar_coral.jpg", + "description": "" + }, + { + "url": "assets/travel_images/po_liner_strathaird_fremantle.jpg", + "description": "" + }, + { + "url": "assets/travel_images/promthep_cape_phuket_thailand.jpg", + "description": "" + }, + { + "url": "assets/travel_images/puu_oo_volcanic_cone_hawaii.jpg", + "description": "" + }, + { + "url": "assets/travel_images/queenstown_new_zealand_2.jpg", + "description": "" + }, + { + "url": "assets/travel_images/queenstown_new_zealand.jpg", + "description": "" + }, + { + "url": "assets/travel_images/ramla_bay_gozo_malta.jpg", + "description": "" + }, + { + "url": "assets/travel_images/rio_de_janeiro_1889.jpg", + "description": "" + }, + { + "url": "assets/travel_images/rio_de_janeiro_avenue_1910s.jpg", + "description": "" + }, + { + "url": "assets/travel_images/rio_de_janeiro_from_space.jpg", + "description": "" + }, + { + "url": "assets/travel_images/rio_de_janeiro.jpg", + "description": "" + }, + { + "url": "assets/travel_images/room_of_the_three_windows_machu_picchu.jpg", + "description": "" + }, + { + "url": "assets/travel_images/saffron_gatherers_fresco_santorini.jpg", + "description": "" + }, + { + "url": "assets/travel_images/sailing_contender_dinghy.jpg", + "description": "" + }, + { + "url": "assets/travel_images/san_marco_basin_venice.jpg", + "description": "" + }, + { + "url": "assets/travel_images/sandstorm_al_asad_iraq.jpg", + "description": "" + }, + { + "url": "assets/travel_images/sanjusangendo_temple_kyoto.jpg", + "description": "" + }, + { + "url": "assets/travel_images/santorini_from_space.jpg", + "description": "" + }, + { + "url": "assets/travel_images/santorini_panorama.jpg", + "description": "" + }, + { + "url": "assets/travel_images/santorini_satellite_image.jpg", + "description": "" + }, + { + "url": "assets/travel_images/shijo_kawaramachi_kyoto.jpg", + "description": "" + }, + { + "url": "assets/travel_images/shofuku_ji_temple_tokyo.jpg", + "description": "" + }, + { + "url": "assets/travel_images/snorkeling_gear.jpg", + "description": "" + }, + { + "url": "assets/travel_images/snorkeling_hanauma_bay_hawaii.jpg", + "description": "" + }, + { + "url": "assets/travel_images/south_cascade_glacier_retreat.jpg", + "description": "" + }, + { + "url": "assets/travel_images/st_pauls_cathedral_london.jpg", + "description": "" + }, + { + "url": "assets/travel_images/st_peters_basilica_rome.jpg", + "description": "" + }, + { + "url": "assets/travel_images/state_theatre_sydney.jpg", + "description": "" + }, + { + "url": "assets/travel_images/statue_of_liberty_new_york.jpg", + "description": "" + }, + { + "url": "assets/travel_images/suruga_street_edo_hiroshige.jpg", + "description": "" + }, + { + "url": "assets/travel_images/sydney_at_night_satellite.jpg", + "description": "" + }, + { + "url": "assets/travel_images/sydney_cove_1888.jpg", + "description": "" + }, + { + "url": "assets/travel_images/sydney_cove_watling_1794.jpg", + "description": "" + }, + { + "url": "assets/travel_images/sydney_harbour_bridge_1932.jpg", + "description": "" + }, + { + "url": "assets/travel_images/sydney_olympic_park.jpg", + "description": "" + }, + { + "url": "assets/travel_images/table_coral_hawaii.jpg", + "description": "" + }, + { + "url": "assets/travel_images/temple_emanu_el_new_york.jpg", + "description": "" + }, + { + "url": "assets/travel_images/temple_of_heaven_beijing_china.jpg", + "description": "" + }, + { + "url": "assets/travel_images/torre_glories_barcelona.jpg", + "description": "" + }, + { + "url": "assets/travel_images/trajans_market_rome.jpg", + "description": "" + }, + { + "url": "assets/travel_images/ulaan_tsutgalan_waterfall_mongolia.jpg", + "description": "" + }, + { + "url": "assets/travel_images/unisphere_corona_park_new_york.jpg", + "description": "" + }, + { + "url": "assets/travel_images/vatnajokull_glacier_iceland.jpg", + "description": "" + }, + { + "url": "assets/travel_images/vellore_golden_temple_india.jpg", + "description": "" + }, + { + "url": "assets/travel_images/venice_from_space.jpg", + "description": "" + }, + { + "url": "assets/travel_images/venice_panorama_1870s.jpg", + "description": "" + }, + { + "url": "assets/travel_images/venice_shop_window.jpg", + "description": "" + }, + { + "url": "assets/travel_images/view_of_fort_george_new_york.jpg", + "description": "" + }, + { + "url": "assets/travel_images/view_of_new_amsterdam_1664.jpg", + "description": "" + }, + { + "url": "assets/travel_images/westminster_abbey_canaletto_1749.jpg", + "description": "" + }, + { + "url": "assets/travel_images/white_sands_national_park_new_mexico.jpg", + "description": "" + }, + { + "url": "assets/travel_images/whitetip_reef_shark_hawaii.jpg", + "description": "" + }, + { + "url": "assets/travel_images/worker_empire_state_building_new_york.jpg", + "description": "" + }, + { + "url": "assets/travel_images/ziggurat_of_ur_iraq.jpg", + "description": "" + }, + { + "url": "assets/travel_images/zoroastrian_temple_yazd_iran.jpg", + "description": "" + } +] +'''; From 9c3c4b925bc364daa9c14bde08f4734cda89a448 Mon Sep 17 00:00:00 2001 From: Polina Cherkasova Date: Mon, 4 Aug 2025 13:28:09 -0700 Subject: [PATCH 03/20] - --- .../{images.json => .images.json} | 0 examples/travel_app/test/images_test.dart | 32 +++++++++++++++++++ 2 files changed, 32 insertions(+) rename examples/travel_app/assets/travel_images/{images.json => .images.json} (100%) create mode 100644 examples/travel_app/test/images_test.dart diff --git a/examples/travel_app/assets/travel_images/images.json b/examples/travel_app/assets/travel_images/.images.json similarity index 100% rename from examples/travel_app/assets/travel_images/images.json rename to examples/travel_app/assets/travel_images/.images.json diff --git a/examples/travel_app/test/images_test.dart b/examples/travel_app/test/images_test.dart new file mode 100644 index 000000000..479efe058 --- /dev/null +++ b/examples/travel_app/test/images_test.dart @@ -0,0 +1,32 @@ +import 'dart:convert'; +import 'dart:io'; + +import 'package:flutter_test/flutter_test.dart'; + +void main() { + test( + 'images.json accurately lists all images in the assets/travel_images directory', + () { + final imageDirectory = Directory('assets/travel_images'); + final imageFiles = + imageDirectory + .listSync() + .where( + (file) => + file.path.endsWith('.jpg') || file.path.endsWith('.png'), + ) + .map((file) => file.path.split('/').last) + .toList() + ..sort(); + + final jsonFile = File('assets/travel_images/.images.json'); + final jsonString = jsonFile.readAsStringSync(); + final jsonList = json.decode(jsonString) as List; + final jsonImageFiles = + jsonList.map((item) => item['image_file_name'] as String).toList() + ..sort(); + + expect(imageFiles, equals(jsonImageFiles)); + }, + ); +} From e82aa347018c48a1fac26b19b8eeb54685dd74b9 Mon Sep 17 00:00:00 2001 From: Polina Cherkasova Date: Mon, 4 Aug 2025 14:21:42 -0700 Subject: [PATCH 04/20] Update images.dart --- examples/travel_app/lib/src/images.dart | 731 ++++-------------------- 1 file changed, 105 insertions(+), 626 deletions(-) diff --git a/examples/travel_app/lib/src/images.dart b/examples/travel_app/lib/src/images.dart index efe0c3ec8..baa8a546a 100644 --- a/examples/travel_app/lib/src/images.dart +++ b/examples/travel_app/lib/src/images.dart @@ -1,732 +1,211 @@ final imagesJson = ''' [ { - "url": "assets/travel_images/abbey_road_studios_london.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/Earth_Day_Flag.png", + "description": "Higher-quality PNG version of John McConnell's Earth Day flag, based on this photograph. Requested" }, { - "url": "assets/travel_images/akrotiri_spring_fresco_santorini.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/Lewis_overthrust_fault_nh10f.jpg", + "description": "schematic illustration of the Lewis overthrust fault in northern Montana, USA and Southern Alberta" }, { - "url": "assets/travel_images/al_fahidi_fort_dubai.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/Hiking_fashion,_11_July_1932_slnsw.jpg", + "description": "Hiking fashion, 11 July 1932, Sun Newspaper, from film negative, State Library of New South Wale" }, { - "url": "assets/travel_images/alimini_lake_otranto_italy.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/P\u00e5ske.jpg", + "description": "Snow and skiing on Hardangervidda, near Vegglifjell, Norway." }, { - "url": "assets/travel_images/amsterdam_gay_pride_2013.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/Hanauma_Bay_snorkelers_1973.png", + "description": "Snorkelers at Hanauma Bay, Oahu, Hawaii." }, { - "url": "assets/travel_images/anchieta_neighborhood_rio_de_janeiro.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/Snorkeling_gear.jpg", + "description": "Typical snorkeling equipment: snorkel, diving mask and swimfins." }, { - "url": "assets/travel_images/ancient_coral_reefs.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/Zavorra.JPG", + "description": "Cintura zavorra" }, { - "url": "assets/travel_images/augustine_volcano_alaska.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/Contender_sailing_dinghy.jpg", + "description": "User:Gwicke sailing a Contender dinghy at the '98 Worlds." }, { - "url": "assets/travel_images/baker_street_station_london_1906.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/Corrientes-oceanicas.png", + "description": "the ocean currents. Note that E. Greenland + Labrador + Norwegian = Viking gyre Gulf stream + N. A" }, { - "url": "assets/travel_images/bali_memorial.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/La_Marine-Pacini-140.png", + "description": "A line of battle. Illustration from La Marine, by Pacini." }, { - "url": "assets/travel_images/banded_cleaner_shrimp.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/SantaMaria.jpg", + "description": "Spanish carrack Santa Maria" }, { - "url": "assets/travel_images/banff_from_sulphur_mountain.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/Sports_icon.png", + "description": "Sports icon for Portals" }, { - "url": "assets/travel_images/banff_springs_hotel_1902.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/Tacking_near_Britannia_Bridge.jpg", + "description": "Tacking near Britannia Bridge - Round Anglesey race Author: User:Velela. Location: Nelson statue n" }, { - "url": "assets/travel_images/bank_of_england_london.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/Alimini_Otranto.jpg", + "description": "Laghi Alimini Otranto" }, { - "url": "assets/travel_images/barcelona_drawing_1563.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/Brighton,_the_front_and_the_chain_pier_seen_in_the_distance.jpg", + "description": ""Brighton: the front and the chain pier seen in the distance," by Frederick William Woledge (active" }, { - "url": "assets/travel_images/barcelona_sants_station.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/Carters_Beach-_Sand.jpg", + "description": "Carters Beach- Sand" }, { - "url": "assets/travel_images/blackpool_promenade_england.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/Castelldefels_September.JPG", + "description": "September in Castelldefels" }, { - "url": "assets/travel_images/borobudur_indonesia.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/Green_sand_closeup_1.jpg", + "description": "Closeup of green sand taken from Mahana Beach in Hawai\u02bbi." }, { - "url": "assets/travel_images/botafogo_bay_rio_de_janeiro.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/HIHWNMS_trash_on_the_beach_(50093889173).jpg", + "description": "Close up of trash covering a tide line on a beach in Hawaiian Islands Humpback Whale National Marine" }, { - "url": "assets/travel_images/brain_coral_spawning.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/Kemp's_Ridley_sea_turtle_nesting.JPG", + "description": "Kemp's Ridley sea turtle nesting." }, { - "url": "assets/travel_images/brain_coral.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/Man_o'war_cove_near_lulworth_dorset_arp.jpg", + "description": "Man O\u2019War Cove in St Oswalds Bay, Dorset, England (near Lulworth Cove and the natural rock arch of" }, { - "url": "assets/travel_images/brighton_beach_england.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/Monte_Carlo_Casino_seaside_facade_before_1878_-_Bonillo_2004_p113.jpg", + "description": "Photograph of the seaside facade of the Monte Carlo Casino before the construction of the Salle Garn" }, { - "url": "assets/travel_images/broadway_new_york_1840.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/Ramla_Bay.jpg", + "description": "Ramla Bay, Gozo, Malta. Taken from the western cliff." }, { - "url": "assets/travel_images/brooklyn_bridge_new_york.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/Scala_dei_Turchi_Sand_062313.jpg", + "description": "Sand from the beach at Scala dei Turchi, Sicily." }, { - "url": "assets/travel_images/calle_loiza_san_juan_puerto_rico_hurricane_maria.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/The_Queen_Mary's_Army_Auxiliary_Corps_during_the_First_World_War,_France_Q11512.jpg", + "description": "The Queen Mary's Army Auxiliary Corps during the First World War, France Members of Queen Mary's Ar" }, { - "url": "assets/travel_images/canadian_pacific_railway_banff_ad.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/The_promenade,_Blackpool,_Lancashire,_England,_ca._1898.jpg", + "description": "11103. Blackpool, the promenade." }, { - "url": "assets/travel_images/canyonlands_national_park_utah.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/Checkerboard_forest_in_Idaho.jpg", + "description": "An astronaut aboard the International Space Station observed this distinctive checkerboard pattern a" }, { - "url": "assets/travel_images/capulin_volcano_new_mexico.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/Climate_change_icon.png", + "description": "Climate change is a change in the statistical distribution of weather patterns when that change last" }, { - "url": "assets/travel_images/caribbean_reef_squid.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/Earth_Day_Flag.png", + "description": "Higher-quality PNG version of John McConnell's Earth Day flag, based on this photograph. Requested" }, { - "url": "assets/travel_images/carioca_aqueduct_rio_de_janeiro.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/Garibaldi_National_Park_-_Garibaldi_Mountain.jpg", + "description": "Forest on Mount Garibaldi, Garibaldi Provincial Park, British Columbia, Canada" }, { - "url": "assets/travel_images/carters_beach_sand.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/Niepolomice_oli_2013251.jpg", + "description": "Since the 1200s it has been a forest of special use and protection in Poland. In this view from spac" }, { - "url": "assets/travel_images/castelldefels_spain_september.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/Redwood_M_D_Vaden.jpg", + "description": "Simpson Reed Discovery Trail, Jedediah Smith Redwoods State Park, Northern California. Image shows" }, { - "url": "assets/travel_images/cathedral_of_christ_the_saviour_moscow_russia.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/The_Earth_seen_from_Apollo_17_with_transparent_background.png", + "description": ""The Blue Marble" is a famous photograph of the Earth taken on December 7, 1972 by the crew of the" }, { - "url": "assets/travel_images/checkerboard_forest_idaho.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/Leaf_1_web.jpg", + "description": "A leaf." }, { - "url": "assets/travel_images/circuit_de_catalunya_f1.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/A_mine_explodes_close_to_a_British_truck_as_it_carries_infantry_through_enemy_minefields_and_wire_to_the_new_front_lines.jpg", + "description": "A mine explodes close to a British truck as it carries infantry through enemy minefields and wire to" }, { - "url": "assets/travel_images/circular_quay_sydney_1938.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/Aerial_view_of_dunefield,_White_Sands_National_Park,_New_Mexico,_United_States.png", + "description": "Aerial view of dunefield, White Sands National Park, New Mexico, United States" }, { - "url": "assets/travel_images/comptons_of_soho_london.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/DesertIguana031611.jpg", + "description": "Desert Iguana (Dipsosaurus dorsalis) near Amboy Crater, Mojave Desert, California." }, { - "url": "assets/travel_images/conseil_detat_paris.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/Desert_Lake,_near_Ragtown,_Nevada_MET_DP243000.jpg", + "description": "Photograph; Photographs" }, { - "url": "assets/travel_images/coral_polyp_anatomy.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/Desert_Pavement_Mojave_2000.jpg", + "description": "Desert pavement in the Cima Volcanic Field of the Mojave Desert." }, { - "url": "assets/travel_images/crab_on_beach_phuket_thailand.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/Deserts.png", + "description": "NASA World Wind 1.4 used." }, { - "url": "assets/travel_images/crowded_tram_tokyo.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/Gusev_Spirit_01.jpg", + "description": "This full-resolution image taken by the panoramic camera onboard the Mars Exploration Rover Spirit b" }, { - "url": "assets/travel_images/cruise_ship_bridge.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/Marco_Polo_traveling.JPG", + "description": "Marco Polo travelling, Miniature from the Book "The Travels of Marco Polo" ("Il milione"), origina" }, { - "url": "assets/travel_images/cruise_ship_casino.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/Saltation-mechanics-i18n.png", + "description": "Internationalization of the diagram showing the mechanics of eolian transport. 1=Creep 2=Saltation 3" }, { - "url": "assets/travel_images/cruise_ship_luggage.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/The_World_Factbook_-_Algeria_-_Flickr_-_The_Central_Intelligence_Agency_(7).jpg", + "description": "Sahara dunes at sunset. Visit The World Factbook for more information about Algeria." }, { - "url": "assets/travel_images/cruise_ship_medical_area.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/Sandstorm_in_Al_Asad,_Iraq.jpg", + "description": "A massive dust storm cloud (haboob) is close to enveloping a military camp as it rolls over Al Asad" }, { - "url": "assets/travel_images/dam_square_amsterdam.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/The_Earth_seen_from_Apollo_17.jpg", + "description": ""The Blue Marble" is a famous photograph of the Earth taken on December 7, 1972, by the crew of th" }, { - "url": "assets/travel_images/deep_sea_corals_wagner_seamount.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/Ulaan_tsutgalan,_Mongolia.jpg", + "description": "Ulaan tsutgalan, Mongolia" }, { - "url": "assets/travel_images/desert_iguana_mojave_desert_california.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/Ancient_coral_reefs.jpg", + "description": "Antiguas Arrecifes de Coral" }, { - "url": "assets/travel_images/desert_pavement_mojave.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/Atoll_forming-Atoll.png", + "description": "Internationalization of the diagram:Atoll forming. 1=Volcanic Island 2=Fringing reef 3=Barrier reeef" }, { - "url": "assets/travel_images/downtown_rio_de_janeiro.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/Atoll_forming-Barrier_reef.png", + "description": "Internationalization of the diagram:Atoll forming. 1=Volcanic Island 2=Fringing reef 3=Barrier reeef" }, { - "url": "assets/travel_images/dubai_artificial_archipelagos_from_space.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/Atoll_forming-Fringing_reef.png", + "description": "Internationalization of the diagram:Atoll forming. 1=Volcanic Island 2=Fringing reef 3=Barrier reeef" }, { - "url": "assets/travel_images/dubai_creek_1964.jpg", - "description": "" + "url": "https://genui-demo-stockimages.web.app/Atoll_forming-volcano.png", + "description": "Internationalization of the diagram:Atoll forming. 1=Volcanic Island 2=Fringing reef 3=Barrier reeef" }, - { - "url": "assets/travel_images/dubai_fountain.jpg", - "description": "" - }, - { - "url": "assets/travel_images/dubai_future_forum_2024.jpg", - "description": "" - }, - { - "url": "assets/travel_images/dubai_uae.jpg", - "description": "" - }, - { - "url": "assets/travel_images/earth_from_apollo_17.jpg", - "description": "" - }, - { - "url": "assets/travel_images/edo_panorama_tokyo.jpg", - "description": "" - }, - { - "url": "assets/travel_images/eiffel_tower_construction_1888.jpg", - "description": "" - }, - { - "url": "assets/travel_images/fairmont_chateau_lake_louise.jpg", - "description": "" - }, - { - "url": "assets/travel_images/fira_santorini_1919.jpg", - "description": "" - }, - { - "url": "assets/travel_images/first_electric_tram_berlin_1881.jpg", - "description": "" - }, - { - "url": "assets/travel_images/fluorescent_coral_monterey_bay_aquarium.jpg", - "description": "" - }, - { - "url": "assets/travel_images/fontana_della_barcaccia_rome.jpg", - "description": "" - }, - { - "url": "assets/travel_images/fringing_coral_reef_eilat_israel.jpg", - "description": "" - }, - { - "url": "assets/travel_images/fushimi_yagura_imperial_palace_tokyo.jpg", - "description": "" - }, - { - "url": "assets/travel_images/ganz_electric_locomotive_italy_1901.jpg", - "description": "" - }, - { - "url": "assets/travel_images/geikie_plateau_glacier_greenland.jpg", - "description": "" - }, - { - "url": "assets/travel_images/george_street_sydney.jpg", - "description": "" - }, - { - "url": "assets/travel_images/glacial_moraines_lake_louise_canada.jpg", - "description": "" - }, - { - "url": "assets/travel_images/glacially_plucked_granite_aland_finland.jpg", - "description": "" - }, - { - "url": "assets/travel_images/gray_wolf.jpg", - "description": "" - }, - { - "url": "assets/travel_images/green_sand_mahana_beach_hawaii.jpg", - "description": "" - }, - { - "url": "assets/travel_images/gusev_crater_mars.jpg", - "description": "" - }, - { - "url": "assets/travel_images/hapag_steamship_prinzessin_victoria_luise.jpg", - "description": "" - }, - { - "url": "assets/travel_images/hawaii_archipelago_satellite_view.jpg", - "description": "" - }, - { - "url": "assets/travel_images/hiram_bingham_machu_picchu_1912.jpg", - "description": "" - }, - { - "url": "assets/travel_images/holyland_model_of_jerusalem.jpg", - "description": "" - }, - { - "url": "assets/travel_images/intihuatana_stone_machu_picchu.jpg", - "description": "" - }, - { - "url": "assets/travel_images/islamic_cultural_center_new_york.jpg", - "description": "" - }, - { - "url": "assets/travel_images/island_princess_cruise_ship.jpg", - "description": "" - }, - { - "url": "assets/travel_images/jedediah_smith_redwoods_california.jpg", - "description": "" - }, - { - "url": "assets/travel_images/kata_noi_beach_phuket_thailand.jpg", - "description": "" - }, - { - "url": "assets/travel_images/kensington_museums_london_aerial.jpg", - "description": "" - }, - { - "url": "assets/travel_images/kinkaku_ji_golden_pavilion_kyoto.jpg", - "description": "" - }, - { - "url": "assets/travel_images/koryaksky_volcano_kamchatka_russia.jpg", - "description": "" - }, - { - "url": "assets/travel_images/kurumba_island_maldives.jpg", - "description": "" - }, - { - "url": "assets/travel_images/kyoto_railway_map.jpg", - "description": "" - }, - { - "url": "assets/travel_images/kyoto_subway.jpg", - "description": "" - }, - { - "url": "assets/travel_images/kyoto_view_from_kiyomizu_dera_1870s.jpg", - "description": "" - }, - { - "url": "assets/travel_images/lahaina_maui_wildfire_damage.jpg", - "description": "" - }, - { - "url": "assets/travel_images/lake_vostok_antarctica.jpg", - "description": "" - }, - { - "url": "assets/travel_images/le_moulin_de_la_galette_renoir.jpg", - "description": "" - }, - { - "url": "assets/travel_images/les_deux_magots_cafe_paris.jpg", - "description": "" - }, - { - "url": "assets/travel_images/lincoln_tunnel_manhattan.jpg", - "description": "" - }, - { - "url": "assets/travel_images/linha_vermelha_rio_de_janeiro.jpg", - "description": "" - }, - { - "url": "assets/travel_images/litli_hrutur_eruption_iceland.jpg", - "description": "" - }, - { - "url": "assets/travel_images/llandudno_wales.jpg", - "description": "" - }, - { - "url": "assets/travel_images/lucerne_train_station_switzerland.jpg", - "description": "" - }, - { - "url": "assets/travel_images/lumiere_brothers_cinematographe_poster.jpg", - "description": "" - }, - { - "url": "assets/travel_images/macba_barcelona.jpg", - "description": "" - }, - { - "url": "assets/travel_images/machu_picchu_sacred_plaza.jpg", - "description": "" - }, - { - "url": "assets/travel_images/machu_picchu_urubamba_canyon.jpg", - "description": "" - }, - { - "url": "assets/travel_images/magere_brug_amsterdam.jpg", - "description": "" - }, - { - "url": "assets/travel_images/maldives_islands.jpg", - "description": "" - }, - { - "url": "assets/travel_images/man_o_war_cove_dorset_england.jpg", - "description": "" - }, - { - "url": "assets/travel_images/map_of_izu_islands_japan.jpg", - "description": "" - }, - { - "url": "assets/travel_images/map_of_new_amsterdam_1660.jpg", - "description": "" - }, - { - "url": "assets/travel_images/map_of_paris_1657.jpg", - "description": "" - }, - { - "url": "assets/travel_images/marco_polo_traveling.jpg", - "description": "" - }, - { - "url": "assets/travel_images/monte_carlo_casino_monaco.jpg", - "description": "" - }, - { - "url": "assets/travel_images/moraine_lake_banff.jpg", - "description": "" - }, - { - "url": "assets/travel_images/morro_do_borel_rio_de_janeiro.jpg", - "description": "" - }, - { - "url": "assets/travel_images/mount_garibaldi_british_columbia.jpg", - "description": "" - }, - { - "url": "assets/travel_images/mount_st_helens_east_dome.jpg", - "description": "" - }, - { - "url": "assets/travel_images/mount_vesuvius_italy.jpg", - "description": "" - }, - { - "url": "assets/travel_images/mulberry_street_new_york_1900.jpg", - "description": "" - }, - { - "url": "assets/travel_images/museum_of_the_future_dubai.jpg", - "description": "" - }, - { - "url": "assets/travel_images/niagara_falls_american_side.jpg", - "description": "" - }, - { - "url": "assets/travel_images/noaa_coral_nurseries.jpg", - "description": "" - }, - { - "url": "assets/travel_images/nyepi_festival_bali.jpg", - "description": "" - }, - { - "url": "assets/travel_images/olympus_mons_mars.jpg", - "description": "" - }, - { - "url": "assets/travel_images/palais_de_la_cite_paris.jpg", - "description": "" - }, - { - "url": "assets/travel_images/paris_19th_arrondissement.jpg", - "description": "" - }, - { - "url": "assets/travel_images/paternoster_square_london.jpg", - "description": "" - }, - { - "url": "assets/travel_images/phuket_thailand.jpg", - "description": "" - }, - { - "url": "assets/travel_images/piazza_navona_rome.jpg", - "description": "" - }, - { - "url": "assets/travel_images/piazzetta_san_marco_venice.jpg", - "description": "" - }, - { - "url": "assets/travel_images/pillar_coral.jpg", - "description": "" - }, - { - "url": "assets/travel_images/po_liner_strathaird_fremantle.jpg", - "description": "" - }, - { - "url": "assets/travel_images/promthep_cape_phuket_thailand.jpg", - "description": "" - }, - { - "url": "assets/travel_images/puu_oo_volcanic_cone_hawaii.jpg", - "description": "" - }, - { - "url": "assets/travel_images/queenstown_new_zealand_2.jpg", - "description": "" - }, - { - "url": "assets/travel_images/queenstown_new_zealand.jpg", - "description": "" - }, - { - "url": "assets/travel_images/ramla_bay_gozo_malta.jpg", - "description": "" - }, - { - "url": "assets/travel_images/rio_de_janeiro_1889.jpg", - "description": "" - }, - { - "url": "assets/travel_images/rio_de_janeiro_avenue_1910s.jpg", - "description": "" - }, - { - "url": "assets/travel_images/rio_de_janeiro_from_space.jpg", - "description": "" - }, - { - "url": "assets/travel_images/rio_de_janeiro.jpg", - "description": "" - }, - { - "url": "assets/travel_images/room_of_the_three_windows_machu_picchu.jpg", - "description": "" - }, - { - "url": "assets/travel_images/saffron_gatherers_fresco_santorini.jpg", - "description": "" - }, - { - "url": "assets/travel_images/sailing_contender_dinghy.jpg", - "description": "" - }, - { - "url": "assets/travel_images/san_marco_basin_venice.jpg", - "description": "" - }, - { - "url": "assets/travel_images/sandstorm_al_asad_iraq.jpg", - "description": "" - }, - { - "url": "assets/travel_images/sanjusangendo_temple_kyoto.jpg", - "description": "" - }, - { - "url": "assets/travel_images/santorini_from_space.jpg", - "description": "" - }, - { - "url": "assets/travel_images/santorini_panorama.jpg", - "description": "" - }, - { - "url": "assets/travel_images/santorini_satellite_image.jpg", - "description": "" - }, - { - "url": "assets/travel_images/shijo_kawaramachi_kyoto.jpg", - "description": "" - }, - { - "url": "assets/travel_images/shofuku_ji_temple_tokyo.jpg", - "description": "" - }, - { - "url": "assets/travel_images/snorkeling_gear.jpg", - "description": "" - }, - { - "url": "assets/travel_images/snorkeling_hanauma_bay_hawaii.jpg", - "description": "" - }, - { - "url": "assets/travel_images/south_cascade_glacier_retreat.jpg", - "description": "" - }, - { - "url": "assets/travel_images/st_pauls_cathedral_london.jpg", - "description": "" - }, - { - "url": "assets/travel_images/st_peters_basilica_rome.jpg", - "description": "" - }, - { - "url": "assets/travel_images/state_theatre_sydney.jpg", - "description": "" - }, - { - "url": "assets/travel_images/statue_of_liberty_new_york.jpg", - "description": "" - }, - { - "url": "assets/travel_images/suruga_street_edo_hiroshige.jpg", - "description": "" - }, - { - "url": "assets/travel_images/sydney_at_night_satellite.jpg", - "description": "" - }, - { - "url": "assets/travel_images/sydney_cove_1888.jpg", - "description": "" - }, - { - "url": "assets/travel_images/sydney_cove_watling_1794.jpg", - "description": "" - }, - { - "url": "assets/travel_images/sydney_harbour_bridge_1932.jpg", - "description": "" - }, - { - "url": "assets/travel_images/sydney_olympic_park.jpg", - "description": "" - }, - { - "url": "assets/travel_images/table_coral_hawaii.jpg", - "description": "" - }, - { - "url": "assets/travel_images/temple_emanu_el_new_york.jpg", - "description": "" - }, - { - "url": "assets/travel_images/temple_of_heaven_beijing_china.jpg", - "description": "" - }, - { - "url": "assets/travel_images/torre_glories_barcelona.jpg", - "description": "" - }, - { - "url": "assets/travel_images/trajans_market_rome.jpg", - "description": "" - }, - { - "url": "assets/travel_images/ulaan_tsutgalan_waterfall_mongolia.jpg", - "description": "" - }, - { - "url": "assets/travel_images/unisphere_corona_park_new_york.jpg", - "description": "" - }, - { - "url": "assets/travel_images/vatnajokull_glacier_iceland.jpg", - "description": "" - }, - { - "url": "assets/travel_images/vellore_golden_temple_india.jpg", - "description": "" - }, - { - "url": "assets/travel_images/venice_from_space.jpg", - "description": "" - }, - { - "url": "assets/travel_images/venice_panorama_1870s.jpg", - "description": "" - }, - { - "url": "assets/travel_images/venice_shop_window.jpg", - "description": "" - }, - { - "url": "assets/travel_images/view_of_fort_george_new_york.jpg", - "description": "" - }, - { - "url": "assets/travel_images/view_of_new_amsterdam_1664.jpg", - "description": "" - }, - { - "url": "assets/travel_images/westminster_abbey_canaletto_1749.jpg", - "description": "" - }, - { - "url": "assets/travel_images/white_sands_national_park_new_mexico.jpg", - "description": "" - }, - { - "url": "assets/travel_images/whitetip_reef_shark_hawaii.jpg", - "description": "" - }, - { - "url": "assets/travel_images/worker_empire_state_building_new_york.jpg", - "description": "" - }, - { - "url": "assets/travel_images/ziggurat_of_ur_iraq.jpg", - "description": "" - }, - { - "url": "assets/travel_images/zoroastrian_temple_yazd_iran.jpg", - "description": "" - } -] -'''; +]'''; From ad728159ad319abe5be75d684707d5a5485bcc69 Mon Sep 17 00:00:00 2001 From: Polina Cherkasova Date: Mon, 4 Aug 2025 14:35:53 -0700 Subject: [PATCH 05/20] - --- examples/travel_app/lib/main.dart | 14 +- examples/travel_app/lib/src/catalog.dart | 4 + examples/travel_app/lib/src/images.dart | 211 ---------------------- examples/travel_app/test/images_test.dart | 10 +- 4 files changed, 20 insertions(+), 219 deletions(-) delete mode 100644 examples/travel_app/lib/src/images.dart diff --git a/examples/travel_app/lib/main.dart b/examples/travel_app/lib/main.dart index 3eff0b019..f1a78d1d5 100644 --- a/examples/travel_app/lib/main.dart +++ b/examples/travel_app/lib/main.dart @@ -5,9 +5,10 @@ import 'package:flutter_genui/flutter_genui.dart'; import 'firebase_options.dart'; import 'src/catalog.dart'; -import 'src/images.dart'; -final systemPrompt = +late final String _imagesJson; + +final _systemPrompt = '''You are a helpful travel agent assistant who figures out what kind of trip the user wants, and then guides them to book it. @@ -51,7 +52,7 @@ E.g. after an itinerary item like a beach visit, you could include a carousel of # Images to use If you need to use any image URLs, try to find the most relevant ones from the following data: -$imagesJson +$_imagesJson '''; void main() async { @@ -64,6 +65,7 @@ void main() async { androidProvider: AndroidProvider.debug, webProvider: ReCaptchaV3Provider('debug'), ); + _imagesJson = await imagesJson(); runApp(const MyApp()); } @@ -101,7 +103,11 @@ class _MyHomePageState extends State { debugPrint('[$severity] $message'); }, ); - _conversationManager = ConversationManager(catalog, systemPrompt, aiClient); + _conversationManager = ConversationManager( + catalog, + _systemPrompt, + aiClient, + ); } @override diff --git a/examples/travel_app/lib/src/catalog.dart b/examples/travel_app/lib/src/catalog.dart index 941bb37a0..94d74e47d 100644 --- a/examples/travel_app/lib/src/catalog.dart +++ b/examples/travel_app/lib/src/catalog.dart @@ -1,3 +1,4 @@ +import 'package:flutter/services.dart'; import 'package:flutter_genui/flutter_genui.dart'; import 'catalog/filter_chip_group.dart'; @@ -7,6 +8,9 @@ import 'catalog/options_filter_chip.dart'; import 'catalog/tabbed_sections.dart'; import 'catalog/travel_carousel.dart'; +Future imagesJson() async => + await rootBundle.loadString('assets/travel_images/.images.json'); + final catalog = Catalog([ elevatedButtonCatalogItem, columnCatalogItem, diff --git a/examples/travel_app/lib/src/images.dart b/examples/travel_app/lib/src/images.dart deleted file mode 100644 index baa8a546a..000000000 --- a/examples/travel_app/lib/src/images.dart +++ /dev/null @@ -1,211 +0,0 @@ -final imagesJson = ''' -[ - { - "url": "https://genui-demo-stockimages.web.app/Earth_Day_Flag.png", - "description": "Higher-quality PNG version of John McConnell's Earth Day flag, based on this photograph. Requested" - }, - { - "url": "https://genui-demo-stockimages.web.app/Lewis_overthrust_fault_nh10f.jpg", - "description": "schematic illustration of the Lewis overthrust fault in northern Montana, USA and Southern Alberta" - }, - { - "url": "https://genui-demo-stockimages.web.app/Hiking_fashion,_11_July_1932_slnsw.jpg", - "description": "Hiking fashion, 11 July 1932, Sun Newspaper, from film negative, State Library of New South Wale" - }, - { - "url": "https://genui-demo-stockimages.web.app/P\u00e5ske.jpg", - "description": "Snow and skiing on Hardangervidda, near Vegglifjell, Norway." - }, - { - "url": "https://genui-demo-stockimages.web.app/Hanauma_Bay_snorkelers_1973.png", - "description": "Snorkelers at Hanauma Bay, Oahu, Hawaii." - }, - { - "url": "https://genui-demo-stockimages.web.app/Snorkeling_gear.jpg", - "description": "Typical snorkeling equipment: snorkel, diving mask and swimfins." - }, - { - "url": "https://genui-demo-stockimages.web.app/Zavorra.JPG", - "description": "Cintura zavorra" - }, - { - "url": "https://genui-demo-stockimages.web.app/Contender_sailing_dinghy.jpg", - "description": "User:Gwicke sailing a Contender dinghy at the '98 Worlds." - }, - { - "url": "https://genui-demo-stockimages.web.app/Corrientes-oceanicas.png", - "description": "the ocean currents. Note that E. Greenland + Labrador + Norwegian = Viking gyre Gulf stream + N. A" - }, - { - "url": "https://genui-demo-stockimages.web.app/La_Marine-Pacini-140.png", - "description": "A line of battle. Illustration from La Marine, by Pacini." - }, - { - "url": "https://genui-demo-stockimages.web.app/SantaMaria.jpg", - "description": "Spanish carrack Santa Maria" - }, - { - "url": "https://genui-demo-stockimages.web.app/Sports_icon.png", - "description": "Sports icon for Portals" - }, - { - "url": "https://genui-demo-stockimages.web.app/Tacking_near_Britannia_Bridge.jpg", - "description": "Tacking near Britannia Bridge - Round Anglesey race Author: User:Velela. Location: Nelson statue n" - }, - { - "url": "https://genui-demo-stockimages.web.app/Alimini_Otranto.jpg", - "description": "Laghi Alimini Otranto" - }, - { - "url": "https://genui-demo-stockimages.web.app/Brighton,_the_front_and_the_chain_pier_seen_in_the_distance.jpg", - "description": ""Brighton: the front and the chain pier seen in the distance," by Frederick William Woledge (active" - }, - { - "url": "https://genui-demo-stockimages.web.app/Carters_Beach-_Sand.jpg", - "description": "Carters Beach- Sand" - }, - { - "url": "https://genui-demo-stockimages.web.app/Castelldefels_September.JPG", - "description": "September in Castelldefels" - }, - { - "url": "https://genui-demo-stockimages.web.app/Green_sand_closeup_1.jpg", - "description": "Closeup of green sand taken from Mahana Beach in Hawai\u02bbi." - }, - { - "url": "https://genui-demo-stockimages.web.app/HIHWNMS_trash_on_the_beach_(50093889173).jpg", - "description": "Close up of trash covering a tide line on a beach in Hawaiian Islands Humpback Whale National Marine" - }, - { - "url": "https://genui-demo-stockimages.web.app/Kemp's_Ridley_sea_turtle_nesting.JPG", - "description": "Kemp's Ridley sea turtle nesting." - }, - { - "url": "https://genui-demo-stockimages.web.app/Man_o'war_cove_near_lulworth_dorset_arp.jpg", - "description": "Man O\u2019War Cove in St Oswalds Bay, Dorset, England (near Lulworth Cove and the natural rock arch of" - }, - { - "url": "https://genui-demo-stockimages.web.app/Monte_Carlo_Casino_seaside_facade_before_1878_-_Bonillo_2004_p113.jpg", - "description": "Photograph of the seaside facade of the Monte Carlo Casino before the construction of the Salle Garn" - }, - { - "url": "https://genui-demo-stockimages.web.app/Ramla_Bay.jpg", - "description": "Ramla Bay, Gozo, Malta. Taken from the western cliff." - }, - { - "url": "https://genui-demo-stockimages.web.app/Scala_dei_Turchi_Sand_062313.jpg", - "description": "Sand from the beach at Scala dei Turchi, Sicily." - }, - { - "url": "https://genui-demo-stockimages.web.app/The_Queen_Mary's_Army_Auxiliary_Corps_during_the_First_World_War,_France_Q11512.jpg", - "description": "The Queen Mary's Army Auxiliary Corps during the First World War, France Members of Queen Mary's Ar" - }, - { - "url": "https://genui-demo-stockimages.web.app/The_promenade,_Blackpool,_Lancashire,_England,_ca._1898.jpg", - "description": "11103. Blackpool, the promenade." - }, - { - "url": "https://genui-demo-stockimages.web.app/Checkerboard_forest_in_Idaho.jpg", - "description": "An astronaut aboard the International Space Station observed this distinctive checkerboard pattern a" - }, - { - "url": "https://genui-demo-stockimages.web.app/Climate_change_icon.png", - "description": "Climate change is a change in the statistical distribution of weather patterns when that change last" - }, - { - "url": "https://genui-demo-stockimages.web.app/Earth_Day_Flag.png", - "description": "Higher-quality PNG version of John McConnell's Earth Day flag, based on this photograph. Requested" - }, - { - "url": "https://genui-demo-stockimages.web.app/Garibaldi_National_Park_-_Garibaldi_Mountain.jpg", - "description": "Forest on Mount Garibaldi, Garibaldi Provincial Park, British Columbia, Canada" - }, - { - "url": "https://genui-demo-stockimages.web.app/Niepolomice_oli_2013251.jpg", - "description": "Since the 1200s it has been a forest of special use and protection in Poland. In this view from spac" - }, - { - "url": "https://genui-demo-stockimages.web.app/Redwood_M_D_Vaden.jpg", - "description": "Simpson Reed Discovery Trail, Jedediah Smith Redwoods State Park, Northern California. Image shows" - }, - { - "url": "https://genui-demo-stockimages.web.app/The_Earth_seen_from_Apollo_17_with_transparent_background.png", - "description": ""The Blue Marble" is a famous photograph of the Earth taken on December 7, 1972 by the crew of the" - }, - { - "url": "https://genui-demo-stockimages.web.app/Leaf_1_web.jpg", - "description": "A leaf." - }, - { - "url": "https://genui-demo-stockimages.web.app/A_mine_explodes_close_to_a_British_truck_as_it_carries_infantry_through_enemy_minefields_and_wire_to_the_new_front_lines.jpg", - "description": "A mine explodes close to a British truck as it carries infantry through enemy minefields and wire to" - }, - { - "url": "https://genui-demo-stockimages.web.app/Aerial_view_of_dunefield,_White_Sands_National_Park,_New_Mexico,_United_States.png", - "description": "Aerial view of dunefield, White Sands National Park, New Mexico, United States" - }, - { - "url": "https://genui-demo-stockimages.web.app/DesertIguana031611.jpg", - "description": "Desert Iguana (Dipsosaurus dorsalis) near Amboy Crater, Mojave Desert, California." - }, - { - "url": "https://genui-demo-stockimages.web.app/Desert_Lake,_near_Ragtown,_Nevada_MET_DP243000.jpg", - "description": "Photograph; Photographs" - }, - { - "url": "https://genui-demo-stockimages.web.app/Desert_Pavement_Mojave_2000.jpg", - "description": "Desert pavement in the Cima Volcanic Field of the Mojave Desert." - }, - { - "url": "https://genui-demo-stockimages.web.app/Deserts.png", - "description": "NASA World Wind 1.4 used." - }, - { - "url": "https://genui-demo-stockimages.web.app/Gusev_Spirit_01.jpg", - "description": "This full-resolution image taken by the panoramic camera onboard the Mars Exploration Rover Spirit b" - }, - { - "url": "https://genui-demo-stockimages.web.app/Marco_Polo_traveling.JPG", - "description": "Marco Polo travelling, Miniature from the Book "The Travels of Marco Polo" ("Il milione"), origina" - }, - { - "url": "https://genui-demo-stockimages.web.app/Saltation-mechanics-i18n.png", - "description": "Internationalization of the diagram showing the mechanics of eolian transport. 1=Creep 2=Saltation 3" - }, - { - "url": "https://genui-demo-stockimages.web.app/The_World_Factbook_-_Algeria_-_Flickr_-_The_Central_Intelligence_Agency_(7).jpg", - "description": "Sahara dunes at sunset. Visit The World Factbook for more information about Algeria." - }, - { - "url": "https://genui-demo-stockimages.web.app/Sandstorm_in_Al_Asad,_Iraq.jpg", - "description": "A massive dust storm cloud (haboob) is close to enveloping a military camp as it rolls over Al Asad" - }, - { - "url": "https://genui-demo-stockimages.web.app/The_Earth_seen_from_Apollo_17.jpg", - "description": ""The Blue Marble" is a famous photograph of the Earth taken on December 7, 1972, by the crew of th" - }, - { - "url": "https://genui-demo-stockimages.web.app/Ulaan_tsutgalan,_Mongolia.jpg", - "description": "Ulaan tsutgalan, Mongolia" - }, - { - "url": "https://genui-demo-stockimages.web.app/Ancient_coral_reefs.jpg", - "description": "Antiguas Arrecifes de Coral" - }, - { - "url": "https://genui-demo-stockimages.web.app/Atoll_forming-Atoll.png", - "description": "Internationalization of the diagram:Atoll forming. 1=Volcanic Island 2=Fringing reef 3=Barrier reeef" - }, - { - "url": "https://genui-demo-stockimages.web.app/Atoll_forming-Barrier_reef.png", - "description": "Internationalization of the diagram:Atoll forming. 1=Volcanic Island 2=Fringing reef 3=Barrier reeef" - }, - { - "url": "https://genui-demo-stockimages.web.app/Atoll_forming-Fringing_reef.png", - "description": "Internationalization of the diagram:Atoll forming. 1=Volcanic Island 2=Fringing reef 3=Barrier reeef" - }, - { - "url": "https://genui-demo-stockimages.web.app/Atoll_forming-volcano.png", - "description": "Internationalization of the diagram:Atoll forming. 1=Volcanic Island 2=Fringing reef 3=Barrier reeef" - }, -]'''; diff --git a/examples/travel_app/test/images_test.dart b/examples/travel_app/test/images_test.dart index 479efe058..081c66fbf 100644 --- a/examples/travel_app/test/images_test.dart +++ b/examples/travel_app/test/images_test.dart @@ -1,12 +1,15 @@ +// ignore_for_file: avoid_dynamic_calls + import 'dart:convert'; import 'dart:io'; import 'package:flutter_test/flutter_test.dart'; +import 'package:genui_client/src/catalog.dart'; void main() { test( - 'images.json accurately lists all images in the assets/travel_images directory', - () { + '.images.json accurately lists all images in the assets/travel_images directory', + () async { final imageDirectory = Directory('assets/travel_images'); final imageFiles = imageDirectory @@ -19,8 +22,7 @@ void main() { .toList() ..sort(); - final jsonFile = File('assets/travel_images/.images.json'); - final jsonString = jsonFile.readAsStringSync(); + final jsonString = await imagesJson(); final jsonList = json.decode(jsonString) as List; final jsonImageFiles = jsonList.map((item) => item['image_file_name'] as String).toList() From 9626ddc1307dd3cc360eed01b5ca08c7576ba25d Mon Sep 17 00:00:00 2001 From: Polina Cherkasova Date: Mon, 4 Aug 2025 14:37:06 -0700 Subject: [PATCH 06/20] Update main.dart --- examples/travel_app/lib/main.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/travel_app/lib/main.dart b/examples/travel_app/lib/main.dart index f1a78d1d5..8cfd1ad35 100644 --- a/examples/travel_app/lib/main.dart +++ b/examples/travel_app/lib/main.dart @@ -58,7 +58,7 @@ $_imagesJson void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform); - // TODO: we should remove FirebaseAppCheck, as it adds complexity + // TODO: remove FirebaseAppCheck, as it adds complexity //to the example. await FirebaseAppCheck.instance.activate( appleProvider: AppleProvider.debug, From ebfec99d0fe8d053b66e22b817ec7204029de784 Mon Sep 17 00:00:00 2001 From: Polina Cherkasova Date: Mon, 4 Aug 2025 14:45:36 -0700 Subject: [PATCH 07/20] Update images_test.dart --- examples/travel_app/test/images_test.dart | 2 ++ 1 file changed, 2 insertions(+) diff --git a/examples/travel_app/test/images_test.dart b/examples/travel_app/test/images_test.dart index 081c66fbf..4b1ecc8e5 100644 --- a/examples/travel_app/test/images_test.dart +++ b/examples/travel_app/test/images_test.dart @@ -3,6 +3,7 @@ import 'dart:convert'; import 'dart:io'; +import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:genui_client/src/catalog.dart'; @@ -10,6 +11,7 @@ void main() { test( '.images.json accurately lists all images in the assets/travel_images directory', () async { + WidgetsFlutterBinding.ensureInitialized(); final imageDirectory = Directory('assets/travel_images'); final imageFiles = imageDirectory From ae3f1c0c3d1d9ed2fc3cfe700c08be113aec75df Mon Sep 17 00:00:00 2001 From: Polina Cherkasova Date: Mon, 4 Aug 2025 14:47:34 -0700 Subject: [PATCH 08/20] Update images_test.dart --- examples/travel_app/test/images_test.dart | 56 ++++++++++------------- 1 file changed, 25 insertions(+), 31 deletions(-) diff --git a/examples/travel_app/test/images_test.dart b/examples/travel_app/test/images_test.dart index 4b1ecc8e5..1f4450122 100644 --- a/examples/travel_app/test/images_test.dart +++ b/examples/travel_app/test/images_test.dart @@ -1,36 +1,30 @@ -// ignore_for_file: avoid_dynamic_calls - -import 'dart:convert'; -import 'dart:io'; - import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:genui_client/src/catalog.dart'; +import 'package:travel_app/src/catalog/image.dart'; -void main() { - test( - '.images.json accurately lists all images in the assets/travel_images directory', - () async { - WidgetsFlutterBinding.ensureInitialized(); - final imageDirectory = Directory('assets/travel_images'); - final imageFiles = - imageDirectory - .listSync() - .where( - (file) => - file.path.endsWith('.jpg') || file.path.endsWith('.png'), - ) - .map((file) => file.path.split('/').last) - .toList() - ..sort(); +import 'utils.dart'; - final jsonString = await imagesJson(); - final jsonList = json.decode(jsonString) as List; - final jsonImageFiles = - jsonList.map((item) => item['image_file_name'] as String).toList() - ..sort(); +void main() { + testWidgets('Image builds correctly', (WidgetTester tester) async { + await tester.pumpWidget( + testCatalogItem( + image, + { + 'source': 'assets/travel_images/paris.jpg', + 'width': 100.0, + 'height': 100.0, + 'fit': 'cover', + }, + ), + ); - expect(imageFiles, equals(jsonImageFiles)); - }, - ); -} + final imageWidget = tester.widget(find.byType(Image)); + expect(imageWidget.width, 100.0); + expect(imageWidget.height, 100.0); + expect(imageWidget.fit, BoxFit.cover); + expect( + (imageWidget.image as AssetImage).assetName, + 'assets/travel_images/paris.jpg', + ); + }); +} \ No newline at end of file From 62ff74067643b242bab73aca86f410135d4956fa Mon Sep 17 00:00:00 2001 From: Polina Cherkasova Date: Mon, 4 Aug 2025 14:51:29 -0700 Subject: [PATCH 09/20] Create catalog_test.dart --- examples/travel_app/test/catalog_test.dart | 26 ++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 examples/travel_app/test/catalog_test.dart diff --git a/examples/travel_app/test/catalog_test.dart b/examples/travel_app/test/catalog_test.dart new file mode 100644 index 000000000..9eae02adb --- /dev/null +++ b/examples/travel_app/test/catalog_test.dart @@ -0,0 +1,26 @@ +import 'dart:convert'; +import 'dart:io'; + +import 'package:flutter_test/flutter_test.dart'; +import 'package:travel_app/src/catalog.dart'; + +void main() { + test('images.json should contain all images from assets/travel_images', + () async { + TestWidgetsFlutterBinding.ensureInitialized(); + + final imageAssets = await imagesJson(); + final imageList = (jsonDecode(imageAssets) as List) + .map((e) => e['image_file_name'] as String) + .toList(); + + final imageDir = Directory('assets/travel_images'); + final imageFiles = imageDir + .listSync() + .where((file) => file.path.endsWith('.jpg')) + .map((file) => file.path.split('/').last) + .toList(); + + expect(imageList, unorderedEquals(imageFiles)); + }); +} From 8dc106ea84ae004b4819643ec4082f77d52f9efb Mon Sep 17 00:00:00 2001 From: Polina Cherkasova Date: Mon, 4 Aug 2025 14:55:21 -0700 Subject: [PATCH 10/20] - --- examples/travel_app/lib/main.dart | 4 +-- examples/travel_app/pubspec.yaml | 2 +- examples/travel_app/test/catalog_test.dart | 34 +++++++++++-------- .../test/filter_chip_group_test.dart | 2 +- examples/travel_app/test/images_test.dart | 30 ---------------- .../travel_app/test/itinerary_item_test.dart | 2 +- .../test/itinerary_with_details_test.dart | 2 +- .../travel_app/test/tabbed_sections_test.dart | 2 +- .../travel_app/test/travel_carousel_test.dart | 2 +- 9 files changed, 27 insertions(+), 53 deletions(-) delete mode 100644 examples/travel_app/test/images_test.dart diff --git a/examples/travel_app/lib/main.dart b/examples/travel_app/lib/main.dart index 8cfd1ad35..7419018f7 100644 --- a/examples/travel_app/lib/main.dart +++ b/examples/travel_app/lib/main.dart @@ -39,9 +39,9 @@ and when you use the 'add' action, you are adding another element to the end of the stream. In general, you should keep adding more UI elements to the end of the chat. You should -only replace elements if they are no-longer relevant. For example if a userperforms a search, +only replace elements if they are no-longer relevant. For example if a user performs a search, then you can replace the filter chips etc with a new surface that includes both -filterchips *and* the result. +filter chips *and* the result. That way the user can refine their search and retry. # UI style diff --git a/examples/travel_app/pubspec.yaml b/examples/travel_app/pubspec.yaml index d2d8388fb..330fd6687 100644 --- a/examples/travel_app/pubspec.yaml +++ b/examples/travel_app/pubspec.yaml @@ -1,4 +1,4 @@ -name: genui_client +name: travel_app description: "An app that generates user interfaces on the fly using AI." publish_to: "none" version: 0.1.0 diff --git a/examples/travel_app/test/catalog_test.dart b/examples/travel_app/test/catalog_test.dart index 9eae02adb..33858cb66 100644 --- a/examples/travel_app/test/catalog_test.dart +++ b/examples/travel_app/test/catalog_test.dart @@ -1,3 +1,5 @@ +// ignore_for_file: avoid_dynamic_calls + import 'dart:convert'; import 'dart:io'; @@ -5,22 +7,24 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:travel_app/src/catalog.dart'; void main() { - test('images.json should contain all images from assets/travel_images', - () async { - TestWidgetsFlutterBinding.ensureInitialized(); + test( + 'images.json should contain all images from assets/travel_images', + () async { + TestWidgetsFlutterBinding.ensureInitialized(); - final imageAssets = await imagesJson(); - final imageList = (jsonDecode(imageAssets) as List) - .map((e) => e['image_file_name'] as String) - .toList(); + final imageAssets = await imagesJson(); + final imageList = (jsonDecode(imageAssets) as List) + .map((e) => e['image_file_name'] as String) + .toList(); - final imageDir = Directory('assets/travel_images'); - final imageFiles = imageDir - .listSync() - .where((file) => file.path.endsWith('.jpg')) - .map((file) => file.path.split('/').last) - .toList(); + final imageDir = Directory('assets/travel_images'); + final imageFiles = imageDir + .listSync() + .where((file) => file.path.endsWith('.jpg')) + .map((file) => file.path.split('/').last) + .toList(); - expect(imageList, unorderedEquals(imageFiles)); - }); + expect(imageList, unorderedEquals(imageFiles)); + }, + ); } diff --git a/examples/travel_app/test/filter_chip_group_test.dart b/examples/travel_app/test/filter_chip_group_test.dart index bdc1fcebd..852d01dd9 100644 --- a/examples/travel_app/test/filter_chip_group_test.dart +++ b/examples/travel_app/test/filter_chip_group_test.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:genui_client/src/catalog/filter_chip_group.dart'; +import 'package:travel_app/src/catalog/filter_chip_group.dart'; void main() { group('FilterChipGroup', () { diff --git a/examples/travel_app/test/images_test.dart b/examples/travel_app/test/images_test.dart deleted file mode 100644 index 1f4450122..000000000 --- a/examples/travel_app/test/images_test.dart +++ /dev/null @@ -1,30 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:travel_app/src/catalog/image.dart'; - -import 'utils.dart'; - -void main() { - testWidgets('Image builds correctly', (WidgetTester tester) async { - await tester.pumpWidget( - testCatalogItem( - image, - { - 'source': 'assets/travel_images/paris.jpg', - 'width': 100.0, - 'height': 100.0, - 'fit': 'cover', - }, - ), - ); - - final imageWidget = tester.widget(find.byType(Image)); - expect(imageWidget.width, 100.0); - expect(imageWidget.height, 100.0); - expect(imageWidget.fit, BoxFit.cover); - expect( - (imageWidget.image as AssetImage).assetName, - 'assets/travel_images/paris.jpg', - ); - }); -} \ No newline at end of file diff --git a/examples/travel_app/test/itinerary_item_test.dart b/examples/travel_app/test/itinerary_item_test.dart index f079e907c..602502ca0 100644 --- a/examples/travel_app/test/itinerary_item_test.dart +++ b/examples/travel_app/test/itinerary_item_test.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:genui_client/src/catalog/itinerary_item.dart'; import 'package:network_image_mock/network_image_mock.dart'; +import 'package:travel_app/src/catalog/itinerary_item.dart'; void main() { group('ItineraryItem', () { diff --git a/examples/travel_app/test/itinerary_with_details_test.dart b/examples/travel_app/test/itinerary_with_details_test.dart index 811a07b19..90d5ede93 100644 --- a/examples/travel_app/test/itinerary_with_details_test.dart +++ b/examples/travel_app/test/itinerary_with_details_test.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:genui_client/src/catalog/itinerary_with_details.dart'; import 'package:network_image_mock/network_image_mock.dart'; +import 'package:travel_app/src/catalog/itinerary_with_details.dart'; void main() { group('ItineraryWithDetails', () { diff --git a/examples/travel_app/test/tabbed_sections_test.dart b/examples/travel_app/test/tabbed_sections_test.dart index acbfbb7c5..695003a6c 100644 --- a/examples/travel_app/test/tabbed_sections_test.dart +++ b/examples/travel_app/test/tabbed_sections_test.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:genui_client/src/catalog/tabbed_sections.dart'; +import 'package:travel_app/src/catalog/tabbed_sections.dart'; void main() { group('TabbedSections', () { diff --git a/examples/travel_app/test/travel_carousel_test.dart b/examples/travel_app/test/travel_carousel_test.dart index 20b32673e..4615f9913 100644 --- a/examples/travel_app/test/travel_carousel_test.dart +++ b/examples/travel_app/test/travel_carousel_test.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:genui_client/src/catalog/travel_carousel.dart'; import 'package:network_image_mock/network_image_mock.dart'; +import 'package:travel_app/src/catalog/travel_carousel.dart'; void main() { group('TravelCarousel', () { From af328fffc935ba16da195a5db75093d4ccb42af4 Mon Sep 17 00:00:00 2001 From: Polina Cherkasova Date: Mon, 4 Aug 2025 15:13:23 -0700 Subject: [PATCH 11/20] - --- examples/travel_app/lib/main.dart | 3 ++- examples/travel_app/lib/src/catalog.dart | 11 +++++++++-- .../{catalog_test.dart => image_catalog_test.dart} | 0 3 files changed, 11 insertions(+), 3 deletions(-) rename examples/travel_app/test/{catalog_test.dart => image_catalog_test.dart} (100%) diff --git a/examples/travel_app/lib/main.dart b/examples/travel_app/lib/main.dart index 7419018f7..d5a9686c6 100644 --- a/examples/travel_app/lib/main.dart +++ b/examples/travel_app/lib/main.dart @@ -51,7 +51,8 @@ E.g. after an itinerary item like a beach visit, you could include a carousel of # Images to use -If you need to use any image URLs, try to find the most relevant ones from the following data: +If you need to use any images, try to find the most relevant ones from the following +asset images: $_imagesJson '''; diff --git a/examples/travel_app/lib/src/catalog.dart b/examples/travel_app/lib/src/catalog.dart index 94d74e47d..a46463572 100644 --- a/examples/travel_app/lib/src/catalog.dart +++ b/examples/travel_app/lib/src/catalog.dart @@ -8,8 +8,15 @@ import 'catalog/options_filter_chip.dart'; import 'catalog/tabbed_sections.dart'; import 'catalog/travel_carousel.dart'; -Future imagesJson() async => - await rootBundle.loadString('assets/travel_images/.images.json'); +Future imagesJson() async { + const imagesPath = 'assets/travel_images'; + var result = await rootBundle.loadString('$imagesPath/.images.json'); + result = result.replaceAll( + '"image_file_name": "', + '"image_file_name": "$imagesPath/', + ); + return result; +} final catalog = Catalog([ elevatedButtonCatalogItem, diff --git a/examples/travel_app/test/catalog_test.dart b/examples/travel_app/test/image_catalog_test.dart similarity index 100% rename from examples/travel_app/test/catalog_test.dart rename to examples/travel_app/test/image_catalog_test.dart From 6182cafe357ce70d95110d0dfca7da0be50eda83 Mon Sep 17 00:00:00 2001 From: Polina Cherkasova Date: Mon, 4 Aug 2025 15:19:17 -0700 Subject: [PATCH 12/20] - --- examples/travel_app/lib/src/catalog.dart | 9 +++++---- examples/travel_app/test/image_catalog_test.dart | 6 +++--- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/examples/travel_app/lib/src/catalog.dart b/examples/travel_app/lib/src/catalog.dart index a46463572..e91b444c5 100644 --- a/examples/travel_app/lib/src/catalog.dart +++ b/examples/travel_app/lib/src/catalog.dart @@ -8,12 +8,13 @@ import 'catalog/options_filter_chip.dart'; import 'catalog/tabbed_sections.dart'; import 'catalog/travel_carousel.dart'; -Future imagesJson() async { - const imagesPath = 'assets/travel_images'; - var result = await rootBundle.loadString('$imagesPath/.images.json'); +const imagesCatalogPath = 'assets/travel_images'; + +Future imagesCatalogJson() async { + var result = await rootBundle.loadString('$imagesCatalogPath/.images.json'); result = result.replaceAll( '"image_file_name": "', - '"image_file_name": "$imagesPath/', + '"image_file_name": "$imagesCatalogPath/', ); return result; } diff --git a/examples/travel_app/test/image_catalog_test.dart b/examples/travel_app/test/image_catalog_test.dart index 33858cb66..b7d19ee84 100644 --- a/examples/travel_app/test/image_catalog_test.dart +++ b/examples/travel_app/test/image_catalog_test.dart @@ -12,16 +12,16 @@ void main() { () async { TestWidgetsFlutterBinding.ensureInitialized(); - final imageAssets = await imagesJson(); + final imageAssets = await imagesCatalogJson(); final imageList = (jsonDecode(imageAssets) as List) .map((e) => e['image_file_name'] as String) .toList(); - final imageDir = Directory('assets/travel_images'); + final imageDir = Directory(imagesCatalogPath); final imageFiles = imageDir .listSync() .where((file) => file.path.endsWith('.jpg')) - .map((file) => file.path.split('/').last) + .map((file) => file.path) .toList(); expect(imageList, unorderedEquals(imageFiles)); From cd9ca102ae5e8c8a4174f97b7068f301f76772d7 Mon Sep 17 00:00:00 2001 From: Polina Cherkasova Date: Mon, 4 Aug 2025 15:20:13 -0700 Subject: [PATCH 13/20] Update main.dart --- examples/travel_app/lib/main.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/travel_app/lib/main.dart b/examples/travel_app/lib/main.dart index d5a9686c6..1a3ead5bc 100644 --- a/examples/travel_app/lib/main.dart +++ b/examples/travel_app/lib/main.dart @@ -66,7 +66,7 @@ void main() async { androidProvider: AndroidProvider.debug, webProvider: ReCaptchaV3Provider('debug'), ); - _imagesJson = await imagesJson(); + _imagesJson = await imagesCatalogJson(); runApp(const MyApp()); } From 9981351a7104866509afe8bdc52e568d1489f2fe Mon Sep 17 00:00:00 2001 From: Polina Cherkasova Date: Mon, 4 Aug 2025 15:27:09 -0700 Subject: [PATCH 14/20] - --- examples/travel_app/lib/src/catalog.dart | 3 ++- examples/travel_app/test/image_catalog_test.dart | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/examples/travel_app/lib/src/catalog.dart b/examples/travel_app/lib/src/catalog.dart index e91b444c5..64e3f1c4a 100644 --- a/examples/travel_app/lib/src/catalog.dart +++ b/examples/travel_app/lib/src/catalog.dart @@ -9,9 +9,10 @@ import 'catalog/tabbed_sections.dart'; import 'catalog/travel_carousel.dart'; const imagesCatalogPath = 'assets/travel_images'; +const imagesCatalogJsonFile = '$imagesCatalogPath/.images.json'; Future imagesCatalogJson() async { - var result = await rootBundle.loadString('$imagesCatalogPath/.images.json'); + var result = await rootBundle.loadString(imagesCatalogJsonFile); result = result.replaceAll( '"image_file_name": "', '"image_file_name": "$imagesCatalogPath/', diff --git a/examples/travel_app/test/image_catalog_test.dart b/examples/travel_app/test/image_catalog_test.dart index b7d19ee84..8f5ca67a6 100644 --- a/examples/travel_app/test/image_catalog_test.dart +++ b/examples/travel_app/test/image_catalog_test.dart @@ -20,7 +20,7 @@ void main() { final imageDir = Directory(imagesCatalogPath); final imageFiles = imageDir .listSync() - .where((file) => file.path.endsWith('.jpg')) + .where((file) => file.path != imagesCatalogJsonFile) .map((file) => file.path) .toList(); From 41c0bab984c704ac70a3cfee6ff0aa1578fd1b52 Mon Sep 17 00:00:00 2001 From: Polina Cherkasova Date: Mon, 4 Aug 2025 19:47:36 -0700 Subject: [PATCH 15/20] Update main.dart --- examples/travel_app/lib/main.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/travel_app/lib/main.dart b/examples/travel_app/lib/main.dart index 89648ce0a..229a45589 100644 --- a/examples/travel_app/lib/main.dart +++ b/examples/travel_app/lib/main.dart @@ -105,7 +105,7 @@ class _MyHomePageState extends State { }, ); - _genUiManager = GenUiManager.conversation(catalog, systemPrompt, aiClient); + _genUiManager = GenUiManager.conversation(catalog, _systemPrompt, aiClient); } @override From 22a34d084f6f546f2fc1413f40330924f1340331 Mon Sep 17 00:00:00 2001 From: Polina Cherkasova Date: Mon, 4 Aug 2025 19:58:33 -0700 Subject: [PATCH 16/20] Update catalog.dart --- examples/travel_app/lib/src/catalog.dart | 3 +++ 1 file changed, 3 insertions(+) diff --git a/examples/travel_app/lib/src/catalog.dart b/examples/travel_app/lib/src/catalog.dart index 64e3f1c4a..dde464e0b 100644 --- a/examples/travel_app/lib/src/catalog.dart +++ b/examples/travel_app/lib/src/catalog.dart @@ -1,4 +1,5 @@ import 'package:flutter/services.dart'; +import 'package:flutter/widgets.dart'; import 'package:flutter_genui/flutter_genui.dart'; import 'catalog/filter_chip_group.dart'; @@ -8,7 +9,9 @@ import 'catalog/options_filter_chip.dart'; import 'catalog/tabbed_sections.dart'; import 'catalog/travel_carousel.dart'; +@visibleForTesting const imagesCatalogPath = 'assets/travel_images'; +@visibleForTesting const imagesCatalogJsonFile = '$imagesCatalogPath/.images.json'; Future imagesCatalogJson() async { From 752e866f798cbcdcfad77038fd89828bdbc8bfb2 Mon Sep 17 00:00:00 2001 From: Polina Cherkasova Date: Mon, 4 Aug 2025 20:47:28 -0700 Subject: [PATCH 17/20] - --- examples/travel_app/test/trailhead_test.dart | 2 +- examples/travel_app/test/travel_icon_test.dart | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/travel_app/test/trailhead_test.dart b/examples/travel_app/test/trailhead_test.dart index cbf61caff..78d29ff0f 100644 --- a/examples/travel_app/test/trailhead_test.dart +++ b/examples/travel_app/test/trailhead_test.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:genui_client/src/catalog/trailhead.dart'; +import 'package:travel_app/src/catalog/trailhead.dart'; void main() { group('Trailhead', () { diff --git a/examples/travel_app/test/travel_icon_test.dart b/examples/travel_app/test/travel_icon_test.dart index 57577464b..b4c4661f7 100644 --- a/examples/travel_app/test/travel_icon_test.dart +++ b/examples/travel_app/test/travel_icon_test.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:genui_client/src/catalog/travel_icon.dart'; +import 'package:travel_app/src/catalog/travel_icon.dart'; void main() { group('TravelIcon Widget', () { From ea6dc59a314b17ad339b56dcc377be24feabe4b3 Mon Sep 17 00:00:00 2001 From: Polina Cherkasova Date: Tue, 5 Aug 2025 07:52:56 -0700 Subject: [PATCH 18/20] - --- examples/travel_app/lib/main.dart | 4 ++-- examples/travel_app/lib/src/catalog.dart | 10 +++++----- examples/travel_app/test/image_catalog_test.dart | 6 +++--- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/examples/travel_app/lib/main.dart b/examples/travel_app/lib/main.dart index 316b4a847..46eb07493 100644 --- a/examples/travel_app/lib/main.dart +++ b/examples/travel_app/lib/main.dart @@ -31,7 +31,7 @@ trailhead with directions like "top culinary experiences in Mexico" or "nightlif The user may ask followup questions e.g. to book a specific part of the existing trip, or start a new trip. In this case, just follow the user and repeat the process above. You are always moving -in cycles of asking for information and then making suggestions. If the user requests something other than a complete trip booking, +in cycles of asking for information and then making suggestions. If the user requests something other than a complete trip booking, e.g. ideas about jazz clubs or food tours etc, use something like a travel_carousel to show options, rather than a full itinerary_with_details. If the followup question seems to be a departure from the previous context, 'add' a new surface rather than updating an existing one. @@ -70,7 +70,7 @@ void main() async { androidProvider: AndroidProvider.debug, webProvider: ReCaptchaV3Provider('debug'), ); - _imagesJson = await imagesCatalogJson(); + _imagesJson = await assetImageCatalogJson(); runApp(const MyApp()); } diff --git a/examples/travel_app/lib/src/catalog.dart b/examples/travel_app/lib/src/catalog.dart index 52ad6a02e..b8912f44e 100644 --- a/examples/travel_app/lib/src/catalog.dart +++ b/examples/travel_app/lib/src/catalog.dart @@ -12,15 +12,15 @@ import 'catalog/trailhead.dart'; import 'catalog/travel_carousel.dart'; @visibleForTesting -const imagesCatalogPath = 'assets/travel_images'; +const assetImageCatalogPath = 'assets/travel_images'; @visibleForTesting -const imagesCatalogJsonFile = '$imagesCatalogPath/.images.json'; +const assetImageCatalogJsonFile = '$assetImageCatalogPath/.images.json'; -Future imagesCatalogJson() async { - var result = await rootBundle.loadString(imagesCatalogJsonFile); +Future assetImageCatalogJson() async { + var result = await rootBundle.loadString(assetImageCatalogJsonFile); result = result.replaceAll( '"image_file_name": "', - '"image_file_name": "$imagesCatalogPath/', + '"image_file_name": "$assetImageCatalogPath/', ); return result; } diff --git a/examples/travel_app/test/image_catalog_test.dart b/examples/travel_app/test/image_catalog_test.dart index 8f5ca67a6..81e5cd9db 100644 --- a/examples/travel_app/test/image_catalog_test.dart +++ b/examples/travel_app/test/image_catalog_test.dart @@ -12,15 +12,15 @@ void main() { () async { TestWidgetsFlutterBinding.ensureInitialized(); - final imageAssets = await imagesCatalogJson(); + final imageAssets = await assetImageCatalogJson(); final imageList = (jsonDecode(imageAssets) as List) .map((e) => e['image_file_name'] as String) .toList(); - final imageDir = Directory(imagesCatalogPath); + final imageDir = Directory(assetImageCatalogPath); final imageFiles = imageDir .listSync() - .where((file) => file.path != imagesCatalogJsonFile) + .where((file) => file.path != assetImageCatalogJsonFile) .map((file) => file.path) .toList(); From fcf6163a7b9d4aee419acd8348494c0d4daa1eb7 Mon Sep 17 00:00:00 2001 From: Polina Cherkasova Date: Tue, 5 Aug 2025 08:08:33 -0700 Subject: [PATCH 19/20] Update main.dart --- examples/travel_app/lib/main.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/travel_app/lib/main.dart b/examples/travel_app/lib/main.dart index 46eb07493..adfe55992 100644 --- a/examples/travel_app/lib/main.dart +++ b/examples/travel_app/lib/main.dart @@ -81,7 +81,7 @@ class MyApp extends StatelessWidget { Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, - title: 'Dynamic UI Demo', + title: 'Travel Chat', theme: ThemeData( colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue), ), From 04514d67aa450d0ec5e326c9189ceffe9c157ba9 Mon Sep 17 00:00:00 2001 From: Polina Cherkasova Date: Tue, 5 Aug 2025 15:35:51 -0700 Subject: [PATCH 20/20] - --- .../flutter/generated_plugin_registrant.cc | 4 - .../flutter/generated_plugin_registrant.h | 4 - .../Flutter/GeneratedPluginRegistrant.swift | 4 - .../flutter/generated_plugin_registrant.cc | 4 - .../flutter/generated_plugin_registrant.h | 4 - examples/travel_app/lib/main.dart | 12 +- examples/travel_app/lib/src/asset_images.dart | 16 ++ examples/travel_app/lib/src/images.dart | 215 ------------------ .../flutter/generated_plugin_registrant.cc | 4 - .../flutter/generated_plugin_registrant.h | 4 - .../Flutter/GeneratedPluginRegistrant.swift | 4 - .../travel_app/test/image_catalog_test.dart | 2 +- .../flutter/generated_plugin_registrant.cc | 4 - .../flutter/generated_plugin_registrant.h | 4 - .../flutter/generated_plugin_registrant.cc | 4 - .../flutter/generated_plugin_registrant.h | 4 - .../Flutter/GeneratedPluginRegistrant.swift | 4 - .../flutter/generated_plugin_registrant.cc | 4 - .../flutter/generated_plugin_registrant.h | 4 - .../Flutter/GeneratedPluginRegistrant.swift | 4 - .../flutter/generated_plugin_registrant.cc | 4 - .../flutter/generated_plugin_registrant.h | 4 - .../gen_localizations.stamp | 1 + 23 files changed, 25 insertions(+), 293 deletions(-) create mode 100644 examples/travel_app/lib/src/asset_images.dart delete mode 100644 examples/travel_app/lib/src/images.dart create mode 100644 pkgs/spikes/usage_test/build/e29ecd1163eb07aee1232c1d8a823ab9/gen_localizations.stamp diff --git a/examples/generic_chat/linux/flutter/generated_plugin_registrant.cc b/examples/generic_chat/linux/flutter/generated_plugin_registrant.cc index 974e5d315..f6f23bfe9 100644 --- a/examples/generic_chat/linux/flutter/generated_plugin_registrant.cc +++ b/examples/generic_chat/linux/flutter/generated_plugin_registrant.cc @@ -1,7 +1,3 @@ -// Copyright 2025 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - // // Generated file. Do not edit. // diff --git a/examples/generic_chat/linux/flutter/generated_plugin_registrant.h b/examples/generic_chat/linux/flutter/generated_plugin_registrant.h index fd34119db..e0f0a47bc 100644 --- a/examples/generic_chat/linux/flutter/generated_plugin_registrant.h +++ b/examples/generic_chat/linux/flutter/generated_plugin_registrant.h @@ -1,7 +1,3 @@ -// Copyright 2025 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - // // Generated file. Do not edit. // diff --git a/examples/generic_chat/macos/Flutter/GeneratedPluginRegistrant.swift b/examples/generic_chat/macos/Flutter/GeneratedPluginRegistrant.swift index 58a22fce1..a71188550 100644 --- a/examples/generic_chat/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/examples/generic_chat/macos/Flutter/GeneratedPluginRegistrant.swift @@ -1,7 +1,3 @@ -// Copyright 2025 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - // // Generated file. Do not edit. // diff --git a/examples/generic_chat/windows/flutter/generated_plugin_registrant.cc b/examples/generic_chat/windows/flutter/generated_plugin_registrant.cc index 5f96d4bdd..869eecaea 100644 --- a/examples/generic_chat/windows/flutter/generated_plugin_registrant.cc +++ b/examples/generic_chat/windows/flutter/generated_plugin_registrant.cc @@ -1,7 +1,3 @@ -// Copyright 2025 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - // // Generated file. Do not edit. // diff --git a/examples/generic_chat/windows/flutter/generated_plugin_registrant.h b/examples/generic_chat/windows/flutter/generated_plugin_registrant.h index 2fe1d4d48..dc139d85a 100644 --- a/examples/generic_chat/windows/flutter/generated_plugin_registrant.h +++ b/examples/generic_chat/windows/flutter/generated_plugin_registrant.h @@ -1,7 +1,3 @@ -// Copyright 2025 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - // // Generated file. Do not edit. // diff --git a/examples/travel_app/lib/main.dart b/examples/travel_app/lib/main.dart index 8685e58ef..1df3a7cd2 100644 --- a/examples/travel_app/lib/main.dart +++ b/examples/travel_app/lib/main.dart @@ -8,8 +8,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_genui/flutter_genui.dart'; import 'firebase_options.dart'; +import 'src/asset_images.dart'; import 'src/catalog.dart'; -import 'src/images.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); @@ -19,6 +19,7 @@ void main() async { androidProvider: AndroidProvider.debug, webProvider: ReCaptchaV3Provider('debug'), ); + _imagesJson = await assetImageCatalogJson(); runApp(const MyApp()); } @@ -177,6 +178,8 @@ class _MyHomePageState extends State { } } +late final String _imagesJson; + final systemPrompt = '''You are a helpful travel agent assistant who figures out what kind of trip the user wants, and then guides them to book it. @@ -222,8 +225,7 @@ That way the user can refine their search and retry. When generating content to go inside itinerary_with_details, use itinerary_item, but try to occasionally break it up with other widgets e.g. section_header items to break up the section, or travel_carousel with related content. E.g. after an itinerary item like a beach visit, you could include a carousel of local fish, or alternative beaches to visit. -# Images to use - -If you need to use any image URLs, try to find the most relevant ones from the following data: -$imagesJson +If you need to use any images, try to find the most relevant ones from the following +asset images: +$_imagesJson '''; diff --git a/examples/travel_app/lib/src/asset_images.dart b/examples/travel_app/lib/src/asset_images.dart new file mode 100644 index 000000000..fc6614ec7 --- /dev/null +++ b/examples/travel_app/lib/src/asset_images.dart @@ -0,0 +1,16 @@ +import 'package:flutter/services.dart'; +import 'package:flutter/widgets.dart'; + +@visibleForTesting +const assetImageCatalogPath = 'assets/travel_images'; +@visibleForTesting +const assetImageCatalogJsonFile = '$assetImageCatalogPath/.images.json'; + +Future assetImageCatalogJson() async { + var result = await rootBundle.loadString(assetImageCatalogJsonFile); + result = result.replaceAll( + '"image_file_name": "', + '"image_file_name": "$assetImageCatalogPath/', + ); + return result; +} diff --git a/examples/travel_app/lib/src/images.dart b/examples/travel_app/lib/src/images.dart deleted file mode 100644 index 3df0becb5..000000000 --- a/examples/travel_app/lib/src/images.dart +++ /dev/null @@ -1,215 +0,0 @@ -// Copyright 2025 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -final imagesJson = ''' -[ - { - "url": "https://genui-demo-stockimages.web.app/Earth_Day_Flag.png", - "description": "Higher-quality PNG version of John McConnell's Earth Day flag, based on this photograph. Requested" - }, - { - "url": "https://genui-demo-stockimages.web.app/Lewis_overthrust_fault_nh10f.jpg", - "description": "schematic illustration of the Lewis overthrust fault in northern Montana, USA and Southern Alberta" - }, - { - "url": "https://genui-demo-stockimages.web.app/Hiking_fashion,_11_July_1932_slnsw.jpg", - "description": "Hiking fashion, 11 July 1932, Sun Newspaper, from film negative, State Library of New South Wale" - }, - { - "url": "https://genui-demo-stockimages.web.app/P\u00e5ske.jpg", - "description": "Snow and skiing on Hardangervidda, near Vegglifjell, Norway." - }, - { - "url": "https://genui-demo-stockimages.web.app/Hanauma_Bay_snorkelers_1973.png", - "description": "Snorkelers at Hanauma Bay, Oahu, Hawaii." - }, - { - "url": "https://genui-demo-stockimages.web.app/Snorkeling_gear.jpg", - "description": "Typical snorkeling equipment: snorkel, diving mask and swimfins." - }, - { - "url": "https://genui-demo-stockimages.web.app/Zavorra.JPG", - "description": "Cintura zavorra" - }, - { - "url": "https://genui-demo-stockimages.web.app/Contender_sailing_dinghy.jpg", - "description": "User:Gwicke sailing a Contender dinghy at the '98 Worlds." - }, - { - "url": "https://genui-demo-stockimages.web.app/Corrientes-oceanicas.png", - "description": "the ocean currents. Note that E. Greenland + Labrador + Norwegian = Viking gyre Gulf stream + N. A" - }, - { - "url": "https://genui-demo-stockimages.web.app/La_Marine-Pacini-140.png", - "description": "A line of battle. Illustration from La Marine, by Pacini." - }, - { - "url": "https://genui-demo-stockimages.web.app/SantaMaria.jpg", - "description": "Spanish carrack Santa Maria" - }, - { - "url": "https://genui-demo-stockimages.web.app/Sports_icon.png", - "description": "Sports icon for Portals" - }, - { - "url": "https://genui-demo-stockimages.web.app/Tacking_near_Britannia_Bridge.jpg", - "description": "Tacking near Britannia Bridge - Round Anglesey race Author: User:Velela. Location: Nelson statue n" - }, - { - "url": "https://genui-demo-stockimages.web.app/Alimini_Otranto.jpg", - "description": "Laghi Alimini Otranto" - }, - { - "url": "https://genui-demo-stockimages.web.app/Brighton,_the_front_and_the_chain_pier_seen_in_the_distance.jpg", - "description": ""Brighton: the front and the chain pier seen in the distance," by Frederick William Woledge (active" - }, - { - "url": "https://genui-demo-stockimages.web.app/Carters_Beach-_Sand.jpg", - "description": "Carters Beach- Sand" - }, - { - "url": "https://genui-demo-stockimages.web.app/Castelldefels_September.JPG", - "description": "September in Castelldefels" - }, - { - "url": "https://genui-demo-stockimages.web.app/Green_sand_closeup_1.jpg", - "description": "Closeup of green sand taken from Mahana Beach in Hawai\u02bbi." - }, - { - "url": "https://genui-demo-stockimages.web.app/HIHWNMS_trash_on_the_beach_(50093889173).jpg", - "description": "Close up of trash covering a tide line on a beach in Hawaiian Islands Humpback Whale National Marine" - }, - { - "url": "https://genui-demo-stockimages.web.app/Kemp's_Ridley_sea_turtle_nesting.JPG", - "description": "Kemp's Ridley sea turtle nesting." - }, - { - "url": "https://genui-demo-stockimages.web.app/Man_o'war_cove_near_lulworth_dorset_arp.jpg", - "description": "Man O\u2019War Cove in St Oswalds Bay, Dorset, England (near Lulworth Cove and the natural rock arch of" - }, - { - "url": "https://genui-demo-stockimages.web.app/Monte_Carlo_Casino_seaside_facade_before_1878_-_Bonillo_2004_p113.jpg", - "description": "Photograph of the seaside facade of the Monte Carlo Casino before the construction of the Salle Garn" - }, - { - "url": "https://genui-demo-stockimages.web.app/Ramla_Bay.jpg", - "description": "Ramla Bay, Gozo, Malta. Taken from the western cliff." - }, - { - "url": "https://genui-demo-stockimages.web.app/Scala_dei_Turchi_Sand_062313.jpg", - "description": "Sand from the beach at Scala dei Turchi, Sicily." - }, - { - "url": "https://genui-demo-stockimages.web.app/The_Queen_Mary's_Army_Auxiliary_Corps_during_the_First_World_War,_France_Q11512.jpg", - "description": "The Queen Mary's Army Auxiliary Corps during the First World War, France Members of Queen Mary's Ar" - }, - { - "url": "https://genui-demo-stockimages.web.app/The_promenade,_Blackpool,_Lancashire,_England,_ca._1898.jpg", - "description": "11103. Blackpool, the promenade." - }, - { - "url": "https://genui-demo-stockimages.web.app/Checkerboard_forest_in_Idaho.jpg", - "description": "An astronaut aboard the International Space Station observed this distinctive checkerboard pattern a" - }, - { - "url": "https://genui-demo-stockimages.web.app/Climate_change_icon.png", - "description": "Climate change is a change in the statistical distribution of weather patterns when that change last" - }, - { - "url": "https://genui-demo-stockimages.web.app/Earth_Day_Flag.png", - "description": "Higher-quality PNG version of John McConnell's Earth Day flag, based on this photograph. Requested" - }, - { - "url": "https://genui-demo-stockimages.web.app/Garibaldi_National_Park_-_Garibaldi_Mountain.jpg", - "description": "Forest on Mount Garibaldi, Garibaldi Provincial Park, British Columbia, Canada" - }, - { - "url": "https://genui-demo-stockimages.web.app/Niepolomice_oli_2013251.jpg", - "description": "Since the 1200s it has been a forest of special use and protection in Poland. In this view from spac" - }, - { - "url": "https://genui-demo-stockimages.web.app/Redwood_M_D_Vaden.jpg", - "description": "Simpson Reed Discovery Trail, Jedediah Smith Redwoods State Park, Northern California. Image shows" - }, - { - "url": "https://genui-demo-stockimages.web.app/The_Earth_seen_from_Apollo_17_with_transparent_background.png", - "description": ""The Blue Marble" is a famous photograph of the Earth taken on December 7, 1972 by the crew of the" - }, - { - "url": "https://genui-demo-stockimages.web.app/Leaf_1_web.jpg", - "description": "A leaf." - }, - { - "url": "https://genui-demo-stockimages.web.app/A_mine_explodes_close_to_a_British_truck_as_it_carries_infantry_through_enemy_minefields_and_wire_to_the_new_front_lines.jpg", - "description": "A mine explodes close to a British truck as it carries infantry through enemy minefields and wire to" - }, - { - "url": "https://genui-demo-stockimages.web.app/Aerial_view_of_dunefield,_White_Sands_National_Park,_New_Mexico,_United_States.png", - "description": "Aerial view of dunefield, White Sands National Park, New Mexico, United States" - }, - { - "url": "https://genui-demo-stockimages.web.app/DesertIguana031611.jpg", - "description": "Desert Iguana (Dipsosaurus dorsalis) near Amboy Crater, Mojave Desert, California." - }, - { - "url": "https://genui-demo-stockimages.web.app/Desert_Lake,_near_Ragtown,_Nevada_MET_DP243000.jpg", - "description": "Photograph; Photographs" - }, - { - "url": "https://genui-demo-stockimages.web.app/Desert_Pavement_Mojave_2000.jpg", - "description": "Desert pavement in the Cima Volcanic Field of the Mojave Desert." - }, - { - "url": "https://genui-demo-stockimages.web.app/Deserts.png", - "description": "NASA World Wind 1.4 used." - }, - { - "url": "https://genui-demo-stockimages.web.app/Gusev_Spirit_01.jpg", - "description": "This full-resolution image taken by the panoramic camera onboard the Mars Exploration Rover Spirit b" - }, - { - "url": "https://genui-demo-stockimages.web.app/Marco_Polo_traveling.JPG", - "description": "Marco Polo travelling, Miniature from the Book "The Travels of Marco Polo" ("Il milione"), origina" - }, - { - "url": "https://genui-demo-stockimages.web.app/Saltation-mechanics-i18n.png", - "description": "Internationalization of the diagram showing the mechanics of eolian transport. 1=Creep 2=Saltation 3" - }, - { - "url": "https://genui-demo-stockimages.web.app/The_World_Factbook_-_Algeria_-_Flickr_-_The_Central_Intelligence_Agency_(7).jpg", - "description": "Sahara dunes at sunset. Visit The World Factbook for more information about Algeria." - }, - { - "url": "https://genui-demo-stockimages.web.app/Sandstorm_in_Al_Asad,_Iraq.jpg", - "description": "A massive dust storm cloud (haboob) is close to enveloping a military camp as it rolls over Al Asad" - }, - { - "url": "https://genui-demo-stockimages.web.app/The_Earth_seen_from_Apollo_17.jpg", - "description": ""The Blue Marble" is a famous photograph of the Earth taken on December 7, 1972, by the crew of th" - }, - { - "url": "https://genui-demo-stockimages.web.app/Ulaan_tsutgalan,_Mongolia.jpg", - "description": "Ulaan tsutgalan, Mongolia" - }, - { - "url": "https://genui-demo-stockimages.web.app/Ancient_coral_reefs.jpg", - "description": "Antiguas Arrecifes de Coral" - }, - { - "url": "https://genui-demo-stockimages.web.app/Atoll_forming-Atoll.png", - "description": "Internationalization of the diagram:Atoll forming. 1=Volcanic Island 2=Fringing reef 3=Barrier reeef" - }, - { - "url": "https://genui-demo-stockimages.web.app/Atoll_forming-Barrier_reef.png", - "description": "Internationalization of the diagram:Atoll forming. 1=Volcanic Island 2=Fringing reef 3=Barrier reeef" - }, - { - "url": "https://genui-demo-stockimages.web.app/Atoll_forming-Fringing_reef.png", - "description": "Internationalization of the diagram:Atoll forming. 1=Volcanic Island 2=Fringing reef 3=Barrier reeef" - }, - { - "url": "https://genui-demo-stockimages.web.app/Atoll_forming-volcano.png", - "description": "Internationalization of the diagram:Atoll forming. 1=Volcanic Island 2=Fringing reef 3=Barrier reeef" - }, -]'''; diff --git a/examples/travel_app/linux/flutter/generated_plugin_registrant.cc b/examples/travel_app/linux/flutter/generated_plugin_registrant.cc index 974e5d315..f6f23bfe9 100644 --- a/examples/travel_app/linux/flutter/generated_plugin_registrant.cc +++ b/examples/travel_app/linux/flutter/generated_plugin_registrant.cc @@ -1,7 +1,3 @@ -// Copyright 2025 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - // // Generated file. Do not edit. // diff --git a/examples/travel_app/linux/flutter/generated_plugin_registrant.h b/examples/travel_app/linux/flutter/generated_plugin_registrant.h index fd34119db..e0f0a47bc 100644 --- a/examples/travel_app/linux/flutter/generated_plugin_registrant.h +++ b/examples/travel_app/linux/flutter/generated_plugin_registrant.h @@ -1,7 +1,3 @@ -// Copyright 2025 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - // // Generated file. Do not edit. // diff --git a/examples/travel_app/macos/Flutter/GeneratedPluginRegistrant.swift b/examples/travel_app/macos/Flutter/GeneratedPluginRegistrant.swift index 58a22fce1..a71188550 100644 --- a/examples/travel_app/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/examples/travel_app/macos/Flutter/GeneratedPluginRegistrant.swift @@ -1,7 +1,3 @@ -// Copyright 2025 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - // // Generated file. Do not edit. // diff --git a/examples/travel_app/test/image_catalog_test.dart b/examples/travel_app/test/image_catalog_test.dart index 81e5cd9db..954f7d5f1 100644 --- a/examples/travel_app/test/image_catalog_test.dart +++ b/examples/travel_app/test/image_catalog_test.dart @@ -4,7 +4,7 @@ import 'dart:convert'; import 'dart:io'; import 'package:flutter_test/flutter_test.dart'; -import 'package:travel_app/src/catalog.dart'; +import 'package:travel_app/src/asset_images.dart'; void main() { test( diff --git a/examples/travel_app/windows/flutter/generated_plugin_registrant.cc b/examples/travel_app/windows/flutter/generated_plugin_registrant.cc index 5f96d4bdd..869eecaea 100644 --- a/examples/travel_app/windows/flutter/generated_plugin_registrant.cc +++ b/examples/travel_app/windows/flutter/generated_plugin_registrant.cc @@ -1,7 +1,3 @@ -// Copyright 2025 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - // // Generated file. Do not edit. // diff --git a/examples/travel_app/windows/flutter/generated_plugin_registrant.h b/examples/travel_app/windows/flutter/generated_plugin_registrant.h index 2fe1d4d48..dc139d85a 100644 --- a/examples/travel_app/windows/flutter/generated_plugin_registrant.h +++ b/examples/travel_app/windows/flutter/generated_plugin_registrant.h @@ -1,7 +1,3 @@ -// Copyright 2025 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - // // Generated file. Do not edit. // diff --git a/pkgs/spikes/fcp_client/example/linux/flutter/generated_plugin_registrant.cc b/pkgs/spikes/fcp_client/example/linux/flutter/generated_plugin_registrant.cc index 37499cf66..e71a16d23 100644 --- a/pkgs/spikes/fcp_client/example/linux/flutter/generated_plugin_registrant.cc +++ b/pkgs/spikes/fcp_client/example/linux/flutter/generated_plugin_registrant.cc @@ -1,7 +1,3 @@ -// Copyright 2025 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - // // Generated file. Do not edit. // diff --git a/pkgs/spikes/fcp_client/example/linux/flutter/generated_plugin_registrant.h b/pkgs/spikes/fcp_client/example/linux/flutter/generated_plugin_registrant.h index fd34119db..e0f0a47bc 100644 --- a/pkgs/spikes/fcp_client/example/linux/flutter/generated_plugin_registrant.h +++ b/pkgs/spikes/fcp_client/example/linux/flutter/generated_plugin_registrant.h @@ -1,7 +1,3 @@ -// Copyright 2025 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - // // Generated file. Do not edit. // diff --git a/pkgs/spikes/fcp_client/example/macos/Flutter/GeneratedPluginRegistrant.swift b/pkgs/spikes/fcp_client/example/macos/Flutter/GeneratedPluginRegistrant.swift index 9cd8ffe4c..cccf817a5 100644 --- a/pkgs/spikes/fcp_client/example/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/pkgs/spikes/fcp_client/example/macos/Flutter/GeneratedPluginRegistrant.swift @@ -1,7 +1,3 @@ -// Copyright 2025 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - // // Generated file. Do not edit. // diff --git a/pkgs/spikes/travel_app_hardcoded/linux/flutter/generated_plugin_registrant.cc b/pkgs/spikes/travel_app_hardcoded/linux/flutter/generated_plugin_registrant.cc index 974e5d315..f6f23bfe9 100644 --- a/pkgs/spikes/travel_app_hardcoded/linux/flutter/generated_plugin_registrant.cc +++ b/pkgs/spikes/travel_app_hardcoded/linux/flutter/generated_plugin_registrant.cc @@ -1,7 +1,3 @@ -// Copyright 2025 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - // // Generated file. Do not edit. // diff --git a/pkgs/spikes/travel_app_hardcoded/linux/flutter/generated_plugin_registrant.h b/pkgs/spikes/travel_app_hardcoded/linux/flutter/generated_plugin_registrant.h index fd34119db..e0f0a47bc 100644 --- a/pkgs/spikes/travel_app_hardcoded/linux/flutter/generated_plugin_registrant.h +++ b/pkgs/spikes/travel_app_hardcoded/linux/flutter/generated_plugin_registrant.h @@ -1,7 +1,3 @@ -// Copyright 2025 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - // // Generated file. Do not edit. // diff --git a/pkgs/spikes/travel_app_hardcoded/macos/Flutter/GeneratedPluginRegistrant.swift b/pkgs/spikes/travel_app_hardcoded/macos/Flutter/GeneratedPluginRegistrant.swift index 58a22fce1..a71188550 100644 --- a/pkgs/spikes/travel_app_hardcoded/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/pkgs/spikes/travel_app_hardcoded/macos/Flutter/GeneratedPluginRegistrant.swift @@ -1,7 +1,3 @@ -// Copyright 2025 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - // // Generated file. Do not edit. // diff --git a/pkgs/spikes/travel_app_hardcoded/windows/flutter/generated_plugin_registrant.cc b/pkgs/spikes/travel_app_hardcoded/windows/flutter/generated_plugin_registrant.cc index 5f96d4bdd..869eecaea 100644 --- a/pkgs/spikes/travel_app_hardcoded/windows/flutter/generated_plugin_registrant.cc +++ b/pkgs/spikes/travel_app_hardcoded/windows/flutter/generated_plugin_registrant.cc @@ -1,7 +1,3 @@ -// Copyright 2025 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - // // Generated file. Do not edit. // diff --git a/pkgs/spikes/travel_app_hardcoded/windows/flutter/generated_plugin_registrant.h b/pkgs/spikes/travel_app_hardcoded/windows/flutter/generated_plugin_registrant.h index 2fe1d4d48..dc139d85a 100644 --- a/pkgs/spikes/travel_app_hardcoded/windows/flutter/generated_plugin_registrant.h +++ b/pkgs/spikes/travel_app_hardcoded/windows/flutter/generated_plugin_registrant.h @@ -1,7 +1,3 @@ -// Copyright 2025 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - // // Generated file. Do not edit. // diff --git a/pkgs/spikes/usage_test/build/e29ecd1163eb07aee1232c1d8a823ab9/gen_localizations.stamp b/pkgs/spikes/usage_test/build/e29ecd1163eb07aee1232c1d8a823ab9/gen_localizations.stamp new file mode 100644 index 000000000..1b2d28c4e --- /dev/null +++ b/pkgs/spikes/usage_test/build/e29ecd1163eb07aee1232c1d8a823ab9/gen_localizations.stamp @@ -0,0 +1 @@ +{"inputs":[],"outputs":[]} \ No newline at end of file