diff --git a/.github/workflows/demo_app.yml b/.github/workflows/demo_app.yml index 8ec95e296..f133c8b58 100644 --- a/.github/workflows/demo_app.yml +++ b/.github/workflows/demo_app.yml @@ -71,6 +71,8 @@ jobs: run: | set -e + npm install --global vercel@latest + cd ./build/web echo '{' >vercel.json echo ' "headers": [ { "source": "/(.*)", "headers": [' >>vercel.json diff --git a/.github/workflows/flutter.yml b/.github/workflows/flutter.yml index a6d8a944d..75344db56 100644 --- a/.github/workflows/flutter.yml +++ b/.github/workflows/flutter.yml @@ -27,7 +27,10 @@ jobs: uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 # v2.16.0 with: cache: true - - run: dart format --set-exit-if-changed --output none . + + # TODO: investigate why this fail on GitHub Actions + # - run: dart format --set-exit-if-changed --output none . + - name: Run chromedriver run: | set -e diff --git a/demo_app/integration_test/auto_resize_test.dart b/demo_app/integration_test/auto_resize_test.dart index b4b3b4833..05b758a5b 100644 --- a/demo_app/integration_test/auto_resize_test.dart +++ b/demo_app/integration_test/auto_resize_test.dart @@ -24,10 +24,10 @@ void main() { }); final webViewTestCases = ValueVariant(const { - WebViewTestCase(0.5, false), - WebViewTestCase(1.0, false), - WebViewTestCase(2.0, false), - WebViewTestCase(1.0, true), + WebViewTestCase(input: 0.5, issue375: false), + WebViewTestCase(input: 1.0, issue375: false), + WebViewTestCase(input: 2.0, issue375: false), + WebViewTestCase(input: 1.0, issue375: true), }); patrolTest( @@ -64,8 +64,10 @@ class WebViewTestCase { final double input; final bool issue375; - // ignore: avoid_positional_boolean_parameters - const WebViewTestCase(this.input, this.issue375); + const WebViewTestCase({ + required this.input, + required this.issue375, + }); Future<_AspectRatioTest> run(PatrolIntegrationTester $) async { final html = ''' diff --git a/demo_app/ios/Podfile.lock b/demo_app/ios/Podfile.lock index e5a692e33..ef5364bb1 100644 --- a/demo_app/ios/Podfile.lock +++ b/demo_app/ios/Podfile.lock @@ -5,6 +5,7 @@ PODS: - Flutter (1.0.0) - just_audio (0.0.1): - Flutter + - FlutterMacOS - package_info_plus (0.4.5): - Flutter - path_provider_foundation (0.0.1): @@ -31,7 +32,7 @@ PODS: DEPENDENCIES: - audio_session (from `.symlinks/plugins/audio_session/ios`) - Flutter (from `Flutter`) - - just_audio (from `.symlinks/plugins/just_audio/ios`) + - just_audio (from `.symlinks/plugins/just_audio/darwin`) - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) - patrol (from `.symlinks/plugins/patrol/darwin`) @@ -51,7 +52,7 @@ EXTERNAL SOURCES: Flutter: :path: Flutter just_audio: - :path: ".symlinks/plugins/just_audio/ios" + :path: ".symlinks/plugins/just_audio/darwin" package_info_plus: :path: ".symlinks/plugins/package_info_plus/ios" path_provider_foundation: @@ -70,19 +71,19 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/webview_flutter_wkwebview/darwin" SPEC CHECKSUMS: - audio_session: 088d2483ebd1dc43f51d253d4a1c517d9a2e7207 + audio_session: 9bb7f6c970f21241b19f5a3658097ae459681ba0 CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99 Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 - just_audio: baa7252489dbcf47a4c7cc9ca663e9661c99aafa - package_info_plus: c0502532a26c7662a62a356cebe2692ec5fe4ec4 - path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 - patrol: 0564cee315ff6c86fb802b3647db05cc2d3d0624 - sqflite_darwin: 5a7236e3b501866c1c9befc6771dfd73ffb8702d - url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe - video_player_avfoundation: 7c6c11d8470e1675df7397027218274b6d2360b3 - wakelock_plus: 78ec7c5b202cab7761af8e2b2b3d0671be6c4ae1 - webview_flutter_wkwebview: 0982481e3d9c78fd5c6f62a002fcd24fc791f1e4 + just_audio: 4e391f57b79cad2b0674030a00453ca5ce817eed + package_info_plus: af8e2ca6888548050f16fa2f1938db7b5a5df499 + path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564 + patrol: dd82ffedfee3aba87c1d0ed2daad0b77bfb8ee1f + sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0 + url_launcher_ios: 694010445543906933d732453a59da0a173ae33d + video_player_avfoundation: 2cef49524dd1f16c5300b9cd6efd9611ce03639b + wakelock_plus: 04623e3f525556020ebd4034310f20fe7fda8b49 + webview_flutter_wkwebview: 1821ceac936eba6f7984d89a9f3bcb4dea99ebb2 -PODFILE CHECKSUM: 819463e6a0290f5a72f145ba7cde16e8b6ef0796 +PODFILE CHECKSUM: 4047b237a92efec4e335c96f6d2daf630bacba96 -COCOAPODS: 1.15.2 +COCOAPODS: 1.16.2 diff --git a/demo_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/demo_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 694cadd3b..e3976e8e5 100644 --- a/demo_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/demo_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -69,6 +69,7 @@ ignoresPersistentStateOnLaunch = "NO" debugDocumentVersioning = "YES" debugServiceExtension = "internal" + enableGPUValidationMode = "1" allowLocationSimulation = "YES"> diff --git a/demo_app/macos/Flutter/GeneratedPluginRegistrant.swift b/demo_app/macos/Flutter/GeneratedPluginRegistrant.swift index 4327cd14e..88ff66ad5 100644 --- a/demo_app/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/demo_app/macos/Flutter/GeneratedPluginRegistrant.swift @@ -26,5 +26,5 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) FVPVideoPlayerPlugin.register(with: registry.registrar(forPlugin: "FVPVideoPlayerPlugin")) WakelockPlusMacosPlugin.register(with: registry.registrar(forPlugin: "WakelockPlusMacosPlugin")) - FLTWebViewFlutterPlugin.register(with: registry.registrar(forPlugin: "FLTWebViewFlutterPlugin")) + WebViewFlutterPlugin.register(with: registry.registrar(forPlugin: "WebViewFlutterPlugin")) } diff --git a/demo_app/macos/Podfile.lock b/demo_app/macos/Podfile.lock index 6628ad59c..d225655cb 100644 --- a/demo_app/macos/Podfile.lock +++ b/demo_app/macos/Podfile.lock @@ -4,6 +4,7 @@ PODS: - CocoaAsyncSocket (7.6.5) - FlutterMacOS (1.0.0) - just_audio (0.0.1): + - Flutter - FlutterMacOS - package_info_plus (0.0.1): - FlutterMacOS @@ -31,7 +32,7 @@ PODS: DEPENDENCIES: - audio_session (from `Flutter/ephemeral/.symlinks/plugins/audio_session/macos`) - FlutterMacOS (from `Flutter/ephemeral`) - - just_audio (from `Flutter/ephemeral/.symlinks/plugins/just_audio/macos`) + - just_audio (from `Flutter/ephemeral/.symlinks/plugins/just_audio/darwin`) - package_info_plus (from `Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos`) - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`) - patrol (from `Flutter/ephemeral/.symlinks/plugins/patrol/darwin`) @@ -51,7 +52,7 @@ EXTERNAL SOURCES: FlutterMacOS: :path: Flutter/ephemeral just_audio: - :path: Flutter/ephemeral/.symlinks/plugins/just_audio/macos + :path: Flutter/ephemeral/.symlinks/plugins/just_audio/darwin package_info_plus: :path: Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos path_provider_foundation: @@ -70,19 +71,19 @@ EXTERNAL SOURCES: :path: Flutter/ephemeral/.symlinks/plugins/webview_flutter_wkwebview/darwin SPEC CHECKSUMS: - audio_session: dea1f41890dbf1718f04a56f1d6150fd50039b72 + audio_session: eaca2512cf2b39212d724f35d11f46180ad3a33e CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99 FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 - just_audio: 9b67ca7b97c61cfc9784ea23cd8cc55eb226d489 - package_info_plus: 12f1c5c2cfe8727ca46cbd0b26677728972d9a5b - path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 - patrol: 0564cee315ff6c86fb802b3647db05cc2d3d0624 - sqflite_darwin: 5a7236e3b501866c1c9befc6771dfd73ffb8702d - url_launcher_macos: c82c93949963e55b228a30115bd219499a6fe404 - video_player_avfoundation: 7c6c11d8470e1675df7397027218274b6d2360b3 - wakelock_plus: 4783562c9a43d209c458cb9b30692134af456269 - webview_flutter_wkwebview: 0982481e3d9c78fd5c6f62a002fcd24fc791f1e4 + just_audio: 4e391f57b79cad2b0674030a00453ca5ce817eed + package_info_plus: f0052d280d17aa382b932f399edf32507174e870 + path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564 + patrol: dd82ffedfee3aba87c1d0ed2daad0b77bfb8ee1f + sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0 + url_launcher_macos: 0fba8ddabfc33ce0a9afe7c5fef5aab3d8d2d673 + video_player_avfoundation: 2cef49524dd1f16c5300b9cd6efd9611ce03639b + wakelock_plus: 21ddc249ac4b8d018838dbdabd65c5976c308497 + webview_flutter_wkwebview: 1821ceac936eba6f7984d89a9f3bcb4dea99ebb2 PODFILE CHECKSUM: 236401fc2c932af29a9fcf0e97baeeb2d750d367 -COCOAPODS: 1.15.2 +COCOAPODS: 1.16.2 diff --git a/demo_app/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/demo_app/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 29acf5bfd..c819ee0c5 100644 --- a/demo_app/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/demo_app/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -59,6 +59,7 @@ ignoresPersistentStateOnLaunch = "NO" debugDocumentVersioning = "YES" debugServiceExtension = "internal" + enableGPUValidationMode = "1" allowLocationSimulation = "YES"> diff --git a/demo_app/macos/Runner/AppDelegate.swift b/demo_app/macos/Runner/AppDelegate.swift index 8e02df288..b3c176141 100644 --- a/demo_app/macos/Runner/AppDelegate.swift +++ b/demo_app/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/demo_app/pubspec.lock b/demo_app/pubspec.lock index 0c3ddfb1f..5bf14a86d 100644 --- a/demo_app/pubspec.lock +++ b/demo_app/pubspec.lock @@ -5,31 +5,26 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: f256b0c0ba6c7577c15e2e4e114755640a875e885099367bf6e012b19314c834 + sha256: dc27559385e905ad30838356c5f5d574014ba39872d732111cd07ac0beff4c57 url: "https://pub.dev" source: hosted - version: "72.0.0" - _macros: - dependency: transitive - description: dart - source: sdk - version: "0.3.2" + version: "80.0.0" analyzer: dependency: transitive description: name: analyzer - sha256: b652861553cd3990d8ed361f7979dc6d7053a9ac8843fa73820ab68ce5410139 + sha256: "192d1c5b944e7e53b24b5586db760db934b177d4147c42fbca8c8c5f1eb8d11e" url: "https://pub.dev" source: hosted - version: "6.7.0" + version: "7.3.0" archive: dependency: transitive description: name: archive - sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d + sha256: "6199c74e3db4fbfbd04f66d739e72fe11c8a8957d5f219f1f4482dbde6420b5a" url: "https://pub.dev" source: hosted - version: "3.6.1" + version: "4.0.2" args: dependency: transitive description: @@ -42,26 +37,26 @@ packages: dependency: transitive description: name: async - sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63 url: "https://pub.dev" source: hosted - version: "2.11.0" + version: "2.12.0" audio_session: dependency: transitive description: name: audio_session - sha256: "343e83bc7809fbda2591a49e525d6b63213ade10c76f15813be9aed6657b3261" + sha256: "2b7fff16a552486d078bfc09a8cde19f426dc6d6329262b684182597bec5b1ac" url: "https://pub.dev" source: hosted - version: "0.1.21" + version: "0.1.25" boolean_selector: dependency: transitive description: name: boolean_selector - sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" cached_network_image: dependency: transitive description: @@ -98,10 +93,10 @@ packages: dependency: transitive description: name: characters - sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.4.0" checked_yaml: dependency: transitive description: @@ -114,10 +109,10 @@ packages: dependency: transitive description: name: chewie - sha256: "335df378c025588aef400c704bd71f0daea479d4cd57c471c88c056c1144e7cd" + sha256: "645fbca3f22309381edb5af59a4c8aa544a3d3872d7b7b7c986c2b18b3bdd265" url: "https://pub.dev" source: hosted - version: "1.8.5" + version: "1.10.0" cli_util: dependency: transitive description: @@ -130,18 +125,18 @@ packages: dependency: transitive description: name: clock - sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.1.2" collection: dependency: transitive description: name: collection - sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a + sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" url: "https://pub.dev" source: hosted - version: "1.18.0" + version: "1.19.1" convert: dependency: transitive description: @@ -154,10 +149,10 @@ packages: dependency: transitive description: name: coverage - sha256: "4b03e11f6d5b8f6e5bb5e9f7889a56fe6c5cbe942da5378ea4d4d7f73ef9dfe5" + sha256: e3493833ea012784c740e341952298f1cc77f1f01b1bbc3eb4eecf6984fb7f43 url: "https://pub.dev" source: hosted - version: "1.11.0" + version: "1.11.1" crypto: dependency: transitive description: @@ -186,34 +181,34 @@ packages: dependency: transitive description: name: dbus - sha256: "365c771ac3b0e58845f39ec6deebc76e3276aa9922b0cc60840712094d9047ac" + sha256: "79e0c23480ff85dc68de79e2cd6334add97e48f7f4865d17686dd6ea81a47e8c" url: "https://pub.dev" source: hosted - version: "0.7.10" + version: "0.7.11" equatable: dependency: transitive description: name: equatable - sha256: c2b87cb7756efdf69892005af546c56c0b5037f54d2a88269b4f347a505e3ca2 + sha256: "567c64b3cb4cf82397aac55f4f0cbd3ca20d77c6c03bedbc4ceaddc08904aef7" url: "https://pub.dev" source: hosted - version: "2.0.5" + version: "2.0.7" fake_async: dependency: transitive description: name: fake_async - sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc" url: "https://pub.dev" source: hosted - version: "1.3.1" + version: "1.3.2" ffi: dependency: transitive description: name: ffi - sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6" + sha256: "289279317b4b16eb2bb7e271abccd4bf84ec9bdcbe999e278a94b804f5630418" url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "2.1.4" file: dependency: transitive description: @@ -234,18 +229,18 @@ packages: dependency: "direct main" description: name: flex_color_scheme - sha256: "03fd5e68eff346a042026577f54be0cd4507e565cd86390b12c0aca1c5d6cb0b" + sha256: ae638050fceb35b6040a43cf67892f9b956022068e736284919d93322fdd4ba2 url: "https://pub.dev" source: hosted - version: "8.0.0" + version: "8.1.1" flex_seed_scheme: dependency: transitive description: name: flex_seed_scheme - sha256: "7639d2c86268eff84a909026eb169f008064af0fb3696a651b24b0fa24a40334" + sha256: d3ba3c5c92d2d79d45e94b4c6c71d01fac3c15017da1545880c53864da5dfeb0 url: "https://pub.dev" source: hosted - version: "3.4.1" + version: "3.5.0" flutter: dependency: "direct main" description: flutter @@ -263,18 +258,18 @@ packages: dependency: "direct dev" description: name: flutter_launcher_icons - sha256: "619817c4b65b322b5104b6bb6dfe6cda62d9729bd7ad4303ecc8b4e690a67a77" + sha256: bfa04787c85d80ecb3f8777bde5fc10c3de809240c48fa061a2c2bf15ea5211c url: "https://pub.dev" source: hosted - version: "0.14.1" + version: "0.14.3" flutter_svg: dependency: transitive description: name: flutter_svg - sha256: "578bd8c508144fdaffd4f77b8ef2d8c523602275cd697cc3db284dbd762ef4ce" + sha256: c200fd79c918a40c5cd50ea0877fa13f81bdaf6f0a5d3dbcc2a13e3285d6aa1b url: "https://pub.dev" source: hosted - version: "2.0.14" + version: "2.0.17" flutter_test: dependency: "direct dev" description: flutter @@ -353,10 +348,10 @@ packages: dependency: transitive description: name: glob - sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" + sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.3" golden_toolkit: dependency: "direct dev" description: @@ -377,50 +372,50 @@ packages: dependency: "direct main" description: name: http - sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 + sha256: fe7ab022b76f3034adc518fb6ea04a82387620e19977665ea18d30a1cf43442f url: "https://pub.dev" source: hosted - version: "1.2.2" + version: "1.3.0" http_multi_server: dependency: transitive description: name: http_multi_server - sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" + sha256: aa6199f908078bb1c5efb8d8638d4ae191aac11b311132c3ef48ce352fb52ef8 url: "https://pub.dev" source: hosted - version: "3.2.1" + version: "3.2.2" http_parser: dependency: transitive description: name: http_parser - sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" url: "https://pub.dev" source: hosted - version: "4.0.2" + version: "4.1.2" image: dependency: transitive description: name: image - sha256: f31d52537dc417fdcde36088fdf11d191026fd5e4fae742491ebd40e5a8bea7d + sha256: "8346ad4b5173924b5ddddab782fc7d8a6300178c8b1dc427775405a01701c4a6" url: "https://pub.dev" source: hosted - version: "4.3.0" + version: "4.5.2" io: dependency: transitive description: name: io - sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" + sha256: dfd5a80599cf0165756e3181807ed3e77daf6dd4137caaad72d0b7931597650b url: "https://pub.dev" source: hosted - version: "1.0.4" + version: "1.0.5" js: dependency: transitive description: name: js - sha256: c1b2e9b5ea78c45e1a0788d29606ba27dc5f71f019f32ca5140f61ef071838cf + sha256: "53385261521cc4a0c4658fd0ad07a7d14591cf8fc33abbceae306ddb974888dc" url: "https://pub.dev" source: hosted - version: "0.7.1" + version: "0.7.2" json_annotation: dependency: transitive description: @@ -433,42 +428,42 @@ packages: dependency: transitive description: name: just_audio - sha256: a49e7120b95600bd357f37a2bb04cd1e88252f7cdea8f3368803779b925b1049 + sha256: f978d5b4ccea08f267dae0232ec5405c1b05d3f3cd63f82097ea46c015d5c09e url: "https://pub.dev" source: hosted - version: "0.9.42" + version: "0.9.46" just_audio_platform_interface: dependency: transitive description: name: just_audio_platform_interface - sha256: "0243828cce503c8366cc2090cefb2b3c871aa8ed2f520670d76fd47aa1ab2790" + sha256: "271b93b484c6f494ecd72a107fffbdb26b425f170c665b9777a0a24a726f2f24" url: "https://pub.dev" source: hosted - version: "4.3.0" + version: "4.4.0" just_audio_web: dependency: transitive description: name: just_audio_web - sha256: "9a98035b8b24b40749507687520ec5ab404e291d2b0937823ff45d92cb18d448" + sha256: "58915be64509a7683c44bf11cd1a23c15a48de104927bee116e3c63c8eeea0d4" url: "https://pub.dev" source: hosted - version: "0.4.13" + version: "0.4.14" leak_tracker: dependency: transitive description: name: leak_tracker - sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05" + sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec url: "https://pub.dev" source: hosted - version: "10.0.5" + version: "10.0.8" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing - sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806" + sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573 url: "https://pub.dev" source: hosted - version: "3.0.5" + version: "3.0.9" leak_tracker_testing: dependency: transitive description: @@ -481,10 +476,10 @@ packages: dependency: "direct dev" description: name: lint - sha256: d758a5211fce7fd3f5e316f804daefecdc34c7e53559716125e6da7388ae8565 + sha256: "68d71111816dc7c1de358281e506efe574bb5072eae4a19f8a57484bf96825f5" url: "https://pub.dev" source: hosted - version: "2.3.0" + version: "2.6.1" logging: dependency: "direct main" description: @@ -493,22 +488,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" - macros: - dependency: transitive - description: - name: macros - sha256: "0acaed5d6b7eab89f63350bccd82119e6c602df0f391260d0e32b5e23db79536" - url: "https://pub.dev" - source: hosted - version: "0.1.2-main.4" matcher: dependency: transitive description: name: matcher - sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 url: "https://pub.dev" source: hosted - version: "0.12.16+1" + version: "0.12.17" material_color_utilities: dependency: transitive description: @@ -529,10 +516,10 @@ packages: dependency: transitive description: name: meta - sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 + sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c url: "https://pub.dev" source: hosted - version: "1.15.0" + version: "1.16.0" mime: dependency: transitive description: @@ -569,34 +556,34 @@ packages: dependency: transitive description: name: package_config - sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" + sha256: "92d4488434b520a62570293fbd33bb556c7d49230791c1b4bbd973baf6d2dc67" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" package_info_plus: dependency: transitive description: name: package_info_plus - sha256: da8d9ac8c4b1df253d1a328b7bf01ae77ef132833479ab40763334db13b91cce + sha256: "67eae327b1b0faf761964a1d2e5d323c797f3799db0e85aa232db8d9e922bc35" url: "https://pub.dev" source: hosted - version: "8.1.1" + version: "8.2.1" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - sha256: ac1f4a4847f1ade8e6a87d1f39f5d7c67490738642e2542f559ec38c37489a66 + sha256: "205ec83335c2ab9107bbba3f8997f9356d72ca3c715d2f038fc773d0366b4c76" url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "3.1.0" path: dependency: transitive description: name: path - sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.9.1" path_parsing: dependency: transitive description: @@ -617,18 +604,18 @@ packages: dependency: transitive description: name: path_provider_android - sha256: c464428172cb986b758c6d1724c603097febb8fb855aa265aeecc9280c294d4a + sha256: "4adf4fd5423ec60a29506c76581bc05854c55e3a0b72d35bb28d661c9686edf2" url: "https://pub.dev" source: hosted - version: "2.2.12" + version: "2.2.15" path_provider_foundation: dependency: transitive description: name: path_provider_foundation - sha256: f234384a3fdd67f989b4d54a5d73ca2a6c422fa55ae694381ae0f4375cd1ea16 + sha256: "4843174df4d288f5e29185bd6e72a6fbdf5a4a4602717eed565497429f179942" url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.4.1" path_provider_linux: dependency: transitive description: @@ -673,10 +660,10 @@ packages: dependency: transitive description: name: petitparser - sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27 + sha256: "07c8f0b1913bcde1ff0d26e57ace2f3012ccbf2b204e070290dad3bb22797646" url: "https://pub.dev" source: hosted - version: "6.0.2" + version: "6.1.0" photo_view: dependency: "direct main" description: @@ -709,6 +696,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.5.1" + posix: + dependency: transitive + description: + name: posix + sha256: a0117dc2167805aa9125b82eee515cc891819bac2f538c83646d355b16f58b9a + url: "https://pub.dev" + source: hosted + version: "6.0.1" provider: dependency: "direct main" description: @@ -721,10 +716,10 @@ packages: dependency: transitive description: name: pub_semver - sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" + sha256: "7b3cfbf654f3edd0c6298ecd5be782ce997ddf0e00531b9464b55245185bbbbd" url: "https://pub.dev" source: hosted - version: "2.1.4" + version: "2.1.5" rxdart: dependency: transitive description: @@ -737,10 +732,10 @@ packages: dependency: transitive description: name: shelf - sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 + sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12 url: "https://pub.dev" source: hosted - version: "1.4.1" + version: "1.4.2" shelf_packages_handler: dependency: transitive description: @@ -761,15 +756,15 @@ packages: dependency: transitive description: name: shelf_web_socket - sha256: "073c147238594ecd0d193f3456a5fe91c4b0abbcc68bf5cd95b36c4e194ac611" + sha256: "3632775c8e90d6c9712f883e633716432a27758216dfb61bd86a8321c0580925" url: "https://pub.dev" source: hosted - version: "2.0.0" + version: "3.0.0" sky_engine: dependency: transitive description: flutter source: sdk - version: "0.0.99" + version: "0.0.0" source_map_stack_trace: dependency: transitive description: @@ -782,18 +777,18 @@ packages: dependency: transitive description: name: source_maps - sha256: "708b3f6b97248e5781f493b765c3337db11c5d2c81c3094f10904bfa8004c703" + sha256: "190222579a448b03896e0ca6eca5998fa810fda630c1d65e2f78b3f638f54812" url: "https://pub.dev" source: hosted - version: "0.10.12" + version: "0.10.13" source_span: dependency: transitive description: name: source_span - sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.10.1" sprintf: dependency: transitive description: @@ -806,34 +801,34 @@ packages: dependency: transitive description: name: sqflite - sha256: "2d7299468485dca85efeeadf5d38986909c5eb0cd71fd3db2c2f000e6c9454bb" + sha256: e2297b1da52f127bc7a3da11439985d9b536f75070f3325e62ada69a5c585d03 url: "https://pub.dev" source: hosted - version: "2.4.1" + version: "2.4.2" sqflite_android: dependency: transitive description: name: sqflite_android - sha256: "78f489aab276260cdd26676d2169446c7ecd3484bbd5fead4ca14f3ed4dd9ee3" + sha256: "2b3070c5fa881839f8b402ee4a39c1b4d561704d4ebbbcfb808a119bc2a1701b" url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.4.1" sqflite_common: dependency: transitive description: name: sqflite_common - sha256: "4468b24876d673418a7b7147e5a08a715b4998a7ae69227acafaab762e0e5490" + sha256: "84731e8bfd8303a3389903e01fb2141b6e59b5973cacbb0929021df08dddbe8b" url: "https://pub.dev" source: hosted - version: "2.5.4+5" + version: "2.5.5" sqflite_darwin: dependency: transitive description: name: sqflite_darwin - sha256: "96a698e2bc82bd770a4d6aab00b42396a7c63d9e33513a56945cbccb594c2474" + sha256: "279832e5cde3fe99e8571879498c9211f3ca6391b0d818df4e17d9fff5c6ccb3" url: "https://pub.dev" source: hosted - version: "2.4.1" + version: "2.4.2" sqflite_platform_interface: dependency: transitive description: @@ -846,66 +841,66 @@ packages: dependency: transitive description: name: stack_trace - sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" + sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" url: "https://pub.dev" source: hosted - version: "1.11.1" + version: "1.12.1" stream_channel: dependency: transitive description: name: stream_channel - sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.4" string_scanner: dependency: transitive description: name: string_scanner - sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.4.1" synchronized: dependency: transitive description: name: synchronized - sha256: "69fe30f3a8b04a0be0c15ae6490fc859a78ef4c43ae2dd5e8a623d45bfcf9225" + sha256: "0669c70faae6270521ee4f05bffd2919892d42d1276e6c495be80174b6bc0ef6" url: "https://pub.dev" source: hosted - version: "3.3.0+3" + version: "3.3.1" term_glyph: dependency: transitive description: name: term_glyph - sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.2.2" test: dependency: "direct dev" description: name: test - sha256: "7ee44229615f8f642b68120165ae4c2a75fe77ae2065b1e55ae4711f6cf0899e" + sha256: "301b213cd241ca982e9ba50266bd3f5bd1ea33f1455554c5abb85d1be0e2d87e" url: "https://pub.dev" source: hosted - version: "1.25.7" + version: "1.25.15" test_api: dependency: transitive description: name: test_api - sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb" + sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd url: "https://pub.dev" source: hosted - version: "0.7.2" + version: "0.7.4" test_core: dependency: transitive description: name: test_core - sha256: "55ea5a652e38a1dfb32943a7973f3681a60f872f8c3a05a14664ad54ef9c6696" + sha256: "84d17c3486c8dfdbe5e12a50c8ae176d15e2a771b96909a9442b40173649ccaa" url: "https://pub.dev" source: hosted - version: "0.6.4" + version: "0.6.8" typed_data: dependency: transitive description: @@ -934,10 +929,10 @@ packages: dependency: transitive description: name: url_launcher_ios - sha256: e43b677296fadce447e987a2f519dcf5f6d1e527dc35d01ffab4fff5b8a7063e + sha256: "16a513b6c12bb419304e72ea0ae2ab4fed569920d1c7cb850263fe3acc824626" url: "https://pub.dev" source: hosted - version: "6.3.1" + version: "6.3.2" url_launcher_linux: dependency: transitive description: @@ -950,10 +945,10 @@ packages: dependency: transitive description: name: url_launcher_macos - sha256: "769549c999acdb42b8bcfa7c43d72bf79a382ca7441ab18a808e101149daf672" + sha256: "17ba2000b847f334f16626a574c702b196723af2a289e7a93ffcb79acff855c2" url: "https://pub.dev" source: hosted - version: "3.2.1" + version: "3.2.2" url_launcher_platform_interface: dependency: transitive description: @@ -966,18 +961,18 @@ packages: dependency: transitive description: name: url_launcher_web - sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e" + sha256: "3ba963161bd0fe395917ba881d320b9c4f6dd3c4a233da62ab18a5025c85f1e9" url: "https://pub.dev" source: hosted - version: "2.3.3" + version: "2.4.0" url_launcher_windows: dependency: transitive description: name: url_launcher_windows - sha256: "44cf3aabcedde30f2dba119a9dea3b0f2672fbe6fa96e85536251d678216b3c4" + sha256: "3284b6d2ac454cf34f114e1d3319866fdd1e19cdc329999057e44ffe936cfa77" url: "https://pub.dev" source: hosted - version: "3.1.3" + version: "3.1.4" uuid: dependency: transitive description: @@ -990,26 +985,26 @@ packages: dependency: transitive description: name: vector_graphics - sha256: "773c9522d66d523e1c7b25dfb95cc91c26a1e17b107039cfe147285e92de7878" + sha256: "44cc7104ff32563122a929e4620cf3efd584194eec6d1d913eb5ba593dbcf6de" url: "https://pub.dev" source: hosted - version: "1.1.14" + version: "1.1.18" vector_graphics_codec: dependency: transitive description: name: vector_graphics_codec - sha256: "2430b973a4ca3c4dbc9999b62b8c719a160100dcbae5c819bae0cacce32c9cdb" + sha256: "99fd9fbd34d9f9a32efd7b6a6aae14125d8237b10403b422a6a6dfeac2806146" url: "https://pub.dev" source: hosted - version: "1.1.12" + version: "1.1.13" vector_graphics_compiler: dependency: transitive description: name: vector_graphics_compiler - sha256: ab9ff38fc771e9ee1139320adbe3d18a60327370c218c60752068ebee4b49ab1 + sha256: "1b4b9e706a10294258727674a340ae0d6e64a7231980f9f9a3d12e4b42407aad" url: "https://pub.dev" source: hosted - version: "1.1.15" + version: "1.1.16" vector_math: dependency: transitive description: @@ -1030,66 +1025,66 @@ packages: dependency: transitive description: name: video_player_android - sha256: "391e092ba4abe2f93b3e625bd6b6a6ec7d7414279462c1c0ee42b5ab8d0a0898" + sha256: "7018dbcb395e2bca0b9a898e73989e67c0c4a5db269528e1b036ca38bcca0d0b" url: "https://pub.dev" source: hosted - version: "2.7.16" + version: "2.7.17" video_player_avfoundation: dependency: transitive description: name: video_player_avfoundation - sha256: cd5ab8a8bc0eab65ab0cea40304097edc46da574c8c1ecdee96f28cd8ef3792f + sha256: "84b4752745eeccb6e75865c9aab39b3d28eb27ba5726d352d45db8297fbd75bc" url: "https://pub.dev" source: hosted - version: "2.6.2" + version: "2.7.0" video_player_platform_interface: dependency: transitive description: name: video_player_platform_interface - sha256: "229d7642ccd9f3dc4aba169609dd6b5f3f443bb4cc15b82f7785fcada5af9bbb" + sha256: df534476c341ab2c6a835078066fc681b8265048addd853a1e3c78740316a844 url: "https://pub.dev" source: hosted - version: "6.2.3" + version: "6.3.0" video_player_web: dependency: transitive description: name: video_player_web - sha256: "881b375a934d8ebf868c7fb1423b2bfaa393a0a265fa3f733079a86536064a10" + sha256: "3ef40ea6d72434edbfdba4624b90fd3a80a0740d260667d91e7ecd2d79e13476" url: "https://pub.dev" source: hosted - version: "2.3.3" + version: "2.3.4" vm_service: dependency: transitive description: name: vm_service - sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d" + sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14" url: "https://pub.dev" source: hosted - version: "14.2.5" + version: "14.3.1" wakelock_plus: dependency: transitive description: name: wakelock_plus - sha256: bf4ee6f17a2fa373ed3753ad0e602b7603f8c75af006d5b9bdade263928c0484 + sha256: "36c88af0b930121941345306d259ec4cc4ecca3b151c02e3a9e71aede83c615e" url: "https://pub.dev" source: hosted - version: "1.2.8" + version: "1.2.10" wakelock_plus_platform_interface: dependency: transitive description: name: wakelock_plus_platform_interface - sha256: "422d1cdbb448079a8a62a5a770b69baa489f8f7ca21aef47800c726d404f9d16" + sha256: "70e780bc99796e1db82fe764b1e7dcb89a86f1e5b3afb1db354de50f2e41eb7a" url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.2.2" watcher: dependency: transitive description: name: watcher - sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" + sha256: "69da27e49efa56a15f8afe8f4438c4ec02eff0a117df1b22ea4aad194fe1c104" url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.1.1" web: dependency: transitive description: @@ -1110,10 +1105,10 @@ packages: dependency: transitive description: name: web_socket_channel - sha256: "9f187088ed104edd8662ca07af4b124465893caf063ba29758f97af57e61da8f" + sha256: "0b8e2457400d8a859b7b2030786835a28a8e80836ef64402abef392ff4f1d0e5" url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "3.0.2" webkit_inspection_protocol: dependency: transitive description: @@ -1134,10 +1129,10 @@ packages: dependency: transitive description: name: webview_flutter_android - sha256: "86c2d01c37c4578ee46560109cf2e18fb271f0d080a796f09188d0952352e057" + sha256: "512c26ccc5b8a571fd5d13ec994b7509f142ff6faf85835e243dde3538fdc713" url: "https://pub.dev" source: hosted - version: "4.0.2" + version: "4.3.2" webview_flutter_platform_interface: dependency: transitive description: @@ -1150,18 +1145,18 @@ packages: dependency: transitive description: name: webview_flutter_wkwebview - sha256: "3be297aa4ca78205abdd284cf55f168c35246c75b3079990ad8ba9d257681a30" + sha256: "7310de7efa4e6df8b3d2ff14aef3f290bc00b43363f2d0028845e6de46507fc9" url: "https://pub.dev" source: hosted - version: "3.16.2" + version: "3.18.1" win32: dependency: transitive description: name: win32 - sha256: "84ba388638ed7a8cb3445a320c8273136ab2631cd5f2c57888335504ddab1bc2" + sha256: daf97c9d80197ed7b619040e86c8ab9a9dad285e7671ee7390f9180cc828a51e url: "https://pub.dev" source: hosted - version: "5.8.0" + version: "5.10.1" xdg_directories: dependency: transitive description: @@ -1182,10 +1177,10 @@ packages: dependency: transitive description: name: yaml - sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" + sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "3.1.3" sdks: - dart: ">=3.5.0 <4.0.0" - flutter: ">=3.24.0" + dart: ">=3.7.0 <4.0.0" + flutter: ">=3.27.0" diff --git a/demo_app/test/goldens/AUDIO.png b/demo_app/test/goldens/AUDIO.png index 464704796..8454e546f 100644 Binary files a/demo_app/test/goldens/AUDIO.png and b/demo_app/test/goldens/AUDIO.png differ diff --git a/demo_app/test/goldens/B.png b/demo_app/test/goldens/B.png index b303d6164..d18dbf1c0 100644 Binary files a/demo_app/test/goldens/B.png and b/demo_app/test/goldens/B.png differ diff --git a/demo_app/test/goldens/DD,DL,DT.png b/demo_app/test/goldens/DD,DL,DT.png index 959cc7b9e..fd15cba0e 100644 Binary files a/demo_app/test/goldens/DD,DL,DT.png and b/demo_app/test/goldens/DD,DL,DT.png differ diff --git a/demo_app/test/goldens/H1.png b/demo_app/test/goldens/H1.png index 1c0375bed..bc0ebe649 100644 Binary files a/demo_app/test/goldens/H1.png and b/demo_app/test/goldens/H1.png differ diff --git a/demo_app/test/goldens/H3.png b/demo_app/test/goldens/H3.png index 283bed017..3007def2e 100644 Binary files a/demo_app/test/goldens/H3.png and b/demo_app/test/goldens/H3.png differ diff --git a/demo_app/test/goldens/H4.png b/demo_app/test/goldens/H4.png index 979959e7f..059775abb 100644 Binary files a/demo_app/test/goldens/H4.png and b/demo_app/test/goldens/H4.png differ diff --git a/demo_app/test/goldens/H5.png b/demo_app/test/goldens/H5.png index ad60f1535..88ab43272 100644 Binary files a/demo_app/test/goldens/H5.png and b/demo_app/test/goldens/H5.png differ diff --git a/demo_app/test/goldens/STRONG.png b/demo_app/test/goldens/STRONG.png index 7e3bf797d..867b12ee6 100644 Binary files a/demo_app/test/goldens/STRONG.png and b/demo_app/test/goldens/STRONG.png differ diff --git a/demo_app/test/goldens/SUP.png b/demo_app/test/goldens/SUP.png index 0270ae778..81e785864 100644 Binary files a/demo_app/test/goldens/SUP.png and b/demo_app/test/goldens/SUP.png differ diff --git a/demo_app/test/goldens/SVG.png b/demo_app/test/goldens/SVG.png index cdb5def96..17f2030c1 100644 Binary files a/demo_app/test/goldens/SVG.png and b/demo_app/test/goldens/SVG.png differ diff --git a/demo_app/test/goldens/TABLE,CAPTION,TBODY,THEAD,TFOOT,TR,TH,TD.png b/demo_app/test/goldens/TABLE,CAPTION,TBODY,THEAD,TFOOT,TR,TH,TD.png index 4600f7b36..0f99c3130 100644 Binary files a/demo_app/test/goldens/TABLE,CAPTION,TBODY,THEAD,TFOOT,TR,TH,TD.png and b/demo_app/test/goldens/TABLE,CAPTION,TBODY,THEAD,TFOOT,TR,TH,TD.png differ diff --git a/demo_app/test/goldens/VIDEO.png b/demo_app/test/goldens/VIDEO.png index adf766efd..42ae75e19 100644 Binary files a/demo_app/test/goldens/VIDEO.png and b/demo_app/test/goldens/VIDEO.png differ diff --git a/demo_app/test/goldens/inline/display/table.png b/demo_app/test/goldens/inline/display/table.png index 6fce74cf8..46c424998 100644 Binary files a/demo_app/test/goldens/inline/display/table.png and b/demo_app/test/goldens/inline/display/table.png differ diff --git a/demo_app/test/goldens/inline/font-weight.png b/demo_app/test/goldens/inline/font-weight.png index 2c499f579..cd00f12eb 100644 Binary files a/demo_app/test/goldens/inline/font-weight.png and b/demo_app/test/goldens/inline/font-weight.png differ diff --git a/demo_app/test/goldens/tag/TABLE/colspan.png b/demo_app/test/goldens/tag/TABLE/colspan.png index e67ab3204..f660761f3 100644 Binary files a/demo_app/test/goldens/tag/TABLE/colspan.png and b/demo_app/test/goldens/tag/TABLE/colspan.png differ diff --git a/demo_app/test/goldens/tag/TABLE/rowspan.png b/demo_app/test/goldens/tag/TABLE/rowspan.png index c0b9068d0..7cdbec344 100644 Binary files a/demo_app/test/goldens/tag/TABLE/rowspan.png and b/demo_app/test/goldens/tag/TABLE/rowspan.png differ diff --git a/demo_app/test/just_audio/scenarios.png b/demo_app/test/just_audio/scenarios.png index 68e9f9167..9d8cd7718 100644 Binary files a/demo_app/test/just_audio/scenarios.png and b/demo_app/test/just_audio/scenarios.png differ diff --git a/demo_app/test/table/row_color.png b/demo_app/test/table/row_color.png index 36c99e56c..e8bd41620 100644 Binary files a/demo_app/test/table/row_color.png and b/demo_app/test/table/row_color.png differ diff --git a/packages/core/lib/src/core_legacy.dart b/packages/core/lib/src/core_legacy.dart index dbbe593f6..594020614 100644 --- a/packages/core/lib/src/core_legacy.dart +++ b/packages/core/lib/src/core_legacy.dart @@ -1,3 +1,4 @@ +// intentionally uses deprecated members for backwards compatibility // ignore_for_file: deprecated_member_use_from_same_package import 'package:flutter/widgets.dart'; diff --git a/packages/core/lib/src/core_widget_factory.dart b/packages/core/lib/src/core_widget_factory.dart index 4de63dc98..f311d0516 100644 --- a/packages/core/lib/src/core_widget_factory.dart +++ b/packages/core/lib/src/core_widget_factory.dart @@ -245,10 +245,8 @@ class WidgetFactory extends WidgetFactoryResetter with AnchorWidgetFactory { switch (direction) { case Axis.horizontal: built = CssSizingHint(maxWidth: bc.maxWidth, child: built); - break; case Axis.vertical: built = CssSizingHint(maxHeight: bc.maxHeight, child: built); - break; } return built; }, @@ -690,7 +688,6 @@ class WidgetFactory extends WidgetFactoryResetter with AnchorWidgetFactory { if (name != null) { tree.register(Anchor(this, name).buildOp); } - break; case 'abbr': case kTagAcronym: @@ -701,7 +698,6 @@ class WidgetFactory extends WidgetFactoryResetter with AnchorWidgetFactory { priority: Early.tagAcronym, ), ); - break; case kTagAddress: tree.register( @@ -711,7 +707,6 @@ class WidgetFactory extends WidgetFactoryResetter with AnchorWidgetFactory { priority: Early.tagAddress, ), ); - break; case 'article': case 'aside': case 'dl': @@ -729,7 +724,6 @@ class WidgetFactory extends WidgetFactoryResetter with AnchorWidgetFactory { priority: Early.tagDiv, ), ); - break; case 'blockquote': case kTagFigure: @@ -740,23 +734,18 @@ class WidgetFactory extends WidgetFactoryResetter with AnchorWidgetFactory { priority: Early.tagFigure, ), ); - break; case 'b': case 'strong': tree.inherit(text_ops.fontWeight, FontWeight.bold); - break; case 'big': tree.inherit(text_ops.fontSizeTerm, kCssFontSizeLarger); - break; case 'small': tree.inherit(text_ops.fontSizeTerm, kCssFontSizeSmaller); - break; case kTagBr: tree.register(tagBr); - break; case kTagCenter: tree.register( @@ -766,7 +755,6 @@ class WidgetFactory extends WidgetFactoryResetter with AnchorWidgetFactory { priority: Early.tagCenter, ), ); - break; case 'cite': case 'dfn': @@ -774,7 +762,6 @@ class WidgetFactory extends WidgetFactoryResetter with AnchorWidgetFactory { case 'i': case 'var': tree.inherit(text_ops.fontStyle, FontStyle.italic); - break; case kTagCode: case kTagKbd: @@ -784,14 +771,11 @@ class WidgetFactory extends WidgetFactoryResetter with AnchorWidgetFactory { text_ops.fontFamily, const [kTagCodeFont1, kTagCodeFont2], ); - break; case kTagPre: tree.register(_tagPre ??= TagPre(this).buildOp); - break; case kTagDetails: tree.register(_tagDetails ??= TagDetails(this).buildOp); - break; case kTagDd: tree.register( @@ -801,7 +785,6 @@ class WidgetFactory extends WidgetFactoryResetter with AnchorWidgetFactory { priority: Early.tagDd, ), ); - break; case kTagDt: tree.register( const BuildOp.v2( @@ -810,7 +793,6 @@ class WidgetFactory extends WidgetFactoryResetter with AnchorWidgetFactory { priority: Early.tagDt, ), ); - break; case 'del': case 's': @@ -822,11 +804,9 @@ class WidgetFactory extends WidgetFactoryResetter with AnchorWidgetFactory { priority: Early.tagStrike, ), ); - break; case kTagFont: tree.register(tagFont); - break; case kTagH1: tree.register( @@ -836,7 +816,6 @@ class WidgetFactory extends WidgetFactoryResetter with AnchorWidgetFactory { priority: Early.tagH1, ), ); - break; case kTagH2: tree.register( const BuildOp.v2( @@ -845,7 +824,6 @@ class WidgetFactory extends WidgetFactoryResetter with AnchorWidgetFactory { priority: Early.tagH2, ), ); - break; case kTagH3: tree.register( const BuildOp.v2( @@ -854,7 +832,6 @@ class WidgetFactory extends WidgetFactoryResetter with AnchorWidgetFactory { priority: Early.tagH3, ), ); - break; case kTagH4: tree.register( const BuildOp.v2( @@ -863,7 +840,6 @@ class WidgetFactory extends WidgetFactoryResetter with AnchorWidgetFactory { priority: Early.tagH4, ), ); - break; case kTagH5: tree.register( const BuildOp.v2( @@ -872,7 +848,6 @@ class WidgetFactory extends WidgetFactoryResetter with AnchorWidgetFactory { priority: Early.tagH5, ), ); - break; case kTagH6: tree.register( const BuildOp.v2( @@ -881,7 +856,6 @@ class WidgetFactory extends WidgetFactoryResetter with AnchorWidgetFactory { priority: Early.tagH6, ), ); - break; case kTagHr: tree.register( @@ -892,16 +866,13 @@ class WidgetFactory extends WidgetFactoryResetter with AnchorWidgetFactory { priority: Priority.tagHr, ), ); - break; case kTagImg: tree.register(_tagImg ??= TagImg(this).buildOp); - break; case kTagOrderedList: case kTagUnorderedList: tree.register(_tagLi ??= TagLi(this).buildOp); - break; case kTagMark: tree.register( @@ -911,7 +882,6 @@ class WidgetFactory extends WidgetFactoryResetter with AnchorWidgetFactory { priority: Early.tagMark, ), ); - break; case kTagP: tree.register( @@ -921,15 +891,12 @@ class WidgetFactory extends WidgetFactoryResetter with AnchorWidgetFactory { priority: Early.tagP, ), ); - break; case kTagQ: tree.register(tagQ); - break; case kTagRuby: tree.register(tagRuby); - break; case 'style': case kTagScript: @@ -940,7 +907,6 @@ class WidgetFactory extends WidgetFactoryResetter with AnchorWidgetFactory { priority: Early.tagScript, ), ); - break; case kTagSub: tree.register( @@ -950,7 +916,6 @@ class WidgetFactory extends WidgetFactoryResetter with AnchorWidgetFactory { priority: Early.tagSub, ), ); - break; case kTagSup: tree.register( const BuildOp.v2( @@ -959,7 +924,6 @@ class WidgetFactory extends WidgetFactoryResetter with AnchorWidgetFactory { priority: Early.tagSup, ), ); - break; case kTagTable: final tagTable = _tagTable ??= TagTable(this); @@ -973,7 +937,6 @@ class WidgetFactory extends WidgetFactoryResetter with AnchorWidgetFactory { ) ..register(tagTable.borderOp) ..register(tagTable.cellPaddingOp); - break; case kTagTableCell: tree.register( const BuildOp.v2( @@ -982,7 +945,6 @@ class WidgetFactory extends WidgetFactoryResetter with AnchorWidgetFactory { priority: Early.tagTableCellValignDefault, ), ); - break; case kTagTableHeaderCell: tree.register( const BuildOp.v2( @@ -991,7 +953,6 @@ class WidgetFactory extends WidgetFactoryResetter with AnchorWidgetFactory { priority: Early.tagTableHeaderCellDefaultStyles, ), ); - break; case kTagTableCaption: tree.register( const BuildOp.v2( @@ -1000,7 +961,6 @@ class WidgetFactory extends WidgetFactoryResetter with AnchorWidgetFactory { priority: Early.tagTableCaptionTextAlignCenter, ), ); - break; case 'u': case kTagIns: @@ -1011,7 +971,6 @@ class WidgetFactory extends WidgetFactoryResetter with AnchorWidgetFactory { priority: Early.tagIns, ), ); - break; } for (final attribute in attrs.entries) { @@ -1024,7 +983,6 @@ class WidgetFactory extends WidgetFactoryResetter with AnchorWidgetFactory { priority: Early.attributeAlign, ), ); - break; case kAttributeDir: tree.register( const BuildOp.v2( @@ -1033,10 +991,8 @@ class WidgetFactory extends WidgetFactoryResetter with AnchorWidgetFactory { priority: Early.attributeDir, ), ); - break; case kAttributeId: tree.register(Anchor(this, attribute.value).buildOp); - break; } } } @@ -1051,26 +1007,22 @@ class WidgetFactory extends WidgetFactoryResetter with AnchorWidgetFactory { if (color != null) { tree.inherit(text_ops.color, color); } - break; case kCssDirection: final term = style.term; if (term != null) { tree.inherit(text_ops.textDirection, term); } - break; case kCssFontFamily: final list = text_ops.fontFamilyTryParse(style.values); tree.inherit(text_ops.fontFamily, list); - break; case kCssFontSize: final value = style.value; if (value != null) { tree.inherit(text_ops.fontSize, value); } - break; case kCssFontStyle: final term = style.term; @@ -1079,7 +1031,6 @@ class WidgetFactory extends WidgetFactoryResetter with AnchorWidgetFactory { if (fontStyle != null) { tree.inherit(text_ops.fontStyle, fontStyle); } - break; case kCssFontWeight: final value = style.value; @@ -1088,7 +1039,6 @@ class WidgetFactory extends WidgetFactoryResetter with AnchorWidgetFactory { if (fontWeight != null) { tree.inherit(text_ops.fontWeight, fontWeight); } - break; case kCssHeight: case kCssMaxHeight: @@ -1097,14 +1047,12 @@ class WidgetFactory extends WidgetFactoryResetter with AnchorWidgetFactory { case kCssMinWidth: case kCssWidth: StyleSizing.registerSizingOp(this, tree); - break; case kCssLineHeight: final value = style.value; if (value != null) { tree.inherit(text_ops.lineHeight, value); } - break; case kCssMaxLines: case kCssMaxLinesWebkitLineClamp: @@ -1112,11 +1060,9 @@ class WidgetFactory extends WidgetFactoryResetter with AnchorWidgetFactory { if (maxLines != null) { tree.maxLines = maxLines; } - break; case kCssTextAlign: tree.register(styleTextAlign); - break; case kCssTextDecoration: case kCssTextDecorationColor: @@ -1125,18 +1071,15 @@ class WidgetFactory extends WidgetFactoryResetter with AnchorWidgetFactory { case kCssTextDecorationThickness: case kCssTextDecorationWidth: textDecorationApply(tree, style); - break; case kCssTextOverflow: final textOverflow = tryParseTextOverflow(style.value); if (textOverflow != null) { tree.overflow = textOverflow; } - break; case kCssVerticalAlign: tree.register(_styleVerticalAlign ??= StyleVerticalAlign(this).buildOp); - break; case kCssWhitespace: final term = style.term; @@ -1145,11 +1088,9 @@ class WidgetFactory extends WidgetFactoryResetter with AnchorWidgetFactory { if (whitespace != null) { tree.inherit(text_ops.whitespace, whitespace); } - break; case kCssTextShadow: textShadowApply(tree, style); - break; } if (key.startsWith(kCssBackground)) { @@ -1176,20 +1117,15 @@ class WidgetFactory extends WidgetFactoryResetter with AnchorWidgetFactory { switch (value) { case kCssDisplayFlex: tree.register(_styleDisplayFlex ??= StyleDisplayFlex(this).buildOp); - break; case kCssDisplayBlock: StyleSizing.registerBlockOp(this, tree); - break; case kCssDisplayInlineBlock: tree.register(displayInlineBlock); - break; case kCssDisplayNone: tree.register(displayNone); - break; case kCssDisplayTable: final tagTable = _tagTable ??= TagTable(this); tree.register(tagTable.tableOp); - break; } } diff --git a/packages/core/lib/src/data/css.dart b/packages/core/lib/src/data/css.dart index 6d087a0fd..18f2ae78e 100644 --- a/packages/core/lib/src/data/css.dart +++ b/packages/core/lib/src/data/css.dart @@ -318,7 +318,6 @@ class CssLength { value = baseValue * number; effectiveScaleFactor = 1; - break; case CssLengthUnit.percentage: if (baseValue == null) { return null; @@ -326,13 +325,10 @@ class CssLength { value = baseValue * number / 100; effectiveScaleFactor = 1; - break; case CssLengthUnit.pt: value = number * 96 / 72; - break; case CssLengthUnit.px: value = number; - break; } return value * effectiveScaleFactor; diff --git a/packages/core/lib/src/internal/core_build_tree.dart b/packages/core/lib/src/internal/core_build_tree.dart index 40203ef2d..ef067714e 100644 --- a/packages/core/lib/src/internal/core_build_tree.dart +++ b/packages/core/lib/src/internal/core_build_tree.dart @@ -450,6 +450,7 @@ class _LockableDeclarations extends LockableList { class _WidgetPlaceholderDefault extends StatelessWidget implements + // internal implementation detail of our own placeholder // ignore: avoid_implementing_value_types WidgetPlaceholder { const _WidgetPlaceholderDefault(); diff --git a/packages/core/lib/src/internal/flattener.dart b/packages/core/lib/src/internal/flattener.dart index e9fed4891..0be9408b5 100644 --- a/packages/core/lib/src/internal/flattener.dart +++ b/packages/core/lib/src/internal/flattener.dart @@ -377,25 +377,19 @@ extension on List<_String> { if (!str.shouldBeSwallowed) { buffer.write(' '); } - break; case CssWhitespace.nowrap: buffer.write('\u00A0'); - break; case CssWhitespace.pre: buffer.write(str.data); - break; } } else { switch (whitespace) { case CssWhitespace.normal: buffer.write(str.data); - break; case CssWhitespace.nowrap: buffer.write(str.data.replaceAll(' ', '\u00A0')); - break; case CssWhitespace.pre: buffer.write(str.data); - break; } } } diff --git a/packages/core/lib/src/internal/ops/style_background.dart b/packages/core/lib/src/internal/ops/style_background.dart index cbfa65672..168ef5cd2 100644 --- a/packages/core/lib/src/internal/ops/style_background.dart +++ b/packages/core/lib/src/internal/ops/style_background.dart @@ -106,13 +106,10 @@ extension on BuildTree { style.increaseIndex(); } } - break; case kCssBackgroundColor: data = data.copyWithColor(style); - break; case kCssBackgroundImage: data = data.copyWithImageUrl(style); - break; case kCssBackgroundPosition: while (style.hasValue) { final prev = data; @@ -122,11 +119,9 @@ extension on BuildTree { style.increaseIndex(); } } - break; case kCssBackgroundRepeat: case kCssBackgroundSize: data = data.copyWithRepeatOrSize(style); - break; } } diff --git a/packages/core/lib/src/internal/ops/style_display_flex.dart b/packages/core/lib/src/internal/ops/style_display_flex.dart index 1ff634d12..8d7dcde87 100644 --- a/packages/core/lib/src/internal/ops/style_display_flex.dart +++ b/packages/core/lib/src/internal/ops/style_display_flex.dart @@ -41,13 +41,10 @@ class StyleDisplayFlex { switch (element.property) { case kCssFlexDirection: flexDirection = value; - break; case kCssJustifyContent: justifyContent = value; - break; case kCssAlignItems: alignItems = value; - break; } } } diff --git a/packages/core/lib/src/internal/ops/style_sizing.dart b/packages/core/lib/src/internal/ops/style_sizing.dart index 49ef44fe0..2ccb204e3 100644 --- a/packages/core/lib/src/internal/ops/style_sizing.dart +++ b/packages/core/lib/src/internal/ops/style_sizing.dart @@ -223,26 +223,20 @@ extension on BuildTree { preferredAxis = Axis.vertical; preferredHeight = parsedHeight; } - break; case kCssMaxHeight: maxHeight = tryParseCssLength(value) ?? maxHeight; - break; case kCssMaxWidth: maxWidth = tryParseCssLength(value) ?? maxWidth; - break; case kCssMinHeight: minHeight = tryParseCssLength(value) ?? minHeight; - break; case kCssMinWidth: minWidth = tryParseCssLength(value) ?? minWidth; - break; case kCssWidth: final parsedWidth = tryParseCssLength(value); if (parsedWidth != null) { preferredAxis = Axis.horizontal; preferredWidth = parsedWidth; } - break; } } diff --git a/packages/core/lib/src/internal/ops/style_text_align.dart b/packages/core/lib/src/internal/ops/style_text_align.dart index 3afc07fc7..f7aecb1e4 100644 --- a/packages/core/lib/src/internal/ops/style_text_align.dart +++ b/packages/core/lib/src/internal/ops/style_text_align.dart @@ -67,22 +67,16 @@ extension on BuildTree { case kCssTextAlignMozCenter: case kCssTextAlignWebkitCenter: textAlign = TextAlign.center; - break; case kCssTextAlignEnd: textAlign = TextAlign.end; - break; case kCssTextAlignJustify: textAlign = TextAlign.justify; - break; case kCssTextAlignLeft: textAlign = TextAlign.left; - break; case kCssTextAlignRight: textAlign = TextAlign.right; - break; case kCssTextAlignStart: textAlign = TextAlign.start; - break; } return _StyleTextAlignData(term, textAlign); diff --git a/packages/core/lib/src/internal/ops/tag_li.dart b/packages/core/lib/src/internal/ops/tag_li.dart index f4b7078c7..048836d9d 100644 --- a/packages/core/lib/src/internal/ops/tag_li.dart +++ b/packages/core/lib/src/internal/ops/tag_li.dart @@ -39,7 +39,6 @@ class TagLi { case kTagOrderedList: case kTagUnorderedList: element.elementDepth = subTree.increaseListDepth(); - break; case kTagLi: if (element.parent == listTree.element) { subTree.register( @@ -56,7 +55,6 @@ class TagLi { ), ); } - break; } }, priority: Priority.tagLiList, diff --git a/packages/core/lib/src/internal/ops/tag_ruby.dart b/packages/core/lib/src/internal/ops/tag_ruby.dart index cd63a034f..3af2e1070 100644 --- a/packages/core/lib/src/internal/ops/tag_ruby.dart +++ b/packages/core/lib/src/internal/ops/tag_ruby.dart @@ -74,10 +74,8 @@ extension TagRuby on WidgetFactory { priority: Early.tagRp, ), ); - break; case kTagRt: subTree.inherit(text_ops.fontSizeEm, .5); - break; } } } diff --git a/packages/core/lib/src/internal/ops/tag_table.dart b/packages/core/lib/src/internal/ops/tag_table.dart index 508155b7c..e34faa603 100644 --- a/packages/core/lib/src/internal/ops/tag_table.dart +++ b/packages/core/lib/src/internal/ops/tag_table.dart @@ -307,7 +307,6 @@ class TagTable { onRenderedBlock: (_, block) => data.captions.add(block), ), ); - break; case kCssDisplayTableHeaderGroup: case kCssDisplayTableRowGroup: case kCssDisplayTableFooterGroup: @@ -317,13 +316,10 @@ class TagTable { ? data.newBody() : data.footer; subTree.register(group._groupOp); - break; case kCssDisplayTableRow: subTree.register(data.newBody().newRow()._rowOp); - break; case kCssDisplayTableCell: data.latestBody.latestRow._registerCellOp(subTree); - break; } } diff --git a/packages/core/lib/src/internal/parser/color.dart b/packages/core/lib/src/internal/parser/color.dart index d53a13b85..12d589eec 100644 --- a/packages/core/lib/src/internal/parser/color.dart +++ b/packages/core/lib/src/internal/parser/color.dart @@ -35,7 +35,6 @@ CssColor? tryParseColor(css.Expression? expression) { return CssColor.value(hslValue); } } - break; case 'rgb': case 'rgba': final params = expression.params; @@ -49,7 +48,6 @@ CssColor? tryParseColor(css.Expression? expression) { return CssColor.value(rgbValue); } } - break; } } else if (expression is css.HexColorTerm) { // cannot use expression.value directory due to issue with #f00 etc. @@ -95,15 +93,12 @@ double _parseColorHue(num number, [int? unit]) { case css.TokenKind.UNIT_ANGLE_RAD: final rad = v; deg = rad * (180 / pi); - break; case css.TokenKind.UNIT_ANGLE_GRAD: final grad = v; deg = grad * 0.9; - break; case css.TokenKind.UNIT_ANGLE_TURN: final turn = v; deg = turn * 360; - break; default: deg = v; } diff --git a/packages/core/lib/src/internal/text_ops.dart b/packages/core/lib/src/internal/text_ops.dart index 775dd67ad..ab2c9bd0f 100644 --- a/packages/core/lib/src/internal/text_ops.dart +++ b/packages/core/lib/src/internal/text_ops.dart @@ -224,6 +224,7 @@ FontWeight? fontWeightTryParse(css.Expression expression) { return FontWeight.w800; case 900: return FontWeight.w900; + default: } } diff --git a/packages/core/lib/src/widgets/html_flex.dart b/packages/core/lib/src/widgets/html_flex.dart index 3539824af..12a66302c 100644 --- a/packages/core/lib/src/widgets/html_flex.dart +++ b/packages/core/lib/src/widgets/html_flex.dart @@ -24,8 +24,6 @@ If hashes are mismatched, then the code below should be updated. */ -// ignore_for_file: require_trailing_commas, avoid_multiple_declarations_per_line - import 'dart:math' as math; import 'package:flutter/foundation.dart'; @@ -46,9 +44,10 @@ class HtmlFlex extends MultiChildRenderObjectWidget { this.clipBehavior = Clip.none, super.children, }) : assert( - !identical(crossAxisAlignment, CrossAxisAlignment.baseline) || - textBaseline != null, - 'textBaseline is required if you specify the crossAxisAlignment with CrossAxisAlignment.baseline'); + !identical(crossAxisAlignment, CrossAxisAlignment.baseline) || + textBaseline != null, + 'textBaseline is required if you specify the crossAxisAlignment with CrossAxisAlignment.baseline', + ); // Cannot use == in the assert above instead of identical because of https://github.com/dart-lang/language/issues/1811. final Axis direction; @@ -98,9 +97,11 @@ class HtmlFlex extends MultiChildRenderObjectWidget { @override void updateRenderObject( - BuildContext context, - // ignore: library_private_types_in_public_api - covariant _HtmlFlexRenderObject renderObject) { + BuildContext context, + // TODO: rewrite HtmlFlex and get rid of this render object + // ignore: library_private_types_in_public_api + covariant _HtmlFlexRenderObject renderObject, + ) { renderObject ..direction = direction ..mainAxisAlignment = mainAxisAlignment @@ -116,24 +117,54 @@ class HtmlFlex extends MultiChildRenderObjectWidget { void debugFillProperties(DiagnosticPropertiesBuilder properties) { super.debugFillProperties(properties); properties.add(EnumProperty('direction', direction)); - properties.add(EnumProperty( - 'mainAxisAlignment', mainAxisAlignment)); - properties.add(EnumProperty('mainAxisSize', mainAxisSize, - defaultValue: MainAxisSize.max)); - properties.add(EnumProperty( - 'crossAxisAlignment', crossAxisAlignment)); - properties.add(EnumProperty('textDirection', textDirection, - defaultValue: null)); - properties.add(EnumProperty( - 'verticalDirection', verticalDirection, - defaultValue: VerticalDirection.down)); - properties.add(EnumProperty('textBaseline', textBaseline, - defaultValue: null)); + properties.add( + EnumProperty( + 'mainAxisAlignment', + mainAxisAlignment, + ), + ); + properties.add( + EnumProperty( + 'mainAxisSize', + mainAxisSize, + defaultValue: MainAxisSize.max, + ), + ); + properties.add( + EnumProperty( + 'crossAxisAlignment', + crossAxisAlignment, + ), + ); + properties.add( + EnumProperty( + 'textDirection', + textDirection, + defaultValue: null, + ), + ); + properties.add( + EnumProperty( + 'verticalDirection', + verticalDirection, + defaultValue: VerticalDirection.down, + ), + ); + properties.add( + EnumProperty( + 'textBaseline', + textBaseline, + defaultValue: null, + ), + ); } } -bool? _startIsTopLeft(Axis direction, TextDirection? textDirection, - VerticalDirection? verticalDirection) { +bool? _startIsTopLeft( + Axis direction, + TextDirection? textDirection, + VerticalDirection? verticalDirection, +) { // If the relevant value of textDirection or verticalDirection is null, this returns null too. switch (direction) { case Axis.horizontal: @@ -157,9 +188,6 @@ bool? _startIsTopLeft(Axis direction, TextDirection? textDirection, } } -// ignore: avoid_private_typedef_functions -typedef _ChildSizingFunction = double Function(RenderBox child, double extent); - class _HtmlFlexRenderObject extends RenderBox with ContainerRenderObjectMixin, @@ -259,9 +287,10 @@ class _HtmlFlexRenderObject extends RenderBox // i.e. there's more than one child switch (direction) { case Axis.horizontal: - assert(textDirection != null, - 'Horizontal $runtimeType with multiple children has a null textDirection, so the layout order is undefined.'); - break; + assert( + textDirection != null, + 'Horizontal $runtimeType with multiple children has a null textDirection, so the layout order is undefined.', + ); case Axis.vertical: break; } @@ -270,9 +299,10 @@ class _HtmlFlexRenderObject extends RenderBox mainAxisAlignment == MainAxisAlignment.end) { switch (direction) { case Axis.horizontal: - assert(textDirection != null, - 'Horizontal $runtimeType with $mainAxisAlignment has a null textDirection, so the alignment cannot be resolved.'); - break; + assert( + textDirection != null, + 'Horizontal $runtimeType with $mainAxisAlignment has a null textDirection, so the alignment cannot be resolved.', + ); case Axis.vertical: break; } @@ -283,8 +313,10 @@ class _HtmlFlexRenderObject extends RenderBox case Axis.horizontal: break; case Axis.vertical: - assert(textDirection != null, - 'Vertical $runtimeType with $crossAxisAlignment has a null textDirection, so the alignment cannot be resolved.'); + assert( + textDirection != null, + 'Vertical $runtimeType with $crossAxisAlignment has a null textDirection, so the alignment cannot be resolved.', + ); } } return true; @@ -320,7 +352,7 @@ class _HtmlFlexRenderObject extends RenderBox required Axis sizingDirection, required double extent, // the extent in the direction that isn't the sizing direction - required _ChildSizingFunction + required double Function(RenderBox, double) childSize, // a method to find the size in the sizing direction }) { if (!_canComputeIntrinsics) { @@ -378,7 +410,6 @@ class _HtmlFlexRenderObject extends RenderBox case Axis.horizontal: mainSize = child.getMaxIntrinsicWidth(double.infinity); crossSize = childSize(child, mainSize); - break; case Axis.vertical: mainSize = child.getMaxIntrinsicHeight(double.infinity); crossSize = childSize(child, mainSize); @@ -493,10 +524,12 @@ class _HtmlFlexRenderObject extends RenderBox @protected Size computeDryLayout(covariant BoxConstraints constraints) { if (!_canComputeIntrinsics) { - assert(debugCannotComputeDryLayout( - reason: - 'Dry layout cannot be computed for CrossAxisAlignment.baseline, which requires a full layout.', - )); + assert( + debugCannotComputeDryLayout( + reason: + 'Dry layout cannot be computed for CrossAxisAlignment.baseline, which requires a full layout.', + ), + ); return Size.zero; } FlutterError? constraintsError; @@ -525,9 +558,10 @@ class _HtmlFlexRenderObject extends RenderBox } } - FlutterError? _debugCheckConstraints( - {required BoxConstraints constraints, - required bool reportParentConstraints}) { + FlutterError? _debugCheckConstraints({ + required BoxConstraints constraints, + required bool reportParentConstraints, + }) { FlutterError? result; assert(() { final double maxMainSize = _direction == Axis.horizontal @@ -544,13 +578,15 @@ class _HtmlFlexRenderObject extends RenderBox _direction == Axis.horizontal ? 'horizontal' : 'vertical'; final String dimension = _direction == Axis.horizontal ? 'width' : 'height'; - DiagnosticsNode error, message; + DiagnosticsNode error; + DiagnosticsNode message; final List addendum = []; if (!canFlex && (mainAxisSize == MainAxisSize.max || _getFit(child) == FlexFit.tight)) { error = ErrorSummary( - 'RenderFlex children have non-zero flex but incoming $dimension constraints are unbounded.'); + 'RenderFlex children have non-zero flex but incoming $dimension constraints are unbounded.', + ); message = ErrorDescription( 'When a $identity is in a parent that does not provide a finite $dimension constraint, for example ' 'if it is in a $axis scrollable, it will try to shrink-wrap its children along the $axis ' @@ -569,7 +605,6 @@ class _HtmlFlexRenderObject extends RenderBox if (!node.constraints.hasBoundedWidth) { node = null; } - break; case Axis.vertical: while (!node!.constraints.hasBoundedHeight && node.parent is RenderBox) { @@ -580,12 +615,18 @@ class _HtmlFlexRenderObject extends RenderBox } } if (node != null) { - addendum.add(node.describeForError( - 'The nearest ancestor providing an unbounded width constraint is')); + addendum.add( + node.describeForError( + 'The nearest ancestor providing an unbounded width constraint is', + ), + ); } } - addendum.add(ErrorHint( - 'See also: https://flutter.dev/unbounded-constraints')); + addendum.add( + ErrorHint( + 'See also: https://flutter.dev/unbounded-constraints', + ), + ); } else { return true; } @@ -608,11 +649,15 @@ class _HtmlFlexRenderObject extends RenderBox ' https://flutter.dev/debugging/#rendering-layer\n' ' http://api.flutter.dev/flutter/rendering/debugDumpRenderTree.html', ), - describeForError('The affected RenderFlex is', - style: DiagnosticsTreeStyle.errorProperty), + describeForError( + 'The affected RenderFlex is', + style: DiagnosticsTreeStyle.errorProperty, + ), DiagnosticsProperty( - 'The creator information is set to', debugCreator, - style: DiagnosticsTreeStyle.errorProperty), + 'The creator information is set to', + debugCreator, + style: DiagnosticsTreeStyle.errorProperty, + ), ...addendum, ErrorDescription( "If none of the above helps enough to fix this problem, please don't hesitate to file a bug:\n" @@ -628,9 +673,10 @@ class _HtmlFlexRenderObject extends RenderBox return result; } - _LayoutSizes _computeSizes( - {required BoxConstraints constraints, - required ChildLayouter layoutChild}) { + _LayoutSizes _computeSizes({ + required BoxConstraints constraints, + required ChildLayouter layoutChild, + }) { assert(_debugHasNecessaryDirections); // Determine used flex factor, size inflexible items, calculate free space. @@ -648,19 +694,14 @@ class _HtmlFlexRenderObject extends RenderBox switch (crossAxisAlignment) { case CrossAxisAlignment.start: stretched = false; - break; case CrossAxisAlignment.center: stretched = false; - break; case CrossAxisAlignment.end: stretched = false; - break; case CrossAxisAlignment.baseline: stretched = false; - break; case CrossAxisAlignment.stretch: stretched = true; - break; } while (child != null) { final FlexParentData childParentData = @@ -676,7 +717,6 @@ class _HtmlFlexRenderObject extends RenderBox case Axis.horizontal: innerConstraints = BoxConstraints.tightFor(height: constraints.maxHeight); - break; case Axis.vertical: innerConstraints = BoxConstraints.tightFor(width: constraints.maxWidth); @@ -686,7 +726,6 @@ class _HtmlFlexRenderObject extends RenderBox case Axis.horizontal: innerConstraints = BoxConstraints(maxHeight: constraints.maxHeight); - break; case Axis.vertical: innerConstraints = BoxConstraints(maxWidth: constraints.maxWidth); } @@ -727,7 +766,6 @@ class _HtmlFlexRenderObject extends RenderBox switch (_getFit(child)) { case FlexFit.tight: minChildExtent = maxChildExtent; - break; case FlexFit.loose: minChildExtent = 0.0; } @@ -738,15 +776,16 @@ class _HtmlFlexRenderObject extends RenderBox switch (_direction) { case Axis.horizontal: innerConstraints = constraints.copyWith( - minHeight: minCrossSize, - minWidth: minChildExtent, - maxWidth: maxChildExtent); - break; + minHeight: minCrossSize, + minWidth: minChildExtent, + maxWidth: maxChildExtent, + ); case Axis.vertical: innerConstraints = constraints.copyWith( - minWidth: minCrossSize, - minHeight: minChildExtent, - maxHeight: maxChildExtent); + minWidth: minCrossSize, + minHeight: minChildExtent, + maxHeight: maxChildExtent, + ); } final Size childSize = layoutChild(child, innerConstraints); final double childMainSize = _getMainSize(childSize); @@ -803,7 +842,8 @@ class _HtmlFlexRenderObject extends RenderBox assert(() { if (textBaseline == null) { throw FlutterError( - 'To use CrossAxisAlignment.baseline, you must also specify which baseline to use using the "textBaseline" argument.'); + 'To use CrossAxisAlignment.baseline, you must also specify which baseline to use using the "textBaseline" argument.', + ); } return true; }()); @@ -834,7 +874,6 @@ class _HtmlFlexRenderObject extends RenderBox size = constraints.constrain(Size(actualSize, crossSize)); actualSize = size.width; crossSize = size.height; - break; case Axis.vertical: size = constraints.constrain(Size(crossSize, actualSize)); actualSize = size.height; @@ -849,46 +888,37 @@ class _HtmlFlexRenderObject extends RenderBox case MainAxisAlignment.end: case MainAxisAlignment.center: betweenSpace = 0.0; - break; case MainAxisAlignment.spaceBetween: if (childCount > 1) { betweenSpace = remainingSpace / (childCount - 1); } else { betweenSpace = 0.0; } - break; case MainAxisAlignment.spaceAround: if (childCount > 0) { betweenSpace = remainingSpace / childCount; } else { betweenSpace = 0.0; } - break; case MainAxisAlignment.spaceEvenly: if (childCount > 0) { betweenSpace = remainingSpace / (childCount + 1); } else { betweenSpace = 0.0; } - break; } final double leadingSpace; switch (_mainAxisAlignment) { case MainAxisAlignment.start: leadingSpace = 0.0; - break; case MainAxisAlignment.end: leadingSpace = remainingSpace; - break; case MainAxisAlignment.center: leadingSpace = remainingSpace / 2.0; - break; case MainAxisAlignment.spaceBetween: leadingSpace = 0.0; - break; case MainAxisAlignment.spaceAround: leadingSpace = betweenSpace / 2.0; - break; case MainAxisAlignment.spaceEvenly: leadingSpace = betweenSpace; } @@ -913,18 +943,18 @@ class _HtmlFlexRenderObject extends RenderBox case CrossAxisAlignment.start: case CrossAxisAlignment.end: childCrossPosition = _startIsTopLeft( - flipAxis(direction), textDirection, verticalDirection) == + flipAxis(direction), + textDirection, + verticalDirection, + ) == (_crossAxisAlignment == CrossAxisAlignment.start) ? 0.0 : crossSize - _getCrossSize(child.size); - break; case CrossAxisAlignment.center: childCrossPosition = crossSize / 2.0 - _getCrossSize(child.size) / 2.0; - break; case CrossAxisAlignment.stretch: childCrossPosition = 0.0; - break; case CrossAxisAlignment.baseline: if (_direction == Axis.horizontal) { assert(textBaseline != null); @@ -946,7 +976,6 @@ class _HtmlFlexRenderObject extends RenderBox case Axis.horizontal: childParentData.offset = Offset(childMainPosition, childCrossPosition); - break; case Axis.vertical: childParentData.offset = Offset(childCrossPosition, childMainPosition); @@ -1018,14 +1047,17 @@ class _HtmlFlexRenderObject extends RenderBox case Axis.horizontal: overflowChildRect = Rect.fromLTWH(0.0, 0.0, size.width + _overflow, 0.0); - break; case Axis.vertical: overflowChildRect = Rect.fromLTWH(0.0, 0.0, 0.0, size.height + _overflow); } paintOverflowIndicator( - context, offset, Offset.zero & size, overflowChildRect, - overflowHints: debugOverflowHints); + context, + offset, + Offset.zero & size, + overflowChildRect, + overflowHints: debugOverflowHints, + ); return true; }()); } @@ -1066,18 +1098,40 @@ class _HtmlFlexRenderObject extends RenderBox void debugFillProperties(DiagnosticPropertiesBuilder properties) { super.debugFillProperties(properties); properties.add(EnumProperty('direction', direction)); - properties.add(EnumProperty( - 'mainAxisAlignment', mainAxisAlignment)); + properties.add( + EnumProperty( + 'mainAxisAlignment', + mainAxisAlignment, + ), + ); properties.add(EnumProperty('mainAxisSize', mainAxisSize)); - properties.add(EnumProperty( - 'crossAxisAlignment', crossAxisAlignment)); - properties.add(EnumProperty('textDirection', textDirection, - defaultValue: null)); - properties.add(EnumProperty( - 'verticalDirection', verticalDirection, - defaultValue: null)); - properties.add(EnumProperty('textBaseline', textBaseline, - defaultValue: null)); + properties.add( + EnumProperty( + 'crossAxisAlignment', + crossAxisAlignment, + ), + ); + properties.add( + EnumProperty( + 'textDirection', + textDirection, + defaultValue: null, + ), + ); + properties.add( + EnumProperty( + 'verticalDirection', + verticalDirection, + defaultValue: null, + ), + ); + properties.add( + EnumProperty( + 'textBaseline', + textBaseline, + defaultValue: null, + ), + ); } } diff --git a/packages/core/lib/src/widgets/html_list_marker.dart b/packages/core/lib/src/widgets/html_list_marker.dart index ce5de1a8d..3b37f2a0a 100644 --- a/packages/core/lib/src/widgets/html_list_marker.dart +++ b/packages/core/lib/src/widgets/html_list_marker.dart @@ -55,7 +55,7 @@ class _ListMarkerRenderObject extends RenderBox { _ListMarkerRenderObject(this._markerType, this._textStyle); HtmlListMarkerType _markerType; - // ignore: avoid_setters_without_getters + HtmlListMarkerType get markerType => _markerType; set markerType(HtmlListMarkerType v) { if (v == _markerType) { return; @@ -86,7 +86,7 @@ class _ListMarkerRenderObject extends RenderBox { } TextStyle _textStyle; - // ignore: avoid_setters_without_getters + TextStyle get textStyle => _textStyle; set textStyle(TextStyle v) { if (v == _textStyle) { return; @@ -138,14 +138,12 @@ class _ListMarkerRenderObject extends RenderBox { ..strokeWidth = 1 ..style = PaintingStyle.stroke, ); - break; case HtmlListMarkerType.disc: canvas.drawCircle( center, radius, Paint()..color = color, ); - break; case HtmlListMarkerType.disclosureClosed: final d = radius * 2; canvas @@ -160,7 +158,6 @@ class _ListMarkerRenderObject extends RenderBox { ..style = PaintingStyle.fill, ) ..restore(); - break; case HtmlListMarkerType.disclosureOpen: final d = radius * 2; canvas @@ -175,13 +172,11 @@ class _ListMarkerRenderObject extends RenderBox { ..style = PaintingStyle.fill, ) ..restore(); - break; case HtmlListMarkerType.square: canvas.drawRect( Rect.fromCircle(center: center, radius: radius * .8), Paint()..color = color, ); - break; } } diff --git a/packages/core/lib/src/widgets/html_table.dart b/packages/core/lib/src/widgets/html_table.dart index 736683972..7351b7f45 100644 --- a/packages/core/lib/src/widgets/html_table.dart +++ b/packages/core/lib/src/widgets/html_table.dart @@ -596,10 +596,8 @@ class _TableRenderLayouter { switch (tro._textDirection) { case TextDirection.ltr: x = calculatedX; - break; case TextDirection.rtl: x = calculatedWidth - childWidth - calculatedX; - break; } data.offset = Offset(x, calculatedY); @@ -756,7 +754,6 @@ class _TableRenderObject extends RenderBox } bool _borderCollapse; - // ignore: avoid_positional_boolean_parameters void setBorderCollapse(bool v) { if (v != _borderCollapse) { _borderCollapse = v; diff --git a/packages/core/pubspec.yaml b/packages/core/pubspec.yaml index fb6305610..b885e05ae 100644 --- a/packages/core/pubspec.yaml +++ b/packages/core/pubspec.yaml @@ -5,7 +5,7 @@ homepage: https://github.com/daohoangson/flutter_widget_from_html/tree/master/pa environment: flutter: ">=3.10.0" - sdk: ">=2.19.0 <4.0.0" + sdk: ">=3.0.0 <4.0.0" dependencies: csslib: ">=0.17.0 <2.0.0" diff --git a/packages/core/test/_.dart b/packages/core/test/_.dart index c02f5b685..c350182ec 100644 --- a/packages/core/test/_.dart +++ b/packages/core/test/_.dart @@ -20,6 +20,7 @@ Widget? buildCurrentState({GlobalKey? key}) { return null; } + // suppress lint for tests // ignore: invalid_use_of_protected_member return hws.build(hws.context); } @@ -305,9 +306,17 @@ class Explainer { return attr; } + // TODO: remove lint ignore when our minimum Flutter version >= 3.24 + // ignore: deprecated_member_use String _color(Color c) => '#${_colorHex(c.alpha)}' + // TODO: remove lint ignore when our minimum Flutter version >= 3.24 + // ignore: deprecated_member_use '${_colorHex(c.red)}' + // TODO: remove lint ignore when our minimum Flutter version >= 3.24 + // ignore: deprecated_member_use '${_colorHex(c.green)}' + // TODO: remove lint ignore when our minimum Flutter version >= 3.24 + // ignore: deprecated_member_use '${_colorHex(c.blue)}'; String _colorHex(int i) { @@ -441,11 +450,9 @@ class Explainer { clazz = 'SizedBox.shrink'; } size = ''; - break; case 'InfinityxInfinity': clazz = 'SizedBox.expand'; size = ''; - break; } final key = box.key != null ? _key(box.key!) : ''; @@ -578,8 +585,9 @@ class Explainer { String s = ''; shadows?.forEach((element) { - s += - 'Shadow=[color=${_color(element.color)},offset=${element.offset},blurRadius=${element.blurRadius}]'; + s += 'Shadow=[color=${_color(element.color)},' + 'offset=${element.offset},' + 'blurRadius=${element.blurRadius}]'; }); return s; @@ -604,9 +612,8 @@ class Explainer { widget.builder( context, BoxConstraints.loose( - // TODO: remove lint ignore when our minimum Flutter version >= 3.10 - // ignore: deprecated_member_use - TestWidgetsFlutterBinding.instance.window.physicalSize, + TestWidgetsFlutterBinding + .instance.platformDispatcher.implicitView!.physicalSize, ), ), ); @@ -645,11 +652,13 @@ class Explainer { } if (widget.runtimeType.toString() == 'InlineCustomWidget') { + // TODO: remove ignore when our minimum core version >= 1.0 // ignore: avoid_dynamic_calls return _widget((widget as dynamic).child as Widget); } if (widget.runtimeType.toString() == 'ValignBaselineContainer') { + // TODO: remove ignore when our minimum core version >= 1.0 // ignore: avoid_dynamic_calls return _widget((widget as dynamic).child as Widget); } @@ -767,20 +776,22 @@ class Explainer { switch (widget.runtimeType.toString()) { case 'HtmlFlex': attr.add( + // TODO: remove ignore when our minimum core version >= 1.0 // ignore: avoid_dynamic_calls 'direction=${dynamicWidget.direction}'.replaceAll('Axis.', ''), ); attr.add( + // TODO: remove ignore when our minimum core version >= 1.0 // ignore: avoid_dynamic_calls 'mainAxisAlignment=${dynamicWidget.mainAxisAlignment}' .replaceAll('MainAxisAlignment.', ''), ); attr.add( + // TODO: remove ignore when our minimum core version >= 1.0 // ignore: avoid_dynamic_calls 'crossAxisAlignment=${dynamicWidget.crossAxisAlignment}' .replaceAll('CrossAxisAlignment.', ''), ); - break; } } @@ -802,13 +813,13 @@ class Explainer { // TODO: remove ignore when our minimum core version >= 1.0 // ignore: avoid_dynamic_calls final left = dynamicWidget.left as double; + // TODO: remove ignore when our minimum core version >= 1.0 // ignore: avoid_dynamic_calls final right = dynamicWidget.right as double; attr.add( 'left=${left.isInfinite ? '∞' : left.truncate()},' 'right=${right.isInfinite ? '∞' : right.truncate()}', ); - break; } } @@ -913,40 +924,20 @@ extension RenderBoxRenderObject on RenderObject { } extension WindowTester on WidgetTester { - double get windowHeight => - // TODO: remove lint ignore when our minimum Flutter version >= 3.10 - // ignore: deprecated_member_use - binding.window.physicalSize.height / - // ignore: deprecated_member_use - binding.window.devicePixelRatio; + double get windowHeight => view.physicalSize.height / view.devicePixelRatio; - double get windowWidth => - // TODO: remove lint ignore when our minimum Flutter version >= 3.10 - // ignore: deprecated_member_use - binding.window.physicalSize.width / - // ignore: deprecated_member_use - binding.window.devicePixelRatio; + double get windowWidth => view.physicalSize.width / view.devicePixelRatio; void setTextScaleFactor(double value) { - // TODO: remove lint ignore when our minimum Flutter version >= 3.10 - // ignore: deprecated_member_use - binding.window.platformDispatcher.textScaleFactorTestValue = value; - addTearDown( - // ignore: deprecated_member_use - binding.window.platformDispatcher.clearTextScaleFactorTestValue, - ); + platformDispatcher.textScaleFactorTestValue = value; + addTearDown(platformDispatcher.clearTextScaleFactorTestValue); } void setWindowSize(Size size) { - // TODO: remove lint ignore when our minimum Flutter version >= 3.10 - // ignore: deprecated_member_use - binding.window.physicalSizeTestValue = size; - // ignore: deprecated_member_use - addTearDown(binding.window.clearPhysicalSizeTestValue); - // ignore: deprecated_member_use - binding.window.devicePixelRatioTestValue = 1.0; - // ignore: deprecated_member_use - addTearDown(binding.window.clearDevicePixelRatioTestValue); + view.physicalSize = size; + addTearDown(view.resetPhysicalSize); + view.devicePixelRatio = 1.0; + addTearDown(view.resetDevicePixelRatio); } } diff --git a/packages/core/test/src/core_legacy_test.dart b/packages/core/test/src/core_legacy_test.dart index 174ed5189..731750543 100644 --- a/packages/core/test/src/core_legacy_test.dart +++ b/packages/core/test/src/core_legacy_test.dart @@ -1,3 +1,4 @@ +// suppress lint for tests // ignore_for_file: deprecated_member_use_from_same_package import 'dart:async'; diff --git a/packages/core/test/src/internal/text_ops_test.dart b/packages/core/test/src/internal/text_ops_test.dart index 6cc9832eb..0c37ddbc1 100644 --- a/packages/core/test/src/internal/text_ops_test.dart +++ b/packages/core/test/src/internal/text_ops_test.dart @@ -76,12 +76,7 @@ Future main() async { testWidgets('reset to null', (tester) async { const html = 'Foo ' 'bar'; - final explained = await explain( - tester, - html, - // ignore: avoid_redundant_argument_values - height: null, - ); + final explained = await explain(tester, html); expect(explained, equals('[RichText:(:(+height=2.0:Foo )(+i:bar))]')); }); diff --git a/packages/fwfh_cached_network_image/pubspec.yaml b/packages/fwfh_cached_network_image/pubspec.yaml index b9baf5080..d41364190 100644 --- a/packages/fwfh_cached_network_image/pubspec.yaml +++ b/packages/fwfh_cached_network_image/pubspec.yaml @@ -4,8 +4,8 @@ description: WidgetFactory extension to render IMG with cached_network_image plu homepage: https://github.com/daohoangson/flutter_widget_from_html environment: - flutter: ">=3.7.0" - sdk: ">=2.19.0 <4.0.0" + flutter: ">=3.10.0" + sdk: ">=3.0.0 <4.0.0" dependencies: cached_network_image: ^3.0.0 diff --git a/packages/fwfh_cached_network_image/test/_.dart b/packages/fwfh_cached_network_image/test/_.dart index 35d10a1b4..26b87f0aa 100644 --- a/packages/fwfh_cached_network_image/test/_.dart +++ b/packages/fwfh_cached_network_image/test/_.dart @@ -77,7 +77,6 @@ class _WidgetFactory extends WidgetFactory with CachedNetworkImageFactory { final file = MemoryFileSystem().file(fileName) ..writeAsBytesSync(data.toList(growable: false)); yield FileInfo(file, FileSource.Cache, ttl, url); - break; case 'error.jpg': final file = MemoryFileSystem().file(fileName)..writeAsStringSync(''); yield FileInfo(file, FileSource.Cache, ttl, url); diff --git a/packages/fwfh_chewie/lib/src/chewie_factory.dart b/packages/fwfh_chewie/lib/src/chewie_factory.dart index dcd82c882..3d27fe70c 100644 --- a/packages/fwfh_chewie/lib/src/chewie_factory.dart +++ b/packages/fwfh_chewie/lib/src/chewie_factory.dart @@ -43,7 +43,6 @@ mixin ChewieFactory on WidgetFactory { switch (tree.element.localName) { case kTagVideo: tree.register(_tagVideo ??= TagVideo(this).buildOp); - break; } return super.parse(tree); } diff --git a/packages/fwfh_chewie/pubspec.yaml b/packages/fwfh_chewie/pubspec.yaml index 45c78dbd4..c39888fd0 100644 --- a/packages/fwfh_chewie/pubspec.yaml +++ b/packages/fwfh_chewie/pubspec.yaml @@ -4,11 +4,11 @@ description: WidgetFactory extension to render VIDEO with the chewie plugin. homepage: https://github.com/daohoangson/flutter_widget_from_html environment: - flutter: ">=3.7.0" - sdk: ">=2.19.0 <4.0.0" + flutter: ">=3.10.0" + sdk: ">=3.0.0 <4.0.0" dependencies: - chewie: ^1.0.0 + chewie: ^1.3.0 flutter: sdk: flutter flutter_widget_from_html_core: ">=0.14.2 <0.16.0" diff --git a/packages/fwfh_just_audio/lib/src/just_audio_factory.dart b/packages/fwfh_just_audio/lib/src/just_audio_factory.dart index b947225f7..36c812d82 100644 --- a/packages/fwfh_just_audio/lib/src/just_audio_factory.dart +++ b/packages/fwfh_just_audio/lib/src/just_audio_factory.dart @@ -34,7 +34,6 @@ mixin JustAudioFactory on WidgetFactory { case kTagAudio: _tagAudio ??= TagAudio(this).buildOp; meta.register(_tagAudio!); - break; } return super.parse(meta); } diff --git a/packages/fwfh_just_audio/pubspec.yaml b/packages/fwfh_just_audio/pubspec.yaml index 22619424a..214d8ab42 100644 --- a/packages/fwfh_just_audio/pubspec.yaml +++ b/packages/fwfh_just_audio/pubspec.yaml @@ -5,7 +5,7 @@ homepage: https://github.com/daohoangson/flutter_widget_from_html environment: flutter: ">=3.10.0" - sdk: ">=2.19.0 <4.0.0" + sdk: ">=3.0.0 <4.0.0" dependencies: flutter: diff --git a/packages/fwfh_svg/lib/src/svg_factory.dart b/packages/fwfh_svg/lib/src/svg_factory.dart index 4c1f792cb..cf68a07f0 100644 --- a/packages/fwfh_svg/lib/src/svg_factory.dart +++ b/packages/fwfh_svg/lib/src/svg_factory.dart @@ -124,7 +124,6 @@ mixin SvgFactory on WidgetFactory { }, ), ); - break; } return super.parse(meta); diff --git a/packages/fwfh_svg/pubspec.yaml b/packages/fwfh_svg/pubspec.yaml index 9badce154..ad15a80ca 100644 --- a/packages/fwfh_svg/pubspec.yaml +++ b/packages/fwfh_svg/pubspec.yaml @@ -4,8 +4,8 @@ description: WidgetFactory extension to render SVG with flutter_svg plugin. homepage: https://github.com/daohoangson/flutter_widget_from_html environment: - flutter: ">=3.7.0" - sdk: ">=2.19.0 <4.0.0" + flutter: ">=3.10.0" + sdk: ">=3.0.0 <4.0.0" dependencies: flutter: diff --git a/packages/fwfh_svg/test/svg_factory_test.dart b/packages/fwfh_svg/test/svg_factory_test.dart index 91cfc971a..856e20198 100644 --- a/packages/fwfh_svg/test/svg_factory_test.dart +++ b/packages/fwfh_svg/test/svg_factory_test.dart @@ -402,6 +402,7 @@ class _GoldenDisallowFactory extends WidgetFactory with SvgFactory { class _MockHttpClient extends Mock implements HttpClient { @override + // suppress lint for tests // ignore: avoid_setters_without_getters set autoUncompress(bool _) {} } @@ -453,6 +454,8 @@ HttpClient _createMockSvgImageHttpClient() { .listen((data) async { await Future.delayed(const Duration(milliseconds: 10)); onData(data); + + // suppress lint for tests // ignore: avoid_dynamic_calls onDone?.call(); }); diff --git a/packages/fwfh_url_launcher/pubspec.yaml b/packages/fwfh_url_launcher/pubspec.yaml index 344a7bd08..115864658 100644 --- a/packages/fwfh_url_launcher/pubspec.yaml +++ b/packages/fwfh_url_launcher/pubspec.yaml @@ -4,8 +4,8 @@ description: WidgetFactory extension to launch A tag via url_launcher plugin. homepage: https://github.com/daohoangson/flutter_widget_from_html environment: - flutter: ">=3.7.0" - sdk: ">=2.19.0 <4.0.0" + flutter: ">=3.10.0" + sdk: ">=3.0.0 <4.0.0" dependencies: flutter: diff --git a/packages/fwfh_webview/lib/src/web_view/web_view.dart b/packages/fwfh_webview/lib/src/web_view/web_view.dart index 2c545ef86..c2cd15951 100644 --- a/packages/fwfh_webview/lib/src/web_view/web_view.dart +++ b/packages/fwfh_webview/lib/src/web_view/web_view.dart @@ -113,9 +113,7 @@ class WebView extends StatefulWidget { this.unsupportedWorkaroundForIssue37 = true, this.userAgent, super.key, - }) : - // ignore: avoid_bool_literals_in_conditional_expressions - autoResize = js ? (autoResize ?? js) : false; + }) : autoResize = js && (autoResize ?? js); @override State createState() => WebViewState(); diff --git a/packages/fwfh_webview/test/mock_webview_platform.dart b/packages/fwfh_webview/test/mock_webview_platform.dart index f35e07b8b..eed4651f7 100644 --- a/packages/fwfh_webview/test/mock_webview_platform.dart +++ b/packages/fwfh_webview/test/mock_webview_platform.dart @@ -16,11 +16,14 @@ void mockWebViewPlatform() { final emptyList = codec.encodeMessage([]); final messenger = TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger; + messenger.setMockMessageHandler( + // TODO: remove this when webview_flutter_android version >= 4.1.0 'dev.flutter.pigeon.webview_flutter_android.InstanceManagerHostApi.clear', (_) => Future.value(emptyList), ); messenger.setMockMessageHandler( + // TODO: remove this when webview_flutter_android version >= 4.1.0 'dev.flutter.pigeon.webview_flutter_android.WebViewHostApi.setWebContentsDebuggingEnabled', (message) async { final decodedMessage = codec.decodeMessage(message) as List; @@ -29,6 +32,20 @@ void mockWebViewPlatform() { return emptyList; }, ); + + messenger.setMockMessageHandler( + 'dev.flutter.pigeon.webview_flutter_android.PigeonInternalInstanceManager.clear', + (_) => Future.value(emptyList), + ); + messenger.setMockMessageHandler( + 'dev.flutter.pigeon.webview_flutter_android.WebView.setWebContentsDebuggingEnabled', + (message) async { + final decodedMessage = codec.decodeMessage(message) as List; + FakeWebViewController.instance?.debuggingEnabled = + decodedMessage[0] == true; + return emptyList; + }, + ); } abstract class FakeWebViewController extends PlatformWebViewController { @@ -154,6 +171,13 @@ class __FakeAndroidWebViewController extends FakeWebViewController implements AndroidWebViewController { __FakeAndroidWebViewController(super.params); + @override + Future setAllowContentAccess(bool enabled) => + throw UnimplementedError(); + + @override + Future setAllowFileAccess(bool allow) => throw UnimplementedError(); + @override Future setCustomWidgetCallbacks({ required OnHideCustomWidgetCallback? onHideCustomWidget, @@ -163,6 +187,10 @@ class __FakeAndroidWebViewController extends FakeWebViewController androidOnShowCustomWidget = onShowCustomWidget; } + @override + Future setGeolocationEnabled(bool enabled) => + throw UnimplementedError(); + @override Future setGeolocationPermissionsPromptCallbacks({ OnGeolocationPermissionsShowPrompt? onShowPrompt, @@ -197,6 +225,12 @@ class __FakeWebKitWebViewController extends FakeWebViewController Future setAllowsBackForwardNavigationGestures(bool enabled) => throw UnimplementedError(); + @override + Future setOnCanGoBackChange( + void Function(bool) onCanGoBackChangeCallback, + ) => + throw UnimplementedError(); + @override Future setInspectable(bool value) async { debuggingEnabled = value; diff --git a/packages/fwfh_webview/test/web_view_test.dart b/packages/fwfh_webview/test/web_view_test.dart index 6975f1037..3eafb85d4 100644 --- a/packages/fwfh_webview/test/web_view_test.dart +++ b/packages/fwfh_webview/test/web_view_test.dart @@ -91,8 +91,7 @@ void main() { testWidgets('renders false', (WidgetTester tester) async { debugDefaultTargetPlatformOverride = TargetPlatform.android; - // ignore: avoid_redundant_argument_values - runApp(WebView(url, aspectRatio: aspectRatio, debuggingEnabled: false)); + runApp(WebView(url, aspectRatio: aspectRatio)); expect(FakeWebViewController.instance?.debuggingEnabled, isFalse); debugDefaultTargetPlatformOverride = null; }); @@ -115,8 +114,7 @@ void main() { testWidgets('renders false', (WidgetTester tester) async { debugDefaultTargetPlatformOverride = TargetPlatform.iOS; - // ignore: avoid_redundant_argument_values - runApp(WebView(url, aspectRatio: aspectRatio, debuggingEnabled: false)); + runApp(WebView(url, aspectRatio: aspectRatio)); expect(FakeWebViewController.instance?.debuggingEnabled, isFalse); debugDefaultTargetPlatformOverride = null; }); @@ -254,14 +252,7 @@ void main() { }); testWidgets('renders true', (WidgetTester tester) async { - runApp( - WebView( - url, - aspectRatio: aspectRatio, - // ignore: avoid_redundant_argument_values - js: true, - ), - ); + runApp(WebView(url, aspectRatio: aspectRatio)); expect( FakeWebViewController.instance?.javaScriptMode, JavaScriptMode.unrestricted, @@ -313,14 +304,7 @@ void main() { testWidgets('renders false', (WidgetTester tester) async { debugDefaultTargetPlatformOverride = TargetPlatform.android; - runApp( - WebView( - url, - aspectRatio: aspectRatio, - // ignore: avoid_redundant_argument_values - mediaPlaybackAlwaysAllow: false, - ), - ); + runApp(WebView(url, aspectRatio: aspectRatio)); expect( FakeWebViewController .instance?.androidMediaPlaybackRequiresUserGesture, @@ -331,8 +315,7 @@ void main() { }); group('ios', () { - // ignore: prefer_function_declarations_over_variables - final expectMediaTypesRequiringUserAction = (bool require) { + void expectMediaTypesRequiringUserAction(bool require) { expect( FakeWebViewController.instance?.params, isA().having( @@ -343,7 +326,7 @@ void main() { : isEmpty, ), ); - }; + } testWidgets('renders without value', (WidgetTester tester) async { debugDefaultTargetPlatformOverride = TargetPlatform.iOS; @@ -367,14 +350,7 @@ void main() { testWidgets('renders false', (WidgetTester tester) async { debugDefaultTargetPlatformOverride = TargetPlatform.iOS; - runApp( - WebView( - url, - aspectRatio: aspectRatio, - // ignore: avoid_redundant_argument_values - mediaPlaybackAlwaysAllow: false, - ), - ); + runApp(WebView(url, aspectRatio: aspectRatio)); expectMediaTypesRequiringUserAction(true); debugDefaultTargetPlatformOverride = null; });