[ 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
This commit is contained in:
Ben Konyi 2025-04-15 13:51:40 -04:00 committed by GitHub
parent 427f8c8e15
commit 3595e7dad0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
56 changed files with 960 additions and 145 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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);
}
}

View File

@ -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';

View File

@ -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';

View File

@ -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

View File

@ -97,6 +97,7 @@ class PreviewCodeGenerator {
'package:flutter/widgets.dart',
).newInstance(<Expression>[], <String, Expression>{'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(<Expression>[]),
if (preview.brightness != null)
PreviewDetails.kBrightness: refer(
preview.brightness!,
preview.brightnessLibraryUri ?? 'package:flutter/foundation.dart',
),
'builder': previewWidget,
}),
);

View File

@ -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,
]);
}

View File

@ -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

View File

@ -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<Brightness> brightnessListenable;
final bool enabled;
@override
Widget build(BuildContext context) {
return ValueListenableBuilder<Brightness>(
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;
}
}

View File

@ -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;
}

View File

@ -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<WidgetPreviewWidget> {
final transformationController = TransformationController();
final deviceOrientation = ValueNotifier<Orientation>(Orientation.portrait);
// Set the initial preview brightness based on the platform default or the
// value explicitly specified for the preview.
late final brightnessListenable = ValueNotifier<Brightness>(
widget.preview.brightness ?? MediaQuery.platformBrightnessOf(context),
);
final softRestartListenable = ValueNotifier<bool>(false);
final key = GlobalKey();
@ -168,8 +176,30 @@ class WidgetPreviewWidgetState extends State<WidgetPreviewWidget> {
(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<WidgetPreviewWidget> {
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<WidgetPreviewWidget> {
),
);
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<WidgetPreviewWidget> {
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<WidgetPreviewWidget> {
),
);
}
}
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<Brightness> brightnessListenable;
final Widget child;
@override
Widget build(BuildContext context) {
return ValueListenableBuilder<Brightness>(
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);
}

View File

@ -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<PreviewPath, List<PreviewDetails>>(
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');
}

View File

@ -47,7 +47,12 @@ void main() {
],
(path: '', uri: Uri(path: 'src/bar.dart')): <PreviewDetails>[
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<WidgetPreview> 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.

View File

@ -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<Brightness> brightnessListenable;
final bool enabled;
@override
Widget build(BuildContext context) {
return ValueListenableBuilder<Brightness>(
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;
}
}

View File

@ -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;
}

View File

@ -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<WidgetPreviewWidget> {
final transformationController = TransformationController();
final deviceOrientation = ValueNotifier<Orientation>(Orientation.portrait);
// Set the initial preview brightness based on the platform default or the
// value explicitly specified for the preview.
late final brightnessListenable = ValueNotifier<Brightness>(
widget.preview.brightness ?? MediaQuery.platformBrightnessOf(context),
);
final softRestartListenable = ValueNotifier<bool>(false);
final key = GlobalKey();
@ -168,8 +176,30 @@ class WidgetPreviewWidgetState extends State<WidgetPreviewWidget> {
(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<WidgetPreviewWidget> {
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<WidgetPreviewWidget> {
),
);
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<WidgetPreviewWidget> {
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<WidgetPreviewWidget> {
),
);
}
}
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<Brightness> brightnessListenable;
final Widget child;
@override
Widget build(BuildContext context) {
return ValueListenableBuilder<Brightness>(
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);
}

View File

@ -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<WidgetPreviewWidgetState>(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<WidgetPreviewWidgetState>(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();
},
);
}

View File

@ -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:
<T>(RouteSettings settings, WidgetBuilder builder) =>
PageRouteBuilder<T>(
settings: settings,
pageBuilder:
(
BuildContext context,
Animation<double> animation,
Animation<double> secondaryAnimation,
) => builder(context),
),
),
pageRouteBuilder:
<T>(RouteSettings settings, WidgetBuilder builder) =>
PageRouteBuilder<T>(
settings: settings,
pageBuilder:
(
BuildContext context,
Animation<double> animation,
Animation<double> secondaryAnimation,
) => builder(context),
),
);
}
}

View File

@ -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

View File

@ -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