From ee8ca801c2fbe272431785a048a6e53ab01eb056 Mon Sep 17 00:00:00 2001 From: Dao Hoang Son Date: Tue, 15 Jul 2025 09:40:46 +0700 Subject: [PATCH 01/10] [core] v0.17.0 --- packages/core/CHANGELOG.md | 5 +++++ packages/core/README.md | 2 +- packages/core/pubspec.yaml | 2 +- packages/enhanced/pubspec.yaml | 2 +- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index fd628a459..9bfb57bec 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -1,3 +1,8 @@ +## 0.17.0 + +- Requires Flutter 3.32 (#1475) +- Fix `text-align: center` inside tables (#1451) + ## 0.16.0 - Requires Flutter 3.22 (#1403) diff --git a/packages/core/README.md b/packages/core/README.md index 06c540730..377f01f07 100644 --- a/packages/core/README.md +++ b/packages/core/README.md @@ -17,7 +17,7 @@ Add this to your app's `pubspec.yaml` file: ```yaml dependencies: - flutter_widget_from_html_core: ^0.16.0 + flutter_widget_from_html_core: ^0.17.0 ``` ## Usage diff --git a/packages/core/pubspec.yaml b/packages/core/pubspec.yaml index 4114e0e36..d2b60b0c3 100644 --- a/packages/core/pubspec.yaml +++ b/packages/core/pubspec.yaml @@ -1,5 +1,5 @@ name: flutter_widget_from_html_core -version: 0.16.0 +version: 0.17.0 description: Flutter package to render html as widgets that focuses on correctness and extensibility. homepage: https://github.com/daohoangson/flutter_widget_from_html/tree/master/packages/core diff --git a/packages/enhanced/pubspec.yaml b/packages/enhanced/pubspec.yaml index 98b7fedb7..ed302f277 100644 --- a/packages/enhanced/pubspec.yaml +++ b/packages/enhanced/pubspec.yaml @@ -10,7 +10,7 @@ environment: dependencies: flutter: sdk: flutter - flutter_widget_from_html_core: ^0.16.0 + flutter_widget_from_html_core: ^0.17.0 fwfh_cached_network_image: ^0.16.0 fwfh_chewie: ^0.16.0 fwfh_just_audio: ^0.16.0 From 8458abdf111bfdaec28d0588cb3562bea78a40c3 Mon Sep 17 00:00:00 2001 From: Dao Hoang Son Date: Tue, 15 Jul 2025 09:42:52 +0700 Subject: [PATCH 02/10] [fwfh_cached_network_image] v0.16.1 --- packages/enhanced/pubspec.yaml | 2 +- packages/fwfh_cached_network_image/CHANGELOG.md | 4 ++++ packages/fwfh_cached_network_image/pubspec.yaml | 4 ++-- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/enhanced/pubspec.yaml b/packages/enhanced/pubspec.yaml index ed302f277..ccf695a8f 100644 --- a/packages/enhanced/pubspec.yaml +++ b/packages/enhanced/pubspec.yaml @@ -11,7 +11,7 @@ dependencies: flutter: sdk: flutter flutter_widget_from_html_core: ^0.17.0 - fwfh_cached_network_image: ^0.16.0 + fwfh_cached_network_image: ^0.16.1 fwfh_chewie: ^0.16.0 fwfh_just_audio: ^0.16.0 fwfh_svg: ^0.16.0 diff --git a/packages/fwfh_cached_network_image/CHANGELOG.md b/packages/fwfh_cached_network_image/CHANGELOG.md index f596133de..49228560f 100644 --- a/packages/fwfh_cached_network_image/CHANGELOG.md +++ b/packages/fwfh_cached_network_image/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.16.1 + +- Add support for flutter_widget_from_html_core@0.17.0 (#1405) + ## 0.16.0 - Requires Flutter 3.10 (#1396) diff --git a/packages/fwfh_cached_network_image/pubspec.yaml b/packages/fwfh_cached_network_image/pubspec.yaml index f8bd2ab7a..620986153 100644 --- a/packages/fwfh_cached_network_image/pubspec.yaml +++ b/packages/fwfh_cached_network_image/pubspec.yaml @@ -1,5 +1,5 @@ name: fwfh_cached_network_image -version: 0.16.0 +version: 0.16.1 description: WidgetFactory extension to render IMG with cached_network_image plugin. homepage: https://github.com/daohoangson/flutter_widget_from_html @@ -12,7 +12,7 @@ dependencies: flutter: sdk: flutter flutter_cache_manager: ^3.0.0 - flutter_widget_from_html_core: ">=0.8.0 <0.17.0" + flutter_widget_from_html_core: ">=0.8.0 <0.18.0" dependency_overrides: flutter_widget_from_html_core: From 51c5b4691d9a4eeda45f6fdaa178fa8d5922ae2c Mon Sep 17 00:00:00 2001 From: Dao Hoang Son Date: Tue, 15 Jul 2025 09:46:27 +0700 Subject: [PATCH 03/10] [fwfh_chewie] v0.16.1 --- packages/enhanced/pubspec.yaml | 2 +- packages/fwfh_chewie/CHANGELOG.md | 5 +++++ packages/fwfh_chewie/pubspec.yaml | 4 ++-- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/enhanced/pubspec.yaml b/packages/enhanced/pubspec.yaml index ccf695a8f..7a552c997 100644 --- a/packages/enhanced/pubspec.yaml +++ b/packages/enhanced/pubspec.yaml @@ -12,7 +12,7 @@ dependencies: sdk: flutter flutter_widget_from_html_core: ^0.17.0 fwfh_cached_network_image: ^0.16.1 - fwfh_chewie: ^0.16.0 + fwfh_chewie: ^0.16.1 fwfh_just_audio: ^0.16.0 fwfh_svg: ^0.16.0 fwfh_url_launcher: ^0.16.0 diff --git a/packages/fwfh_chewie/CHANGELOG.md b/packages/fwfh_chewie/CHANGELOG.md index 10f1b2c7d..6c6012a16 100644 --- a/packages/fwfh_chewie/CHANGELOG.md +++ b/packages/fwfh_chewie/CHANGELOG.md @@ -1,3 +1,8 @@ +## 0.16.1 + +- Add support for flutter_widget_from_html_core@0.17.0 (#1405) +- Add support for video_player_platform_interface@6.3.0 (#1405) + ## 0.16.0 - Requires Flutter 3.10 (#1396) diff --git a/packages/fwfh_chewie/pubspec.yaml b/packages/fwfh_chewie/pubspec.yaml index 4f8ebb16f..037f99edc 100644 --- a/packages/fwfh_chewie/pubspec.yaml +++ b/packages/fwfh_chewie/pubspec.yaml @@ -1,5 +1,5 @@ name: fwfh_chewie -version: 0.16.0 +version: 0.16.1 description: WidgetFactory extension to render VIDEO with the chewie plugin. homepage: https://github.com/daohoangson/flutter_widget_from_html @@ -11,7 +11,7 @@ dependencies: chewie: ^1.3.0 flutter: sdk: flutter - flutter_widget_from_html_core: ">=0.14.2 <0.17.0" + flutter_widget_from_html_core: ">=0.14.2 <0.18.0" video_player: ^2.2.9 dependency_overrides: From d61762e4c530876bdee83cff5bb17cb5b47a8118 Mon Sep 17 00:00:00 2001 From: Dao Hoang Son Date: Tue, 15 Jul 2025 09:59:47 +0700 Subject: [PATCH 04/10] [fwfh_just_audio] v0.17.0 --- packages/enhanced/pubspec.yaml | 2 +- packages/fwfh_just_audio/CHANGELOG.md | 6 ++++++ packages/fwfh_just_audio/README.md | 2 +- packages/fwfh_just_audio/pubspec.yaml | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/enhanced/pubspec.yaml b/packages/enhanced/pubspec.yaml index 7a552c997..b3c2f8767 100644 --- a/packages/enhanced/pubspec.yaml +++ b/packages/enhanced/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: flutter_widget_from_html_core: ^0.17.0 fwfh_cached_network_image: ^0.16.1 fwfh_chewie: ^0.16.1 - fwfh_just_audio: ^0.16.0 + fwfh_just_audio: ^0.17.0 fwfh_svg: ^0.16.0 fwfh_url_launcher: ^0.16.0 fwfh_webview: ^0.15.4 diff --git a/packages/fwfh_just_audio/CHANGELOG.md b/packages/fwfh_just_audio/CHANGELOG.md index 9b23a858b..c0f353785 100644 --- a/packages/fwfh_just_audio/CHANGELOG.md +++ b/packages/fwfh_just_audio/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.17.0 + +- Requires Flutter 3.27 (#1448) +- Requires just_audio@0.10.4 (#1448) +- Add support for flutter_widget_from_html_core@0.17.0 (#1405) + ## 0.16.0 - Requires Flutter 3.10 (#1396) diff --git a/packages/fwfh_just_audio/README.md b/packages/fwfh_just_audio/README.md index 0f457ee79..ddc64f3e9 100644 --- a/packages/fwfh_just_audio/README.md +++ b/packages/fwfh_just_audio/README.md @@ -16,7 +16,7 @@ Add this to your app's `pubspec.yaml` file: ```yaml dependencies: flutter_widget_from_html_core: any - fwfh_just_audio: ^0.16.0 + fwfh_just_audio: ^0.17.0 ``` ### Platform specific configuration diff --git a/packages/fwfh_just_audio/pubspec.yaml b/packages/fwfh_just_audio/pubspec.yaml index d2e7226f1..1a5100be7 100644 --- a/packages/fwfh_just_audio/pubspec.yaml +++ b/packages/fwfh_just_audio/pubspec.yaml @@ -1,5 +1,5 @@ name: fwfh_just_audio -version: 0.16.0 +version: 0.17.0 description: WidgetFactory extension to render AUDIO with the just_audio plugin. homepage: https://github.com/daohoangson/flutter_widget_from_html @@ -10,7 +10,7 @@ environment: dependencies: flutter: sdk: flutter - flutter_widget_from_html_core: ">=0.8.0 <0.17.0" + flutter_widget_from_html_core: ">=0.8.0 <0.18.0" just_audio: ^0.10.4 dependency_overrides: From 9085143dcdf1ade4b3eb99be9175ef909c4dd1c9 Mon Sep 17 00:00:00 2001 From: Dao Hoang Son Date: Tue, 15 Jul 2025 10:13:37 +0700 Subject: [PATCH 05/10] [fwfh_svg] v0.16.1 --- packages/enhanced/pubspec.yaml | 2 +- packages/fwfh_svg/CHANGELOG.md | 4 ++++ packages/fwfh_svg/pubspec.yaml | 4 ++-- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/enhanced/pubspec.yaml b/packages/enhanced/pubspec.yaml index b3c2f8767..b9903c2d2 100644 --- a/packages/enhanced/pubspec.yaml +++ b/packages/enhanced/pubspec.yaml @@ -14,7 +14,7 @@ dependencies: fwfh_cached_network_image: ^0.16.1 fwfh_chewie: ^0.16.1 fwfh_just_audio: ^0.17.0 - fwfh_svg: ^0.16.0 + fwfh_svg: ^0.16.1 fwfh_url_launcher: ^0.16.0 fwfh_webview: ^0.15.4 html: ^0.15.0 diff --git a/packages/fwfh_svg/CHANGELOG.md b/packages/fwfh_svg/CHANGELOG.md index 4387d3789..9af381119 100644 --- a/packages/fwfh_svg/CHANGELOG.md +++ b/packages/fwfh_svg/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.16.1 + +- Add support for flutter_widget_from_html_core@0.17.0 (#1405) + ## 0.16.0 - Requires Flutter 3.10 (#1396) diff --git a/packages/fwfh_svg/pubspec.yaml b/packages/fwfh_svg/pubspec.yaml index 1a29f285b..48e91d1d6 100644 --- a/packages/fwfh_svg/pubspec.yaml +++ b/packages/fwfh_svg/pubspec.yaml @@ -1,5 +1,5 @@ name: fwfh_svg -version: 0.16.0 +version: 0.16.1 description: WidgetFactory extension to render SVG with flutter_svg plugin. homepage: https://github.com/daohoangson/flutter_widget_from_html @@ -11,7 +11,7 @@ dependencies: flutter: sdk: flutter flutter_svg: ^2.0.0 - flutter_widget_from_html_core: ">=0.8.0 <0.17.0" + flutter_widget_from_html_core: ">=0.8.0 <0.18.0" dependency_overrides: flutter_widget_from_html_core: From 69d49a39be5e9e38c431ebb8fa8d14fac8f0c0e6 Mon Sep 17 00:00:00 2001 From: Dao Hoang Son Date: Tue, 15 Jul 2025 10:14:31 +0700 Subject: [PATCH 06/10] [fwfh_url_launcher] v0.16.1 --- packages/enhanced/pubspec.yaml | 2 +- packages/fwfh_url_launcher/CHANGELOG.md | 4 ++++ packages/fwfh_url_launcher/pubspec.yaml | 4 ++-- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/enhanced/pubspec.yaml b/packages/enhanced/pubspec.yaml index b9903c2d2..c53a70518 100644 --- a/packages/enhanced/pubspec.yaml +++ b/packages/enhanced/pubspec.yaml @@ -15,7 +15,7 @@ dependencies: fwfh_chewie: ^0.16.1 fwfh_just_audio: ^0.17.0 fwfh_svg: ^0.16.1 - fwfh_url_launcher: ^0.16.0 + fwfh_url_launcher: ^0.16.1 fwfh_webview: ^0.15.4 html: ^0.15.0 diff --git a/packages/fwfh_url_launcher/CHANGELOG.md b/packages/fwfh_url_launcher/CHANGELOG.md index 9f5147b76..14a5d7156 100644 --- a/packages/fwfh_url_launcher/CHANGELOG.md +++ b/packages/fwfh_url_launcher/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.16.1 + +- Add support for flutter_widget_from_html_core@0.17.0 (#1405) + ## 0.16.0 - Requires Flutter 3.10 (#1396) diff --git a/packages/fwfh_url_launcher/pubspec.yaml b/packages/fwfh_url_launcher/pubspec.yaml index 6000bd9a7..7bec041b9 100644 --- a/packages/fwfh_url_launcher/pubspec.yaml +++ b/packages/fwfh_url_launcher/pubspec.yaml @@ -1,5 +1,5 @@ name: fwfh_url_launcher -version: 0.16.0 +version: 0.16.1 description: WidgetFactory extension to launch A tag via url_launcher plugin. homepage: https://github.com/daohoangson/flutter_widget_from_html @@ -10,7 +10,7 @@ environment: dependencies: flutter: sdk: flutter - flutter_widget_from_html_core: ">=0.8.0 <0.17.0" + flutter_widget_from_html_core: ">=0.8.0 <0.18.0" url_launcher: ^6.1.0 dependency_overrides: From f88ad660370d9ae8806aab6fcf03bcc16cf6db34 Mon Sep 17 00:00:00 2001 From: Dao Hoang Son Date: Tue, 15 Jul 2025 10:18:58 +0700 Subject: [PATCH 07/10] [fwfh_webview] v0.15.5 --- packages/enhanced/pubspec.yaml | 2 +- packages/fwfh_webview/CHANGELOG.md | 6 ++++++ packages/fwfh_webview/pubspec.yaml | 4 ++-- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/enhanced/pubspec.yaml b/packages/enhanced/pubspec.yaml index c53a70518..2325edd1f 100644 --- a/packages/enhanced/pubspec.yaml +++ b/packages/enhanced/pubspec.yaml @@ -16,7 +16,7 @@ dependencies: fwfh_just_audio: ^0.17.0 fwfh_svg: ^0.16.1 fwfh_url_launcher: ^0.16.1 - fwfh_webview: ^0.15.4 + fwfh_webview: ^0.15.5 html: ^0.15.0 dependency_overrides: diff --git a/packages/fwfh_webview/CHANGELOG.md b/packages/fwfh_webview/CHANGELOG.md index edca9039d..78f29eeae 100644 --- a/packages/fwfh_webview/CHANGELOG.md +++ b/packages/fwfh_webview/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.15.5 + +- Add support for flutter_widget_from_html_core@0.17.0 (#1405) +- Add support for webview_flutter_android@4.6.0 (#1405) +- Add support for webview_flutter_wkwebview@3.20.0 (#1452) + ## 0.15.4 - Add support for flutter_widget_from_html_core@0.16.0 (#1405) diff --git a/packages/fwfh_webview/pubspec.yaml b/packages/fwfh_webview/pubspec.yaml index c844f9d63..27ff55b2b 100644 --- a/packages/fwfh_webview/pubspec.yaml +++ b/packages/fwfh_webview/pubspec.yaml @@ -1,5 +1,5 @@ name: fwfh_webview -version: 0.15.4 +version: 0.15.5 description: WidgetFactory extension to render IFRAME with the official WebView plugin. homepage: https://github.com/daohoangson/flutter_widget_from_html @@ -10,7 +10,7 @@ environment: dependencies: flutter: sdk: flutter - flutter_widget_from_html_core: ">=0.10.5 <0.17.0" + flutter_widget_from_html_core: ">=0.10.5 <0.18.0" logging: ^1.0.0 web: ">=0.3.0 <2.0.0" webview_flutter: ^4.0.1 From 0a99242b982fa66d500a59963d9f308fae4be415 Mon Sep 17 00:00:00 2001 From: Dao Hoang Son Date: Tue, 15 Jul 2025 10:26:31 +0700 Subject: [PATCH 08/10] [enhanced] v0.17.0 --- packages/enhanced/CHANGELOG.md | 9 +++++++++ packages/enhanced/README.md | 2 +- packages/enhanced/pubspec.yaml | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/packages/enhanced/CHANGELOG.md b/packages/enhanced/CHANGELOG.md index 187d4cd37..30486ac34 100644 --- a/packages/enhanced/CHANGELOG.md +++ b/packages/enhanced/CHANGELOG.md @@ -1,3 +1,12 @@ +## 0.17.0 + +- Requires Flutter 3.32 (#1475) +- Requires just_audio@0.10.4 (#1448) +- Add support for video_player_platform_interface@6.3.0 (#1475) +- Add support for webview_flutter_android@4.6.0 (#1475) +- Add support for webview_flutter_wkwebview@3.20.0 (#1452) +- Fix `text-align: center` inside tables (#1451) + ## 0.16.0 - Requires Flutter 3.22 (#1403) diff --git a/packages/enhanced/README.md b/packages/enhanced/README.md index 6efaba4c3..b54298a84 100644 --- a/packages/enhanced/README.md +++ b/packages/enhanced/README.md @@ -27,7 +27,7 @@ Add this to your app's `pubspec.yaml` file: ```yaml dependencies: - flutter_widget_from_html: ^0.16.0 + flutter_widget_from_html: ^0.17.0 ``` ### Platform specific configuration diff --git a/packages/enhanced/pubspec.yaml b/packages/enhanced/pubspec.yaml index 2325edd1f..e8eb0fc3b 100644 --- a/packages/enhanced/pubspec.yaml +++ b/packages/enhanced/pubspec.yaml @@ -1,5 +1,5 @@ name: flutter_widget_from_html -version: 0.16.0 +version: 0.17.0 description: Flutter package to render html as widgets that supports hyperlink, image, audio, video, iframe and many other tags. homepage: https://github.com/daohoangson/flutter_widget_from_html From 15bd5a28fc6ca20100a112fa29b187745d2c2fc9 Mon Sep 17 00:00:00 2001 From: Dao Hoang Son Date: Tue, 15 Jul 2025 10:26:44 +0700 Subject: [PATCH 09/10] Fix incorrect PR references in CHANGELOGs --- packages/fwfh_cached_network_image/CHANGELOG.md | 2 +- packages/fwfh_chewie/CHANGELOG.md | 4 ++-- packages/fwfh_just_audio/CHANGELOG.md | 2 +- packages/fwfh_svg/CHANGELOG.md | 2 +- packages/fwfh_url_launcher/CHANGELOG.md | 2 +- packages/fwfh_webview/CHANGELOG.md | 4 ++-- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/fwfh_cached_network_image/CHANGELOG.md b/packages/fwfh_cached_network_image/CHANGELOG.md index 49228560f..ec7442976 100644 --- a/packages/fwfh_cached_network_image/CHANGELOG.md +++ b/packages/fwfh_cached_network_image/CHANGELOG.md @@ -1,6 +1,6 @@ ## 0.16.1 -- Add support for flutter_widget_from_html_core@0.17.0 (#1405) +- Add support for flutter_widget_from_html_core@0.17.0 (#1475) ## 0.16.0 diff --git a/packages/fwfh_chewie/CHANGELOG.md b/packages/fwfh_chewie/CHANGELOG.md index 6c6012a16..045c8d475 100644 --- a/packages/fwfh_chewie/CHANGELOG.md +++ b/packages/fwfh_chewie/CHANGELOG.md @@ -1,7 +1,7 @@ ## 0.16.1 -- Add support for flutter_widget_from_html_core@0.17.0 (#1405) -- Add support for video_player_platform_interface@6.3.0 (#1405) +- Add support for flutter_widget_from_html_core@0.17.0 (#1475) +- Add support for video_player_platform_interface@6.3.0 (#1475) ## 0.16.0 diff --git a/packages/fwfh_just_audio/CHANGELOG.md b/packages/fwfh_just_audio/CHANGELOG.md index c0f353785..1d4245e1e 100644 --- a/packages/fwfh_just_audio/CHANGELOG.md +++ b/packages/fwfh_just_audio/CHANGELOG.md @@ -2,7 +2,7 @@ - Requires Flutter 3.27 (#1448) - Requires just_audio@0.10.4 (#1448) -- Add support for flutter_widget_from_html_core@0.17.0 (#1405) +- Add support for flutter_widget_from_html_core@0.17.0 (#1475) ## 0.16.0 diff --git a/packages/fwfh_svg/CHANGELOG.md b/packages/fwfh_svg/CHANGELOG.md index 9af381119..32b606753 100644 --- a/packages/fwfh_svg/CHANGELOG.md +++ b/packages/fwfh_svg/CHANGELOG.md @@ -1,6 +1,6 @@ ## 0.16.1 -- Add support for flutter_widget_from_html_core@0.17.0 (#1405) +- Add support for flutter_widget_from_html_core@0.17.0 (#1475) ## 0.16.0 diff --git a/packages/fwfh_url_launcher/CHANGELOG.md b/packages/fwfh_url_launcher/CHANGELOG.md index 14a5d7156..dc1c824b2 100644 --- a/packages/fwfh_url_launcher/CHANGELOG.md +++ b/packages/fwfh_url_launcher/CHANGELOG.md @@ -1,6 +1,6 @@ ## 0.16.1 -- Add support for flutter_widget_from_html_core@0.17.0 (#1405) +- Add support for flutter_widget_from_html_core@0.17.0 (#1475) ## 0.16.0 diff --git a/packages/fwfh_webview/CHANGELOG.md b/packages/fwfh_webview/CHANGELOG.md index 78f29eeae..10c100ce7 100644 --- a/packages/fwfh_webview/CHANGELOG.md +++ b/packages/fwfh_webview/CHANGELOG.md @@ -1,7 +1,7 @@ ## 0.15.5 -- Add support for flutter_widget_from_html_core@0.17.0 (#1405) -- Add support for webview_flutter_android@4.6.0 (#1405) +- Add support for flutter_widget_from_html_core@0.17.0 (#1475) +- Add support for webview_flutter_android@4.6.0 (#1475) - Add support for webview_flutter_wkwebview@3.20.0 (#1452) ## 0.15.4 From efc66508f455c22bc0c674ec65fd59070f7cc20b Mon Sep 17 00:00:00 2001 From: Dao Hoang Son Date: Tue, 15 Jul 2025 10:32:04 +0700 Subject: [PATCH 10/10] Update files --- demo_app/analysis_options.yaml | 3 + .../integration_test/auto_resize_test.dart | 12 +- demo_app/lib/main.dart | 23 +-- demo_app/lib/screens/audio.dart | 113 ++++++------- .../lib/screens/custom_styles_builder.dart | 24 +-- .../lib/screens/custom_widget_builder.dart | 69 ++++---- demo_app/lib/screens/font_size.dart | 121 +++++++------- demo_app/lib/screens/golden.dart | 91 ++++++----- demo_app/lib/screens/hello_world.dart | 30 ++-- demo_app/lib/screens/hello_world_core.dart | 34 ++-- demo_app/lib/screens/home.dart | 34 ++-- demo_app/lib/screens/huge_html.dart | 114 ++++++------- demo_app/lib/screens/iframe.dart | 68 ++++---- demo_app/lib/screens/img.dart | 61 +++---- demo_app/lib/screens/img_file.dart | 154 +++++++++--------- demo_app/lib/screens/photo_view.dart | 64 ++++---- demo_app/lib/screens/smilie.dart | 22 +-- demo_app/lib/screens/video.dart | 129 +++++++-------- demo_app/lib/screens/wordpress.dart | 114 +++++++------ demo_app/lib/widgets/popup_menu.dart | 11 +- demo_app/pubspec.lock | 28 ++-- demo_app/pubspec.yaml | 4 +- demo_app/test/golden_test.dart | 55 +++---- demo_app/test/smilie_test.dart | 4 +- 24 files changed, 694 insertions(+), 688 deletions(-) diff --git a/demo_app/analysis_options.yaml b/demo_app/analysis_options.yaml index 1a04de2e5..b6bdcf2aa 100644 --- a/demo_app/analysis_options.yaml +++ b/demo_app/analysis_options.yaml @@ -5,6 +5,9 @@ analyzer: # TODO: remove this when it auto ignores `depend_on_referenced_packages` - lib/generated_plugin_registrant.dart +formatter: + trailing_commas: preserve + linter: rules: always_put_control_body_on_new_line: true diff --git a/demo_app/integration_test/auto_resize_test.dart b/demo_app/integration_test/auto_resize_test.dart index 0a6da89ee..76d511cc6 100644 --- a/demo_app/integration_test/auto_resize_test.dart +++ b/demo_app/integration_test/auto_resize_test.dart @@ -13,7 +13,7 @@ void main() { child: VideoPlayer( 'https://flutter-widget-from-html.github.io/pages/flower.mp4', aspectRatio: 1, - loadingBuilder: (_, __, ___) => + loadingBuilder: (_, _, _) => const Center(child: CircularProgressIndicator()), ), ); @@ -36,10 +36,11 @@ void main() { final testCase = webViewTestCases.currentValue!; final test = await testCase.run($); - for (var i = 0;; i++) { + for (var i = 0; ; i++) { await $.pump(); - await $.tester - .runAsync(() => Future.delayed(const Duration(seconds: 3))); + await $.tester.runAsync( + () => Future.delayed(const Duration(seconds: 3)), + ); await $.pump(); try { @@ -70,7 +71,8 @@ class WebViewTestCase { }); Future<_AspectRatioTest> run(PatrolIntegrationTester $) async { - final html = ''' + final html = + ''' diff --git a/demo_app/lib/main.dart b/demo_app/lib/main.dart index cd98f6f60..2d1ba112a 100644 --- a/demo_app/lib/main.dart +++ b/demo_app/lib/main.dart @@ -12,7 +12,8 @@ void main() { } void _onLogRecord(LogRecord record) { - final prefix = '${record.time.toIso8601String().substring(11)} ' + final prefix = + '${record.time.toIso8601String().substring(11)} ' '${record.loggerName}@${record.level.name} '; debugPrint('$prefix${record.message}'); @@ -28,15 +29,15 @@ class MyApp extends StatelessWidget { @override Widget build(BuildContext context) => PopupMenuStateProvider( - builder: (context) => MaterialApp( - title: 'Flutter Widget from HTML', - theme: FlexThemeData.light(scheme: FlexScheme.blueM3), - darkTheme: FlexThemeData.dark(scheme: FlexScheme.blueM3), - showPerformanceOverlay: context.showPerformanceOverlay, + builder: (context) => MaterialApp( + title: 'Flutter Widget from HTML', + theme: FlexThemeData.light(scheme: FlexScheme.blueM3), + darkTheme: FlexThemeData.dark(scheme: FlexScheme.blueM3), + showPerformanceOverlay: context.showPerformanceOverlay, - // let HomeScreen handle all the routings - initialRoute: '/', - onGenerateRoute: HomeScreen.onGenerateRoute, - ), - ); + // let HomeScreen handle all the routings + initialRoute: '/', + onGenerateRoute: HomeScreen.onGenerateRoute, + ), + ); } diff --git a/demo_app/lib/screens/audio.dart b/demo_app/lib/screens/audio.dart index db1d14dbb..2568dfc9e 100644 --- a/demo_app/lib/screens/audio.dart +++ b/demo_app/lib/screens/audio.dart @@ -24,68 +24,69 @@ class _State extends State { @override Widget build(BuildContext context) => Scaffold( - appBar: AppBar( - title: const Text('AudioScreen'), + appBar: AppBar( + title: const Text('AudioScreen'), + ), + body: ListView( + children: [ + CheckboxListTile( + value: autoplay, + onChanged: (v) => _setState(() => autoplay = v == true), + title: const Text('autoplay'), ), - body: ListView( - children: [ - CheckboxListTile( - value: autoplay, - onChanged: (v) => _setState(() => autoplay = v == true), - title: const Text('autoplay'), - ), - CheckboxListTile( - value: loop, - onChanged: (v) => _setState(() => loop = v == true), - title: const Text('loop'), - ), - CheckboxListTile( - value: muted, - onChanged: (v) => _setState(() => muted = v == true), - title: const Text('muted'), - ), - CheckboxListTile( - value: preload, - onChanged: (v) => _setState(() => preload = v == true), - title: const Text('preload'), - ), - ListTile( - title: const Text('HTML:'), - subtitle: Text(_html), - ), - ListTile( - title: const Text('Rendered:'), - subtitle: HtmlWidget( - _html, - key: Key(_html), - baseUrl: Uri.parse( - 'https://interactive-examples.mdn.mozilla.net/pages/tabbed/audio.html', - ), - ), + CheckboxListTile( + value: loop, + onChanged: (v) => _setState(() => loop = v == true), + title: const Text('loop'), + ), + CheckboxListTile( + value: muted, + onChanged: (v) => _setState(() => muted = v == true), + title: const Text('muted'), + ), + CheckboxListTile( + value: preload, + onChanged: (v) => _setState(() => preload = v == true), + title: const Text('preload'), + ), + ListTile( + title: const Text('HTML:'), + subtitle: Text(_html), + ), + ListTile( + title: const Text('Rendered:'), + subtitle: HtmlWidget( + _html, + key: Key(_html), + baseUrl: Uri.parse( + 'https://interactive-examples.mdn.mozilla.net/pages/tabbed/audio.html', ), - const Center(child: Text('----')), - ], + ), ), - ); + const Center(child: Text('----')), + ], + ), + ); void _setState(VoidCallback callback) => setState(() { - callback(); + callback(); - final attributes = []; - if (autoplay) { - attributes.add('autoplay'); - } - if (loop) { - attributes.add('loop'); - } - if (muted) { - attributes.add('muted'); - } - if (preload) { - attributes.add('preload'); - } + final attributes = []; + if (autoplay) { + attributes.add('autoplay'); + } + if (loop) { + attributes.add('loop'); + } + if (muted) { + attributes.add('muted'); + } + if (preload) { + attributes.add('preload'); + } - _html = ''' + _html = + '''
'''; - }); + }); } diff --git a/demo_app/lib/screens/custom_styles_builder.dart b/demo_app/lib/screens/custom_styles_builder.dart index 38dcbeb58..b7b1d01de 100644 --- a/demo_app/lib/screens/custom_styles_builder.dart +++ b/demo_app/lib/screens/custom_styles_builder.dart @@ -8,16 +8,16 @@ class CustomStylesBuilderScreen extends StatelessWidget { @override Widget build(BuildContext context) => Scaffold( - appBar: AppBar( - title: const Text('CustomStylesBuilderScreen'), - ), - body: Padding( - padding: const EdgeInsets.all(8.0), - child: HtmlWidget( - kHtml, - customStylesBuilder: (e) => - e.classes.contains('name') ? {'color': 'red'} : null, - ), - ), - ); + appBar: AppBar( + title: const Text('CustomStylesBuilderScreen'), + ), + body: Padding( + padding: const EdgeInsets.all(8.0), + child: HtmlWidget( + kHtml, + customStylesBuilder: (e) => + e.classes.contains('name') ? {'color': 'red'} : null, + ), + ), + ); } diff --git a/demo_app/lib/screens/custom_widget_builder.dart b/demo_app/lib/screens/custom_widget_builder.dart index bc28ffe19..23c36023d 100644 --- a/demo_app/lib/screens/custom_widget_builder.dart +++ b/demo_app/lib/screens/custom_widget_builder.dart @@ -29,45 +29,44 @@ class CustomWidgetBuilderScreen extends StatelessWidget { @override Widget build(BuildContext context) => Scaffold( - appBar: AppBar( - title: const Text('CustomWidgetBuilderScreen'), - ), - body: SingleChildScrollView( - child: Padding( - padding: const EdgeInsets.all(8.0), - child: HtmlWidget( - kHtml, - customWidgetBuilder: (e) { - if (!e.classes.contains('carousel')) { - return null; - } + appBar: AppBar( + title: const Text('CustomWidgetBuilderScreen'), + ), + body: SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.all(8.0), + child: HtmlWidget( + kHtml, + customWidgetBuilder: (e) { + if (!e.classes.contains('carousel')) { + return null; + } - final srcs = []; - for (final child in e.children) { - for (final grandChild in child.children) { - if (grandChild.attributes case {'src': final String src}) { - srcs.add(src); - } - } + final srcs = []; + for (final child in e.children) { + for (final grandChild in child.children) { + if (grandChild.attributes case {'src': final String src}) { + srcs.add(src); } + } + } - return CarouselSlider( - options: CarouselOptions( - autoPlay: true, - autoPlayAnimationDuration: - const Duration(milliseconds: 500), - autoPlayInterval: const Duration(seconds: 2), - enlargeCenterPage: true, - ), - items: srcs.map(_toItem).toList(growable: false), - ); - }, - ), - ), + return CarouselSlider( + options: CarouselOptions( + autoPlay: true, + autoPlayAnimationDuration: const Duration(milliseconds: 500), + autoPlayInterval: const Duration(seconds: 2), + enlargeCenterPage: true, + ), + items: srcs.map(_toItem).toList(growable: false), + ); + }, ), - ); + ), + ), + ); static Widget _toItem(String src) => Center( - child: Image.network(src, fit: BoxFit.cover, width: 1000), - ); + child: Image.network(src, fit: BoxFit.cover, width: 1000), + ); } diff --git a/demo_app/lib/screens/font_size.dart b/demo_app/lib/screens/font_size.dart index 3964b21cf..d856dd166 100644 --- a/demo_app/lib/screens/font_size.dart +++ b/demo_app/lib/screens/font_size.dart @@ -8,62 +8,62 @@ class FontSizeScreen extends StatelessWidget { @override Widget build(BuildContext context) => SelectionAreaScaffold( - appBar: AppBar( - title: const Text('FontSizeScreen'), - actions: const [ - PopupMenu( - toggleIsSelectable: true, - ), - ], + appBar: AppBar( + title: const Text('FontSizeScreen'), + actions: const [ + PopupMenu( + toggleIsSelectable: true, ), - body: Padding( - padding: const EdgeInsets.all(8.0), - child: SingleChildScrollView( - child: Column( - children: [ - ColoredBox( - color: Colors.blue, - child: _Panel(), - ), - ColoredBox( - color: Colors.red, - child: _Slider(), - ), - ], + ], + ), + body: Padding( + padding: const EdgeInsets.all(8.0), + child: SingleChildScrollView( + child: Column( + children: [ + ColoredBox( + color: Colors.blue, + child: _Panel(), ), - ), + ColoredBox( + color: Colors.red, + child: _Slider(), + ), + ], ), - ); + ), + ), + ); } class _Panel extends StatelessWidget { @override Widget build(BuildContext context) => DefaultTextStyle( - style: DefaultTextStyle.of(context).style.copyWith(fontSize: 10), - child: Padding( - padding: const EdgeInsets.all(8), - child: Column( + style: DefaultTextStyle.of(context).style.copyWith(fontSize: 10), + child: Padding( + padding: const EdgeInsets.all(8), + child: Column( + children: [ + _Values(), + Table( children: [ - _Values(), - Table( - children: [ - _row(context, null, 10), - _row(context, '2em', 20), - _row(context, '200%', 20), - _row(context, '20pt', 20 * 96 / 72), - _row(context, '20px', 20), - ], - ), - const Divider(), - const HtmlWidget( - '

Almost every developer\'s favorite ' - 'molecule is C8H10N4O2, ' - 'also known as "caffeine."

', - ), + _row(context, null, 10), + _row(context, '2em', 20), + _row(context, '200%', 20), + _row(context, '20pt', 20 * 96 / 72), + _row(context, '20px', 20), ], ), - ), - ); + const Divider(), + const HtmlWidget( + '

Almost every developer\'s favorite ' + 'molecule is C8H10N4O2, ' + 'also known as "caffeine."

', + ), + ], + ), + ), + ); TableRow _row(BuildContext context, String? data, double fontSize) => TableRow( @@ -103,19 +103,20 @@ class _SliderState extends State<_Slider> { @override Widget build(BuildContext context) => Column( - children: [ - Slider( - divisions: 3, - max: 2, - min: 0.5, - onChanged: (v) => setState(() => _textScaleFactor = v), - value: _textScaleFactor, - ), - MediaQuery( - data: MediaQuery.of(context) - .copyWith(textScaler: TextScaler.linear(_textScaleFactor)), - child: _Panel(), - ), - ], - ); + children: [ + Slider( + divisions: 3, + max: 2, + min: 0.5, + onChanged: (v) => setState(() => _textScaleFactor = v), + value: _textScaleFactor, + ), + MediaQuery( + data: MediaQuery.of( + context, + ).copyWith(textScaler: TextScaler.linear(_textScaleFactor)), + child: _Panel(), + ), + ], + ); } diff --git a/demo_app/lib/screens/golden.dart b/demo_app/lib/screens/golden.dart index 536b57a6c..df600315d 100644 --- a/demo_app/lib/screens/golden.dart +++ b/demo_app/lib/screens/golden.dart @@ -107,19 +107,21 @@ class _GoldensState extends State { _filter.addListener(_onFilter); _goldens = rootBundle.loadStructuredData>>( - 'test/goldens.json', (value) async { - final map = jsonDecode(value) as Map; - final typed = >[]; - for (final entry in map.entries) { - final key = entry.key; - final value = entry.value; - if (key is String && value is String) { - typed.add(MapEntry(key, value)); + 'test/goldens.json', + (value) async { + final map = jsonDecode(value) as Map; + final typed = >[]; + for (final entry in map.entries) { + final key = entry.key; + final value = entry.value; + if (key is String && value is String) { + typed.add(MapEntry(key, value)); + } } - } - return typed; - }); + return typed; + }, + ); } @override @@ -130,16 +132,16 @@ class _GoldensState extends State { @override Widget build(BuildContext context) => Scaffold( - appBar: AppBar(title: const Text('GoldensScreen')), - body: FutureBuilder>>( - builder: (context, snapshot) => snapshot.hasData - ? _onData(_filtered ?? snapshot.requireData) - : snapshot.hasError - ? _onError(snapshot.error!) - : _onLoading(), - future: _goldens, - ), - ); + appBar: AppBar(title: const Text('GoldensScreen')), + body: FutureBuilder>>( + builder: (context, snapshot) => snapshot.hasData + ? _onData(_filtered ?? snapshot.requireData) + : snapshot.hasError + ? _onError(snapshot.error!) + : _onLoading(), + future: _goldens, + ), + ); Widget _buildItem(BuildContext context, MapEntry golden) => ListTile( @@ -157,31 +159,30 @@ class _GoldensState extends State { ); Widget _onData(List> goldens) => Column( - children: [ - ListTile( - title: TextField( - controller: _filter, - autocorrect: false, - decoration: InputDecoration( - hintText: 'Filter', - suffixIcon: _filtered != null - ? InkWell( - onTap: () => _filter.clear(), - child: const Icon(Icons.cancel), - ) - : null, - ), - ), - ), - Expanded( - child: ListView.builder( - itemBuilder: (context, index) => - _buildItem(context, goldens[index]), - itemCount: goldens.length, - ), + children: [ + ListTile( + title: TextField( + controller: _filter, + autocorrect: false, + decoration: InputDecoration( + hintText: 'Filter', + suffixIcon: _filtered != null + ? InkWell( + onTap: () => _filter.clear(), + child: const Icon(Icons.cancel), + ) + : null, ), - ], - ); + ), + ), + Expanded( + child: ListView.builder( + itemBuilder: (context, index) => _buildItem(context, goldens[index]), + itemCount: goldens.length, + ), + ), + ], + ); Widget _onError(Object error) => Center(child: Text('$error')); diff --git a/demo_app/lib/screens/hello_world.dart b/demo_app/lib/screens/hello_world.dart index 0ca601bb9..ea2573994 100644 --- a/demo_app/lib/screens/hello_world.dart +++ b/demo_app/lib/screens/hello_world.dart @@ -147,20 +147,20 @@ class HelloWorldScreen extends StatelessWidget { @override Widget build(BuildContext context) => SelectionAreaScaffold( - appBar: AppBar( - title: const Text('HelloWorldScreen'), - actions: const [ - PopupMenu( - scrollToTop: true, - toggleIsSelectable: true, - ), - ], + appBar: AppBar( + title: const Text('HelloWorldScreen'), + actions: const [ + PopupMenu( + scrollToTop: true, + toggleIsSelectable: true, ), - body: SingleChildScrollView( - child: Padding( - padding: const EdgeInsets.all(8.0), - child: HtmlWidget(kHtml, key: context.key), - ), - ), - ); + ], + ), + body: SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.all(8.0), + child: HtmlWidget(kHtml, key: context.key), + ), + ), + ); } diff --git a/demo_app/lib/screens/hello_world_core.dart b/demo_app/lib/screens/hello_world_core.dart index 113562448..f2f358a28 100644 --- a/demo_app/lib/screens/hello_world_core.dart +++ b/demo_app/lib/screens/hello_world_core.dart @@ -9,23 +9,23 @@ class HelloWorldCoreScreen extends StatelessWidget { @override Widget build(BuildContext context) => SelectionAreaScaffold( - appBar: AppBar( - title: const Text('HelloWorldCoreScreen'), - actions: const [ - PopupMenu( - scrollToTop: true, - toggleIsSelectable: true, - ), - ], + appBar: AppBar( + title: const Text('HelloWorldCoreScreen'), + actions: const [ + PopupMenu( + scrollToTop: true, + toggleIsSelectable: true, ), - body: SingleChildScrollView( - child: Padding( - padding: const EdgeInsets.all(8.0), - child: HtmlWidget( - enhanced.kHtml, - key: context.key, - ), - ), + ], + ), + body: SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.all(8.0), + child: HtmlWidget( + enhanced.kHtml, + key: context.key, ), - ); + ), + ), + ); } diff --git a/demo_app/lib/screens/home.dart b/demo_app/lib/screens/home.dart index 3b6981ffe..ef0489a4d 100644 --- a/demo_app/lib/screens/home.dart +++ b/demo_app/lib/screens/home.dart @@ -41,22 +41,22 @@ class HomeScreen extends StatelessWidget { @override Widget build(BuildContext context) => Scaffold( - appBar: AppBar( - title: const Text('Demo app'), - actions: const [PopupMenu()], - ), - body: ListView( - children: _screens.keys - .map( - (title) => ListTile( - title: Text(title), - onTap: () => - Navigator.pushNamed(context, _routeNameFromTitle(title)), - ), - ) - .toList(growable: false), - ), - ); + appBar: AppBar( + title: const Text('Demo app'), + actions: const [PopupMenu()], + ), + body: ListView( + children: _screens.keys + .map( + (title) => ListTile( + title: Text(title), + onTap: () => + Navigator.pushNamed(context, _routeNameFromTitle(title)), + ), + ) + .toList(growable: false), + ), + ); static Route onGenerateRoute(RouteSettings route) { for (final title in _screens.keys) { @@ -71,7 +71,7 @@ class HomeScreen extends StatelessWidget { } return PageRouteBuilder( - pageBuilder: (_, __, ___) => const HomeScreen(), + pageBuilder: (_, _, _) => const HomeScreen(), settings: const RouteSettings(name: '/'), ); } diff --git a/demo_app/lib/screens/huge_html.dart b/demo_app/lib/screens/huge_html.dart index 111248bcc..87f2d1a5f 100644 --- a/demo_app/lib/screens/huge_html.dart +++ b/demo_app/lib/screens/huge_html.dart @@ -5189,80 +5189,80 @@ class HugeHtmlScreen extends StatelessWidget { @override Widget build(BuildContext context) => Scaffold( - appBar: AppBar( - title: const Text('HugeHtmlScreen'), - actions: const [PopupMenu()], + appBar: AppBar( + title: const Text('HugeHtmlScreen'), + actions: const [PopupMenu()], + ), + body: ListView( + children: [ + ListTile( + title: const Text('renderMode: Column'), + onTap: () => Navigator.push( + context, + MaterialPageRoute(builder: (_) => _ColumnScreen()), + ), ), - body: ListView( - children: [ - ListTile( - title: const Text('renderMode: Column'), - onTap: () => Navigator.push( - context, - MaterialPageRoute(builder: (_) => _ColumnScreen()), - ), - ), - ListTile( - title: const Text('renderMode: ListView'), - onTap: () => Navigator.push( - context, - MaterialPageRoute(builder: (_) => _ListViewScreen()), - ), - ), - ListTile( - title: const Text('renderMode: SliverList'), - onTap: () => Navigator.push( - context, - MaterialPageRoute(builder: (_) => _SliverListScreen()), - ), - ), - ], + ListTile( + title: const Text('renderMode: ListView'), + onTap: () => Navigator.push( + context, + MaterialPageRoute(builder: (_) => _ListViewScreen()), + ), ), - ); + ListTile( + title: const Text('renderMode: SliverList'), + onTap: () => Navigator.push( + context, + MaterialPageRoute(builder: (_) => _SliverListScreen()), + ), + ), + ], + ), + ); } class _ColumnScreen extends StatelessWidget { @override Widget build(BuildContext context) => Scaffold( - appBar: AppBar(title: const Text('renderMode: Column')), - body: const SingleChildScrollView( - child: Padding( - padding: EdgeInsets.all(8.0), - child: RepaintBoundary( - child: HtmlWidget(kHtml), - ), - ), + appBar: AppBar(title: const Text('renderMode: Column')), + body: const SingleChildScrollView( + child: Padding( + padding: EdgeInsets.all(8.0), + child: RepaintBoundary( + child: HtmlWidget(kHtml), ), - ); + ), + ), + ); } class _ListViewScreen extends StatelessWidget { @override Widget build(BuildContext context) => Scaffold( - appBar: AppBar(title: const Text('renderMode: ListView')), - body: const Padding( - padding: EdgeInsets.all(8.0), - child: HtmlWidget(kHtml, renderMode: RenderMode.listView), - ), - ); + appBar: AppBar(title: const Text('renderMode: ListView')), + body: const Padding( + padding: EdgeInsets.all(8.0), + child: HtmlWidget(kHtml, renderMode: RenderMode.listView), + ), + ); } class _SliverListScreen extends StatelessWidget { @override Widget build(BuildContext context) => const Scaffold( - body: CustomScrollView( - slivers: [ - SliverAppBar( - title: Text('renderMode: SliverList'), - floating: true, - expandedHeight: 200, - flexibleSpace: Placeholder(), - ), - SliverPadding( - padding: EdgeInsets.all(8.0), - sliver: HtmlWidget(kHtml, renderMode: RenderMode.sliverList), - ), - ], + body: CustomScrollView( + slivers: [ + SliverAppBar( + title: Text('renderMode: SliverList'), + floating: true, + expandedHeight: 200, + flexibleSpace: Placeholder(), + ), + SliverPadding( + padding: EdgeInsets.all(8.0), + sliver: HtmlWidget(kHtml, renderMode: RenderMode.sliverList), ), - ); + ], + ), + ); } diff --git a/demo_app/lib/screens/iframe.dart b/demo_app/lib/screens/iframe.dart index ba6f1bfaa..88aae314b 100644 --- a/demo_app/lib/screens/iframe.dart +++ b/demo_app/lib/screens/iframe.dart @@ -31,43 +31,43 @@ class _State extends State { @override Widget build(BuildContext context) => Scaffold( - appBar: AppBar( - title: const Text('IframeScreen'), + appBar: AppBar( + title: const Text('IframeScreen'), + ), + body: ListView( + children: [ + CheckboxListTile( + value: webView, + onChanged: (v) => setState(() => webView = v == true), + title: const HtmlWidget('.webView'), + subtitle: const Text('Renders web view, default ❌'), ), - body: ListView( - children: [ - CheckboxListTile( - value: webView, - onChanged: (v) => setState(() => webView = v == true), - title: const HtmlWidget('.webView'), - subtitle: const Text('Renders web view, default ❌'), - ), - CheckboxListTile( - value: webViewJs, - onChanged: (v0) => setState(() { - final v = v0 == true; - if (v) { - webView = true; - } - webViewJs = v; - }), - title: const HtmlWidget('.webViewJs'), - subtitle: const Text('Allows JavaScript execution, default ✅'), - ), - Padding( - padding: const EdgeInsets.all(8.0), - child: HtmlWidget( - html, - factoryBuilder: () => _WidgetFactory( - webView: webView, - webViewJs: webViewJs, - ), - rebuildTriggers: [webView, webViewJs], - ), + CheckboxListTile( + value: webViewJs, + onChanged: (v0) => setState(() { + final v = v0 == true; + if (v) { + webView = true; + } + webViewJs = v; + }), + title: const HtmlWidget('.webViewJs'), + subtitle: const Text('Allows JavaScript execution, default ✅'), + ), + Padding( + padding: const EdgeInsets.all(8.0), + child: HtmlWidget( + html, + factoryBuilder: () => _WidgetFactory( + webView: webView, + webViewJs: webViewJs, ), - ], + rebuildTriggers: [webView, webViewJs], + ), ), - ); + ], + ), + ); } class _WidgetFactory extends WidgetFactory { diff --git a/demo_app/lib/screens/img.dart b/demo_app/lib/screens/img.dart index 3958610d8..8f59e3f4a 100644 --- a/demo_app/lib/screens/img.dart +++ b/demo_app/lib/screens/img.dart @@ -14,38 +14,38 @@ class _State extends State { @override Widget build(BuildContext context) => DefaultTabController( - length: 4, - child: Scaffold( - appBar: AppBar( - bottom: const TabBar( - tabs: [ - Tab(text: 'Network'), - Tab(text: 'Asset'), - Tab(text: 'Data URI'), - Tab(text: 'SVG'), - ], - ), - title: const Text('ImgScreen'), - ), - body: TabBarView( - children: [ - _buildHtmlWidget(_htmlNetwork()), - _buildHtmlWidget(_htmlAsset()), - _buildHtmlWidget(_htmlDataUri()), - _buildHtmlWidget(_htmlSvg()), - ], - ), + length: 4, + child: Scaffold( + appBar: AppBar( + bottom: const TabBar( + tabs: [ + Tab(text: 'Network'), + Tab(text: 'Asset'), + Tab(text: 'Data URI'), + Tab(text: 'SVG'), + ], ), - ); + title: const Text('ImgScreen'), + ), + body: TabBarView( + children: [ + _buildHtmlWidget(_htmlNetwork()), + _buildHtmlWidget(_htmlAsset()), + _buildHtmlWidget(_htmlDataUri()), + _buildHtmlWidget(_htmlSvg()), + ], + ), + ), + ); Widget _buildHtmlWidget(String html) => SingleChildScrollView( - child: Padding( - padding: const EdgeInsets.all(8.0), - child: HtmlWidget( - '$html
${const HtmlEscape().convert(html)}
', - ), - ), - ); + child: Padding( + padding: const EdgeInsets.all(8.0), + child: HtmlWidget( + '$html
${const HtmlEscape().convert(html)}
', + ), + ), + ); String _htmlAsset() { const icon = 'asset:logos/icon.png'; @@ -68,7 +68,8 @@ class _State extends State { '''; } - String _htmlNetwork() => ''' + String _htmlNetwork() => + '''

