From 3595e7dad0988abe20515779baa7286220a18c1f Mon Sep 17 00:00:00 2001 From: Ben Konyi Date: Tue, 15 Apr 2025 13:51:40 -0400 Subject: [PATCH] [ Widget Preview ] Add support for `theme` and `brightness` properties on `Preview` (#167001) The `theme` parameter of `Preview(...)` allows for developers to provide a callback that returns a `PreviewThemeData` instance which can contain theming data for Material and Cupertino widgets in both light and dark modes. The provided theme data will be injected into the widget tree and applied to the previewed widget. The `brightness` parameter allows for developers to specify an initial brightness setting (e.g., light vs dark mode) for the previewed widget. If not provided, the current system default is used. A new button has also been added to each widget preview card that allows for toggling between light and dark mode for individual previews. **Demo:** https://github.com/user-attachments/assets/f0a4a3bc-25d2-49b0-a5f6-9149eccfc1d4 Fixes https://github.com/flutter/flutter/issues/166436 Fixes https://github.com/flutter/flutter/issues/166275 Fixes https://github.com/flutter/flutter/issues/166279 Fixes https://github.com/flutter/flutter/issues/166437 --- dev/automated_tests/pubspec.yaml | 5 +- dev/benchmarks/complex_layout/pubspec.yaml | 5 +- dev/benchmarks/macrobenchmarks/pubspec.yaml | 5 +- dev/benchmarks/microbenchmarks/pubspec.yaml | 5 +- .../platform_channels_benchmarks/pubspec.yaml | 5 +- .../platform_views_layout/pubspec.yaml | 5 +- .../pubspec.yaml | 5 +- dev/benchmarks/test_apps/stocks/pubspec.yaml | 5 +- dev/bots/pubspec.yaml | 5 +- dev/conductor/core/pubspec.yaml | 5 +- dev/customer_testing/pubspec.yaml | 5 +- dev/devicelab/pubspec.yaml | 5 +- .../android_engine_test/pubspec.yaml | 5 +- .../android_semantics_testing/pubspec.yaml | 5 +- .../android_views/pubspec.yaml | 5 +- .../deferred_components_test/pubspec.yaml | 5 +- .../external_textures/pubspec.yaml | 5 +- dev/integration_tests/flavors/pubspec.yaml | 5 +- .../flutter_gallery/pubspec.yaml | 5 +- .../hook_user_defines/pubspec.yaml | 5 +- .../ios_platform_view_tests/pubspec.yaml | 5 +- dev/integration_tests/link_hook/pubspec.yaml | 7 +- .../new_gallery/pubspec.yaml | 5 +- .../platform_interaction/pubspec.yaml | 5 +- dev/integration_tests/ui/pubspec.yaml | 5 +- .../web_e2e_tests/pubspec.yaml | 5 +- .../windows_startup_test/pubspec.yaml | 5 +- dev/snippets/pubspec.yaml | 5 +- .../android_driver_extensions/pubspec.yaml | 5 +- dev/tools/gen_defaults/pubspec.yaml | 5 +- dev/tools/gen_keycodes/pubspec.yaml | 5 +- dev/tools/pubspec.yaml | 5 +- examples/api/pubspec.yaml | 5 +- examples/hello_world/pubspec.yaml | 5 +- examples/platform_channel/pubspec.yaml | 5 +- examples/platform_channel_swift/pubspec.yaml | 5 +- examples/texture/pubspec.yaml | 5 +- .../widget_previews.dart} | 72 ++++- packages/flutter/lib/widget_previews.dart | 10 + packages/flutter/lib/widgets.dart | 1 - packages/flutter_driver/pubspec.yaml | 5 +- .../preview_code_generator.dart | 11 + .../src/widget_preview/preview_detector.dart | 57 +++- packages/flutter_tools/pubspec.yaml | 5 +- .../lib/src/controls.dart.tmpl | 36 +++ .../lib/src/widget_preview.dart.tmpl | 15 + .../src/widget_preview_rendering.dart.tmpl | 145 +++++++++- .../widget_preview/preview_detector_test.dart | 23 +- .../preview_code_generator_test.dart | 15 +- .../lib/src/controls.dart | 36 +++ .../lib/src/widget_preview.dart | 15 + .../lib/src/widget_preview_rendering.dart | 145 +++++++++- .../test/theming_test.dart | 263 ++++++++++++++++++ .../widget_preview_scaffold_test_utils.dart | 54 ++-- .../pubspec.yaml | 5 +- .../integration_test/example/pubspec.yaml | 5 +- 56 files changed, 960 insertions(+), 145 deletions(-) rename packages/flutter/lib/src/{widgets/widget_preview.dart => widget_previews/widget_previews.dart} (52%) create mode 100644 packages/flutter/lib/widget_previews.dart create mode 100644 packages/flutter_tools/test/widget_preview_scaffold.shard/widget_preview_scaffold/test/theming_test.dart diff --git a/dev/automated_tests/pubspec.yaml b/dev/automated_tests/pubspec.yaml index cf6cb754a77..e99c66476a2 100644 --- a/dev/automated_tests/pubspec.yaml +++ b/dev/automated_tests/pubspec.yaml @@ -21,10 +21,11 @@ dependencies: async: 2.13.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" characters: 1.4.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + cli_config: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" clock: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" collection: 1.19.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + coverage: 1.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" crypto: 3.0.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" fake_async: 1.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" file: 7.0.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -76,4 +77,4 @@ flutter: assets: - icon/test.png -# PUBSPEC CHECKSUM: 0ab4 +# PUBSPEC CHECKSUM: d60f diff --git a/dev/benchmarks/complex_layout/pubspec.yaml b/dev/benchmarks/complex_layout/pubspec.yaml index 2c03accf82d..4570376f726 100644 --- a/dev/benchmarks/complex_layout/pubspec.yaml +++ b/dev/benchmarks/complex_layout/pubspec.yaml @@ -46,9 +46,10 @@ dev_dependencies: _fe_analyzer_shared: 80.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" analyzer: 7.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 2.7.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + cli_config: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" clock: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + coverage: 1.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" crypto: 3.0.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" fake_async: 1.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" frontend_server_client: 4.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -87,4 +88,4 @@ flutter: - packages/flutter_gallery_assets/people/square/ali.png - packages/flutter_gallery_assets/places/india_chettinad_silk_maker.png -# PUBSPEC CHECKSUM: 9688 +# PUBSPEC CHECKSUM: f9e2 diff --git a/dev/benchmarks/macrobenchmarks/pubspec.yaml b/dev/benchmarks/macrobenchmarks/pubspec.yaml index 7ea077f660b..b0a9d9d43bf 100644 --- a/dev/benchmarks/macrobenchmarks/pubspec.yaml +++ b/dev/benchmarks/macrobenchmarks/pubspec.yaml @@ -53,8 +53,9 @@ dev_dependencies: _fe_analyzer_shared: 80.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" analyzer: 7.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 2.7.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + cli_config: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + coverage: 1.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" crypto: 3.0.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" frontend_server_client: 4.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" glob: 2.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -214,4 +215,4 @@ flutter: fonts: - asset: packages/flutter_gallery_assets/fonts/GalleryIcons.ttf -# PUBSPEC CHECKSUM: 9688 +# PUBSPEC CHECKSUM: f9e2 diff --git a/dev/benchmarks/microbenchmarks/pubspec.yaml b/dev/benchmarks/microbenchmarks/pubspec.yaml index 0e4b0fbd60c..28f0be53275 100644 --- a/dev/benchmarks/microbenchmarks/pubspec.yaml +++ b/dev/benchmarks/microbenchmarks/pubspec.yaml @@ -21,10 +21,11 @@ dependencies: async: 2.13.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" characters: 1.4.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + cli_config: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" clock: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" collection: 1.19.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + coverage: 1.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" crypto: 3.0.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" fake_async: 1.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" file: 7.0.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -141,4 +142,4 @@ flutter: - packages/flutter_gallery_assets/people/square/stella.png - packages/flutter_gallery_assets/people/square/trevor.png -# PUBSPEC CHECKSUM: 29c4 +# PUBSPEC CHECKSUM: 141f diff --git a/dev/benchmarks/platform_channels_benchmarks/pubspec.yaml b/dev/benchmarks/platform_channels_benchmarks/pubspec.yaml index 2b5b4acd798..9960b9ebe4e 100644 --- a/dev/benchmarks/platform_channels_benchmarks/pubspec.yaml +++ b/dev/benchmarks/platform_channels_benchmarks/pubspec.yaml @@ -22,10 +22,11 @@ dependencies: async: 2.13.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" characters: 1.4.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + cli_config: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" clock: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" collection: 1.19.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + coverage: 1.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" crypto: 3.0.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" fake_async: 1.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" file: 7.0.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -78,4 +79,4 @@ dev_dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: 4dee +# PUBSPEC CHECKSUM: a149 diff --git a/dev/benchmarks/platform_views_layout/pubspec.yaml b/dev/benchmarks/platform_views_layout/pubspec.yaml index 6dd781503af..55b61bc0d4f 100644 --- a/dev/benchmarks/platform_views_layout/pubspec.yaml +++ b/dev/benchmarks/platform_views_layout/pubspec.yaml @@ -49,9 +49,10 @@ dev_dependencies: _fe_analyzer_shared: 80.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" analyzer: 7.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 2.7.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + cli_config: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" clock: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + coverage: 1.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" crypto: 3.0.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" fake_async: 1.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" frontend_server_client: 4.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -90,4 +91,4 @@ flutter: - packages/flutter_gallery_assets/people/square/ali.png - packages/flutter_gallery_assets/places/india_chettinad_silk_maker.png -# PUBSPEC CHECKSUM: 2558 +# PUBSPEC CHECKSUM: 6ab2 diff --git a/dev/benchmarks/platform_views_layout_hybrid_composition/pubspec.yaml b/dev/benchmarks/platform_views_layout_hybrid_composition/pubspec.yaml index 04f2f426f05..8e9d1c7f5f4 100644 --- a/dev/benchmarks/platform_views_layout_hybrid_composition/pubspec.yaml +++ b/dev/benchmarks/platform_views_layout_hybrid_composition/pubspec.yaml @@ -44,9 +44,10 @@ dev_dependencies: _fe_analyzer_shared: 80.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" analyzer: 7.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 2.7.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + cli_config: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" clock: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + coverage: 1.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" crypto: 3.0.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" fake_async: 1.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" frontend_server_client: 4.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -85,4 +86,4 @@ flutter: - packages/flutter_gallery_assets/people/square/ali.png - packages/flutter_gallery_assets/places/india_chettinad_silk_maker.png -# PUBSPEC CHECKSUM: 9688 +# PUBSPEC CHECKSUM: f9e2 diff --git a/dev/benchmarks/test_apps/stocks/pubspec.yaml b/dev/benchmarks/test_apps/stocks/pubspec.yaml index 0aa14d5a5ea..491eb05b926 100644 --- a/dev/benchmarks/test_apps/stocks/pubspec.yaml +++ b/dev/benchmarks/test_apps/stocks/pubspec.yaml @@ -38,8 +38,9 @@ dev_dependencies: analyzer: 7.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 2.7.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + cli_config: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + coverage: 1.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" crypto: 3.0.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" fake_async: 1.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" file: 7.0.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -81,4 +82,4 @@ flutter: generate: true uses-material-design: true -# PUBSPEC CHECKSUM: 5c6e +# PUBSPEC CHECKSUM: 65c8 diff --git a/dev/bots/pubspec.yaml b/dev/bots/pubspec.yaml index b36bba62c72..251d11c72bc 100644 --- a/dev/bots/pubspec.yaml +++ b/dev/bots/pubspec.yaml @@ -25,10 +25,11 @@ dependencies: async: 2.13.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" checked_yaml: 2.0.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + cli_config: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" clock: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" collection: 1.19.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + coverage: 1.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" frontend_server_client: 4.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" gcloud: 0.8.18 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" glob: 2.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -77,4 +78,4 @@ dependencies: dev_dependencies: test_api: 0.7.4 -# PUBSPEC CHECKSUM: e365 +# PUBSPEC CHECKSUM: ddbf diff --git a/dev/conductor/core/pubspec.yaml b/dev/conductor/core/pubspec.yaml index 412409a6816..cc4f0e85705 100644 --- a/dev/conductor/core/pubspec.yaml +++ b/dev/conductor/core/pubspec.yaml @@ -37,8 +37,9 @@ dev_dependencies: _fe_analyzer_shared: 80.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" analyzer: 7.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + cli_config: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + coverage: 1.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" frontend_server_client: 4.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" glob: 2.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" http_multi_server: 3.2.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -67,4 +68,4 @@ dev_dependencies: webkit_inspection_protocol: 1.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" yaml: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" -# PUBSPEC CHECKSUM: 766d +# PUBSPEC CHECKSUM: 5ac7 diff --git a/dev/customer_testing/pubspec.yaml b/dev/customer_testing/pubspec.yaml index 55825db31e4..3cab34367fa 100644 --- a/dev/customer_testing/pubspec.yaml +++ b/dev/customer_testing/pubspec.yaml @@ -23,8 +23,9 @@ dev_dependencies: _fe_analyzer_shared: 80.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" analyzer: 7.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + cli_config: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + coverage: 1.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" crypto: 3.0.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" frontend_server_client: 4.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" http_multi_server: 3.2.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -57,4 +58,4 @@ dev_dependencies: webkit_inspection_protocol: 1.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" yaml: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" -# PUBSPEC CHECKSUM: c1ed +# PUBSPEC CHECKSUM: 8148 diff --git a/dev/devicelab/pubspec.yaml b/dev/devicelab/pubspec.yaml index 1f42321e7ea..249be41838d 100644 --- a/dev/devicelab/pubspec.yaml +++ b/dev/devicelab/pubspec.yaml @@ -55,7 +55,8 @@ dev_dependencies: _fe_analyzer_shared: 80.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" analyzer: 7.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + cli_config: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + coverage: 1.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" frontend_server_client: 4.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" glob: 2.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" http_multi_server: 3.2.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -75,4 +76,4 @@ dev_dependencies: web_socket: 0.1.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" web_socket_channel: 3.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" -# PUBSPEC CHECKSUM: 00d7 +# PUBSPEC CHECKSUM: 0932 diff --git a/dev/integration_tests/android_engine_test/pubspec.yaml b/dev/integration_tests/android_engine_test/pubspec.yaml index 53ffa4e5d3b..48bd84276cb 100644 --- a/dev/integration_tests/android_engine_test/pubspec.yaml +++ b/dev/integration_tests/android_engine_test/pubspec.yaml @@ -40,8 +40,9 @@ dev_dependencies: _fe_analyzer_shared: 80.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" analyzer: 7.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 2.7.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + cli_config: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + coverage: 1.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" crypto: 3.0.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" frontend_server_client: 4.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" glob: 2.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -70,4 +71,4 @@ dev_dependencies: webkit_inspection_protocol: 1.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" yaml: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" -# PUBSPEC CHECKSUM: f229 +# PUBSPEC CHECKSUM: fb83 diff --git a/dev/integration_tests/android_semantics_testing/pubspec.yaml b/dev/integration_tests/android_semantics_testing/pubspec.yaml index 85a68a59ccd..1c317cfd393 100644 --- a/dev/integration_tests/android_semantics_testing/pubspec.yaml +++ b/dev/integration_tests/android_semantics_testing/pubspec.yaml @@ -19,10 +19,11 @@ dependencies: async: 2.13.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" characters: 1.4.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + cli_config: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" clock: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" collection: 1.19.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + coverage: 1.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" crypto: 3.0.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" fake_async: 1.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" file: 7.0.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -70,4 +71,4 @@ dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: 61a9 +# PUBSPEC CHECKSUM: b504 diff --git a/dev/integration_tests/android_views/pubspec.yaml b/dev/integration_tests/android_views/pubspec.yaml index 4f679742ab1..e65cdf4a8b0 100644 --- a/dev/integration_tests/android_views/pubspec.yaml +++ b/dev/integration_tests/android_views/pubspec.yaml @@ -57,9 +57,10 @@ dev_dependencies: _fe_analyzer_shared: 80.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" analyzer: 7.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 2.7.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + cli_config: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" clock: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + coverage: 1.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" crypto: 3.0.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" fake_async: 1.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" frontend_server_client: 4.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -95,4 +96,4 @@ dev_dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: 9423 +# PUBSPEC CHECKSUM: 617d diff --git a/dev/integration_tests/deferred_components_test/pubspec.yaml b/dev/integration_tests/deferred_components_test/pubspec.yaml index c216dc2c47c..47cf26e912f 100644 --- a/dev/integration_tests/deferred_components_test/pubspec.yaml +++ b/dev/integration_tests/deferred_components_test/pubspec.yaml @@ -39,9 +39,10 @@ dev_dependencies: _fe_analyzer_shared: 80.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" analyzer: 7.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 2.7.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + cli_config: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" clock: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + coverage: 1.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" crypto: 3.0.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" fake_async: 1.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" frontend_server_client: 4.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -84,4 +85,4 @@ flutter: assets: - customassets/flutter_logo.png -# PUBSPEC CHECKSUM: 8aed +# PUBSPEC CHECKSUM: 7548 diff --git a/dev/integration_tests/external_textures/pubspec.yaml b/dev/integration_tests/external_textures/pubspec.yaml index 2ce35fecfef..255378e894b 100644 --- a/dev/integration_tests/external_textures/pubspec.yaml +++ b/dev/integration_tests/external_textures/pubspec.yaml @@ -17,9 +17,10 @@ dependencies: async: 2.13.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" characters: 1.4.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + cli_config: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" collection: 1.19.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + coverage: 1.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" crypto: 3.0.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" file: 7.0.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" frontend_server_client: 4.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -66,4 +67,4 @@ dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: 9c1e +# PUBSPEC CHECKSUM: 2d78 diff --git a/dev/integration_tests/flavors/pubspec.yaml b/dev/integration_tests/flavors/pubspec.yaml index 33213b285b7..1545a7f4a07 100644 --- a/dev/integration_tests/flavors/pubspec.yaml +++ b/dev/integration_tests/flavors/pubspec.yaml @@ -19,9 +19,10 @@ dependencies: async: 2.13.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" characters: 1.4.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + cli_config: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" collection: 1.19.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + coverage: 1.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" crypto: 3.0.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" file: 7.0.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" frontend_server_client: 4.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -86,4 +87,4 @@ flutter: flavors: - free -# PUBSPEC CHECKSUM: 8aed +# PUBSPEC CHECKSUM: 7548 diff --git a/dev/integration_tests/flutter_gallery/pubspec.yaml b/dev/integration_tests/flutter_gallery/pubspec.yaml index c4d00196089..99917f16175 100644 --- a/dev/integration_tests/flutter_gallery/pubspec.yaml +++ b/dev/integration_tests/flutter_gallery/pubspec.yaml @@ -59,8 +59,9 @@ dev_dependencies: args: 2.7.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.13.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + cli_config: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + coverage: 1.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" crypto: 3.0.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" fake_async: 1.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" file: 7.0.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -272,4 +273,4 @@ flutter: - asset: packages/flutter_gallery_assets/fonts/merriweather/Merriweather-Regular.ttf - asset: packages/flutter_gallery_assets/fonts/merriweather/Merriweather-Light.ttf -# PUBSPEC CHECKSUM: 054a +# PUBSPEC CHECKSUM: fea4 diff --git a/dev/integration_tests/hook_user_defines/pubspec.yaml b/dev/integration_tests/hook_user_defines/pubspec.yaml index b2c92255139..10cd6aa2cdc 100644 --- a/dev/integration_tests/hook_user_defines/pubspec.yaml +++ b/dev/integration_tests/hook_user_defines/pubspec.yaml @@ -39,9 +39,10 @@ dev_dependencies: analyzer: 7.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 2.7.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + cli_config: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" cli_util: 0.4.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + coverage: 1.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" dart_style: 3.0.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" frontend_server_client: 4.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" http_multi_server: 3.2.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -73,4 +74,4 @@ dev_dependencies: webkit_inspection_protocol: 1.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" yaml_edit: 2.2.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" -# PUBSPEC CHECKSUM: a221 +# PUBSPEC CHECKSUM: cb7b diff --git a/dev/integration_tests/ios_platform_view_tests/pubspec.yaml b/dev/integration_tests/ios_platform_view_tests/pubspec.yaml index 4d03fb2773b..c666bf7454e 100644 --- a/dev/integration_tests/ios_platform_view_tests/pubspec.yaml +++ b/dev/integration_tests/ios_platform_view_tests/pubspec.yaml @@ -39,9 +39,10 @@ dev_dependencies: _fe_analyzer_shared: 80.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" analyzer: 7.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 2.7.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + cli_config: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" clock: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + coverage: 1.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" crypto: 3.0.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" fake_async: 1.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" frontend_server_client: 4.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -81,4 +82,4 @@ flutter: # the material Icons class. uses-material-design: true -# PUBSPEC CHECKSUM: 8aed +# PUBSPEC CHECKSUM: 7548 diff --git a/dev/integration_tests/link_hook/pubspec.yaml b/dev/integration_tests/link_hook/pubspec.yaml index 62fd323f07d..858533d9138 100644 --- a/dev/integration_tests/link_hook/pubspec.yaml +++ b/dev/integration_tests/link_hook/pubspec.yaml @@ -1,5 +1,5 @@ name: link_hook -description: 'A new Dart FFI package project.' +description: "A new Dart FFI package project." version: 0.0.1 environment: @@ -34,9 +34,10 @@ dev_dependencies: analyzer: 7.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 2.7.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + cli_config: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" cli_util: 0.4.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + coverage: 1.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" dart_style: 3.0.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" frontend_server_client: 4.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" http_multi_server: 3.2.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -68,4 +69,4 @@ dev_dependencies: webkit_inspection_protocol: 1.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" yaml_edit: 2.2.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" -# PUBSPEC CHECKSUM: a221 +# PUBSPEC CHECKSUM: cb7b diff --git a/dev/integration_tests/new_gallery/pubspec.yaml b/dev/integration_tests/new_gallery/pubspec.yaml index fe2b3f25c21..0b1a0e75572 100644 --- a/dev/integration_tests/new_gallery/pubspec.yaml +++ b/dev/integration_tests/new_gallery/pubspec.yaml @@ -72,8 +72,9 @@ dev_dependencies: analyzer: 7.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 2.7.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + cli_config: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + coverage: 1.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" fake_async: 1.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" file: 7.0.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" frontend_server_client: 4.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -311,4 +312,4 @@ flutter: fonts: - asset: packages/flutter_gallery_assets/fonts/GalleryIcons.ttf -# PUBSPEC CHECKSUM: 985f +# PUBSPEC CHECKSUM: 07b9 diff --git a/dev/integration_tests/platform_interaction/pubspec.yaml b/dev/integration_tests/platform_interaction/pubspec.yaml index 5eff422967c..7b33d2270ea 100644 --- a/dev/integration_tests/platform_interaction/pubspec.yaml +++ b/dev/integration_tests/platform_interaction/pubspec.yaml @@ -17,9 +17,10 @@ dependencies: async: 2.13.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" characters: 1.4.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + cli_config: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" collection: 1.19.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + coverage: 1.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" crypto: 3.0.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" file: 7.0.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" frontend_server_client: 4.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -66,4 +67,4 @@ dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: 9c1e +# PUBSPEC CHECKSUM: 2d78 diff --git a/dev/integration_tests/ui/pubspec.yaml b/dev/integration_tests/ui/pubspec.yaml index 429dbfddab0..7d8a0e34830 100644 --- a/dev/integration_tests/ui/pubspec.yaml +++ b/dev/integration_tests/ui/pubspec.yaml @@ -19,9 +19,10 @@ dependencies: async: 2.13.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" characters: 1.4.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + cli_config: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" collection: 1.19.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + coverage: 1.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" crypto: 3.0.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" file: 7.0.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" frontend_server_client: 4.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -80,4 +81,4 @@ flutter: assets: - assets/foo.png -# PUBSPEC CHECKSUM: 8aed +# PUBSPEC CHECKSUM: 7548 diff --git a/dev/integration_tests/web_e2e_tests/pubspec.yaml b/dev/integration_tests/web_e2e_tests/pubspec.yaml index 1eef1c07250..2eb5ae1f0d7 100644 --- a/dev/integration_tests/web_e2e_tests/pubspec.yaml +++ b/dev/integration_tests/web_e2e_tests/pubspec.yaml @@ -57,8 +57,9 @@ dev_dependencies: _fe_analyzer_shared: 80.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" analyzer: 7.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 2.7.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + cli_config: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + coverage: 1.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" crypto: 3.0.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" frontend_server_client: 4.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" glob: 2.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -88,4 +89,4 @@ dev_dependencies: webkit_inspection_protocol: 1.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" yaml: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" -# PUBSPEC CHECKSUM: 1ca0 +# PUBSPEC CHECKSUM: bbfa diff --git a/dev/integration_tests/windows_startup_test/pubspec.yaml b/dev/integration_tests/windows_startup_test/pubspec.yaml index 71a32a38f3c..9451d248e12 100644 --- a/dev/integration_tests/windows_startup_test/pubspec.yaml +++ b/dev/integration_tests/windows_startup_test/pubspec.yaml @@ -17,9 +17,10 @@ dependencies: async: 2.13.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" characters: 1.4.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + cli_config: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" collection: 1.19.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + coverage: 1.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" crypto: 3.0.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" file: 7.0.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" frontend_server_client: 4.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -63,4 +64,4 @@ dependencies: webkit_inspection_protocol: 1.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" yaml: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" -# PUBSPEC CHECKSUM: 9c1e +# PUBSPEC CHECKSUM: 2d78 diff --git a/dev/snippets/pubspec.yaml b/dev/snippets/pubspec.yaml index d53e1a25443..09198dee2a8 100644 --- a/dev/snippets/pubspec.yaml +++ b/dev/snippets/pubspec.yaml @@ -32,7 +32,8 @@ dev_dependencies: test: 1.25.15 boolean_selector: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + cli_config: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + coverage: 1.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" frontend_server_client: 4.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" http_multi_server: 3.2.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" http_parser: 4.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -62,4 +63,4 @@ dev_dependencies: executables: snippets: -# PUBSPEC CHECKSUM: 76f8 +# PUBSPEC CHECKSUM: ae53 diff --git a/dev/tools/android_driver_extensions/pubspec.yaml b/dev/tools/android_driver_extensions/pubspec.yaml index 0dbd7773d38..dcf15cd083b 100644 --- a/dev/tools/android_driver_extensions/pubspec.yaml +++ b/dev/tools/android_driver_extensions/pubspec.yaml @@ -48,8 +48,9 @@ dev_dependencies: _fe_analyzer_shared: 80.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" analyzer: 7.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 2.7.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + cli_config: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + coverage: 1.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" frontend_server_client: 4.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" glob: 2.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" http_multi_server: 3.2.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -76,4 +77,4 @@ dev_dependencies: webkit_inspection_protocol: 1.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" yaml: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" -# PUBSPEC CHECKSUM: f5f8 +# PUBSPEC CHECKSUM: 5953 diff --git a/dev/tools/gen_defaults/pubspec.yaml b/dev/tools/gen_defaults/pubspec.yaml index df456b93095..4af05a4984f 100644 --- a/dev/tools/gen_defaults/pubspec.yaml +++ b/dev/tools/gen_defaults/pubspec.yaml @@ -16,9 +16,10 @@ dev_dependencies: analyzer: 7.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.13.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + cli_config: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" collection: 1.19.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + coverage: 1.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" crypto: 3.0.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" file: 7.0.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" frontend_server_client: 4.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -57,4 +58,4 @@ dev_dependencies: webkit_inspection_protocol: 1.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" yaml: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" -# PUBSPEC CHECKSUM: c1ed +# PUBSPEC CHECKSUM: 8148 diff --git a/dev/tools/gen_keycodes/pubspec.yaml b/dev/tools/gen_keycodes/pubspec.yaml index b795c417305..1057a5ace3c 100644 --- a/dev/tools/gen_keycodes/pubspec.yaml +++ b/dev/tools/gen_keycodes/pubspec.yaml @@ -27,8 +27,9 @@ dev_dependencies: _fe_analyzer_shared: 80.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" analyzer: 7.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + cli_config: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + coverage: 1.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" crypto: 3.0.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" file: 7.0.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" frontend_server_client: 4.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -59,4 +60,4 @@ dev_dependencies: webkit_inspection_protocol: 1.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" yaml: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" -# PUBSPEC CHECKSUM: 46b4 +# PUBSPEC CHECKSUM: 600f diff --git a/dev/tools/pubspec.yaml b/dev/tools/pubspec.yaml index 4188674f934..f24e5bde56a 100644 --- a/dev/tools/pubspec.yaml +++ b/dev/tools/pubspec.yaml @@ -38,8 +38,9 @@ dev_dependencies: _fe_analyzer_shared: 80.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" analyzer: 7.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + cli_config: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + coverage: 1.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" frontend_server_client: 4.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" glob: 2.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" http_multi_server: 3.2.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -66,4 +67,4 @@ dev_dependencies: web_socket_channel: 3.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" webkit_inspection_protocol: 1.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" -# PUBSPEC CHECKSUM: 9663 +# PUBSPEC CHECKSUM: f2bd diff --git a/examples/api/pubspec.yaml b/examples/api/pubspec.yaml index fd390bdd0b7..9c1717b0306 100644 --- a/examples/api/pubspec.yaml +++ b/examples/api/pubspec.yaml @@ -41,9 +41,10 @@ dev_dependencies: args: 2.7.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.13.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + cli_config: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" clock: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + coverage: 1.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" crypto: 3.0.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" fake_async: 1.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" file: 7.0.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -94,4 +95,4 @@ dev_dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: 2cd7 +# PUBSPEC CHECKSUM: 8f32 diff --git a/examples/hello_world/pubspec.yaml b/examples/hello_world/pubspec.yaml index 704702fb84e..abaed105a28 100644 --- a/examples/hello_world/pubspec.yaml +++ b/examples/hello_world/pubspec.yaml @@ -25,9 +25,10 @@ dev_dependencies: args: 2.7.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.13.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + cli_config: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" clock: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + coverage: 1.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" crypto: 3.0.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" fake_async: 1.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" file: 7.0.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -72,4 +73,4 @@ dev_dependencies: webkit_inspection_protocol: 1.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" yaml: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" -# PUBSPEC CHECKSUM: 8aed +# PUBSPEC CHECKSUM: 7548 diff --git a/examples/platform_channel/pubspec.yaml b/examples/platform_channel/pubspec.yaml index 2f52b5c1f7c..3fe33f7d069 100644 --- a/examples/platform_channel/pubspec.yaml +++ b/examples/platform_channel/pubspec.yaml @@ -25,9 +25,10 @@ dev_dependencies: args: 2.7.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.13.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + cli_config: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" clock: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + coverage: 1.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" crypto: 3.0.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" fake_async: 1.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" file: 7.0.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -75,4 +76,4 @@ dev_dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: 8aed +# PUBSPEC CHECKSUM: 7548 diff --git a/examples/platform_channel_swift/pubspec.yaml b/examples/platform_channel_swift/pubspec.yaml index 6e74ee7660a..1254c43c604 100644 --- a/examples/platform_channel_swift/pubspec.yaml +++ b/examples/platform_channel_swift/pubspec.yaml @@ -25,9 +25,10 @@ dev_dependencies: args: 2.7.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.13.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + cli_config: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" clock: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + coverage: 1.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" crypto: 3.0.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" fake_async: 1.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" file: 7.0.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -75,4 +76,4 @@ dev_dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: 8aed +# PUBSPEC CHECKSUM: 7548 diff --git a/examples/texture/pubspec.yaml b/examples/texture/pubspec.yaml index 2e5dc35b0c7..594449d9273 100644 --- a/examples/texture/pubspec.yaml +++ b/examples/texture/pubspec.yaml @@ -23,9 +23,10 @@ dev_dependencies: args: 2.7.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.13.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + cli_config: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" clock: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + coverage: 1.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" crypto: 3.0.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" fake_async: 1.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" file: 7.0.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -68,4 +69,4 @@ dev_dependencies: webkit_inspection_protocol: 1.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" yaml: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" -# PUBSPEC CHECKSUM: 61a9 +# PUBSPEC CHECKSUM: b504 diff --git a/packages/flutter/lib/src/widgets/widget_preview.dart b/packages/flutter/lib/src/widget_previews/widget_previews.dart similarity index 52% rename from packages/flutter/lib/src/widgets/widget_preview.dart rename to packages/flutter/lib/src/widget_previews/widget_previews.dart index 75f9e70c1d0..4a3f1819404 100644 --- a/packages/flutter/lib/src/widgets/widget_preview.dart +++ b/packages/flutter/lib/src/widget_previews/widget_previews.dart @@ -2,10 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -/// @docImport 'media_query.dart'; +/// @docImport 'package:/flutter/cupertino.dart'; +/// @docImport 'package:/flutter/material.dart'; library; -import 'framework.dart'; +import 'package:flutter/cupertino.dart' show CupertinoThemeData; +import 'package:flutter/material.dart' show Brightness, ThemeData; +import 'package:flutter/widgets.dart'; /// Annotation used to mark functions that return a widget preview. /// @@ -46,10 +49,21 @@ import 'framework.dart'; /// } /// ``` /// {@end-tool} +/// +/// **Important Note:** all values provided to the `@Preview()` annotation must +/// be constant and non-private. // TODO(bkonyi): link to actual documentation when available. base class Preview { /// Annotation used to mark functions that return widget previews. - const Preview({this.name, this.width, this.height, this.textScaleFactor, this.wrapper}); + const Preview({ + this.name, + this.width, + this.height, + this.textScaleFactor, + this.wrapper, + this.theme, + this.brightness, + }); /// A description to be displayed alongside the preview. /// @@ -78,6 +92,58 @@ base class Preview { /// /// This function can be used to perform dependency injection or setup /// additional scaffolding needed to correctly render the preview. + /// + /// Note: this must be a reference to a static, public function defined as + /// either a top-level function or static member in a class. // TODO(bkonyi): provide an example. final Widget Function(Widget)? wrapper; + + /// A callback to return Material and Cupertino theming data to be applied + /// to the previewed [Widget]. + /// + /// Note: this must be a reference to a static, public function defined as + /// either a top-level function or static member in a class. + final PreviewThemeData Function()? theme; + + /// Sets the initial theme brightness. + /// + /// If not provided, the current system default brightness will be used. + final Brightness? brightness; +} + +/// A collection of [ThemeData] and [CupertinoThemeData] instances for use in +/// widget previews. +base class PreviewThemeData { + /// Creates a collection of [ThemeData] and [CupertinoThemeData] instances + /// for use in widget previews. + /// + /// If a theme isn't provided for a specific configuration, no theme data + /// will be applied and the default theme will be used. + const PreviewThemeData({ + this.materialLight, + this.materialDark, + this.cupertinoLight, + this.cupertinoDark, + }); + + /// The Material [ThemeData] to apply when light mode is enabled. + final ThemeData? materialLight; + + /// The Material [ThemeData] to apply when dark mode is enabled. + final ThemeData? materialDark; + + /// The Cupertino [CupertinoThemeData] to apply when light mode is enabled. + final CupertinoThemeData? cupertinoLight; + + /// The Cupertino [CupertinoThemeData] to apply when dark mode is enabled. + final CupertinoThemeData? cupertinoDark; + + /// Returns the pair of [ThemeData] and [CupertinoThemeData] corresponding to + /// the value of [brightness]. + (ThemeData?, CupertinoThemeData?) themeForBrightness(Brightness brightness) { + if (brightness == Brightness.light) { + return (materialLight, cupertinoLight); + } + return (materialDark, cupertinoDark); + } } diff --git a/packages/flutter/lib/widget_previews.dart b/packages/flutter/lib/widget_previews.dart new file mode 100644 index 00000000000..036185baa73 --- /dev/null +++ b/packages/flutter/lib/widget_previews.dart @@ -0,0 +1,10 @@ +// Copyright 2014 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/// The Flutter widget preview annotations and data classes. +/// +/// To use, import `package:flutter/widget_previews.dart`. +library widget_previews; + +export 'src/widget_previews/widget_previews.dart'; diff --git a/packages/flutter/lib/widgets.dart b/packages/flutter/lib/widgets.dart index af07fbf279e..b8a47695a9d 100644 --- a/packages/flutter/lib/widgets.dart +++ b/packages/flutter/lib/widgets.dart @@ -174,7 +174,6 @@ export 'src/widgets/view.dart'; export 'src/widgets/viewport.dart'; export 'src/widgets/visibility.dart'; export 'src/widgets/widget_inspector.dart'; -export 'src/widgets/widget_preview.dart'; export 'src/widgets/widget_span.dart'; export 'src/widgets/widget_state.dart'; export 'src/widgets/will_pop_scope.dart'; diff --git a/packages/flutter_driver/pubspec.yaml b/packages/flutter_driver/pubspec.yaml index 2afed0a324d..a5fa4980b30 100644 --- a/packages/flutter_driver/pubspec.yaml +++ b/packages/flutter_driver/pubspec.yaml @@ -46,8 +46,9 @@ dev_dependencies: _fe_analyzer_shared: 80.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" analyzer: 7.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 2.7.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + cli_config: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + coverage: 1.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" crypto: 3.0.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" frontend_server_client: 4.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" glob: 2.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -76,4 +77,4 @@ dev_dependencies: webkit_inspection_protocol: 1.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" yaml: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" -# PUBSPEC CHECKSUM: f5f8 +# PUBSPEC CHECKSUM: 5953 diff --git a/packages/flutter_tools/lib/src/widget_preview/preview_code_generator.dart b/packages/flutter_tools/lib/src/widget_preview/preview_code_generator.dart index 9586f2d4dd4..fee469edc22 100644 --- a/packages/flutter_tools/lib/src/widget_preview/preview_code_generator.dart +++ b/packages/flutter_tools/lib/src/widget_preview/preview_code_generator.dart @@ -97,6 +97,7 @@ class PreviewCodeGenerator { 'package:flutter/widgets.dart', ).newInstance([], {'builder': previewWidget}); } + if (preview.hasWrapper) { previewWidget = refer( preview.wrapper!, @@ -119,6 +120,16 @@ class PreviewCodeGenerator { key: PreviewDetails.kTextScaleFactor, property: preview.textScaleFactor, ), + if (preview.theme != null) + PreviewDetails.kTheme: refer( + preview.theme!, + preview.themeLibraryUri, + ).call([]), + if (preview.brightness != null) + PreviewDetails.kBrightness: refer( + preview.brightness!, + preview.brightnessLibraryUri ?? 'package:flutter/foundation.dart', + ), 'builder': previewWidget, }), ); diff --git a/packages/flutter_tools/lib/src/widget_preview/preview_detector.dart b/packages/flutter_tools/lib/src/widget_preview/preview_detector.dart index fe9b46ec864..6fd2797e49b 100644 --- a/packages/flutter_tools/lib/src/widget_preview/preview_detector.dart +++ b/packages/flutter_tools/lib/src/widget_preview/preview_detector.dart @@ -70,12 +70,20 @@ final class PreviewDetails { String? textScaleFactor, String? wrapper, String? wrapperLibraryUri = '', + String? theme, + String? themeLibraryUri = '', + String? brightness, + String? brightnessLibraryUri = '', }) : _name = name, _width = width, _height = height, _textScaleFactor = textScaleFactor, _wrapper = wrapper, - _wrapperLibraryUri = wrapperLibraryUri; + _wrapperLibraryUri = wrapperLibraryUri, + _theme = theme, + _themeLibraryUri = themeLibraryUri, + _brightness = brightness, + _brightnessLibraryUri = brightnessLibraryUri; @visibleForTesting PreviewDetails copyWith({ @@ -87,6 +95,10 @@ final class PreviewDetails { String? textScaleFactor, String? wrapper, String? wrapperLibraryUri, + String? theme, + String? themeLibraryUri, + String? brightness, + String? brightnessLibraryUri, }) { return PreviewDetails.test( functionName: functionName ?? this.functionName, @@ -97,6 +109,10 @@ final class PreviewDetails { textScaleFactor: textScaleFactor ?? this.textScaleFactor, wrapper: wrapper ?? this.wrapper, wrapperLibraryUri: wrapperLibraryUri ?? this.wrapperLibraryUri, + theme: theme ?? this.theme, + themeLibraryUri: themeLibraryUri ?? this.themeLibraryUri, + brightness: brightness ?? this.brightness, + brightnessLibraryUri: brightnessLibraryUri ?? this.brightnessLibraryUri, ); } @@ -106,6 +122,10 @@ final class PreviewDetails { static const String kTextScaleFactor = 'textScaleFactor'; static const String kWrapper = 'wrapper'; static const String kWrapperLibraryUri = 'wrapperLibraryUrl'; + static const String kTheme = 'theme'; + static const String kThemeLibraryUri = 'themeLibraryUrl'; + static const String kBrightness = 'brightness'; + static const String kBrightnessLibraryUri = 'brightnessLibraryUrl'; /// The name of the function returning the preview. final String functionName; @@ -155,10 +175,24 @@ final class PreviewDetails { bool get hasWrapper => _wrapper != null; + String? get theme => _theme; + String? _theme; + + String? get themeLibraryUri => _themeLibraryUri; + String? _themeLibraryUri; + + String? get brightness => _brightness; + String? _brightness; + + String? get brightnessLibraryUri => _brightnessLibraryUri; + String? _brightnessLibraryUri; + void _setField({required NamedExpression node}) { final String key = node.name.label.name; final Expression expression = node.expression; final String source = expression.toSource(); + final String? libraryUri = + expression is SimpleIdentifier ? expression.element!.library2!.identifier : null; switch (key) { case kName: _name = source; @@ -170,7 +204,13 @@ final class PreviewDetails { _textScaleFactor = source; case kWrapper: _wrapper = source; - _wrapperLibraryUri = (node.expression as SimpleIdentifier).element!.library2!.identifier; + _wrapperLibraryUri = libraryUri; + case kTheme: + _theme = source; + _themeLibraryUri = libraryUri; + case kBrightness: + _brightness = source; + _brightnessLibraryUri = libraryUri; default: throw StateError('Unknown Preview field "$name": $source'); } @@ -190,14 +230,19 @@ final class PreviewDetails { other.width == width && other.textScaleFactor == textScaleFactor && other.wrapper == wrapper && - other.wrapperLibraryUri == wrapperLibraryUri; + other.wrapperLibraryUri == wrapperLibraryUri && + other.theme == theme && + other.themeLibraryUri == themeLibraryUri && + other.brightness == brightness && + other.brightnessLibraryUri == brightnessLibraryUri; } @override String toString() => 'PreviewDetails(function: $functionName isBuilder: $isBuilder $kName: $name ' '$kWidth: $width $kHeight: $height $kTextScaleFactor: $textScaleFactor $kWrapper: $wrapper ' - '$kWrapperLibraryUri: $wrapperLibraryUri)'; + '$kWrapperLibraryUri: $wrapperLibraryUri $kTheme: $theme $kThemeLibraryUri: $themeLibraryUri ' + '$kBrightness: $_brightness $kBrightnessLibraryUri: $_brightnessLibraryUri)'; @override // ignore: avoid_equals_and_hash_code_on_mutable_classes @@ -209,6 +254,10 @@ final class PreviewDetails { textScaleFactor, wrapper, wrapperLibraryUri, + theme, + themeLibraryUri, + brightness, + brightnessLibraryUri, ]); } diff --git a/packages/flutter_tools/pubspec.yaml b/packages/flutter_tools/pubspec.yaml index 1d909a7bcb6..27832fe86cc 100644 --- a/packages/flutter_tools/pubspec.yaml +++ b/packages/flutter_tools/pubspec.yaml @@ -16,7 +16,7 @@ dependencies: dwds: 24.3.10 code_builder: 4.10.1 completion: 1.0.1 - coverage: 1.11.1 + coverage: 1.12.0 crypto: 3.0.6 ffi: 2.1.4 file: 7.0.1 @@ -74,6 +74,7 @@ dependencies: browser_launcher: 1.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" built_collection: 5.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" built_value: 8.9.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + cli_config: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" clock: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" csslib: 1.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" dap: 1.4.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -122,4 +123,4 @@ dartdoc: # Exclude this package from the hosted API docs. nodoc: true -# PUBSPEC CHECKSUM: 4252 +# PUBSPEC CHECKSUM: d7ac diff --git a/packages/flutter_tools/templates/widget_preview_scaffold/lib/src/controls.dart.tmpl b/packages/flutter_tools/templates/widget_preview_scaffold/lib/src/controls.dart.tmpl index 6158994763d..641c2fbdf96 100644 --- a/packages/flutter_tools/templates/widget_preview_scaffold/lib/src/controls.dart.tmpl +++ b/packages/flutter_tools/templates/widget_preview_scaffold/lib/src/controls.dart.tmpl @@ -124,3 +124,39 @@ class SoftRestartButton extends StatelessWidget { softRestartListenable.value = true; } } + +extension on Brightness { + Brightness get invert => isLight ? Brightness.dark : Brightness.light; + bool get isLight => this == Brightness.light; +} + +/// A button that toggles the current theme brightness. +class BrightnessToggleButton extends StatelessWidget { + const BrightnessToggleButton({ + super.key, + required this.enabled, + required this.brightnessListenable, + }); + + final ValueNotifier brightnessListenable; + final bool enabled; + + @override + Widget build(BuildContext context) { + return ValueListenableBuilder( + valueListenable: brightnessListenable, + builder: (context, brightness, _) { + final brightness = brightnessListenable.value; + return _WidgetPreviewIconButton( + tooltip: 'Switch to ${brightness.isLight ? 'dark' : 'light'} mode', + onPressed: enabled ? _toggleBrightness : null, + icon: brightness.isLight ? Icons.dark_mode : Icons.light_mode, + ); + }, + ); + } + + void _toggleBrightness() { + brightnessListenable.value = brightnessListenable.value.invert; + } +} diff --git a/packages/flutter_tools/templates/widget_preview_scaffold/lib/src/widget_preview.dart.tmpl b/packages/flutter_tools/templates/widget_preview_scaffold/lib/src/widget_preview.dart.tmpl index e9ca0333c66..e13f6204f96 100644 --- a/packages/flutter_tools/templates/widget_preview_scaffold/lib/src/widget_preview.dart.tmpl +++ b/packages/flutter_tools/templates/widget_preview_scaffold/lib/src/widget_preview.dart.tmpl @@ -2,6 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'dart:ui'; + +import 'package:flutter/widget_previews.dart'; import 'package:flutter/widgets.dart'; /// Wraps a [Widget], initializing various state and properties to allow for @@ -23,6 +26,8 @@ class WidgetPreview { this.width, this.height, this.textScaleFactor, + this.brightness, + this.theme, }); /// A description to be displayed alongside the preview. @@ -50,4 +55,14 @@ class WidgetPreview { /// If not provided, the default text scaling factor provided by [MediaQuery] /// will be used. final double? textScaleFactor; + + /// Material and Cupertino theming data to be applied to the previewed [Widget]. + /// + /// If not provided, the default theme will be used. + final PreviewThemeData? theme; + + /// Sets the initial theme brightness. + /// + /// If not provided, the current system default brightness will be used. + final Brightness? brightness; } diff --git a/packages/flutter_tools/templates/widget_preview_scaffold/lib/src/widget_preview_rendering.dart.tmpl b/packages/flutter_tools/templates/widget_preview_scaffold/lib/src/widget_preview_rendering.dart.tmpl index c6e8bddf09d..70fa0d383f9 100644 --- a/packages/flutter_tools/templates/widget_preview_scaffold/lib/src/widget_preview_rendering.dart.tmpl +++ b/packages/flutter_tools/templates/widget_preview_scaffold/lib/src/widget_preview_rendering.dart.tmpl @@ -4,11 +4,13 @@ import 'dart:math' as math; -import 'package:flutter/foundation.dart' show kIsWeb; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/foundation.dart' show kIsWeb, ValueListenable; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:flutter/services.dart'; +import 'package:flutter/widget_previews.dart'; import 'package:stack_trace/stack_trace.dart'; import 'package:url_launcher/url_launcher.dart'; @@ -114,7 +116,7 @@ class NoPreviewsDetectedWidget extends StatelessWidget { static Uri documentationUrl = Uri.https( 'github.com', 'flutter/flutter/blob/master/packages/flutter/' - 'lib/src/widgets/widget_preview.dart', + 'lib/src/widget_previews/widget_previews.dart', ); @override @@ -159,7 +161,13 @@ class WidgetPreviewWidget extends StatefulWidget { class WidgetPreviewWidgetState extends State { final transformationController = TransformationController(); - final deviceOrientation = ValueNotifier(Orientation.portrait); + + // Set the initial preview brightness based on the platform default or the + // value explicitly specified for the preview. + late final brightnessListenable = ValueNotifier( + widget.preview.brightness ?? MediaQuery.platformBrightnessOf(context), + ); + final softRestartListenable = ValueNotifier(false); final key = GlobalKey(); @@ -168,8 +176,30 @@ class WidgetPreviewWidgetState extends State { (key.currentContext!.findRenderObject() as RenderBox).size; @override - void initState() { - super.initState(); + void didUpdateWidget(WidgetPreviewWidget oldWidget) { + super.didUpdateWidget(oldWidget); + + final previousBrightness = oldWidget.preview.brightness; + final newBrightness = widget.preview.brightness; + final currentBrightness = brightnessListenable.value; + final systemBrightness = MediaQuery.platformBrightnessOf(context); + + // No initial brightness was previously defined. + if (previousBrightness == null && newBrightness != null) { + if (currentBrightness == systemBrightness) { + // If the current brightness is different than the system brightness, the user has manually + // changed the brightness through the UI, so don't change it automatically. + brightnessListenable.value = newBrightness; + } + } + // Changing the initial brightness to either a new initial brightness or system brightness. + else if (previousBrightness != null) { + // If the current brightness is different than the initial brightness, the user has manually + // changed the brightness through the UI, so don't change it automatically. + if (currentBrightness == previousBrightness) { + brightnessListenable.value = newBrightness ?? systemBrightness; + } + } } @override @@ -196,7 +226,10 @@ class WidgetPreviewWidgetState extends State { try { final previewWidget = Container( key: key, - child: widget.preview.builder(), + child: WidgetPreviewTheming( + theme: widget.preview.theme, + child: widget.preview.builder(), + ), ); if (performRestart) { WidgetsBinding.instance.addPostFrameCallback((_) { @@ -228,7 +261,11 @@ class WidgetPreviewWidgetState extends State { ), ); - preview = MediaQuery(data: _buildMediaQueryOverride(), child: preview); + preview = WidgetPreviewMediaQueryOverride( + preview: widget.preview, + brightnessListenable: brightnessListenable, + child: preview, + ); preview = Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -258,6 +295,11 @@ class WidgetPreviewWidgetState extends State { enabled: !errorThrownDuringTreeConstruction, ), const SizedBox(width: 30), + BrightnessToggleButton( + enabled: !errorThrownDuringTreeConstruction, + brightnessListenable: brightnessListenable, + ), + const SizedBox(width: 10), SoftRestartButton( enabled: !errorThrownDuringTreeConstruction, softRestartListenable: softRestartListenable, @@ -277,22 +319,97 @@ class WidgetPreviewWidgetState extends State { ), ); } +} - MediaQueryData _buildMediaQueryOverride() { - var mediaQueryData = MediaQuery.of(context); +/// Applies theming defined in [theme] to [child]. +class WidgetPreviewTheming extends StatelessWidget { + const WidgetPreviewTheming({ + super.key, + required this.theme, + required this.child, + }); - if (widget.preview.textScaleFactor != null) { + final Widget child; + + /// The set of themes to be applied to [child]. + final PreviewThemeData? theme; + + @override + Widget build(BuildContext context) { + final themeData = theme; + if (themeData == null) { + return child; + } + final (materialTheme, cupertinoTheme) = themeData.themeForBrightness( + MediaQuery.platformBrightnessOf(context), + ); + Widget result = child; + if (materialTheme != null) { + result = Theme(data: materialTheme, child: result); + } + if (cupertinoTheme != null) { + result = CupertinoTheme(data: cupertinoTheme, child: result); + } + return result; + } +} + +/// Wraps the previewed [child] with the correct [MediaQueryData] overrides +/// based on [preview] and the current device [Brightness]. +class WidgetPreviewMediaQueryOverride extends StatelessWidget { + const WidgetPreviewMediaQueryOverride({ + super.key, + required this.preview, + required this.brightnessListenable, + required this.child, + }); + + /// The preview specification used to render the preview. + final WidgetPreview preview; + + /// The currently set brightness for this preview instance. + final ValueListenable brightnessListenable; + + final Widget child; + + @override + Widget build(BuildContext context) { + return ValueListenableBuilder( + valueListenable: brightnessListenable, + builder: (context, brightness, _) { + return MediaQuery( + data: _buildMediaQueryOverride( + context: context, + brightness: brightness, + ), + // Use mediaQueryPreview instead of preview to avoid capturing preview + // and creating an infinite loop. + child: child, + ); + }, + ); + } + + MediaQueryData _buildMediaQueryOverride({ + required BuildContext context, + required Brightness brightness, + }) { + var mediaQueryData = MediaQuery.of( + context, + ).copyWith(platformBrightness: brightness); + + if (preview.textScaleFactor != null) { mediaQueryData = mediaQueryData.copyWith( - textScaler: TextScaler.linear(widget.preview.textScaleFactor!), + textScaler: TextScaler.linear(preview.textScaleFactor!), ); } var size = Size( - widget.preview.width ?? mediaQueryData.size.width, - widget.preview.height ?? mediaQueryData.size.height, + preview.width ?? mediaQueryData.size.width, + preview.height ?? mediaQueryData.size.height, ); - if (widget.preview.width != null || widget.preview.height != null) { + if (preview.width != null || preview.height != null) { mediaQueryData = mediaQueryData.copyWith(size: size); } diff --git a/packages/flutter_tools/test/commands.shard/hermetic/widget_preview/preview_detector_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/widget_preview/preview_detector_test.dart index 842e875bf84..fc4fffb9579 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/widget_preview/preview_detector_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/widget_preview/preview_detector_test.dart @@ -110,6 +110,8 @@ void main() { height: '100', textScaleFactor: '2', wrapper: 'testWrapper', + theme: 'theming', + brightness: 'Brightness.dark', ), PreviewDetails.test( functionName: 'MyWidget.preview', @@ -185,6 +187,8 @@ void main() { height: '100', textScaleFactor: '2', wrapper: 'testWrapper', + theme: 'theming', + brightness: 'Brightness.dark', ), PreviewDetails.test( functionName: 'MyWidget.preview', @@ -256,7 +260,15 @@ PreviewMapping stripNonDeterministicFields(PreviewMapping mapping) { ) { return MapEntry>( key, - value.map((PreviewDetails details) => details.copyWith(wrapperLibraryUri: '')).toList(), + value + .map( + (PreviewDetails details) => details.copyWith( + wrapperLibraryUri: '', + themeLibraryUri: '', + brightnessLibraryUri: '', + ), + ) + .toList(), ); }); } @@ -276,7 +288,14 @@ Widget testWrapper(Widget child) { return child; } -@Preview(name: 'Attributes preview', height: 100, width: 100.0, textScaleFactor: 2, wrapper: testWrapper) +PreviewThemeData theming() => PreviewThemeData( + materialLight: ThemeData(colorScheme: ColorScheme.light(primary: Colors.red)), + materialDark: ThemeData(colorScheme: ColorScheme.dark(primary: Colors.blue)), + cupertinoLight: CupertinoThemeData(primaryColor: Colors.yellow), + cupertinoDark: CupertinoThemeData(primaryColor: Colors.purple), +); + +@Preview(name: 'Attributes preview', height: 100, width: 100.0, textScaleFactor: 2, wrapper: testWrapper, theme: theming, brightness: Brightness.dark) Widget attributesPreview() { return Text('Attributes'); } diff --git a/packages/flutter_tools/test/general.shard/widget_preview/preview_code_generator_test.dart b/packages/flutter_tools/test/general.shard/widget_preview/preview_code_generator_test.dart index 758fd6a7679..98a51a44ec6 100644 --- a/packages/flutter_tools/test/general.shard/widget_preview/preview_code_generator_test.dart +++ b/packages/flutter_tools/test/general.shard/widget_preview/preview_code_generator_test.dart @@ -47,7 +47,12 @@ void main() { ], (path: '', uri: Uri(path: 'src/bar.dart')): [ PreviewDetails(functionName: 'barPreview1', isBuilder: false), - PreviewDetails(functionName: 'barPreview2', isBuilder: false), + PreviewDetails.test( + functionName: 'barPreview2', + isBuilder: false, + brightness: 'brightnessConstant', + brightnessLibraryUri: 'brightness.dart', + ), PreviewDetails.test( functionName: 'barPreview3', isBuilder: true, @@ -57,6 +62,9 @@ void main() { textScaleFactor: '50', wrapper: 'wrapper', wrapperLibraryUri: 'wrapper.dart', + brightness: 'Brightness.dark', + theme: 'myThemeCallback', + themeLibraryUri: 'theme.dart', ), ], }, @@ -65,7 +73,8 @@ void main() { // Check that the generated file contains: // - An import of the widget preview library - // - Prefixed imports for both 'foo.dart' and 'src/bar.dart' + // - Prefixed imports for 'foo.dart', 'src/bar.dart', 'wrapper.dart', + // 'brightness.dart', and 'theme.dart' // - A top-level function 'List previews()' // - A returned list containing function calls to 'preview()' from 'foo.dart' and // 'barPreview1()', 'barPreview2()', and 'barPreview3()' from 'src/bar.dart' @@ -73,7 +82,7 @@ void main() { // The generated file is unfortunately unformatted. const String expectedGeneratedPreviewFileContents = ''' // ignore_for_file: no_leading_underscores_for_library_prefixes -import 'widget_preview.dart' as _i1;import 'foo.dart' as _i2;import 'src/bar.dart' as _i3;import 'wrapper.dart' as _i4;import 'package:flutter/widgets.dart' as _i5;List<_i1.WidgetPreview> previews() => [_i1.WidgetPreview(builder: () => _i2.preview()), _i1.WidgetPreview(builder: () => _i3.barPreview1()), _i1.WidgetPreview(builder: () => _i3.barPreview2()), _i1.WidgetPreview(name: Foo, height: 456.0, width: 123.0, textScaleFactor: 50.0, builder: () => _i4.wrapper(_i5.Builder(builder: _i3.barPreview3())), ), ];'''; +import 'widget_preview.dart' as _i1;import 'foo.dart' as _i2;import 'src/bar.dart' as _i3;import 'brightness.dart' as _i4;import 'theme.dart' as _i5;import '' as _i6;import 'wrapper.dart' as _i7;import 'package:flutter/widgets.dart' as _i8;List<_i1.WidgetPreview> previews() => [_i1.WidgetPreview(builder: () => _i2.preview()), _i1.WidgetPreview(builder: () => _i3.barPreview1()), _i1.WidgetPreview(brightness: _i4.brightnessConstant, builder: () => _i3.barPreview2(), ), _i1.WidgetPreview(name: Foo, height: 456.0, width: 123.0, textScaleFactor: 50.0, theme: _i5.myThemeCallback(), brightness: _i6.Brightness.dark, builder: () => _i7.wrapper(_i8.Builder(builder: _i3.barPreview3())), ), ];'''; expect(generatedPreviewFile.readAsStringSync(), expectedGeneratedPreviewFileContents); // Regenerate the generated file with no previews. diff --git a/packages/flutter_tools/test/widget_preview_scaffold.shard/widget_preview_scaffold/lib/src/controls.dart b/packages/flutter_tools/test/widget_preview_scaffold.shard/widget_preview_scaffold/lib/src/controls.dart index 6158994763d..641c2fbdf96 100644 --- a/packages/flutter_tools/test/widget_preview_scaffold.shard/widget_preview_scaffold/lib/src/controls.dart +++ b/packages/flutter_tools/test/widget_preview_scaffold.shard/widget_preview_scaffold/lib/src/controls.dart @@ -124,3 +124,39 @@ class SoftRestartButton extends StatelessWidget { softRestartListenable.value = true; } } + +extension on Brightness { + Brightness get invert => isLight ? Brightness.dark : Brightness.light; + bool get isLight => this == Brightness.light; +} + +/// A button that toggles the current theme brightness. +class BrightnessToggleButton extends StatelessWidget { + const BrightnessToggleButton({ + super.key, + required this.enabled, + required this.brightnessListenable, + }); + + final ValueNotifier brightnessListenable; + final bool enabled; + + @override + Widget build(BuildContext context) { + return ValueListenableBuilder( + valueListenable: brightnessListenable, + builder: (context, brightness, _) { + final brightness = brightnessListenable.value; + return _WidgetPreviewIconButton( + tooltip: 'Switch to ${brightness.isLight ? 'dark' : 'light'} mode', + onPressed: enabled ? _toggleBrightness : null, + icon: brightness.isLight ? Icons.dark_mode : Icons.light_mode, + ); + }, + ); + } + + void _toggleBrightness() { + brightnessListenable.value = brightnessListenable.value.invert; + } +} diff --git a/packages/flutter_tools/test/widget_preview_scaffold.shard/widget_preview_scaffold/lib/src/widget_preview.dart b/packages/flutter_tools/test/widget_preview_scaffold.shard/widget_preview_scaffold/lib/src/widget_preview.dart index e9ca0333c66..e13f6204f96 100644 --- a/packages/flutter_tools/test/widget_preview_scaffold.shard/widget_preview_scaffold/lib/src/widget_preview.dart +++ b/packages/flutter_tools/test/widget_preview_scaffold.shard/widget_preview_scaffold/lib/src/widget_preview.dart @@ -2,6 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'dart:ui'; + +import 'package:flutter/widget_previews.dart'; import 'package:flutter/widgets.dart'; /// Wraps a [Widget], initializing various state and properties to allow for @@ -23,6 +26,8 @@ class WidgetPreview { this.width, this.height, this.textScaleFactor, + this.brightness, + this.theme, }); /// A description to be displayed alongside the preview. @@ -50,4 +55,14 @@ class WidgetPreview { /// If not provided, the default text scaling factor provided by [MediaQuery] /// will be used. final double? textScaleFactor; + + /// Material and Cupertino theming data to be applied to the previewed [Widget]. + /// + /// If not provided, the default theme will be used. + final PreviewThemeData? theme; + + /// Sets the initial theme brightness. + /// + /// If not provided, the current system default brightness will be used. + final Brightness? brightness; } diff --git a/packages/flutter_tools/test/widget_preview_scaffold.shard/widget_preview_scaffold/lib/src/widget_preview_rendering.dart b/packages/flutter_tools/test/widget_preview_scaffold.shard/widget_preview_scaffold/lib/src/widget_preview_rendering.dart index c6e8bddf09d..70fa0d383f9 100644 --- a/packages/flutter_tools/test/widget_preview_scaffold.shard/widget_preview_scaffold/lib/src/widget_preview_rendering.dart +++ b/packages/flutter_tools/test/widget_preview_scaffold.shard/widget_preview_scaffold/lib/src/widget_preview_rendering.dart @@ -4,11 +4,13 @@ import 'dart:math' as math; -import 'package:flutter/foundation.dart' show kIsWeb; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/foundation.dart' show kIsWeb, ValueListenable; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:flutter/services.dart'; +import 'package:flutter/widget_previews.dart'; import 'package:stack_trace/stack_trace.dart'; import 'package:url_launcher/url_launcher.dart'; @@ -114,7 +116,7 @@ class NoPreviewsDetectedWidget extends StatelessWidget { static Uri documentationUrl = Uri.https( 'github.com', 'flutter/flutter/blob/master/packages/flutter/' - 'lib/src/widgets/widget_preview.dart', + 'lib/src/widget_previews/widget_previews.dart', ); @override @@ -159,7 +161,13 @@ class WidgetPreviewWidget extends StatefulWidget { class WidgetPreviewWidgetState extends State { final transformationController = TransformationController(); - final deviceOrientation = ValueNotifier(Orientation.portrait); + + // Set the initial preview brightness based on the platform default or the + // value explicitly specified for the preview. + late final brightnessListenable = ValueNotifier( + widget.preview.brightness ?? MediaQuery.platformBrightnessOf(context), + ); + final softRestartListenable = ValueNotifier(false); final key = GlobalKey(); @@ -168,8 +176,30 @@ class WidgetPreviewWidgetState extends State { (key.currentContext!.findRenderObject() as RenderBox).size; @override - void initState() { - super.initState(); + void didUpdateWidget(WidgetPreviewWidget oldWidget) { + super.didUpdateWidget(oldWidget); + + final previousBrightness = oldWidget.preview.brightness; + final newBrightness = widget.preview.brightness; + final currentBrightness = brightnessListenable.value; + final systemBrightness = MediaQuery.platformBrightnessOf(context); + + // No initial brightness was previously defined. + if (previousBrightness == null && newBrightness != null) { + if (currentBrightness == systemBrightness) { + // If the current brightness is different than the system brightness, the user has manually + // changed the brightness through the UI, so don't change it automatically. + brightnessListenable.value = newBrightness; + } + } + // Changing the initial brightness to either a new initial brightness or system brightness. + else if (previousBrightness != null) { + // If the current brightness is different than the initial brightness, the user has manually + // changed the brightness through the UI, so don't change it automatically. + if (currentBrightness == previousBrightness) { + brightnessListenable.value = newBrightness ?? systemBrightness; + } + } } @override @@ -196,7 +226,10 @@ class WidgetPreviewWidgetState extends State { try { final previewWidget = Container( key: key, - child: widget.preview.builder(), + child: WidgetPreviewTheming( + theme: widget.preview.theme, + child: widget.preview.builder(), + ), ); if (performRestart) { WidgetsBinding.instance.addPostFrameCallback((_) { @@ -228,7 +261,11 @@ class WidgetPreviewWidgetState extends State { ), ); - preview = MediaQuery(data: _buildMediaQueryOverride(), child: preview); + preview = WidgetPreviewMediaQueryOverride( + preview: widget.preview, + brightnessListenable: brightnessListenable, + child: preview, + ); preview = Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -258,6 +295,11 @@ class WidgetPreviewWidgetState extends State { enabled: !errorThrownDuringTreeConstruction, ), const SizedBox(width: 30), + BrightnessToggleButton( + enabled: !errorThrownDuringTreeConstruction, + brightnessListenable: brightnessListenable, + ), + const SizedBox(width: 10), SoftRestartButton( enabled: !errorThrownDuringTreeConstruction, softRestartListenable: softRestartListenable, @@ -277,22 +319,97 @@ class WidgetPreviewWidgetState extends State { ), ); } +} - MediaQueryData _buildMediaQueryOverride() { - var mediaQueryData = MediaQuery.of(context); +/// Applies theming defined in [theme] to [child]. +class WidgetPreviewTheming extends StatelessWidget { + const WidgetPreviewTheming({ + super.key, + required this.theme, + required this.child, + }); - if (widget.preview.textScaleFactor != null) { + final Widget child; + + /// The set of themes to be applied to [child]. + final PreviewThemeData? theme; + + @override + Widget build(BuildContext context) { + final themeData = theme; + if (themeData == null) { + return child; + } + final (materialTheme, cupertinoTheme) = themeData.themeForBrightness( + MediaQuery.platformBrightnessOf(context), + ); + Widget result = child; + if (materialTheme != null) { + result = Theme(data: materialTheme, child: result); + } + if (cupertinoTheme != null) { + result = CupertinoTheme(data: cupertinoTheme, child: result); + } + return result; + } +} + +/// Wraps the previewed [child] with the correct [MediaQueryData] overrides +/// based on [preview] and the current device [Brightness]. +class WidgetPreviewMediaQueryOverride extends StatelessWidget { + const WidgetPreviewMediaQueryOverride({ + super.key, + required this.preview, + required this.brightnessListenable, + required this.child, + }); + + /// The preview specification used to render the preview. + final WidgetPreview preview; + + /// The currently set brightness for this preview instance. + final ValueListenable brightnessListenable; + + final Widget child; + + @override + Widget build(BuildContext context) { + return ValueListenableBuilder( + valueListenable: brightnessListenable, + builder: (context, brightness, _) { + return MediaQuery( + data: _buildMediaQueryOverride( + context: context, + brightness: brightness, + ), + // Use mediaQueryPreview instead of preview to avoid capturing preview + // and creating an infinite loop. + child: child, + ); + }, + ); + } + + MediaQueryData _buildMediaQueryOverride({ + required BuildContext context, + required Brightness brightness, + }) { + var mediaQueryData = MediaQuery.of( + context, + ).copyWith(platformBrightness: brightness); + + if (preview.textScaleFactor != null) { mediaQueryData = mediaQueryData.copyWith( - textScaler: TextScaler.linear(widget.preview.textScaleFactor!), + textScaler: TextScaler.linear(preview.textScaleFactor!), ); } var size = Size( - widget.preview.width ?? mediaQueryData.size.width, - widget.preview.height ?? mediaQueryData.size.height, + preview.width ?? mediaQueryData.size.width, + preview.height ?? mediaQueryData.size.height, ); - if (widget.preview.width != null || widget.preview.height != null) { + if (preview.width != null || preview.height != null) { mediaQueryData = mediaQueryData.copyWith(size: size); } diff --git a/packages/flutter_tools/test/widget_preview_scaffold.shard/widget_preview_scaffold/test/theming_test.dart b/packages/flutter_tools/test/widget_preview_scaffold.shard/widget_preview_scaffold/test/theming_test.dart new file mode 100644 index 00000000000..71b180bd139 --- /dev/null +++ b/packages/flutter_tools/test/widget_preview_scaffold.shard/widget_preview_scaffold/test/theming_test.dart @@ -0,0 +1,263 @@ +// Copyright 2014 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/widget_previews.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:widget_preview_scaffold/src/controls.dart'; +import 'package:widget_preview_scaffold/src/widget_preview.dart'; +import 'package:widget_preview_scaffold/src/widget_preview_rendering.dart'; + +import 'widget_preview_scaffold_test_utils.dart'; + +// Applies localization theming allowing for direct comparison of `themeData` against the theme +// data retreived from the tree. +ThemeData localizeThemeData(ThemeData themeData) { + return ThemeData.localize( + themeData, + themeData.typography.geometryThemeFor(ScriptCategory.englishLike), + ); +} + +// Resolves `themeData` so it can be directly compared against the theme data retreived from the +// tree. +CupertinoThemeData resolveCupertinoThemeData( + BuildContext context, + CupertinoThemeData themeData, +) { + return themeData.resolveFrom(context); +} + +void expectTheme({ + required BuildContext context, + required ThemeData materialTheme, + required CupertinoThemeData cupertinoTheme, +}) { + ThemeData actualMaterialTheme = Theme.of(context); + CupertinoThemeData actualCupertinoTheme = CupertinoTheme.of(context); + expect(actualMaterialTheme, localizeThemeData(materialTheme)); + expect( + actualCupertinoTheme, + resolveCupertinoThemeData(context, cupertinoTheme), + ); +} + +WidgetPreviewerWidgetScaffolding previewForBrightness({ + required Key key, + Brightness? brightness, + Brightness? platformBrightness, + PreviewThemeData? previewThemeData, +}) { + return WidgetPreviewerWidgetScaffolding( + platformBrightness: platformBrightness ?? Brightness.light, + child: WidgetPreviewWidget( + preview: WidgetPreview( + builder: () => Text('Foo', key: key), + theme: previewThemeData, + brightness: brightness, + ), + ), + ); +} + +final PreviewThemeData previewThemeData = PreviewThemeData( + materialLight: ThemeData.light().copyWith(primaryColor: Colors.red), + materialDark: ThemeData.dark().copyWith(primaryColor: Colors.blue), + cupertinoLight: CupertinoThemeData( + brightness: Brightness.light, + primaryColor: Colors.yellow, + ), + cupertinoDark: CupertinoThemeData( + brightness: Brightness.dark, + primaryColor: Colors.green, + ), +); + +void main() { + testWidgets('Theming is correctly propagated down to the previewed widget', ( + tester, + ) async { + final key = GlobalKey(); + + // Check that both Material and Cupertino light themes are available to the previewed widget. + WidgetPreviewerWidgetScaffolding widgetPreview = previewForBrightness( + key: key, + brightness: Brightness.light, + previewThemeData: previewThemeData, + ); + await tester.pumpWidget(widgetPreview); + + expectTheme( + context: key.currentContext!, + materialTheme: previewThemeData.materialLight!, + cupertinoTheme: previewThemeData.cupertinoLight!, + ); + + // Check that both Material and Cupertino dark themes are available to the previewed widget. + widgetPreview = previewForBrightness( + key: key, + brightness: Brightness.dark, + previewThemeData: previewThemeData, + ); + await tester.pumpWidget(widgetPreview); + + expectTheme( + context: key.currentContext!, + materialTheme: previewThemeData.materialDark!, + cupertinoTheme: previewThemeData.cupertinoDark!, + ); + }); + + testWidgets('Default theme is used if no preview theme is specified', ( + tester, + ) async { + final key = GlobalKey(); + // Check that both Material and Cupertino light themes are available to the previewed widget. + WidgetPreviewerWidgetScaffolding widgetPreview = previewForBrightness( + key: key, + brightness: Brightness.light, + ); + await tester.pumpWidget(widgetPreview); + + expectTheme( + context: key.currentContext!, + materialTheme: ThemeData(), + cupertinoTheme: CupertinoThemeData(), + ); + + // Check that both Material and Cupertino dark themes are available to the previewed widget. + widgetPreview = previewForBrightness(key: key, brightness: Brightness.dark); + await tester.pumpWidget(widgetPreview); + + expectTheme( + context: key.currentContext!, + materialTheme: ThemeData(), + cupertinoTheme: CupertinoThemeData(), + ); + }); + + testWidgets('$BrightnessToggleButton correctly toggles preview brightness', ( + tester, + ) async { + final key = GlobalKey(); + + // Check that both Material and Cupertino light themes are available to the previewed widget. + WidgetPreviewerWidgetScaffolding widgetPreview = previewForBrightness( + key: key, + brightness: Brightness.light, + previewThemeData: previewThemeData, + ); + await tester.pumpWidget(widgetPreview); + + final Finder brightnessToggle = find.byType(BrightnessToggleButton); + expect(brightnessToggle, findsOne); + expect(find.byTooltip('Switch to dark mode'), findsOne); + final WidgetPreviewWidgetState state = tester + .state(find.byWidget(widgetPreview.child)); + expect(state.brightnessListenable.value, Brightness.light); + + expectTheme( + context: key.currentContext!, + materialTheme: previewThemeData.materialLight!, + cupertinoTheme: previewThemeData.cupertinoLight!, + ); + + // Toggle to dark mode. + await tester.tap(brightnessToggle); + await tester.pumpAndSettle(); + + expect(brightnessToggle, findsOne); + expect(find.byTooltip('Switch to light mode'), findsOne); + expect(state.brightnessListenable.value, Brightness.dark); + + // Check that both Material and Cupertino dark themes are available to the previewed widget. + expectTheme( + context: key.currentContext!, + materialTheme: previewThemeData.materialDark!, + cupertinoTheme: previewThemeData.cupertinoDark!, + ); + }); + + testWidgets( + "Updated brightness property doesn't override state set by $BrightnessToggleButton", + (tester) async { + final key = GlobalKey(); + + // Start with no explicit brightness set. This should use the system brightness (light). + WidgetPreviewerWidgetScaffolding widgetPreview = previewForBrightness( + key: key, + previewThemeData: previewThemeData, + ); + await tester.pumpWidget(widgetPreview); + + final Finder brightnessToggle = find.byType(BrightnessToggleButton); + final WidgetPreviewWidgetState state = tester + .state(find.byWidget(widgetPreview.child)); + + void expectLightMode() { + expect(brightnessToggle, findsOne); + expect(find.byTooltip('Switch to dark mode'), findsOne); + + expect(state.brightnessListenable.value, Brightness.light); + + expectTheme( + context: key.currentContext!, + materialTheme: previewThemeData.materialLight!, + cupertinoTheme: previewThemeData.cupertinoLight!, + ); + } + + void expectDarkMode() { + expect(brightnessToggle, findsOne); + expect(find.byTooltip('Switch to light mode'), findsOne); + + expect(state.brightnessListenable.value, Brightness.dark); + + expectTheme( + context: key.currentContext!, + materialTheme: previewThemeData.materialDark!, + cupertinoTheme: previewThemeData.cupertinoDark!, + ); + } + + // We start in light mode. + expectLightMode(); + + // Switch to dark mode in the preview. + await tester.tap(brightnessToggle); + await tester.pumpAndSettle(); + expectDarkMode(); + + // Set an initial brightness for the preview to 'light'. + widgetPreview = previewForBrightness( + key: key, + previewThemeData: previewThemeData, + brightness: Brightness.light, + ); + await tester.pumpWidget(widgetPreview); + + // Confirm that the initial brightness is set to light but that the preview is still using + // dark mode since the theme was changed manually via the UI. + expect(state.widget.preview.brightness, Brightness.light); + expectDarkMode(); + + // Manually switch back to light mode. + await tester.tap(brightnessToggle); + await tester.pumpAndSettle(); + expectLightMode(); + + // The preview brightness is now light, matching the current platform brightness. + // Change the platform brightness to `dark` and remove the initial brightness, which should + // cause the preview to use the dark theme. + widgetPreview = previewForBrightness( + key: key, + previewThemeData: previewThemeData, + brightness: Brightness.dark, + ); + await tester.pumpWidget(widgetPreview); + expectDarkMode(); + }, + ); +} diff --git a/packages/flutter_tools/test/widget_preview_scaffold.shard/widget_preview_scaffold/test/widget_preview_scaffold_test_utils.dart b/packages/flutter_tools/test/widget_preview_scaffold.shard/widget_preview_scaffold/test/widget_preview_scaffold_test_utils.dart index ee9ff5557d0..a4edba264e1 100644 --- a/packages/flutter_tools/test/widget_preview_scaffold.shard/widget_preview_scaffold/test/widget_preview_scaffold_test_utils.dart +++ b/packages/flutter_tools/test/widget_preview_scaffold.shard/widget_preview_scaffold/test/widget_preview_scaffold_test_utils.dart @@ -6,33 +6,45 @@ import 'package:flutter/material.dart'; import 'package:widget_preview_scaffold/src/widget_preview_rendering.dart'; class WidgetPreviewerWidgetScaffolding extends StatelessWidget { - const WidgetPreviewerWidgetScaffolding({super.key, required this.child}); + const WidgetPreviewerWidgetScaffolding({ + super.key, + this.platformBrightness = Brightness.light, + required this.child, + }); + + /// Sets the root platform brightness. Defaults to light. + final Brightness platformBrightness; final Widget child; @override Widget build(BuildContext context) { - return WidgetsApp( - color: Colors.blue, - home: LayoutBuilder( - builder: (BuildContext context, BoxConstraints constraints) { - return WidgetPreviewerWindowConstraints( - constraints: constraints, - child: child, - ); - }, + return MediaQuery( + data: MediaQuery.of( + context, + ).copyWith(platformBrightness: platformBrightness), + child: WidgetsApp( + color: Colors.blue, + home: LayoutBuilder( + builder: (BuildContext context, BoxConstraints constraints) { + return WidgetPreviewerWindowConstraints( + constraints: constraints, + child: child, + ); + }, + ), + pageRouteBuilder: + (RouteSettings settings, WidgetBuilder builder) => + PageRouteBuilder( + settings: settings, + pageBuilder: + ( + BuildContext context, + Animation animation, + Animation secondaryAnimation, + ) => builder(context), + ), ), - pageRouteBuilder: - (RouteSettings settings, WidgetBuilder builder) => - PageRouteBuilder( - settings: settings, - pageBuilder: - ( - BuildContext context, - Animation animation, - Animation secondaryAnimation, - ) => builder(context), - ), ); } } diff --git a/packages/fuchsia_remote_debug_protocol/pubspec.yaml b/packages/fuchsia_remote_debug_protocol/pubspec.yaml index 2ddfd57b42f..019d8e36cb0 100644 --- a/packages/fuchsia_remote_debug_protocol/pubspec.yaml +++ b/packages/fuchsia_remote_debug_protocol/pubspec.yaml @@ -23,9 +23,10 @@ dev_dependencies: args: 2.7.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.13.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + cli_config: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" collection: 1.19.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + coverage: 1.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" crypto: 3.0.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" frontend_server_client: 4.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" glob: 2.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -65,4 +66,4 @@ dartdoc: # Exclude this package from the hosted API docs. nodoc: true -# PUBSPEC CHECKSUM: 76f8 +# PUBSPEC CHECKSUM: ae53 diff --git a/packages/integration_test/example/pubspec.yaml b/packages/integration_test/example/pubspec.yaml index ad17783d934..f2b1b8f6462 100644 --- a/packages/integration_test/example/pubspec.yaml +++ b/packages/integration_test/example/pubspec.yaml @@ -39,9 +39,10 @@ dev_dependencies: args: 2.7.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.13.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + cli_config: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" clock: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + coverage: 1.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" crypto: 3.0.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" fake_async: 1.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" file: 7.0.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -88,4 +89,4 @@ dev_dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: 725f +# PUBSPEC CHECKSUM: 30b9