Inline: alt diff --git a/demo_app/lib/screens/img_file.dart b/demo_app/lib/screens/img_file.dart index fce52e817..499c3c04c 100644 --- a/demo_app/lib/screens/img_file.dart +++ b/demo_app/lib/screens/img_file.dart @@ -10,31 +10,31 @@ class ImgFileScreen extends StatelessWidget { @override Widget build(BuildContext context) => DefaultTabController( - length: 2, - child: Scaffold( - appBar: AppBar( - bottom: const TabBar( - tabs: [ - Tab(text: 'PNG'), - Tab(text: 'SVG'), - ], - ), - title: const Text('ImgFileScreen'), + length: 2, + child: Scaffold( + appBar: AppBar( + bottom: const TabBar( + tabs: [ + Tab(text: 'PNG'), + Tab(text: 'SVG'), + ], + ), + title: const Text('ImgFileScreen'), + ), + body: const TabBarView( + children: [ + _ImgFileTab( + assetKey: 'logos/icon.png', + fileExtension: 'png', ), - body: const TabBarView( - children: [ - _ImgFileTab( - assetKey: 'logos/icon.png', - fileExtension: 'png', - ), - _ImgFileTab( - assetKey: 'packages/fwfh_svg/test/images/icon.svg', - fileExtension: 'svg', - ), - ], + _ImgFileTab( + assetKey: 'packages/fwfh_svg/test/images/icon.svg', + fileExtension: 'svg', ), - ), - ); + ], + ), + ), + ); } class _ImgFileTab extends StatefulWidget { @@ -62,61 +62,61 @@ class _ImgFileState extends State<_ImgFileTab> { @override Widget build(BuildContext context) => AnimatedBuilder( - animation: status, - builder: (_, __) { - switch (status.value) { - case _ImgFileStatus.idle: - return Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Padding( - padding: const EdgeInsets.all(8.0), - child: Text( - 'This test will write a ${widget.fileExtension} into ' - 'the file system then try to render with an IMG tag. ' - 'The actual file path is semi-random and it should be ' - 'unique across tests (switch tab to re-test).', - ), - ), - Center( - child: ElevatedButton( - onPressed: _writeFile, - child: const Text('Write file'), - ), - ), - ], - ); - case _ImgFileStatus.writeFileWriting: - return const Center(child: CircularProgressIndicator()); - case _ImgFileStatus.writeFileSuccess: - return FutureBuilder( - builder: (_, snapshot) { - if (!snapshot.hasData) { - return const Center(child: CircularProgressIndicator()); - } - - final file = snapshot.requireData; - final html = - ''; - - return Padding( - padding: const EdgeInsets.all(8.0), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text(html), - HtmlWidget(html), - ], - ), - ); - }, - future: file, + animation: status, + builder: (_, _) { + switch (status.value) { + case _ImgFileStatus.idle: + return Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( + padding: const EdgeInsets.all(8.0), + child: Text( + 'This test will write a ${widget.fileExtension} into ' + 'the file system then try to render with an IMG tag. ' + 'The actual file path is semi-random and it should be ' + 'unique across tests (switch tab to re-test).', + ), + ), + Center( + child: ElevatedButton( + onPressed: _writeFile, + child: const Text('Write file'), + ), + ), + ], + ); + case _ImgFileStatus.writeFileWriting: + return const Center(child: CircularProgressIndicator()); + case _ImgFileStatus.writeFileSuccess: + return FutureBuilder( + builder: (_, snapshot) { + if (!snapshot.hasData) { + return const Center(child: CircularProgressIndicator()); + } + + final file = snapshot.requireData; + final html = + ''; + + return Padding( + padding: const EdgeInsets.all(8.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text(html), + HtmlWidget(html), + ], + ), ); - case _ImgFileStatus.writeFileError: - return const Center(child: Text('Unable to write file')); - } - }, - ); + }, + future: file, + ); + case _ImgFileStatus.writeFileError: + return const Center(child: Text('Unable to write file')); + } + }, + ); Future _writeFile() async { assert(status.value == _ImgFileStatus.idle); diff --git a/demo_app/lib/screens/photo_view.dart b/demo_app/lib/screens/photo_view.dart index de1eab8e2..5a39dfc0b 100644 --- a/demo_app/lib/screens/photo_view.dart +++ b/demo_app/lib/screens/photo_view.dart @@ -9,42 +9,42 @@ class PhotoViewScreen extends StatelessWidget { @override Widget build(BuildContext context) => DefaultTabController( - length: 2, - child: Scaffold( - appBar: AppBar( - bottom: const TabBar( - tabs: [ - Tab(text: 'Inline'), - Tab(text: 'Popup'), - ], + length: 2, + child: Scaffold( + appBar: AppBar( + bottom: const TabBar( + tabs: [ + Tab(text: 'Inline'), + Tab(text: 'Popup'), + ], + ), + title: const Text('PhotoViewScreen'), + ), + body: TabBarView( + physics: const NeverScrollableScrollPhysics(), + children: [ + SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.all(8.0), + child: HtmlWidget( + custom_widget_builder.kHtml, + factoryBuilder: () => _InlinePhotoViewWidgetFactory(), + ), ), - title: const Text('PhotoViewScreen'), ), - body: TabBarView( - physics: const NeverScrollableScrollPhysics(), - children: [ - SingleChildScrollView( - child: Padding( - padding: const EdgeInsets.all(8.0), - child: HtmlWidget( - custom_widget_builder.kHtml, - factoryBuilder: () => _InlinePhotoViewWidgetFactory(), - ), - ), - ), - SingleChildScrollView( - child: Padding( - padding: const EdgeInsets.all(8.0), - child: HtmlWidget( - custom_widget_builder.kHtml, - factoryBuilder: () => _PopupPhotoViewWidgetFactory(), - ), - ), + SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.all(8.0), + child: HtmlWidget( + custom_widget_builder.kHtml, + factoryBuilder: () => _PopupPhotoViewWidgetFactory(), ), - ], + ), ), - ), - ); + ], + ), + ), + ); } class _InlinePhotoViewWidgetFactory extends WidgetFactory { diff --git a/demo_app/lib/screens/smilie.dart b/demo_app/lib/screens/smilie.dart index 2bfcb27b6..1506bdc25 100644 --- a/demo_app/lib/screens/smilie.dart +++ b/demo_app/lib/screens/smilie.dart @@ -13,17 +13,17 @@ class SmilieScreen extends StatelessWidget { @override Widget build(BuildContext context) => Scaffold( - appBar: AppBar( - title: const Text('SmilieScreen'), - ), - body: Padding( - padding: const EdgeInsets.all(8.0), - child: HtmlWidget( - kHtml, - factoryBuilder: () => _SmiliesWidgetFactory(), - ), - ), - ); + appBar: AppBar( + title: const Text('SmilieScreen'), + ), + body: Padding( + padding: const EdgeInsets.all(8.0), + child: HtmlWidget( + kHtml, + factoryBuilder: () => _SmiliesWidgetFactory(), + ), + ), + ); } class _SmiliesWidgetFactory extends WidgetFactory { diff --git a/demo_app/lib/screens/video.dart b/demo_app/lib/screens/video.dart index c86d27d6b..0eb04f5b3 100644 --- a/demo_app/lib/screens/video.dart +++ b/demo_app/lib/screens/video.dart @@ -25,76 +25,77 @@ class _State extends State { @override Widget build(BuildContext context) => Scaffold( - appBar: AppBar( - title: const Text('VideoScreen'), + appBar: AppBar( + title: const Text('VideoScreen'), + ), + body: ListView( + children: [ + CheckboxListTile( + value: autoplay, + onChanged: (v) => _setState(() => autoplay = v == true), + title: const Text('autoplay'), ), - body: ListView( - children: [ - CheckboxListTile( - value: autoplay, - onChanged: (v) => _setState(() => autoplay = v == true), - title: const Text('autoplay'), - ), - CheckboxListTile( - value: controls, - onChanged: (v) => _setState(() => controls = v == true), - title: const Text('controls'), - ), - CheckboxListTile( - value: loop, - onChanged: (v) => _setState(() => loop = v == true), - title: const Text('loop'), - ), - CheckboxListTile( - value: poster, - onChanged: (v) => _setState(() => poster = v == true), - title: const Text('poster'), - ), - CheckboxListTile( - value: widthHeight, - onChanged: (v) => _setState(() => widthHeight = v == true), - title: const Text('width & height'), - ), - ListTile( - title: const Text('HTML:'), - subtitle: Text(_html), - ), - ListTile( - title: const Text('Rendered:'), - subtitle: HtmlWidget( - _html, - key: Key(_html), - baseUrl: Uri.parse( - 'https://flutter-widget-from-html.github.io/pages/', - ), - ), + CheckboxListTile( + value: controls, + onChanged: (v) => _setState(() => controls = v == true), + title: const Text('controls'), + ), + CheckboxListTile( + value: loop, + onChanged: (v) => _setState(() => loop = v == true), + title: const Text('loop'), + ), + CheckboxListTile( + value: poster, + onChanged: (v) => _setState(() => poster = v == true), + title: const Text('poster'), + ), + CheckboxListTile( + value: widthHeight, + onChanged: (v) => _setState(() => widthHeight = v == true), + title: const Text('width & height'), + ), + ListTile( + title: const Text('HTML:'), + subtitle: Text(_html), + ), + ListTile( + title: const Text('Rendered:'), + subtitle: HtmlWidget( + _html, + key: Key(_html), + baseUrl: Uri.parse( + 'https://flutter-widget-from-html.github.io/pages/', ), - const Center(child: Text('----')), - ], + ), ), - ); + const Center(child: Text('----')), + ], + ), + ); void _setState(VoidCallback callback) => setState(() { - callback(); + callback(); - final attributes = []; - if (autoplay) { - attributes.add('autoplay'); - } - if (controls) { - attributes.add('controls'); - } - if (loop) { - attributes.add('loop'); - } - if (poster) { - attributes.add('poster="asset:logos/icon.png"'); - } - if (widthHeight) { - attributes.add('width="320" height="180"'); - } + final attributes = []; + if (autoplay) { + attributes.add('autoplay'); + } + if (controls) { + attributes.add('controls'); + } + if (loop) { + attributes.add('loop'); + } + if (poster) { + attributes.add('poster="asset:logos/icon.png"'); + } + if (widthHeight) { + attributes.add('width="320" height="180"'); + } - _html = """ + _html = + """

"""; - }); + }); } diff --git a/demo_app/lib/screens/wordpress.dart b/demo_app/lib/screens/wordpress.dart index d10418b59..b55fe9b7c 100644 --- a/demo_app/lib/screens/wordpress.dart +++ b/demo_app/lib/screens/wordpress.dart @@ -18,21 +18,21 @@ class WordpressScreen extends StatelessWidget { @override Widget build(BuildContext context) => Scaffold( - appBar: AppBar( - title: const Text('WordPressScreen'), - ), - body: ListView( - children: sites.entries - .map( - (e) => ListTile( - onTap: () => PostsScreen.pushRoute(context, e.key, e.value), - subtitle: Text(e.value), - title: Text(e.key), - ), - ) - .toList(growable: false), - ), - ); + appBar: AppBar( + title: const Text('WordPressScreen'), + ), + body: ListView( + children: sites.entries + .map( + (e) => ListTile( + onTap: () => PostsScreen.pushRoute(context, e.key, e.value), + subtitle: Text(e.value), + title: Text(e.key), + ), + ) + .toList(growable: false), + ), + ); } class PostsScreen extends StatelessWidget { @@ -43,9 +43,9 @@ class PostsScreen extends StatelessWidget { @override Widget build(BuildContext context) => Scaffold( - appBar: AppBar(title: Text(title ?? domain)), - body: _PostsList('https://$domain/wp-json/wp/v2/posts?_embed'), - ); + appBar: AppBar(title: Text(title ?? domain)), + body: _PostsList('https://$domain/wp-json/wp/v2/posts?_embed'), + ); static void pushRoute(BuildContext context, String title, String domain) => Navigator.of(context).push( @@ -96,9 +96,9 @@ class _PostScreen extends StatelessWidget { ); } - static void pushRoute(BuildContext context, _Post post) => - Navigator.of(context) - .push(MaterialPageRoute(builder: (_) => _PostScreen(post))); + static void pushRoute(BuildContext context, _Post post) => Navigator.of( + context, + ).push(MaterialPageRoute(builder: (_) => _PostScreen(post))); } class _PostsList extends StatefulWidget { @@ -124,18 +124,18 @@ class _PostsState extends State<_PostsList> { @override Widget build(BuildContext context) => FutureBuilder>( - builder: (context, snapshot) => snapshot.hasData - ? _build(snapshot.requireData) - : snapshot.hasError - ? Text(snapshot.error.toString()) - : const Center(child: CircularProgressIndicator()), - future: posts, - ); + builder: (context, snapshot) => snapshot.hasData + ? _build(snapshot.requireData) + : snapshot.hasError + ? Text(snapshot.error.toString()) + : const Center(child: CircularProgressIndicator()), + future: posts, + ); Widget _build(List<_Post> posts) => ListView.builder( - itemBuilder: (context, index) => _buildItem(posts[index]), - itemCount: posts.length, - ); + itemBuilder: (context, index) => _buildItem(posts[index]), + itemCount: posts.length, + ); Widget _buildItem(_Post post) { final featuredMedia = post.featuredMedia; @@ -195,21 +195,20 @@ class _Post { }); static _Post? fromJson(Map json) { - if (json - case { - 'content': { - 'rendered': final String content, - }, - 'excerpt': { - 'rendered': final String excerpt, - }, - 'id': final int id, - 'link': final String link, - 'title': { - 'rendered': final String title, - }, - '_embedded': final Map embedded, - }) { + if (json case { + 'content': { + 'rendered': final String content, + }, + 'excerpt': { + 'rendered': final String excerpt, + }, + 'id': final int id, + 'link': final String link, + 'title': { + 'rendered': final String title, + }, + '_embedded': final Map embedded, + }) { _Media? featuredMedia; if (embedded case {'wp:featuredmedia': [final Map featuredMediaJson]}) { featuredMedia = _Media.fromJson(featuredMediaJson); @@ -244,19 +243,18 @@ class _Media { }); static _Media? fromJson(Map json) { - if (json - case { - 'media_details': { - 'height': final int height, - 'width': final int width, - 'sizes': { - 'thumbnail': { - 'source_url': final String thumbnail, - }, - }, + if (json case { + 'media_details': { + 'height': final int height, + 'width': final int width, + 'sizes': { + 'thumbnail': { + 'source_url': final String thumbnail, }, - 'source_url': final String sourceUrl, - }) { + }, + }, + 'source_url': final String sourceUrl, + }) { return _Media( height: height, sourceUrl: sourceUrl, diff --git a/demo_app/lib/widgets/popup_menu.dart b/demo_app/lib/widgets/popup_menu.dart index 5f2ea8e84..3dc728716 100644 --- a/demo_app/lib/widgets/popup_menu.dart +++ b/demo_app/lib/widgets/popup_menu.dart @@ -135,12 +135,11 @@ class _PopupMenuState { _PopupMenuState copyWith({ bool? isSelectable, bool? showPerformanceOverlay, - }) => - _PopupMenuState( - isSelectable: isSelectable ?? this.isSelectable, - showPerformanceOverlay: - showPerformanceOverlay ?? this.showPerformanceOverlay, - ); + }) => _PopupMenuState( + isSelectable: isSelectable ?? this.isSelectable, + showPerformanceOverlay: + showPerformanceOverlay ?? this.showPerformanceOverlay, + ); } enum _PopupMenuValue { diff --git a/demo_app/pubspec.lock b/demo_app/pubspec.lock index d61ea9cc5..86242244c 100644 --- a/demo_app/pubspec.lock +++ b/demo_app/pubspec.lock @@ -13,10 +13,10 @@ packages: dependency: transitive description: name: analyzer - sha256: de617bfdc64f3d8b00835ec2957441ceca0a29cdf7881f7ab231bc14f71159c0 + sha256: "754aed101003afceca3e6637fe88150dbe9739068e0135788a62645a131867bb" url: "https://pub.dev" source: hosted - version: "7.5.6" + version: "7.5.9" archive: dependency: transitive description: @@ -45,10 +45,10 @@ packages: dependency: transitive description: name: audio_session - sha256: "2b7fff16a552486d078bfc09a8cde19f426dc6d6329262b684182597bec5b1ac" + sha256: "8f96a7fecbb718cb093070f868b4cdcb8a9b1053dce342ff8ab2fde10eb9afb7" url: "https://pub.dev" source: hosted - version: "0.1.25" + version: "0.2.2" boolean_selector: dependency: transitive description: @@ -302,14 +302,14 @@ packages: path: "../packages/enhanced" relative: true source: path - version: "0.16.0" + version: "0.17.0" flutter_widget_from_html_core: dependency: "direct main" description: path: "../packages/core" relative: true source: path - version: "0.16.0" + version: "0.17.0" frontend_server_client: dependency: transitive description: @@ -324,42 +324,42 @@ packages: path: "../packages/fwfh_cached_network_image" relative: true source: path - version: "0.16.0" + version: "0.16.1" fwfh_chewie: dependency: "direct main" description: path: "../packages/fwfh_chewie" relative: true source: path - version: "0.16.0" + version: "0.16.1" fwfh_just_audio: dependency: "direct overridden" description: path: "../packages/fwfh_just_audio" relative: true source: path - version: "0.16.0" + version: "0.17.0" fwfh_svg: dependency: "direct overridden" description: path: "../packages/fwfh_svg" relative: true source: path - version: "0.16.0" + version: "0.16.1" fwfh_url_launcher: dependency: "direct overridden" description: path: "../packages/fwfh_url_launcher" relative: true source: path - version: "0.16.0" + version: "0.16.1" fwfh_webview: dependency: "direct main" description: path: "../packages/fwfh_webview" relative: true source: path - version: "0.15.4" + version: "0.15.5" glob: dependency: transitive description: @@ -444,10 +444,10 @@ packages: dependency: transitive description: name: just_audio - sha256: f978d5b4ccea08f267dae0232ec5405c1b05d3f3cd63f82097ea46c015d5c09e + sha256: "679637a3ec5b6e00f36472f5a3663667df00ee4822cbf5dafca0f568c710960a" url: "https://pub.dev" source: hosted - version: "0.9.46" + version: "0.10.4" just_audio_platform_interface: dependency: transitive description: diff --git a/demo_app/pubspec.yaml b/demo_app/pubspec.yaml index a0cc528c2..aa5ca0dd3 100644 --- a/demo_app/pubspec.yaml +++ b/demo_app/pubspec.yaml @@ -4,8 +4,8 @@ version: 0.0.1 publish_to: "none" environment: - flutter: ">=3.24.0" - sdk: ">=3.5.0 <4.0.0" + flutter: ">=3.32.0" + sdk: ">=3.8.0 <4.0.0" dependencies: carousel_slider: ^5.0.0 diff --git a/demo_app/test/golden_test.dart b/demo_app/test/golden_test.dart index 94e6ce72a..025573b0c 100644 --- a/demo_app/test/golden_test.dart +++ b/demo_app/test/golden_test.dart @@ -16,43 +16,42 @@ import '../../packages/fwfh_webview/test/mock_webview_platform.dart'; final goldenSkipEnvVar = Platform.environment['GOLDEN_SKIP']; final goldenSkip = goldenSkipEnvVar == null ? Platform.isLinux - ? null - : 'Linux only' + ? null + : 'Linux only' : 'GOLDEN_SKIP=$goldenSkipEnvVar'; void _test( String name, String html, { double textScaleSize = 1.0, -}) => - testGoldens( - name, - (tester) async { - const platform = TargetPlatform.android; - debugDefaultTargetPlatformOverride = platform; - WidgetFactory.debugDeterministicLoadingWidget = true; - final key = UniqueKey(); +}) => testGoldens( + name, + (tester) async { + const platform = TargetPlatform.android; + debugDefaultTargetPlatformOverride = platform; + WidgetFactory.debugDeterministicLoadingWidget = true; + final key = UniqueKey(); - await tester.pumpWidgetBuilder( - PopupMenuStateProvider( - builder: (_) => Golden(name, html, targetKey: key), - ), - wrapper: materialAppWrapper( - theme: ThemeData.light(), - ), - surfaceSize: const Size(400, 1200), - textScaleSize: textScaleSize, - ); + await tester.pumpWidgetBuilder( + PopupMenuStateProvider( + builder: (_) => Golden(name, html, targetKey: key), + ), + wrapper: materialAppWrapper( + theme: ThemeData.light(), + ), + surfaceSize: const Size(400, 1200), + textScaleSize: textScaleSize, + ); - // wait for slow tags like AUDIO, VIDEO, etc. - await tester.pumpAndSettle(); + // wait for slow tags like AUDIO, VIDEO, etc. + await tester.pumpAndSettle(); - await screenMatchesGolden(tester, name, finder: find.byKey(key)); - debugDefaultTargetPlatformOverride = null; - WidgetFactory.debugDeterministicLoadingWidget = false; - }, - skip: goldenSkip != null, - ); + await screenMatchesGolden(tester, name, finder: find.byKey(key)); + debugDefaultTargetPlatformOverride = null; + WidgetFactory.debugDeterministicLoadingWidget = false; + }, + skip: goldenSkip != null, +); void main() { TestWidgetsFlutterBinding.ensureInitialized(); diff --git a/demo_app/test/smilie_test.dart b/demo_app/test/smilie_test.dart index 958514751..9f44587ac 100644 --- a/demo_app/test/smilie_test.dart +++ b/demo_app/test/smilie_test.dart @@ -8,8 +8,8 @@ void main() { final goldenSkipEnvVar = Platform.environment['GOLDEN_SKIP']; final goldenSkip = goldenSkipEnvVar == null ? Platform.isLinux - ? null - : 'Linux only' + ? null + : 'Linux only' : 'GOLDEN_SKIP=$goldenSkipEnvVar'; testGoldens(