diff --git a/.ci.yaml b/.ci.yaml
index 64a4de522fd43..48874999b2155 100644
--- a/.ci.yaml
+++ b/.ci.yaml
@@ -50,7 +50,8 @@ platform_properties:
]
os: Linux
device_type: "msm8952"
- linux_samsung_s10:
+
+ linux_pixel_7pro:
properties:
dependencies: >-
[
@@ -59,7 +60,8 @@ platform_properties:
{"dependency": "curl", "version": "version:7.64.0"}
]
os: Linux
- device_type: "SM-G973U1"
+ device_type: "Pixel 7 Pro"
+
linux_samsung_a02:
properties:
dependencies: >-
@@ -70,11 +72,12 @@ platform_properties:
]
os: Linux
device_type: "SM-A025V"
+
mac:
properties:
dependencies: >-
[
- {"dependency": "apple_signing", "version": "version:2022_to_2023"}
+ {"dependency": "apple_signing", "version": "version:to_2024"}
]
os: Mac-12
device_type: none
@@ -86,7 +89,7 @@ platform_properties:
properties:
dependencies: >-
[
- {"dependency": "apple_signing", "version": "version:2022_to_2023"}
+ {"dependency": "apple_signing", "version": "version:to_2024"}
]
os: Mac-12
device_type: none
@@ -99,7 +102,7 @@ platform_properties:
properties:
dependencies: >-
[
- {"dependency": "apple_signing", "version": "version:2022_to_2023"}
+ {"dependency": "apple_signing", "version": "version:to_2024"}
]
device_type: none
mac_model: "Macmini8,1"
@@ -114,7 +117,7 @@ platform_properties:
properties:
dependencies: >-
[
- {"dependency": "apple_signing", "version": "version:2022_to_2023"}
+ {"dependency": "apple_signing", "version": "version:to_2024"}
]
os: Mac-12
device_type: none
@@ -128,7 +131,7 @@ platform_properties:
dependencies: >-
[
{"dependency": "gems", "version": "v3.3.14"},
- {"dependency": "apple_signing", "version": "version:2022_to_2023"}
+ {"dependency": "apple_signing", "version": "version:to_2024"}
]
os: Mac-12
device_type: none
@@ -142,7 +145,7 @@ platform_properties:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:11"}
]
os: Mac-12
@@ -163,7 +166,7 @@ platform_properties:
dependencies: >-
[
{"dependency": "gems", "version": "v3.3.14"},
- {"dependency": "apple_signing", "version": "version:2022_to_2023"}
+ {"dependency": "apple_signing", "version": "version:to_2024"}
]
os: Mac-12
cpu: x86
@@ -194,13 +197,23 @@ platform_properties:
]
os: Windows-10
device_type: none
+ windows_arm64:
+ properties:
+ # The arch can be removed after https://github.com/flutter/flutter/issues/135722.
+ arch: arm
+ dependencies: >-
+ [
+ {"dependency": "certs", "version": "version:9563bb"}
+ ]
+ os: Windows
+ cpu: arm64
windows_android:
properties:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
{"dependency": "certs", "version": "version:9563bb"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:11"}
]
os: Windows-10
@@ -234,17 +247,18 @@ targets:
task_name: analyzer_benchmark
- name: Linux coverage
- bringup: true
+ presubmit: false
recipe: flutter/coverage
timeout: 120
+ enabled_branches:
+ # Don't run this on release branches
+ - master
properties:
tags: >
["framework", "hostonly", "shard", "linux"]
- name: Linux packages_autoroller
presubmit: false
- # TODO(fujino): https://github.com/flutter/flutter/issues/129744
- bringup: true
recipe: pub_autoroller/pub_autoroller
timeout: 30
enabled_branches:
@@ -264,7 +278,7 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "android_virtual_device", "version": "33"},
+ {"dependency": "android_virtual_device", "version": "34"},
{"dependency": "open_jdk", "version": "version:11"}
]
tags: >
@@ -278,7 +292,7 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:17"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"},
{"dependency": "clang", "version": "git_revision:5d5aba78dbbee75508f01bcaa69aedb2ab79065a"},
@@ -297,7 +311,7 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:17"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"},
{"dependency": "clang", "version": "git_revision:5d5aba78dbbee75508f01bcaa69aedb2ab79065a"},
@@ -316,7 +330,7 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:17"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"},
{"dependency": "clang", "version": "git_revision:5d5aba78dbbee75508f01bcaa69aedb2ab79065a"},
@@ -334,6 +348,7 @@ targets:
properties:
tags: >
["framework", "hostonly", "shard", "linux"]
+ backfill: "false"
runIf:
- .ci.yaml
@@ -363,6 +378,7 @@ targets:
]
tags: >
["framework", "hostonly", "linux"]
+ backfill: "false"
validation: docs
validation_name: Docs
firebase_project: master-docs-flutter-dev
@@ -402,7 +418,7 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:11"}
]
tags: >
@@ -413,26 +429,9 @@ targets:
- bin/**
- .ci.yaml
- - name: Linux firebase_oriol33_abstract_method_smoke_test
- bringup: true
- recipe: firebaselab/firebaselab
- timeout: 60
- properties:
- dependencies: >-
- [
- {"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "open_jdk", "version": "version:11"}
- ]
- tags: >
- ["firebaselab"]
- task_name: abstract_method_smoke_test
- physical_devices: >-
- ["--device", "model=oriole,version=33"]
- virtual_devices: >-
- []
-
- name: Linux firebase_abstract_method_smoke_test
- bringup: true # Flaky https://github.com/flutter/flutter/issues/124691
+ bringup: false
+ presubmit: false
recipe: firebaselab/firebaselab
timeout: 60
properties:
@@ -446,8 +445,8 @@ targets:
task_name: abstract_method_smoke_test
physical_devices: >-
[
- "--device", "model=redfin,version=30",
- "--device", "model=griffin,version=24"
+ "--device", "model=panther,version=33",
+ "--device", "model=redfin,version=30"
]
# TODO(flutter/flutter#123331): This device is flaking.
# "--device", "model=Nexus6P,version=25",
@@ -456,6 +455,7 @@ targets:
"--device", "model=Nexus5,version=21",
"--device", "model=Nexus5,version=22",
"--device", "model=Nexus5,version=23",
+ "--device", "model=Nexus5,version=24",
"--device", "model=Nexus6P,version=26",
"--device", "model=Nexus6P,version=27",
"--device", "model=NexusLowRes,version=29"
@@ -573,7 +573,8 @@ targets:
properties:
dependencies: >-
[
- {"dependency": "android_sdk", "version": "version:33v6"}
+ {"dependency": "android_sdk", "version": "version:33v6"},
+ {"dependency": "open_jdk", "version": "version:17"}
]
shard: framework_tests
subshard: slow
@@ -602,7 +603,7 @@ targets:
{"dependency": "clang", "version": "git_revision:5d5aba78dbbee75508f01bcaa69aedb2ab79065a"},
{"dependency": "cmake", "version": "build_id:8787856497187628321"},
{"dependency": "ninja", "version": "version:1.9.0"},
- {"dependency": "open_jdk", "version": "version:11"},
+ {"dependency": "open_jdk", "version": "version:17"},
{"dependency": "android_sdk", "version": "version:33v6"}
]
shard: framework_tests
@@ -664,7 +665,7 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:11"}
]
tags: >
@@ -682,7 +683,7 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:11"}
]
tags: >
@@ -700,7 +701,7 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:11"}
]
tags: >
@@ -718,7 +719,7 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:11"}
]
tags: >
@@ -736,7 +737,7 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:11"}
]
tags: >
@@ -754,7 +755,7 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:11"}
]
tags: >
@@ -773,7 +774,7 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"}
+ {"dependency": "chrome_and_driver", "version": "version:117.0"}
]
tags: >
["devicelab", "hostonly", "linux"]
@@ -791,7 +792,7 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:11"}
]
tags: >
@@ -810,7 +811,7 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:11"}
]
tags: >
@@ -829,7 +830,7 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:11"}
]
tags: >
@@ -927,7 +928,7 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"}
+ {"dependency": "chrome_and_driver", "version": "version:117.0"}
]
tags: >
["devicelab", "hostonly", "linux"]
@@ -953,10 +954,12 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "clang", "version": "git_revision:5d5aba78dbbee75508f01bcaa69aedb2ab79065a"},
- {"dependency": "open_jdk", "version": "version:11"},
- {"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"}
+ {"dependency": "cmake", "version": "build_id:8787856497187628321"},
+ {"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"},
+ {"dependency": "ninja", "version": "version:1.9.0"},
+ {"dependency": "open_jdk", "version": "version:11"}
]
shard: tool_integration_tests
subshard: "1_4"
@@ -977,10 +980,12 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "clang", "version": "git_revision:5d5aba78dbbee75508f01bcaa69aedb2ab79065a"},
- {"dependency": "open_jdk", "version": "version:11"},
- {"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"}
+ {"dependency": "cmake", "version": "build_id:8787856497187628321"},
+ {"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"},
+ {"dependency": "ninja", "version": "version:1.9.0"},
+ {"dependency": "open_jdk", "version": "version:11"}
]
shard: tool_integration_tests
subshard: "2_4"
@@ -1001,10 +1006,12 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "clang", "version": "git_revision:5d5aba78dbbee75508f01bcaa69aedb2ab79065a"},
- {"dependency": "open_jdk", "version": "version:11"},
- {"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"}
+ {"dependency": "cmake", "version": "build_id:8787856497187628321"},
+ {"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"},
+ {"dependency": "ninja", "version": "version:1.9.0"},
+ {"dependency": "open_jdk", "version": "version:11"}
]
shard: tool_integration_tests
subshard: "3_4"
@@ -1025,10 +1032,12 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "clang", "version": "git_revision:5d5aba78dbbee75508f01bcaa69aedb2ab79065a"},
- {"dependency": "open_jdk", "version": "version:11"},
- {"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"}
+ {"dependency": "cmake", "version": "build_id:8787856497187628321"},
+ {"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"},
+ {"dependency": "ninja", "version": "version:1.9.0"},
+ {"dependency": "open_jdk", "version": "version:11"}
]
shard: tool_integration_tests
subshard: "4_4"
@@ -1089,7 +1098,7 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"}
+ {"dependency": "chrome_and_driver", "version": "version:117.0"}
]
tags: >
["devicelab","hostonly", "linux"]
@@ -1097,13 +1106,12 @@ targets:
- name: Linux web_benchmarks_html
recipe: devicelab/devicelab_drone
- presubmit: false
timeout: 60
properties:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"}
+ {"dependency": "chrome_and_driver", "version": "version:117.0"}
]
tags: >
["devicelab"]
@@ -1114,7 +1122,6 @@ targets:
- .ci.yaml
- name: Linux web_benchmarks_skwasm
- bringup: true
recipe: devicelab/devicelab_drone
presubmit: false
timeout: 60
@@ -1122,7 +1129,7 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"}
+ {"dependency": "chrome_and_driver", "version": "version:117.0"}
]
tags: >
["devicelab"]
@@ -1139,13 +1146,15 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"}
]
shard: web_long_running_tests
subshard: "1_5"
tags: >
["framework", "hostonly", "shard", "linux"]
+ # Retry for flakes caused by https://github.com/flutter/flutter/issues/132654
+ presubmit_max_attempts: "2"
runIf:
- dev/**
- packages/**
@@ -1159,13 +1168,15 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"}
]
shard: web_long_running_tests
subshard: "2_5"
tags: >
["framework", "hostonly", "shard", "linux"]
+ # Retry for flakes caused by https://github.com/flutter/flutter/issues/132654
+ presubmit_max_attempts: "2"
runIf:
- dev/**
- packages/**
@@ -1179,13 +1190,15 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"}
]
shard: web_long_running_tests
subshard: "3_5"
tags: >
["framework", "hostonly", "shard", "linux"]
+ # Retry for flakes caused by https://github.com/flutter/flutter/issues/132654
+ presubmit_max_attempts: "2"
runIf:
- dev/**
- packages/**
@@ -1199,13 +1212,15 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"}
]
shard: web_long_running_tests
subshard: "4_5"
tags: >
["framework", "hostonly", "shard", "linux"]
+ # Retry for flakes caused by https://github.com/flutter/flutter/issues/132654
+ presubmit_max_attempts: "2"
runIf:
- dev/**
- packages/**
@@ -1219,13 +1234,15 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"}
]
shard: web_long_running_tests
subshard: "5_5"
tags: >
["framework", "hostonly", "shard", "linux"]
+ # Retry for flakes caused by https://github.com/flutter/flutter/issues/132654
+ presubmit_max_attempts: "2"
runIf:
- dev/**
- packages/**
@@ -1239,13 +1256,15 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"}
]
shard: web_tests
subshard: "0"
tags: >
["framework", "hostonly", "shard", "linux"]
+ # Retry for flakes caused by https://github.com/flutter/flutter/issues/132654
+ presubmit_max_attempts: "2"
runIf:
- dev/**
- packages/**
@@ -1259,13 +1278,15 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"}
]
shard: web_tests
subshard: "1"
tags: >
["framework", "hostonly", "shard", "linux"]
+ # Retry for flakes caused by https://github.com/flutter/flutter/issues/132654
+ presubmit_max_attempts: "2"
runIf:
- dev/**
- packages/**
@@ -1279,13 +1300,15 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"}
]
shard: web_tests
subshard: "2"
tags: >
["framework", "hostonly", "shard", "linux"]
+ # Retry for flakes caused by https://github.com/flutter/flutter/issues/132654
+ presubmit_max_attempts: "2"
runIf:
- dev/**
- packages/**
@@ -1299,13 +1322,15 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"}
]
shard: web_tests
subshard: "3"
tags: >
["framework", "hostonly", "shard", "linux"]
+ # Retry for flakes caused by https://github.com/flutter/flutter/issues/132654
+ presubmit_max_attempts: "2"
runIf:
- dev/**
- packages/**
@@ -1319,13 +1344,15 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"}
]
shard: web_tests
subshard: "4"
tags: >
["framework", "hostonly", "shard", "linux"]
+ # Retry for flakes caused by https://github.com/flutter/flutter/issues/132654
+ presubmit_max_attempts: "2"
runIf:
- dev/**
- packages/**
@@ -1339,13 +1366,15 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"}
]
shard: web_tests
subshard: "5"
tags: >
["framework", "hostonly", "shard", "linux"]
+ # Retry for flakes caused by https://github.com/flutter/flutter/issues/132654
+ presubmit_max_attempts: "2"
runIf:
- dev/**
- packages/**
@@ -1359,13 +1388,15 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"}
]
shard: web_tests
subshard: "6"
tags: >
["framework", "hostonly", "shard", "linux"]
+ # Retry for flakes caused by https://github.com/flutter/flutter/issues/132654
+ presubmit_max_attempts: "2"
runIf:
- dev/**
- packages/**
@@ -1379,13 +1410,15 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"}
]
shard: web_tests
subshard: "7_last"
tags: >
["framework", "hostonly", "shard", "linux"]
+ # Retry for flakes caused by https://github.com/flutter/flutter/issues/132654
+ presubmit_max_attempts: "2"
runIf:
- dev/**
- packages/**
@@ -1399,13 +1432,15 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"}
]
shard: web_canvaskit_tests
subshard: "0"
tags: >
["framework", "hostonly", "shard", "linux"]
+ # Retry for flakes caused by https://github.com/flutter/flutter/issues/132654
+ presubmit_max_attempts: "2"
runIf:
- dev/**
- packages/**
@@ -1419,13 +1454,15 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"}
]
shard: web_canvaskit_tests
subshard: "1"
tags: >
["framework", "hostonly", "shard", "linux"]
+ # Retry for flakes caused by https://github.com/flutter/flutter/issues/132654
+ presubmit_max_attempts: "2"
runIf:
- dev/**
- packages/**
@@ -1439,13 +1476,15 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"}
]
shard: web_canvaskit_tests
subshard: "2"
tags: >
["framework", "hostonly", "shard", "linux"]
+ # Retry for flakes caused by https://github.com/flutter/flutter/issues/132654
+ presubmit_max_attempts: "2"
runIf:
- dev/**
- packages/**
@@ -1459,13 +1498,15 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"}
]
shard: web_canvaskit_tests
subshard: "3"
tags: >
["framework", "hostonly", "shard", "linux"]
+ # Retry for flakes caused by https://github.com/flutter/flutter/issues/132654
+ presubmit_max_attempts: "2"
runIf:
- dev/**
- packages/**
@@ -1479,13 +1520,15 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"}
]
shard: web_canvaskit_tests
subshard: "4"
tags: >
["framework", "hostonly", "shard", "linux"]
+ # Retry for flakes caused by https://github.com/flutter/flutter/issues/132654
+ presubmit_max_attempts: "2"
runIf:
- dev/**
- packages/**
@@ -1499,13 +1542,15 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"}
]
shard: web_canvaskit_tests
subshard: "5"
tags: >
["framework", "hostonly", "shard", "linux"]
+ # Retry for flakes caused by https://github.com/flutter/flutter/issues/132654
+ presubmit_max_attempts: "2"
runIf:
- dev/**
- packages/**
@@ -1519,13 +1564,15 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"}
]
shard: web_canvaskit_tests
subshard: "6"
tags: >
["framework", "hostonly", "shard", "linux"]
+ # Retry for flakes caused by https://github.com/flutter/flutter/issues/132654
+ presubmit_max_attempts: "2"
runIf:
- dev/**
- packages/**
@@ -1539,13 +1586,15 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"}
]
shard: web_canvaskit_tests
subshard: "7_last"
tags: >
["framework", "hostonly", "shard", "linux"]
+ # Retry for flakes caused by https://github.com/flutter/flutter/issues/132654
+ presubmit_max_attempts: "2"
runIf:
- dev/**
- packages/**
@@ -1559,7 +1608,7 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:11"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"}
]
@@ -1567,6 +1616,8 @@ targets:
subshard: "1_1"
tags: >
["framework", "hostonly", "shard", "linux"]
+ # Retry for flakes caused by https://github.com/flutter/flutter/issues/132654
+ presubmit_max_attempts: "2"
runIf:
- dev/**
- packages/flutter_tools/**
@@ -1588,9 +1639,8 @@ targets:
task_name: android_defines_test
dependencies: >-
[
- {"dependency": "android_virtual_device", "version": "33"}
+ {"dependency": "android_virtual_device", "version": "34"}
]
- use_emulator: "true"
- name: Linux_android android_obfuscate_test
recipe: devicelab/devicelab_drone
@@ -1674,15 +1724,73 @@ targets:
["devicelab", "android", "linux"]
task_name: backdrop_filter_perf__e2e_summary
- - name: Linux_samsung_s10 backdrop_filter_perf__timeline_summary
+ - name: Linux_pixel_7pro backdrop_filter_perf__timeline_summary
recipe: devicelab/devicelab_drone
presubmit: false
timeout: 60
properties:
tags: >
- ["devicelab", "android", "linux", "samsung", "s10"]
+ ["devicelab", "android", "linux", "pixel", "7pro"]
task_name: backdrop_filter_perf__timeline_summary
+ - name: Linux_pixel_7pro draw_atlas_perf_opengles__timeline_summary
+ recipe: devicelab/devicelab_drone
+ presubmit: false
+ # Uses Impeller.
+ bringup: true
+ timeout: 60
+ properties:
+ ignore_flakiness: "true"
+ tags: >
+ ["devicelab", "android", "linux", "pixel", "7pro"]
+ task_name: draw_atlas_perf_opengles__timeline_summary
+
+ - name: Linux_pixel_7pro draw_atlas_perf__timeline_summary
+ recipe: devicelab/devicelab_drone
+ presubmit: false
+ # Uses Impeller.
+ bringup: true
+ timeout: 60
+ properties:
+ ignore_flakiness: "true"
+ tags: >
+ ["devicelab", "android", "linux", "pixel", "7pro"]
+ task_name: draw_atlas_perf__timeline_summary
+
+ - name: Linux_pixel_7pro dynamic_path_tessellation_perf__timeline_summary
+ recipe: devicelab/devicelab_drone
+ presubmit: false
+ # Uses Impeller.
+ bringup: true
+ timeout: 60
+ properties:
+ ignore_flakiness: "true"
+ tags: >
+ ["devicelab", "android", "linux", "pixel", "7pro"]
+ task_name: dynamic_path_tessellation_perf__timeline_summary
+
+ - name: Linux_pixel_7pro static_path_tessellation_perf__timeline_summary
+ recipe: devicelab/devicelab_drone
+ presubmit: false
+ # Uses Impeller.
+ bringup: true
+ timeout: 60
+ properties:
+ ignore_flakiness: "true"
+ tags: >
+ ["devicelab", "android", "linux", "pixel", "7pro"]
+ task_name: static_path_tessellation_perf__timeline_summary
+
+ - name: Linux_pixel_7pro hello_world_impeller
+ recipe: devicelab/devicelab_drone
+ presubmit: false
+ # Uses Impeller.
+ timeout: 60
+ properties:
+ tags: >
+ ["devicelab", "android", "linux", "pixel", "7pro"]
+ task_name: hello_world_impeller
+
- name: Linux_android basic_material_app_android__compile
recipe: devicelab/devicelab_drone
presubmit: false
@@ -1807,13 +1915,13 @@ targets:
{"dependency": "open_jdk", "version": "version:11"}
]
- - name: Linux_samsung_s10 complex_layout_scroll_perf__timeline_summary
+ - name: Linux_pixel_7pro complex_layout_scroll_perf__timeline_summary
recipe: devicelab/devicelab_drone
presubmit: false
timeout: 60
properties:
tags: >
- ["devicelab", "android", "linux", "samsung", "s10"]
+ ["devicelab", "android", "linux", "pixel", "7pro"]
task_name: complex_layout_scroll_perf__timeline_summary
dependencies: >-
[
@@ -1855,13 +1963,13 @@ targets:
["devicelab", "android", "linux"]
task_name: cubic_bezier_perf__e2e_summary
- - name: Linux_samsung_s10 cubic_bezier_perf__timeline_summary
+ - name: Linux_pixel_7pro cubic_bezier_perf__timeline_summary
recipe: devicelab/devicelab_drone
presubmit: false
timeout: 60
properties:
tags: >
- ["devicelab", "android", "linux", "samsung", "s10"]
+ ["devicelab", "android", "linux", "pixel", "7pro"]
task_name: cubic_bezier_perf__timeline_summary
- name: Linux_android cull_opacity_perf__e2e_summary
@@ -1873,13 +1981,13 @@ targets:
["devicelab", "android", "linux"]
task_name: cull_opacity_perf__e2e_summary
- - name: Linux_samsung_s10 cull_opacity_perf__timeline_summary
+ - name: Linux_pixel_7pro cull_opacity_perf__timeline_summary
recipe: devicelab/devicelab_drone
presubmit: false
timeout: 60
properties:
tags: >
- ["devicelab", "android", "linux", "samsung", "s10"]
+ ["devicelab", "android", "linux", "pixel", "7pro"]
task_name: cull_opacity_perf__timeline_summary
- name: Linux_android devtools_profile_start_test
@@ -2080,6 +2188,15 @@ targets:
["devicelab", "android", "linux"]
task_name: fullscreen_textfield_perf__e2e_summary
+ - name: Linux_android very_long_picture_scrolling_perf__e2e_summary
+ recipe: devicelab/devicelab_drone
+ presubmit: false
+ timeout: 120
+ properties:
+ tags: >
+ ["devicelab", "android", "linux"]
+ task_name: very_long_picture_scrolling_perf__e2e_summary
+
- name: Linux_android hello_world__memory
recipe: devicelab/devicelab_drone
presubmit: false
@@ -2135,13 +2252,13 @@ targets:
["devicelab", "android", "linux"]
task_name: imagefiltered_transform_animation_perf__timeline_summary
- - name: Linux_samsung_s10 imagefiltered_transform_animation_perf__timeline_summary
+ - name: Linux_pixel_7pro imagefiltered_transform_animation_perf__timeline_summary
recipe: devicelab/devicelab_drone
presubmit: false
timeout: 60
properties:
tags: >
- ["devicelab", "android", "linux", "samsung", "s10"]
+ ["devicelab", "android", "linux", "pixel", "7pro"]
task_name: imagefiltered_transform_animation_perf__timeline_summary
- name: Linux_android image_list_reported_duration
@@ -2219,8 +2336,10 @@ targets:
- name: Linux_android list_text_layout_impeller_perf__e2e_summary
recipe: devicelab/devicelab_drone
presubmit: false
+ bringup: true
timeout: 60
properties:
+ ignore_flakiness: "true"
tags: >
["devicelab", "android", "linux"]
task_name: list_text_layout_impeller_perf__e2e_summary
@@ -2243,15 +2362,6 @@ targets:
["devicelab", "android", "linux"]
task_name: old_gallery__transition_perf
- - name: Linux_android new_gallery__transition_perf
- recipe: devicelab/devicelab_drone
- presubmit: false
- timeout: 60
- properties:
- tags: >
- ["devicelab", "android", "linux"]
- task_name: new_gallery__transition_perf
-
- name: Linux_build_test flutter_gallery__transition_perf
recipe: devicelab/devicelab_drone_build_test
presubmit: false
@@ -2297,34 +2407,84 @@ targets:
["devicelab", "android", "linux"]
task_name: flutter_gallery__transition_perf_with_semantics
- - name: Linux_samsung_s10 new_gallery__transition_perf
+ # MotoG4, Skia
+ - name: Linux_android new_gallery__transition_perf
recipe: devicelab/devicelab_drone
presubmit: false
timeout: 60
properties:
tags: >
- ["devicelab", "android", "linux", "samsung", "s10"]
+ ["devicelab", "android", "linux"]
task_name: new_gallery__transition_perf
+ # Pixel 7 Pro, Skia
+ - name: Linux_pixel_7pro new_gallery__transition_perf
+ recipe: devicelab/devicelab_drone
+ presubmit: false
+ timeout: 60
+ properties:
+ tags: >
+ ["devicelab", "android", "linux", "pixel", "7pro"]
+ task_name: new_gallery__transition_perf
+
+ # Samsung A02, Skia
+ - name: Linux_samsung_a02 new_gallery__transition_perf
+ recipe: devicelab/devicelab_drone
+ bringup: true
+ presubmit: false
+ timeout: 60
+ properties:
+ tags: >
+ ["devicelab", "android", "linux", "samsung", "a02"]
+ task_name: new_gallery__transition_perf
+
+ # Moto G4, Impeller (OpenGL)
- name: Linux_android new_gallery_impeller__transition_perf
recipe: devicelab/devicelab_drone
presubmit: false
+ bringup: true
timeout: 60
properties:
+ ignore_flakiness: "true"
tags: >
["devicelab", "android", "linux"]
task_name: new_gallery_impeller__transition_perf
- - name: Linux_samsung_s10 new_gallery_impeller__transition_perf
- bringup: true # Flaky https://github.com/flutter/flutter/issues/124693
+ # Pixel 7 Pro, Impeller (Vulkan)
+ - name: Linux_pixel_7pro new_gallery_impeller__transition_perf
+ recipe: devicelab/devicelab_drone
+ bringup: true
+ presubmit: false
+ timeout: 60
+ properties:
+ tags: >
+ ["devicelab", "android", "linux", "pixel", "7pro"]
+ task_name: new_gallery_impeller__transition_perf
+
+ # Samsung A02, Impeller (OpenGL)
+ - name: Linux_samsung_a02 new_gallery_impeller__transition_perf
+ bringup: true
recipe: devicelab/devicelab_drone
presubmit: false
timeout: 60
properties:
+ ignore_flakiness: "true"
tags: >
- ["devicelab", "android", "linux", "samsung", "s10"]
+ ["devicelab", "android", "linux", "samsung", "a02"]
task_name: new_gallery_impeller__transition_perf
+ # Pixel 7 Pro, Impeller (OpenGL)
+ - name: Linux_pixel_7pro new_gallery_opengles_impeller__transition_perf
+ bringup: true
+ recipe: devicelab/devicelab_drone
+ presubmit: false
+ timeout: 60
+ properties:
+ ignore_flakiness: "true"
+ tags: >
+ ["devicelab", "android", "linux", "pixel", "7pro"]
+ task_name: new_gallery_opengles_impeller__transition_perf
+
- name: Linux_android picture_cache_perf__e2e_summary
recipe: devicelab/devicelab_drone
presubmit: false
@@ -2334,13 +2494,13 @@ targets:
["devicelab", "android", "linux"]
task_name: picture_cache_perf__e2e_summary
- - name: Linux_samsung_s10 picture_cache_perf__timeline_summary
+ - name: Linux_pixel_7pro picture_cache_perf__timeline_summary
recipe: devicelab/devicelab_drone
presubmit: false
timeout: 60
properties:
tags: >
- ["devicelab", "android", "linux", "samsung", "s10"]
+ ["devicelab", "android", "linux", "pixel", "7pro"]
task_name: picture_cache_perf__timeline_summary
- name: Linux_android android_picture_cache_complexity_scoring_perf__timeline_summary
@@ -2362,6 +2522,7 @@ targets:
task_name: slider_perf_android
- name: Linux_android platform_channels_benchmarks
+ bringup: true # Flaky https://github.com/flutter/flutter/issues/135105
recipe: devicelab/devicelab_drone
presubmit: false
timeout: 60
@@ -2397,13 +2558,13 @@ targets:
["devicelab", "android", "linux"]
task_name: platform_views_scroll_perf__timeline_summary
- - name: Linux_samsung_s10 platform_views_scroll_perf__timeline_summary
+ - name: Linux_pixel_7pro platform_views_scroll_perf__timeline_summary
recipe: devicelab/devicelab_drone
presubmit: false
timeout: 60
properties:
tags: >
- ["devicelab", "android", "linux", "samsung", "s10"]
+ ["devicelab", "android", "linux", "pixel", "7pro"]
task_name: platform_views_scroll_perf__timeline_summary
- name: Linux_android platform_views_scroll_perf_impeller__timeline_summary
@@ -2412,18 +2573,20 @@ targets:
presubmit: false
timeout: 60
properties:
+ ignore_flakiness: "true"
tags: >
["devicelab", "android", "linux"]
task_name: platform_views_scroll_perf_impeller__timeline_summary
- - name: Linux_samsung_s10 platform_views_scroll_perf_impeller__timeline_summary
+ - name: Linux_pixel_7pro platform_views_scroll_perf_impeller__timeline_summary
bringup: true
recipe: devicelab/devicelab_drone
presubmit: false
timeout: 60
properties:
+ ignore_flakiness: "true"
tags: >
- ["devicelab", "android", "linux", "samsung", "s10"]
+ ["devicelab", "android", "linux", "pixel", "7pro"]
task_name: platform_views_scroll_perf_impeller__timeline_summary
- name: Linux_android platform_view__start_up
@@ -2462,13 +2625,13 @@ targets:
["devicelab", "android", "linux"]
task_name: textfield_perf__e2e_summary
- - name: Linux_samsung_s10 textfield_perf__timeline_summary
+ - name: Linux_pixel_7pro textfield_perf__timeline_summary
recipe: devicelab/devicelab_drone
presubmit: false
timeout: 60
properties:
tags: >
- ["devicelab", "android", "linux", "samsung", "s10"]
+ ["devicelab", "android", "linux", "pixel", "7pro"]
task_name: textfield_perf__timeline_summary
- name: Linux_android tiles_scroll_perf__timeline_summary
@@ -2539,6 +2702,7 @@ targets:
task_name: opacity_peephole_fade_transition_text_perf__e2e_summary
- name: Linux_android opacity_peephole_grid_of_alpha_savelayers_perf__e2e_summary
+ bringup: true # Flaky https://github.com/flutter/flutter/issues/135118
recipe: devicelab/devicelab_drone
presubmit: false
timeout: 60
@@ -2595,57 +2759,142 @@ targets:
- name: Linux_android animated_blur_backdrop_filter_perf__timeline_summary
recipe: devicelab/devicelab_drone
presubmit: false
+ bringup: true
timeout: 60
properties:
+ ignore_flakiness: "true"
tags: >
["devicelab", "android", "linux"]
task_name: animated_blur_backdrop_filter_perf__timeline_summary
- - name: Staging_build_linux analyze
+ - name: Linux_pixel_7pro animated_blur_backdrop_filter_perf__timeline_summary
+ recipe: devicelab/devicelab_drone
presubmit: false
+ # Uses Impeller.
bringup: true
- recipe: flutter/flutter
timeout: 60
properties:
ignore_flakiness: "true"
tags: >
- ["framework","hostonly","linux"]
- validation: analyze
- validation_name: Analyze
+ ["devicelab", "android", "linux", "pixel", "7pro"]
+ task_name: animated_blur_backdrop_filter_perf__timeline_summary
- - name: Staging_build_linux framework_tests_misc
+ - name: Linux_pixel_7pro animated_advanced_blend_perf_opengles__timeline_summary
+ recipe: devicelab/devicelab_drone
presubmit: false
+ # Uses Impeller.
bringup: true
- recipe: flutter/flutter_drone
timeout: 60
properties:
ignore_flakiness: "true"
- dependencies: >-
- [
- {"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"},
- {"dependency": "clang", "version": "git_revision:5d5aba78dbbee75508f01bcaa69aedb2ab79065a"},
- {"dependency": "cmake", "version": "build_id:8787856497187628321"},
- {"dependency": "ninja", "version": "version:1.9.0"},
- {"dependency": "open_jdk", "version": "version:11"},
- {"dependency": "android_sdk", "version": "version:33v6"}
- ]
- shard: framework_tests
- subshard: misc
tags: >
- ["framework", "hostonly", "shard", "linux"]
- runIf:
- - dev/**
- - examples/api/**
- - packages/flutter/**
- - packages/flutter_driver/**
- - packages/integration_test/**
- - packages/flutter_localizations/**
- - packages/fuchsia_remote_debug_protocol/**
- - packages/flutter_test/**
- - packages/flutter_goldens/**
- - packages/flutter_tools/**
- - bin/**
- - .ci.yaml
+ ["devicelab", "android", "linux", "pixel", "7pro"]
+ task_name: animated_advanced_blend_perf_opengles__timeline_summary
+
+ - name: Linux_pixel_7pro animated_advanced_blend_perf__timeline_summary
+ recipe: devicelab/devicelab_drone
+ presubmit: false
+ # Uses Impeller.
+ bringup: true
+ timeout: 60
+ properties:
+ ignore_flakiness: "true"
+ tags: >
+ ["devicelab", "android", "linux", "pixel", "7pro"]
+ task_name: animated_advanced_blend_perf__timeline_summary
+
+ - name: Mac_ios animated_advanced_blend_perf_ios__timeline_summary
+ recipe: devicelab/devicelab_drone
+ presubmit: false
+ timeout: 60
+ properties:
+ tags: >
+ ["devicelab", "ios", "mac"]
+ task_name: animated_advanced_blend_perf_ios__timeline_summary
+
+ - name: Linux_pixel_7pro animated_blur_backdrop_filter_perf_opengles__timeline_summary
+ recipe: devicelab/devicelab_drone
+ presubmit: false
+ # Uses Impeller.
+ bringup: true
+ timeout: 60
+ properties:
+ ignore_flakiness: "true"
+ tags: >
+ ["devicelab", "android", "linux", "pixel", "7pro"]
+ task_name: animated_blur_backdrop_filter_perf_opengles__timeline_summary
+
+ - name: Linux_pixel_7pro draw_vertices_perf_opengles__timeline_summary
+ recipe: devicelab/devicelab_drone
+ presubmit: false
+ # Uses Impeller
+ bringup: true
+ timeout: 60
+ properties:
+ ignore_flakiness: "true"
+ tags: >
+ ["devicelab", "android", "linux", "pixel", "7pro"]
+ task_name: draw_vertices_perf_opengles__timeline_summary
+
+ - name: Linux_pixel_7pro draw_vertices_perf__timeline_summary
+ recipe: devicelab/devicelab_drone
+ presubmit: false
+ # Uses Impeller.
+ bringup: true
+ timeout: 60
+ properties:
+ ignore_flakiness: "true"
+ tags: >
+ ["devicelab", "android", "linux", "pixel", "7pro"]
+ task_name: draw_vertices_perf__timeline_summary
+
+ - name: Mac_ios draw_vertices_perf_ios__timeline_summary
+ recipe: devicelab/devicelab_drone
+ presubmit: false
+ timeout: 60
+ properties:
+ tags: >
+ ["devicelab", "ios", "mac"]
+ task_name: draw_vertices_perf_ios__timeline_summary
+
+ - name: Mac_ios draw_atlas_perf_ios__timeline_summary
+ recipe: devicelab/devicelab_drone
+ presubmit: false
+ timeout: 60
+ properties:
+ tags: >
+ ["devicelab", "ios", "mac"]
+ task_name: draw_atlas_perf_ios__timeline_summary
+
+ - name: Mac_ios static_path_tessellation_perf_ios__timeline_summary
+ recipe: devicelab/devicelab_drone
+ presubmit: false
+ timeout: 60
+ properties:
+ tags: >
+ ["devicelab", "ios", "mac"]
+ task_name: static_path_tessellation_perf_ios__timeline_summary
+
+ - name: Mac_ios dynamic_path_tessellation_perf_ios__timeline_summary
+ recipe: devicelab/devicelab_drone
+ presubmit: false
+ timeout: 60
+ properties:
+ tags: >
+ ["devicelab", "ios", "mac"]
+ task_name: dynamic_path_tessellation_perf_ios__timeline_summary
+
+ - name: Staging_build_linux analyze
+ presubmit: false
+ bringup: true
+ recipe: flutter/flutter
+ timeout: 60
+ properties:
+ ignore_flakiness: "true"
+ tags: >
+ ["framework","hostonly","linux"]
+ validation: analyze
+ validation_name: Analyze
- name: Mac_benchmark animated_complex_opacity_perf_macos__e2e_summary
presubmit: false
@@ -2705,7 +2954,7 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:17"},
{"dependency": "gems", "version": "v3.3.14"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"}
@@ -2723,7 +2972,7 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:17"},
{"dependency": "gems", "version": "v3.3.14"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"}
@@ -2741,7 +2990,7 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:17"},
{"dependency": "gems", "version": "v3.3.14"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"}
@@ -2759,7 +3008,7 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:17"},
{"dependency": "gems", "version": "v3.3.14"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"}
@@ -2906,7 +3155,7 @@ targets:
[
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"},
{"dependency": "gems", "version": "v3.3.14"},
- {"dependency": "open_jdk", "version": "version:11"},
+ {"dependency": "open_jdk", "version": "version:17"},
{"dependency": "android_sdk", "version": "version:33v6"}
]
shard: framework_tests
@@ -3240,7 +3489,7 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:11"},
{"dependency": "gems", "version": "v3.3.14"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"}
@@ -3264,7 +3513,7 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:11"},
{"dependency": "gems", "version": "v3.3.14"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"}
@@ -3288,7 +3537,7 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:11"},
{"dependency": "gems", "version": "v3.3.14"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"}
@@ -3312,7 +3561,7 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:11"},
{"dependency": "gems", "version": "v3.3.14"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"}
@@ -3394,7 +3643,7 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:11"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"}
]
@@ -3672,6 +3921,10 @@ targets:
tags: >
["devicelab", "ios", "mac"]
task_name: flutter_gallery_ios__start_up_xcode_debug
+ $flutter/osx_sdk : >-
+ {
+ "sdk_version": "14c18"
+ }
bringup: true
- name: Mac_ios flutter_view_ios__start_up
@@ -3749,6 +4002,10 @@ targets:
tags: >
["devicelab", "ios", "mac"]
task_name: integration_ui_ios_driver_xcode_debug
+ $flutter/osx_sdk : >-
+ {
+ "sdk_version": "14c18"
+ }
bringup: true
- name: Mac_ios integration_ui_ios_frame_number
@@ -3778,22 +4035,30 @@ targets:
["devicelab", "ios", "mac"]
task_name: integration_ui_ios_textfield
- - name: Mac_ios ios_app_with_extensions_test
+ - name: Mac_x64 ios_app_with_extensions_test
recipe: devicelab/devicelab_drone
presubmit: false
timeout: 60
properties:
+ dependencies: >-
+ [
+ {"dependency": "gems", "version": "v3.3.14"}
+ ]
tags: >
- ["devicelab", "ios", "mac"]
+ ["devicelab", "hostonly", "mac"]
task_name: ios_app_with_extensions_test
- - name: Mac_arm64_ios ios_app_with_extensions_test
+ - name: Mac_arm64 ios_app_with_extensions_test
recipe: devicelab/devicelab_drone
presubmit: false
timeout: 60
properties:
+ dependencies: >-
+ [
+ {"dependency": "gems", "version": "v3.3.14"}
+ ]
tags: >
- ["devicelab", "ios", "mac", "arm64"]
+ ["devicelab", "hostonly", "mac", "arm64"]
task_name: ios_app_with_extensions_test
- name: Mac_ios ios_content_validation_test
@@ -3877,8 +4142,30 @@ targets:
tags: >
["devicelab", "ios", "mac"]
task_name: microbenchmarks_ios_xcode_debug
+ $flutter/osx_sdk : >-
+ {
+ "sdk_version": "14c18"
+ }
bringup: true
+ - name: Mac_ios native_assets_ios_simulator
+ recipe: devicelab/devicelab_drone
+ presubmit: false
+ timeout: 60
+ properties:
+ tags: >
+ ["devicelab", "ios", "mac"]
+ task_name: native_assets_ios_simulator
+
+ - name: Mac_ios native_assets_ios
+ recipe: devicelab/devicelab_drone
+ presubmit: false
+ timeout: 60
+ properties:
+ tags: >
+ ["devicelab", "ios", "mac"]
+ task_name: native_assets_ios
+
- name: Mac_ios native_platform_view_ui_tests_ios
recipe: devicelab/devicelab_drone
presubmit: false
@@ -4023,6 +4310,15 @@ targets:
["devicelab", "ios", "mac"]
task_name: fullscreen_textfield_perf_ios__e2e_summary
+ - name: Mac_ios very_long_picture_scrolling_perf_ios__e2e_summary
+ recipe: devicelab/devicelab_drone
+ presubmit: false
+ timeout: 120
+ properties:
+ tags: >
+ ["devicelab", "ios", "mac"]
+ task_name: very_long_picture_scrolling_perf_ios__e2e_summary
+
- name: Mac_ios tiles_scroll_perf_ios__timeline_summary
recipe: devicelab/devicelab_drone
presubmit: false
@@ -4055,7 +4351,6 @@ targets:
- name: Mac_ios draw_points_perf_ios__timeline_summary
recipe: devicelab/devicelab_drone
presubmit: false
- bringup: true
timeout: 60
properties:
tags: >
@@ -4124,7 +4419,6 @@ targets:
- name: Mac_arm64_ios run_debug_test_macos
recipe: devicelab/devicelab_drone
- presubmit: false # https://github.com/flutter/flutter/issues/118827
timeout: 60
properties:
tags: >
@@ -4168,7 +4462,7 @@ targets:
- bin/**
- .ci.yaml
- - name: Windows build_tests_1_4
+ - name: Windows build_tests_1_5
recipe: flutter/flutter_drone
timeout: 60
properties:
@@ -4176,17 +4470,17 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:17"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"},
{"dependency": "vs_build", "version": "version:vs2019"}
]
shard: build_tests
- subshard: "1_4"
+ subshard: "1_5"
tags: >
["framework", "hostonly", "shard", "windows"]
- - name: Windows build_tests_2_4
+ - name: Windows build_tests_2_5
recipe: flutter/flutter_drone
timeout: 60
properties:
@@ -4194,17 +4488,17 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:17"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"},
{"dependency": "vs_build", "version": "version:vs2019"}
]
shard: build_tests
- subshard: "2_4"
+ subshard: "2_5"
tags: >
["framework", "hostonly", "shard", "windows"]
- - name: Windows build_tests_3_4
+ - name: Windows build_tests_3_5
recipe: flutter/flutter_drone
timeout: 60
properties:
@@ -4212,17 +4506,17 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:17"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"},
{"dependency": "vs_build", "version": "version:vs2019"}
]
shard: build_tests
- subshard: "3_4"
+ subshard: "3_5"
tags: >
["framework", "hostonly", "shard", "windows"]
- - name: Windows build_tests_4_4
+ - name: Windows build_tests_4_5
recipe: flutter/flutter_drone
timeout: 60
properties:
@@ -4230,13 +4524,31 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:17"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"},
{"dependency": "vs_build", "version": "version:vs2019"}
]
shard: build_tests
- subshard: "4_4"
+ subshard: "4_5"
+ tags: >
+ ["framework", "hostonly", "shard", "windows"]
+
+ - name: Windows build_tests_5_5
+ recipe: flutter/flutter_drone
+ timeout: 60
+ properties:
+ add_recipes_cq: "true"
+ dependencies: >-
+ [
+ {"dependency": "android_sdk", "version": "version:33v6"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
+ {"dependency": "open_jdk", "version": "version:17"},
+ {"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"},
+ {"dependency": "vs_build", "version": "version:vs2019"}
+ ]
+ shard: build_tests
+ subshard: "5_5"
tags: >
["framework", "hostonly", "shard", "windows"]
@@ -4284,7 +4596,7 @@ targets:
[
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"},
{"dependency": "vs_build", "version": "version:vs2019"},
- {"dependency": "open_jdk", "version": "version:11"},
+ {"dependency": "open_jdk", "version": "version:17"},
{"dependency": "android_sdk", "version": "version:33v6"}
]
shard: framework_tests
@@ -4337,7 +4649,7 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:11"}
]
tags: >
@@ -4362,13 +4674,14 @@ targets:
task_name: hot_mode_dev_cycle_win_target__benchmark
- name: Windows module_custom_host_app_name_test
+ bringup: true # Flaky https://github.com/flutter/flutter/issues/134644
recipe: devicelab/devicelab_drone
timeout: 60
properties:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:11"}
]
tags: >
@@ -4387,7 +4700,7 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:11"}
]
tags: >
@@ -4406,7 +4719,7 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:11"}
]
tags: >
@@ -4438,7 +4751,7 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:11"}
]
tags: >
@@ -4457,7 +4770,7 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:11"}
]
tags: >
@@ -4504,6 +4817,25 @@ targets:
- bin/**
- .ci.yaml
+ - name: Windows_arm64 run_debug_test_windows
+ recipe: devicelab/devicelab_drone
+ bringup: true # https://github.com/flutter/flutter/issues/134083
+ presubmit: false
+ timeout: 60
+ properties:
+ dependencies: >-
+ [
+ {"dependency": "vs_build", "version": "version:vs2019"}
+ ]
+ tags: >
+ ["devicelab", "hostonly", "windows", "arm64"]
+ task_name: run_debug_test_windows
+ runIf:
+ - dev/**
+ - packages/flutter_tools/**
+ - bin/**
+ - .ci.yaml
+
- name: Windows run_release_test_windows
recipe: devicelab/devicelab_drone
presubmit: false
@@ -4522,6 +4854,25 @@ targets:
- bin/**
- .ci.yaml
+ - name: Windows_arm64 run_release_test_windows
+ recipe: devicelab/devicelab_drone
+ bringup: true # https://github.com/flutter/flutter/issues/134083
+ presubmit: false
+ timeout: 60
+ properties:
+ dependencies: >-
+ [
+ {"dependency": "vs_build", "version": "version:vs2019"}
+ ]
+ tags: >
+ ["devicelab", "hostonly", "windows", "arm64"]
+ task_name: run_release_test_windows
+ runIf:
+ - dev/**
+ - packages/flutter_tools/**
+ - bin/**
+ - .ci.yaml
+
- name: Windows tool_integration_tests_1_6
recipe: flutter/flutter_drone
timeout: 60
@@ -4530,7 +4881,7 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:11"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"},
{"dependency": "vs_build", "version": "version:vs2019"}
@@ -4554,7 +4905,7 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:11"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"},
{"dependency": "vs_build", "version": "version:vs2019"}
@@ -4578,7 +4929,7 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:11"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"},
{"dependency": "vs_build", "version": "version:vs2019"}
@@ -4602,7 +4953,7 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:11"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"},
{"dependency": "vs_build", "version": "version:vs2019"}
@@ -4626,7 +4977,7 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:11"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"},
{"dependency": "vs_build", "version": "version:vs2019"}
@@ -4650,7 +5001,7 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:11"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"},
{"dependency": "vs_build", "version": "version:vs2019"}
@@ -4713,7 +5064,7 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:11"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"}
]
@@ -4734,7 +5085,7 @@ targets:
dependencies: >-
[
{"dependency": "android_sdk", "version": "version:33v6"},
- {"dependency": "chrome_and_driver", "version": "version:114.0"},
+ {"dependency": "chrome_and_driver", "version": "version:117.0"},
{"dependency": "open_jdk", "version": "version:11"},
{"dependency": "goldctl", "version": "git_revision:f808dcff91b221ae313e540c09d79696cd08b8de"}
]
@@ -4774,6 +5125,20 @@ targets:
]
task_name: hello_world_win_desktop__compile
+ - name: Windows_arm64 hello_world_win_desktop__compile
+ recipe: devicelab/devicelab_drone
+ bringup: true # https://github.com/flutter/flutter/issues/134083
+ presubmit: false
+ timeout: 60
+ properties:
+ tags: >
+ ["devicelab", "hostonly", "windows", "arm64"]
+ dependencies: >-
+ [
+ {"dependency": "vs_build", "version": "version:vs2019"}
+ ]
+ task_name: hello_world_win_desktop__compile
+
- name: Windows flutter_gallery_win_desktop__compile
recipe: devicelab/devicelab_drone
presubmit: false
@@ -4787,6 +5152,20 @@ targets:
]
task_name: flutter_gallery_win_desktop__compile
+ - name: Windows_arm64 flutter_gallery_win_desktop__compile
+ recipe: devicelab/devicelab_drone
+ bringup: true # https://github.com/flutter/flutter/issues/134083
+ presubmit: false
+ timeout: 60
+ properties:
+ tags: >
+ ["devicelab", "hostonly", "windows", "arm64"]
+ dependencies: >-
+ [
+ {"dependency": "vs_build", "version": "version:vs2019"}
+ ]
+ task_name: flutter_gallery_win_desktop__compile
+
- name: Windows flutter_gallery_win_desktop__start_up
recipe: devicelab/devicelab_drone
presubmit: false
@@ -4800,6 +5179,20 @@ targets:
]
task_name: flutter_gallery_win_desktop__start_up
+ - name: Windows_arm64 flutter_gallery_win_desktop__start_up
+ recipe: devicelab/devicelab_drone
+ bringup: true # https://github.com/flutter/flutter/issues/134083
+ presubmit: false
+ timeout: 60
+ properties:
+ tags: >
+ ["devicelab", "hostonly", "windows", "arm64"]
+ dependencies: >-
+ [
+ {"dependency": "vs_build", "version": "version:vs2019"}
+ ]
+ task_name: flutter_gallery_win_desktop__start_up
+
- name: Windows complex_layout_win_desktop__start_up
recipe: devicelab/devicelab_drone
presubmit: false
@@ -4813,6 +5206,20 @@ targets:
]
task_name: complex_layout_win_desktop__start_up
+ - name: Windows_arm64 complex_layout_win_desktop__start_up
+ recipe: devicelab/devicelab_drone
+ bringup: true # https://github.com/flutter/flutter/issues/134083
+ presubmit: false
+ timeout: 60
+ properties:
+ tags: >
+ ["devicelab", "hostonly", "windows", "arm64"]
+ dependencies: >-
+ [
+ {"dependency": "vs_build", "version": "version:vs2019"}
+ ]
+ task_name: complex_layout_win_desktop__start_up
+
- name: Windows flutter_view_win_desktop__start_up
recipe: devicelab/devicelab_drone
presubmit: false
@@ -4826,6 +5233,20 @@ targets:
]
task_name: flutter_view_win_desktop__start_up
+ - name: Windows_arm64 flutter_view_win_desktop__start_up
+ recipe: devicelab/devicelab_drone
+ bringup: true # https://github.com/flutter/flutter/issues/134083
+ presubmit: false
+ timeout: 60
+ properties:
+ tags: >
+ ["devicelab", "hostonly", "windows", "arm64"]
+ dependencies: >-
+ [
+ {"dependency": "vs_build", "version": "version:vs2019"}
+ ]
+ task_name: flutter_view_win_desktop__start_up
+
- name: Windows platform_view_win_desktop__start_up
recipe: devicelab/devicelab_drone
presubmit: false
@@ -4839,6 +5260,20 @@ targets:
]
task_name: platform_view_win_desktop__start_up
+ - name: Windows_arm64 platform_view_win_desktop__start_up
+ recipe: devicelab/devicelab_drone
+ bringup: true # https://github.com/flutter/flutter/issues/134083
+ presubmit: false
+ timeout: 60
+ properties:
+ tags: >
+ ["devicelab", "hostonly", "windows", "arm64"]
+ dependencies: >-
+ [
+ {"dependency": "vs_build", "version": "version:vs2019"}
+ ]
+ task_name: platform_view_win_desktop__start_up
+
- name: Windows_android basic_material_app_win__compile
recipe: devicelab/devicelab_drone
presubmit: false
@@ -4918,6 +5353,20 @@ targets:
["devicelab", "hostonly", "windows"]
task_name: windows_startup_test
+ - name: Windows_arm64 windows_startup_test
+ recipe: devicelab/devicelab_drone
+ bringup: true # https://github.com/flutter/flutter/issues/134083
+ presubmit: false
+ timeout: 60
+ properties:
+ dependencies: >-
+ [
+ {"dependency": "vs_build", "version": "version:vs2019"}
+ ]
+ tags: >
+ ["devicelab", "hostonly", "windows", "arm64"]
+ task_name: windows_startup_test
+
- name: Windows flutter_tool_startup__windows
recipe: devicelab/devicelab_drone
presubmit: false
@@ -4927,6 +5376,16 @@ targets:
["devicelab", "hostonly", "windows"]
task_name: flutter_tool_startup
+ - name: Windows_arm64 flutter_tool_startup__windows
+ recipe: devicelab/devicelab_drone
+ bringup: true # https://github.com/flutter/flutter/issues/134083
+ presubmit: false
+ timeout: 60
+ properties:
+ tags: >
+ ["devicelab", "hostonly", "windows", "arm64"]
+ task_name: flutter_tool_startup
+
- name: Linux flutter_tool_startup__linux
recipe: devicelab/devicelab_drone
presubmit: false
diff --git a/.github/ISSUE_TEMPLATE/5_performance_speed.md b/.github/ISSUE_TEMPLATE/5_performance_speed.md
deleted file mode 100644
index 0c7054c535829..0000000000000
--- a/.github/ISSUE_TEMPLATE/5_performance_speed.md
+++ /dev/null
@@ -1,81 +0,0 @@
----
-name: My app is slow or missing frames
-about: You are writing an application but have discovered that it is slow, you are
- not hitting 60Hz, or you are getting jank (missed frames).
-title: ''
-labels: 'from: performance template'
-assignees: ''
-
----
-
-
-
-## Details
-
-
-
-
-
-**Target Platform:**
-**Target OS version/browser:**
-**Devices:**
-
-## Logs
-
-
-Logs
-
-
-
-```
-```
-
-
-
-```
-```
-
-
diff --git a/.github/ISSUE_TEMPLATE/5_performance_speed.yml b/.github/ISSUE_TEMPLATE/5_performance_speed.yml
new file mode 100644
index 0000000000000..8133968f98397
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/5_performance_speed.yml
@@ -0,0 +1,172 @@
+name: My app is slow or missing frames
+description: |
+ You are writing an application but have discovered that it is slow,
+ you are not hitting 60Hz, or you are getting jank (missed frames).
+labels: 'from: performance template'
+body:
+ - type: markdown
+ attributes:
+ value: |
+ Thank you for using Flutter!
+
+ If you are looking for support, please check out our documentation
+ or consider asking a question on Stack Overflow:
+
+ - https://flutter.dev/
+ - https://api.flutter.dev/
+ - https://stackoverflow.com/questions/tagged/flutter?sort=frequent
+ - type: textarea
+ attributes:
+ label: Steps to reproduce
+ description: Please tell us exactly how to reproduce the problem you are running into.
+ placeholder: |
+ 1. ...
+ 2. ...
+ 3. ...
+ validations:
+ required: true
+ - type: textarea
+ attributes:
+ label: Code sample
+ description: |
+ Please create a minimal reproducible sample that shows the problem and attach it below between the lines with the backticks.
+
+ Try to reproduce the problem in a test app. Either run `flutter create janktest` and recreate the situation you are experiencing in that app, or clone your app and delete code until you have the jank reproducing with a single `.dart` file.
+
+ If you need more than just a `.dart` file (for example, assets are needed to reproduce the issue, or plugins/packages are needed to reproduce the issue) then create a GitHub repository and upload code there.
+
+ Without this we will unlikely be able to progress on the issue, and because of that we regretfully will have to close it.
+
+ Note: Please do not upload screenshots of text. Instead, use code blocks or the above mentioned ways to upload your code sample.
+ value: |
+ Code sample
+
+ ```dart
+ [Paste your code here]
+ ```
+
+
+ validations:
+ required: true
+ - type: checkboxes
+ attributes:
+ label: Performance profiling on master channel
+ description: |
+ Switch flutter to master channel and run this app on a physical device using profile mode with Skia tracing enabled, as follows:
+ ```console
+ flutter channel master
+ flutter run --profile --trace-skia
+ ```
+ The bleeding edge master channel is encouraged here because Flutter is constantly fixing bugs and improving its performance. Your problem in an older Flutter version may have already been solved in the master channel.
+ options:
+ - label: The issue still persists on the master channel
+ required: true
+ - type: textarea
+ attributes:
+ label: Timeline Traces
+ description: |
+ Open Flutter DevTools and save a timeline trace of the performance issue so we know which functions might be causing it. See "How to Collect and Read Timeline Traces" on this blog post: https://medium.com/flutter/profiling-flutter-applications-using-the-timeline-a1a434964af3#a499
+
+ Make sure the performance overlay is turned OFF when recording the trace as that may affect the performance of the profile run. (Pressing ‘P’ on the command line toggles the overlay.)
+
+ If the trace are too large to be uploaded to GitHub, you may upload them as a `zip` file or use online tools like https://pastebin.com to share it.
+ value: |
+ Timeline Traces JSON
+
+ ```json
+ [Paste the Timeline Traces here]
+ ```
+
+
+ validations:
+ required: true
+ - type: textarea
+ attributes:
+ label: Video demonstration
+ description: |
+ Record a video of the performance issue using another phone so we can have an intuitive understanding of what happened.
+
+ Don’t use "adb screenrecord", as that affects the performance of the profile run.
+ value: |
+
+ Video demonstration
+
+ [Upload media here]
+
+
+ - type: dropdown
+ id: target_platforms
+ attributes:
+ label: What target platforms are you seeing this bug on?
+ multiple: true
+ options:
+ - Android
+ - iOS
+ - Web
+ - macOS
+ - Linux
+ - Windows
+ validations:
+ required: true
+ - type: textarea
+ attributes:
+ label: OS/Browser name and version | Device information
+ description: |
+ Which target OS version is the test system running? For Web, please provide browser version.
+ Please also include the device information (model, CPU architecture, etc).
+ validations:
+ required: true
+ - type: dropdown
+ id: device-kind
+ attributes:
+ label: Does the problem occur on emulator/simulator as well as on physical devices?
+ options:
+ - "Unknown"
+ - "Yes"
+ - "No"
+ validations:
+ required: true
+ - type: dropdown
+ id: enable-impeller
+ attributes:
+ label: Is the problem only reproducible with Impeller?
+ description: |
+ Please check https://docs.flutter.dev/perf/impeller as the guideline on how to enable/disable it.
+ options:
+ - "N/A"
+ - "Yes"
+ - "No"
+ validations:
+ required: true
+ - type: textarea
+ attributes:
+ label: Logs
+ description: |
+ Include the full logs of the commands you are running between the lines with the backticks below. If you are running any `flutter` commands, please include the output of running them with `--verbose`; for example, the output of running `flutter --verbose create foo`.
+
+ If the logs are too large to be uploaded to GitHub, you may upload them as a `txt` file or use online tools like https://pastebin.com to share it.
+
+ Note: Please do not upload screenshots of text. Instead, use code blocks or the above mentioned ways to upload logs.
+ value: |
+ Logs
+
+ ```console
+ [Paste your logs here]
+ ```
+
+
+ - type: textarea
+ attributes:
+ label: Flutter Doctor output
+ description: |
+ Finally, paste the output of running `flutter doctor -v` here, with your device plugged in.
+ value: |
+ Doctor output
+
+ ```console
+ [Paste your output here]
+ ```
+
+
+ validations:
+ required: true
diff --git a/.github/ISSUE_TEMPLATE/6_infrastructure.md b/.github/ISSUE_TEMPLATE/6_infrastructure.md
deleted file mode 100644
index d12e41ae11aac..0000000000000
--- a/.github/ISSUE_TEMPLATE/6_infrastructure.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-name: The CI infrastructure used by Flutter has a problem
-about: As a contributor, you want to file an issue about the build/test/release
- infra, e.g. dashboards (http://flutter-dashboard.appspot.com), devicelab,
- LUCI (https://ci.chromium.org/p/flutter) etc.
-title: ''
-labels: 'team: infra'
-assignees: ''
-
----
-
-
diff --git a/.github/ISSUE_TEMPLATE/6_infrastructure.yml b/.github/ISSUE_TEMPLATE/6_infrastructure.yml
new file mode 100644
index 0000000000000..a6cfc9fc71eef
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/6_infrastructure.yml
@@ -0,0 +1,75 @@
+name: The CI infrastructure used by Flutter has a problem
+description: |
+ As a contributor, you want to file an issue about the build/test/release
+ infra, e.g. dashboards (http://flutter-dashboard.appspot.com), devicelab,
+ LUCI (https://ci.chromium.org/p/flutter) etc.
+labels: ['team-infra']
+body:
+ - type: markdown
+ attributes:
+ value: |
+ Thank you for using Flutter!
+
+ It looks like you found an issue with our Infrastructure services.
+ Please complete the form below so that we can help to resolve your
+ issue as quickly as possible.
+ - type: checkboxes
+ attributes:
+ label: Is there an existing issue for this?
+ options:
+ - label: I have searched the [existing infra issues](https://github.com/flutter/flutter/issues?q=is%3Aopen+is%3Aissue+label%3Ateam-infra)
+ required: true
+ - type: dropdown
+ attributes:
+ label: Type of Request
+ description: |
+ Is this a bug, feature request or Infra Task?
+
+ If you have a bug and you believe the issue is a blocker please add the P0 label and
+ set the project to 'Infra Ticket Queue.'
+
+ If this is a devicelab feature such as a package update or a device is down please
+ add the 'device-lab' label to the created issue and set the project to 'Infra Ticket Queue.'
+ options:
+ - bug
+ - feature request
+ - infra task
+ default: 0
+ validations:
+ required: true
+ - type: textarea
+ id: env
+ attributes:
+ label: Infrastructure Environment
+ description: |
+ Which part of the infrastructure is this issue occurring? Or, if this is a feature
+ request, where should the feature be implemented?
+ value: LUCI, Github, Cocoon scheduler, Autosubmit, etc...
+ validations:
+ required: true
+ - type: textarea
+ id: affects
+ attributes:
+ label: What is happening?
+ description: |
+ If this is an issue please describe what is happening? If this is a feature request,
+ please describe the use case and provide a proposal of the feature.
+
+ Please include links to build pages, etc.
+ value: Please be descriptive.
+ validations:
+ required: true
+ - type: textarea
+ attributes:
+ label: Steps to reproduce
+ description: If you have a bug please include steps to reproduce the issue.
+ value: |
+ Step 1:
+ Step 2:
+ ..
+ Step n:
+ - type: textarea
+ attributes:
+ label: Expected results
+ description: If you have a bug, What should the expect output be?
+ value: I expect to see X when Y is finished.
diff --git a/.github/ISSUE_TEMPLATE/9_first_party_packages.yml b/.github/ISSUE_TEMPLATE/9_first_party_packages.yml
new file mode 100644
index 0000000000000..0e8ef8ab04b92
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/9_first_party_packages.yml
@@ -0,0 +1,222 @@
+name: Report a bug in one of Flutter's first-party packages
+description: |
+ You found a bug in one of Flutter's first-party packages.
+body:
+ - type: markdown
+ attributes:
+ value: |
+ Thank you for using Flutter!
+
+ If you are looking for support, please check out our documentation
+ or consider asking a question on Stack Overflow:
+
+ - https://flutter.dev/
+ - https://api.flutter.dev/
+ - https://stackoverflow.com/questions/tagged/flutter?sort=frequent
+ - type: checkboxes
+ attributes:
+ label: Is there an existing issue for this?
+ options:
+ - label: I have searched the [existing package issues](https://github.com/flutter/flutter/issues?q=is%3Aopen+is%3Aissue+label%3Apackage)
+ required: true
+ - label: I have read the [guide to filing a bug](https://flutter.dev/docs/resources/bug-reports)
+ required: true
+ - type: dropdown
+ id: packages
+ attributes:
+ label: What package does this bug report belong to?
+ description: |
+ If the package you are reporting a bug for is not listed here,
+ it could be a third party package's issue.
+ In that case, you should report the issue to the package's developers.
+ options:
+ - animations
+ - camera
+ - cross_file
+ - css_colors
+ - dynamic_layouts
+ - espresso
+ - extension_google_sign_in_as_googleapis_auth
+ - file_selector
+ - flutter_adaptive_scaffold
+ - flutter_image
+ - flutter_lints
+ - flutter_markdown
+ - flutter_migrate
+ - flutter_plugin_android_lifecycle
+ - flutter_template_images
+ - go_router
+ - go_router_builder
+ - google_identity_services_web
+ - google_maps_flutter
+ - google_sign_in
+ - image_picker
+ - in_app_purchase
+ - ios_platform_images
+ - local_auth
+ - metrics_center
+ - multicast_dns
+ - palette_generator
+ - path_provider
+ - pigeon
+ - plugin_platform_interface
+ - pointer_interceptor
+ - quick_actions
+ - rfw
+ - shared_preferences
+ - standard_message_codec
+ - url_launcher
+ - video_player
+ - web_benchmarks
+ - webview_flutter
+ - xdg_directories
+ validations:
+ required: true
+ - type: dropdown
+ id: target_platforms
+ attributes:
+ label: What target platforms are you seeing this bug on?
+ description: Have you confirmed that package supports the platform you are reporting against?
+ multiple: true
+ options:
+ - Android
+ - iOS
+ - Web
+ - macOS
+ - Linux
+ - Windows
+ validations:
+ required: true
+ - type: dropdown
+ id: pub_upgrade
+ attributes:
+ label: Have you already upgraded your packages?
+ description: |
+ Please check if the issue still persists or not after running `flutter pub upgrade`.
+ options:
+ - "Yes"
+ - "No"
+ validations:
+ required: true
+ - type: textarea
+ attributes:
+ label: Dependency versions
+ description: |
+ `pubspec.lock` file content that includes the package and its dependencies.
+
+ You can remove private dependencies from the file if they are sensitive.
+
+ If the file is too large to be uploaded to GitHub or the content is too long,
+ you may use online tools like https://pastebin.com and share the url here.
+
+ Note: Please do not upload screenshots of text. Instead, use code blocks
+ or the above mentioned ways to upload this.
+ value: |
+ pubspec.lock
+
+ ```lock
+ [Paste file content here]
+ ```
+
+
+ - type: textarea
+ attributes:
+ label: Steps to reproduce
+ description: Please tell us exactly how to reproduce the problem you are running into.
+ placeholder: |
+ 1. ...
+ 2. ...
+ 3. ...
+ validations:
+ required: true
+ - type: textarea
+ attributes:
+ label: Expected results
+ description: Please tell us what is expected to happen.
+ validations:
+ required: true
+ - type: textarea
+ attributes:
+ label: Actual results
+ description: Please tell us what is actually happening.
+ validations:
+ required: true
+ - type: textarea
+ attributes:
+ label: Code sample
+ description: |
+ Please create a minimal reproducible sample that shows the problem
+ and attach it below between the lines with the backticks.
+
+ To create it, use the `flutter create bug` command and update the `main.dart` file.
+
+ Alternatively, you can create a public GitHub repository to share your sample.
+
+ Without this we will unlikely be able to progress on the issue, and because of that
+ we regretfully will have to close it.
+
+ You can also refer to the package's example project if it is simple enough
+ to reproduce the bug.
+
+ Note: Please do not upload screenshots of text. Instead, use code blocks
+ or the above mentioned ways to upload your code sample.
+ value: |
+ Code sample
+
+ ```dart
+ [Paste your code here]
+ ```
+
+
+ validations:
+ required: true
+ - type: textarea
+ attributes:
+ label: Screenshots or Videos
+ description: |
+ Upload any screenshots or videos of the bug if applicable.
+ value: |
+
+ Screenshots / Video demonstration
+
+ [Upload media here]
+
+
+ - type: textarea
+ attributes:
+ label: Logs
+ description: |
+ Include the full logs of the commands you are running between the lines
+ with the backticks below. If you are running any `flutter` commands,
+ please include the output of running them with `--verbose`; for example,
+ the output of running `flutter --verbose create foo`.
+
+ If the logs are too large to be uploaded to GitHub, you may upload
+ them as a `txt` file or use online tools like https://pastebin.com to
+ share it.
+
+ Note: Please do not upload screenshots of text. Instead, use code blocks
+ or the above mentioned ways to upload logs.
+ value: |
+ Logs
+
+ ```console
+ [Paste your logs here]
+ ```
+
+
+ - type: textarea
+ attributes:
+ label: Flutter Doctor output
+ description: |
+ Please provide the full output of running `flutter doctor -v`
+ value: |
+ Doctor output
+
+ ```console
+ [Paste your output here]
+ ```
+
+
+ validations:
+ required: true
diff --git a/.github/autosubmit.yml b/.github/autosubmit.yml
deleted file mode 100644
index 74f629659d43c..0000000000000
--- a/.github/autosubmit.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-# Copyright 2023 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.
-
-# This file will be added to flutter's internal repository.
-# https://github.com/flutter/flutter/wiki/Autosubmit-bot
-config_path: 'autosubmit/flutter/autosubmit_master.yml'
diff --git a/.github/labeler.yml b/.github/labeler.yml
index b134dfdbc907f..543d4927e9712 100644
--- a/.github/labeler.yml
+++ b/.github/labeler.yml
@@ -13,6 +13,11 @@
- '**/animation/*'
- '**/*animation*'
+'a: desktop':
+ - '**/linux/**/*'
+ - '**/macos/**/*'
+ - '**/windows/**/*'
+
'a: internationalization':
- packages/flutter_localizations/**/*
@@ -72,6 +77,7 @@ framework:
- packages/flutter_goldens_client/**/*
- packages/flutter_test/**/*
- packages/integration_test/**/*
+ - examples/api/**/*
'f: integration_test':
- packages/integration_test/**/*
@@ -79,21 +85,10 @@ framework:
platform-ios:
- packages/flutter_tools/lib/src/ios/**/*
-team:
- - '**/pubspec.yaml'
- - '**/fix_data.yaml'
- - '**/*.expect'
- - '**/*test_fixes*'
- - .github/**/*
- - dev/**/*
- - examples/**/*
- - packages/flutter_goldens/**/*
- - packages/flutter_goldens_client/**/*
-
'customer: gallery':
- examples/flutter_gallery/**/*
-tech-debt:
+'c: tech-debt':
- '**/fix_data.yaml'
- '**/*.expect'
- '**/*test_fixes*'
diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml
index 3d5816c9aef03..a1a23a0dbd350 100644
--- a/.github/workflows/coverage.yml
+++ b/.github/workflows/coverage.yml
@@ -19,11 +19,11 @@ jobs:
runs-on: ubuntu-latest
if: ${{ github.repository == 'flutter/flutter' }}
steps:
- - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9
+ - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744
- name: ./bin/flutter test --coverage
run: pushd packages/flutter;../../bin/flutter test --coverage -j 1;popd
- name: upload coverage
- uses: codecov/codecov-action@894ff025c7b54547a9a2a1e9f228beae737ad3c2
+ uses: codecov/codecov-action@eaaf4bedf32dbdc6b720b63067d99c4d77d6047d
with:
files: packages/flutter/coverage/lcov.info
verbose: true
diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml
index 336d04f809a15..43c62b2a44fc6 100644
--- a/.github/workflows/labeler.yml
+++ b/.github/workflows/labeler.yml
@@ -17,6 +17,6 @@ jobs:
runs-on: ubuntu-latest
steps:
# Source available at https://github.com/actions/labeler/blob/main/README.md
- - uses: actions/labeler@0967ca812e7fdc8f5f71402a1b486d5bd061fe20
+ - uses: actions/labeler@ac9175f8a1f3625fd0d4fb234536d26811351594
with:
- sync-labels: false
+ sync-labels: ''
diff --git a/.github/workflows/lock.yaml b/.github/workflows/lock.yaml
index a587024ef761f..072d4d2de5812 100644
--- a/.github/workflows/lock.yaml
+++ b/.github/workflows/lock.yaml
@@ -18,7 +18,7 @@ jobs:
runs-on: ubuntu-latest
if: ${{ github.repository == 'flutter/flutter' }}
steps:
- - uses: dessant/lock-threads@c1b35aecc5cdb1a34539d14196df55838bb2f836
+ - uses: dessant/lock-threads@be8aa5be94131386884a6da4189effda9b14aa21
with:
process-only: 'issues'
github-token: ${{ github.token }}
diff --git a/.github/workflows/mirror.yml b/.github/workflows/mirror.yml
index 1f6b0d0f57539..a568c78265469 100644
--- a/.github/workflows/mirror.yml
+++ b/.github/workflows/mirror.yml
@@ -21,7 +21,7 @@ jobs:
steps:
- name: Mirror action step
id: mirror
- uses: google/mirror-branch-action@c6b07e441a7ffc5ae15860c1d0a8107a3a151db8
+ uses: google/mirror-branch-action@30c52ee21f5d3bd7fb28b95501c11aae7f17eebb
with:
github-token: ${{ secrets.FLUTTERMIRRORINGBOT_TOKEN }}
source: 'master'
diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml
index 31e4e434b4244..9ee5be88b630b 100644
--- a/.github/workflows/scorecards-analysis.yml
+++ b/.github/workflows/scorecards-analysis.yml
@@ -23,7 +23,7 @@ jobs:
steps:
- name: "Checkout code"
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9
+ uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744
with:
persist-credentials: false
@@ -43,7 +43,7 @@ jobs:
# Upload the results as artifacts (optional).
- name: "Upload artifact"
- uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce
+ uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32
with:
name: SARIF file
path: results.sarif
@@ -51,6 +51,6 @@ jobs:
# Upload the results to GitHub's code scanning dashboard.
- name: "Upload to code-scanning"
- uses: github/codeql-action/upload-sarif@04df1262e6247151b5ac09cd2c303ac36ad3f62b
+ uses: github/codeql-action/upload-sarif@701f152f28d4350ad289a5e31435e9ab6169a7ca
with:
sarif_file: results.sarif
diff --git a/AUTHORS b/AUTHORS
index f557468d0dbf0..974b9c9705715 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -116,3 +116,4 @@ Mike Rydstrom
Harish Anbalagan
Kim Jiun
LinXunFeng
+Sabin Neupane
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
index b24b7393fe543..86f1ec710e107 100644
--- a/CODE_OF_CONDUCT.md
+++ b/CODE_OF_CONDUCT.md
@@ -15,7 +15,7 @@ Specifically:
Should you experience anything that makes you feel unwelcome in Flutter's
community, please contact [conduct@flutter.dev](mailto:conduct@flutter.dev)
or, if you prefer, directly contact someone on the project, for instance
-[Hixie](mailto:ian@hixie.ch) or [Tim](mailto:timsneath@google.com).
+[Hixie](mailto:ian@hixie.ch).
The Flutter project will not tolerate harassment in Flutter's
community, even outside of Flutter's public communication channels.
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 1d73e488ea62e..46e2c045acee5 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -91,7 +91,7 @@ for how to set up your development environment, or ask in #hackers-test on Disco
Developing for Flutter
----------------------
-If you would prefer to write code, you may wish to start with our list of [good first contributions](https://github.com/flutter/flutter/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+contribution%22).
+If you would prefer to write code, you may wish to start with our list of [good first issues](https://github.com/flutter/flutter/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22).
To develop for Flutter, you will eventually need to become familiar
with our processes and conventions. This section lists the documents
diff --git a/README.md b/README.md
index 55de23b6d9950..7fa62d9b5e88e 100644
--- a/README.md
+++ b/README.md
@@ -100,7 +100,7 @@ Information on how to get started can be found in our
[Build Status - Cirrus]: https://api.cirrus-ci.com/github/flutter/flutter.svg
[Build status]: https://cirrus-ci.com/github/flutter/flutter/master
[Discord instructions]: https://github.com/flutter/flutter/wiki/Chat
-[Discord badge]: https://img.shields.io/discord/608014603317936148
+[Discord badge]: https://img.shields.io/discord/608014603317936148?logo=discord
[Twitter handle]: https://img.shields.io/twitter/follow/flutterdev.svg?style=social&label=Follow
[Twitter badge]: https://twitter.com/intent/follow?screen_name=flutterdev
[layered architecture]: https://docs.flutter.dev/resources/inside-flutter
diff --git a/TESTOWNERS b/TESTOWNERS
index 18b3626990c39..4f4096f01b11a 100644
--- a/TESTOWNERS
+++ b/TESTOWNERS
@@ -89,10 +89,21 @@
/dev/devicelab/bin/tasks/spell_check_test_ios.dart @camsim99 @flutter/android
/dev/devicelab/bin/tasks/spell_check_test.dart @camsim99 @flutter/android
/dev/devicelab/bin/tasks/textfield_perf__e2e_summary.dart @zanderso @flutter/engine
+/dev/devicelab/bin/tasks/very_long_picture_scrolling_perf__e2e_summary.dart @flar @flutter/engine
/dev/devicelab/bin/tasks/web_size__compile_test.dart @yjbanov @flutter/web
/dev/devicelab/bin/tasks/wide_gamut_ios.dart @gaaclarke @flutter/engine
+/dev/devicelab/bin/tasks/animated_advanced_blend_perf__timeline_summary.dart @gaaclarke @flutter/engine
+/dev/devicelab/bin/tasks/animated_advanced_blend_perf_ios__timeline_summary.dart @gaaclarke @flutter/engine
+/dev/devicelab/bin/tasks/animated_advanced_blend_perf_opengles__timeline_summary.dart @gaaclarke @flutter/engine
/dev/devicelab/bin/tasks/animated_blur_backdrop_filter_perf__timeline_summary.dart @jonahwilliams @flutter/engine
+/dev/devicelab/bin/tasks/animated_blur_backdrop_filter_perf_opengles__timeline_summary.dart @gaaclarke @flutter/engine
/dev/devicelab/bin/tasks/slider_perf_android.dart @tahatesser @flutter/framework
+/dev/devicelab/bin/tasks/draw_vertices_perf_opengles__timeline_summary.dart @jonahwilliams @flutter/engine
+/dev/devicelab/bin/tasks/draw_atlas_perf_opengles__timeline_summary.dart @jonahwilliams @flutter/engine
+/dev/devicelab/bin/tasks/draw_vertices_perf__timeline_summary.dart @jonahwilliams @flutter/engine
+/dev/devicelab/bin/tasks/draw_atlas_perf__timeline_summary.dart @jonahwilliams @flutter/engine
+/dev/devicelab/bin/tasks/static_path_tessellation_perf__timeline_summary.dart @jonahwilliams @flutter/engine
+/dev/devicelab/bin/tasks/dynamic_path_tessellation_perf__timeline_summary.dart @jonahwilliams @flutter/engine
## Windows Android DeviceLab tests
/dev/devicelab/bin/tasks/basic_material_app_win__compile.dart @zanderso @flutter/tool
@@ -124,6 +135,7 @@
/dev/devicelab/bin/tasks/fullscreen_textfield_perf__timeline_summary.dart @zanderso @flutter/engine
/dev/devicelab/bin/tasks/hello_world__memory.dart @zanderso @flutter/engine
/dev/devicelab/bin/tasks/hello_world_android__compile.dart @zanderso @flutter/tool
+/dev/devicelab/bin/tasks/hello_world_impeller.dart @gaaclarke @flutter/engine
/dev/devicelab/bin/tasks/home_scroll_perf__timeline_summary.dart @zanderso @flutter/engine
/dev/devicelab/bin/tasks/hot_mode_dev_cycle__benchmark.dart @eliasyishak @flutter/tool
/dev/devicelab/bin/tasks/hybrid_android_views_integration_test.dart @stuartmorgan @flutter/plugin
@@ -137,6 +149,7 @@
/dev/devicelab/bin/tasks/microbenchmarks.dart @zanderso @flutter/engine
/dev/devicelab/bin/tasks/new_gallery__transition_perf.dart @zanderso @flutter/engine
/dev/devicelab/bin/tasks/new_gallery_impeller__transition_perf.dart @zanderso @flutter/engine
+/dev/devicelab/bin/tasks/new_gallery_opengles_impeller__transition_perf.dart @gaaclarke @flutter/engine
/dev/devicelab/bin/tasks/picture_cache_perf__timeline_summary.dart @zanderso @flutter/engine
/dev/devicelab/bin/tasks/platform_channel_sample_test.dart @zanderso @flutter/engine
/dev/devicelab/bin/tasks/platform_interaction_test.dart @stuartmorgan @flutter/plugin
@@ -154,7 +167,6 @@
/dev/devicelab/bin/tasks/channels_integration_test_ios.dart @cyanglaz @flutter/engine
/dev/devicelab/bin/tasks/codegen_integration_mac.dart @zanderso @flutter/tool
/dev/devicelab/bin/tasks/color_filter_and_fade_perf_ios__e2e_summary.dart @cyanglaz @flutter/engine
-/dev/devicelab/bin/tasks/complex_layout_ios__compile.dart @cyanglaz @flutter/engine
/dev/devicelab/bin/tasks/complex_layout_ios__start_up.dart @cyanglaz @flutter/engine
/dev/devicelab/bin/tasks/complex_layout_scroll_perf_bad_ios__timeline_summary.dart @jonahwilliams @flutter/engine
/dev/devicelab/bin/tasks/complex_layout_scroll_perf_ios__timeline_summary.dart @cyanglaz @flutter/engine
@@ -189,6 +201,8 @@
/dev/devicelab/bin/tasks/macos_chrome_dev_mode.dart @zanderso @flutter/tool
/dev/devicelab/bin/tasks/microbenchmarks_ios.dart @cyanglaz @flutter/engine
/dev/devicelab/bin/tasks/microbenchmarks_ios_xcode_debug.dart @vashworth @flutter/engine
+/dev/devicelab/bin/tasks/native_assets_ios_simulator.dart @dacoharkes @flutter/ios
+/dev/devicelab/bin/tasks/native_assets_ios.dart @dacoharkes @flutter/ios
/dev/devicelab/bin/tasks/native_platform_view_ui_tests_ios.dart @hellohuanlin @flutter/ios
/dev/devicelab/bin/tasks/new_gallery_ios__transition_perf.dart @zanderso @flutter/engine
/dev/devicelab/bin/tasks/new_gallery_skia_ios__transition_perf.dart @zanderso @flutter/engine
@@ -203,8 +217,13 @@
/dev/devicelab/bin/tasks/route_test_ios.dart @vashworth @flutter/tool
/dev/devicelab/bin/tasks/simple_animation_perf_ios.dart @cyanglaz @flutter/engine
/dev/devicelab/bin/tasks/tiles_scroll_perf_ios__timeline_summary.dart @cyanglaz @flutter/engine
+/dev/devicelab/bin/tasks/very_long_picture_scrolling_perf_ios__e2e_summary.dart @flar @flutter/engine
/dev/devicelab/bin/tasks/animated_blur_backdrop_filter_perf_ios__timeline_summary.dart @jonahwilliams @flutter/engine
/dev/devicelab/bin/tasks/draw_points_perf_ios__timeline_summary.dart @jonahwilliams @flutter/engine
+/dev/devicelab/bin/tasks/draw_vertices_perf_ios__timeline_summary.dart @jonahwilliams @flutter/engine
+/dev/devicelab/bin/tasks/draw_atlas_perf_ios__timeline_summary.dart @jonahwilliams @flutter/engine
+/dev/devicelab/bin/tasks/static_path_tessellation_perf_ios__timeline_summary.dart @jonahwilliams @flutter/engine
+/dev/devicelab/bin/tasks/dynamic_path_tessellation_perf_ios__timeline_summary.dart @jonahwilliams @flutter/engine
## Host only DeviceLab tests
/dev/devicelab/bin/tasks/animated_complex_opacity_perf_macos__e2e_summary.dart @cbracken @flutter/desktop
diff --git a/analysis_options.yaml b/analysis_options.yaml
index 747d8e24b4750..6bf95b55f404d 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -17,6 +17,7 @@
analyzer:
language:
strict-casts: true
+ strict-inference: true
strict-raw-types: true
errors:
# allow self-reference to deprecated members (we do this because otherwise we have
@@ -50,7 +51,7 @@ linter:
- avoid_field_initializers_in_const_classes
# - avoid_final_parameters # incompatible with prefer_final_parameters
- avoid_function_literals_in_foreach_calls
- - avoid_implementing_value_types
+ # - avoid_implementing_value_types # see https://github.com/dart-lang/linter/issues/4558
- avoid_init_to_null
- avoid_js_rounded_ints
# - avoid_multiple_declarations_per_line # seems to be a stylistic choice we don't subscribe to
@@ -116,7 +117,7 @@ linter:
- library_prefixes
- library_private_types_in_public_api
# - lines_longer_than_80_chars # not required by flutter style
- # - literal_only_boolean_expressions # too many false positives: https://github.com/dart-lang/linter/issues/453
+ - literal_only_boolean_expressions
# - matching_super_parameters # blocked on https://github.com/dart-lang/language/issues/2509
- missing_whitespace_between_adjacent_strings
- no_adjacent_strings_in_list
diff --git a/bin/dart b/bin/dart
index 0c1f402819bee..9ef65c2c43645 100755
--- a/bin/dart
+++ b/bin/dart
@@ -45,6 +45,7 @@ function follow_links() (
PROG_NAME="$(follow_links "${BASH_SOURCE[0]}")"
BIN_DIR="$(cd "${PROG_NAME%/*}" ; pwd -P)"
+SHARED_NAME="$BIN_DIR/internal/shared.sh"
OS="$(uname -s)"
# If we're on Windows, invoke the batch script instead to get proper locking.
@@ -53,6 +54,6 @@ if [[ $OS =~ MINGW.* || $OS =~ CYGWIN.* || $OS =~ MSYS.* ]]; then
fi
# To define `shared::execute()` function
-source "$BIN_DIR/internal/shared.sh"
+source "$SHARED_NAME"
shared::execute "$@"
diff --git a/bin/flutter b/bin/flutter
index 9347b8dad6949..21c11c7e7e8ec 100755
--- a/bin/flutter
+++ b/bin/flutter
@@ -50,6 +50,7 @@ function follow_links() (
PROG_NAME="$(follow_links "${BASH_SOURCE[0]}")"
BIN_DIR="$(cd "${PROG_NAME%/*}" ; pwd -P)"
+SHARED_NAME="$BIN_DIR/internal/shared.sh"
OS="$(uname -s)"
# If we're on Windows, invoke the batch script instead to get proper locking.
@@ -58,6 +59,6 @@ if [[ $OS =~ MINGW.* || $OS =~ CYGWIN.* || $OS =~ MSYS.* ]]; then
fi
# To define `shared::execute()` function
-source "$BIN_DIR/internal/shared.sh"
+source "$SHARED_NAME"
shared::execute "$@"
diff --git a/bin/internal/engine.realm b/bin/internal/engine.realm
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/bin/internal/engine.version b/bin/internal/engine.version
index 94b85f4a34321..77be70ab6a124 100644
--- a/bin/internal/engine.version
+++ b/bin/internal/engine.version
@@ -1 +1 @@
-0757a9001dc3dcfce6f09fdd443904827274d22e
+3c2ea337f67ff735d8b47a891c044ba038cb829e
\ No newline at end of file
diff --git a/bin/internal/flutter_packages.version b/bin/internal/flutter_packages.version
index 3999e9c238279..cf81bee4c12fb 100644
--- a/bin/internal/flutter_packages.version
+++ b/bin/internal/flutter_packages.version
@@ -1 +1 @@
-771ec9b42a382b2282d2a18f99e96b6276d7063c
+c070b0a7a80a54d5fad254fecdfd98ffe764bd4e
diff --git a/bin/internal/fuchsia-linux.version b/bin/internal/fuchsia-linux.version
index 11f77a582348c..6331e09a5f423 100644
--- a/bin/internal/fuchsia-linux.version
+++ b/bin/internal/fuchsia-linux.version
@@ -1 +1 @@
-iwgWLB4KaXslnaGwKuAD5S9wamgkF0Mj9a411131XdkC
+l2RxJKPfYn7QzGOoLPUPk0FyRZxbYTRv1JiQJgUbm9sC
diff --git a/bin/internal/fuchsia-mac.version b/bin/internal/fuchsia-mac.version
index 40252d6d5a90b..87ee95f0b4107 100644
--- a/bin/internal/fuchsia-mac.version
+++ b/bin/internal/fuchsia-mac.version
@@ -1 +1 @@
-C3Q7MJBYkiin8zw-fLJ9QmM-8anKHqabR7B2KFuBYUgC
+4WW3KRrAbuY7VeGT0pBFAQktetsyx-3C0mKMNxCd0uYC
diff --git a/bin/internal/release-candidate-branch.version b/bin/internal/release-candidate-branch.version
index e9546287aea5d..0ca38b3c50500 100644
--- a/bin/internal/release-candidate-branch.version
+++ b/bin/internal/release-candidate-branch.version
@@ -1 +1 @@
-flutter-3.13-candidate.0
+flutter-3.16-candidate.0
diff --git a/bin/internal/shared.sh b/bin/internal/shared.sh
index 3532c23114a57..75d9d3013eb27 100644
--- a/bin/internal/shared.sh
+++ b/bin/internal/shared.sh
@@ -229,7 +229,23 @@ function shared::execute() {
exit 1
fi
- upgrade_flutter 7< "$PROG_NAME"
+ # File descriptor 7 is prepared here so that we can use it with
+ # flock(1) in _lock() (see above).
+ #
+ # We use number 7 because it's a luckier number than 3; luck is
+ # important when making locks work reliably. Also because that way
+ # if anyone is redirecting other file descriptors there's less
+ # chance of a conflict.
+ #
+ # In any case, the file we redirect into this file descriptor is
+ # this very source file you are reading right now, because that's
+ # the only file we can truly guarantee exists, since we're running
+ # it. We don't use PROG_NAME because otherwise if you run `dart` and
+ # `flutter` simultaneously they'll end up using different lock files
+ # and will corrupt each others' downloads.
+ #
+ # SHARED_NAME itself is prepared by the caller script.
+ upgrade_flutter 7< "$SHARED_NAME"
BIN_NAME="$(basename "$PROG_NAME")"
case "$BIN_NAME" in
diff --git a/bin/internal/update_dart_sdk.ps1 b/bin/internal/update_dart_sdk.ps1
index f4e2e77a55886..9dbef7cf5c9ab 100644
--- a/bin/internal/update_dart_sdk.ps1
+++ b/bin/internal/update_dart_sdk.ps1
@@ -18,8 +18,10 @@ $flutterRoot = (Get-Item $progName).parent.parent.FullName
$cachePath = "$flutterRoot\bin\cache"
$dartSdkPath = "$cachePath\dart-sdk"
+$dartSdkLicense = "$cachePath\LICENSE.dart_sdk_archive.md"
$engineStamp = "$cachePath\engine-dart-sdk.stamp"
$engineVersion = (Get-Content "$flutterRoot\bin\internal\engine.version")
+$engineRealm = (Get-Content "$flutterRoot\bin\internal\engine.realm")
$oldDartSdkPrefix = "dart-sdk.old"
@@ -42,14 +44,24 @@ $dartSdkBaseUrl = $Env:FLUTTER_STORAGE_BASE_URL
if (-not $dartSdkBaseUrl) {
$dartSdkBaseUrl = "https://storage.googleapis.com"
}
+if ($engineRealm) {
+ $dartSdkBaseUrl = "$dartSdkBaseUrl/$engineRealm"
+}
$dartZipName = "dart-sdk-windows-x64.zip"
$dartSdkUrl = "$dartSdkBaseUrl/flutter_infra_release/flutter/$engineVersion/$dartZipName"
-if (Test-Path $dartSdkPath) {
+if ((Test-Path $dartSdkPath) -or (Test-Path $dartSdkLicense)) {
# Move old SDK to a new location instead of deleting it in case it is still in use (e.g. by IntelliJ).
$oldDartSdkSuffix = 1
while (Test-Path "$cachePath\$oldDartSdkPrefix$oldDartSdkSuffix") { $oldDartSdkSuffix++ }
- Rename-Item $dartSdkPath "$oldDartSdkPrefix$oldDartSdkSuffix"
+
+ if (Test-Path $dartSdkPath) {
+ Rename-Item $dartSdkPath "$oldDartSdkPrefix$oldDartSdkSuffix"
+ }
+
+ if (Test-Path $dartSdkLicense) {
+ Rename-Item $dartSdkLicense "$oldDartSdkPrefix$oldDartSdkSuffix.LICENSE.md"
+ }
}
New-Item $dartSdkPath -force -type directory | Out-Null
$dartSdkZip = "$cachePath\$dartZipName"
@@ -71,18 +83,21 @@ Catch {
$ProgressPreference = $OriginalProgressPreference
}
-Write-Host "Expanding downloaded archive..."
If (Get-Command 7z -errorAction SilentlyContinue) {
+ Write-Host "Expanding downloaded archive with 7z..."
# The built-in unzippers are painfully slow. Use 7-Zip, if available.
& 7z x $dartSdkZip "-o$cachePath" -bd | Out-Null
} ElseIf (Get-Command 7za -errorAction SilentlyContinue) {
+ Write-Host "Expanding downloaded archive with 7za..."
# Use 7-Zip's standalone version 7za.exe, if available.
& 7za x $dartSdkZip "-o$cachePath" -bd | Out-Null
} ElseIf (Get-Command Microsoft.PowerShell.Archive\Expand-Archive -errorAction SilentlyContinue) {
+ Write-Host "Expanding downloaded archive with PowerShell..."
# Use PowerShell's built-in unzipper, if available (requires PowerShell 5+).
$global:ProgressPreference='SilentlyContinue'
Microsoft.PowerShell.Archive\Expand-Archive $dartSdkZip -DestinationPath $cachePath
} Else {
+ Write-Host "Expanding downloaded archive with Windows..."
# As last resort: fall back to the Windows GUI.
$shell = New-Object -com shell.application
$zip = $shell.NameSpace($dartSdkZip)
@@ -94,5 +109,5 @@ If (Get-Command 7z -errorAction SilentlyContinue) {
Remove-Item $dartSdkZip
$engineVersion | Out-File $engineStamp -Encoding ASCII
-# Try to delete all old SDKs.
+# Try to delete all old SDKs and license files.
Get-ChildItem -Path $cachePath | Where {$_.BaseName.StartsWith($oldDartSdkPrefix)} | Remove-Item -Recurse -ErrorAction SilentlyContinue
diff --git a/bin/internal/update_dart_sdk.sh b/bin/internal/update_dart_sdk.sh
index 0f1a238048886..8aed2f47861d7 100755
--- a/bin/internal/update_dart_sdk.sh
+++ b/bin/internal/update_dart_sdk.sh
@@ -20,6 +20,7 @@ DART_SDK_PATH="$FLUTTER_ROOT/bin/cache/dart-sdk"
DART_SDK_PATH_OLD="$DART_SDK_PATH.old"
ENGINE_STAMP="$FLUTTER_ROOT/bin/cache/engine-dart-sdk.stamp"
ENGINE_VERSION=`cat "$FLUTTER_ROOT/bin/internal/engine.version"`
+ENGINE_REALM=`cat "$FLUTTER_ROOT/bin/internal/engine.realm"`
OS="$(uname -s)"
if [ ! -f "$ENGINE_STAMP" ] || [ "$ENGINE_VERSION" != `cat "$ENGINE_STAMP"` ]; then
@@ -121,7 +122,7 @@ if [ ! -f "$ENGINE_STAMP" ] || [ "$ENGINE_VERSION" != `cat "$ENGINE_STAMP"` ]; t
FIND=find
fi
- DART_SDK_BASE_URL="${FLUTTER_STORAGE_BASE_URL:-https://storage.googleapis.com}"
+ DART_SDK_BASE_URL="${FLUTTER_STORAGE_BASE_URL:-https://storage.googleapis.com}${ENGINE_REALM:+/$ENGINE_REALM}"
DART_SDK_URL="$DART_SDK_BASE_URL/flutter_infra_release/flutter/$ENGINE_VERSION/$DART_ZIP_NAME"
# if the sdk path exists, copy it to a temporary location
diff --git a/dev/a11y_assessments/.gitignore b/dev/a11y_assessments/.gitignore
new file mode 100644
index 0000000000000..24476c5d1eb55
--- /dev/null
+++ b/dev/a11y_assessments/.gitignore
@@ -0,0 +1,44 @@
+# Miscellaneous
+*.class
+*.log
+*.pyc
+*.swp
+.DS_Store
+.atom/
+.buildlog/
+.history
+.svn/
+migrate_working_dir/
+
+# IntelliJ related
+*.iml
+*.ipr
+*.iws
+.idea/
+
+# The .vscode folder contains launch configuration and tasks you configure in
+# VS Code which you may wish to be included in version control, so this line
+# is commented out by default.
+#.vscode/
+
+# Flutter/Dart/Pub related
+**/doc/api/
+**/ios/Flutter/.last_build_id
+.dart_tool/
+.flutter-plugins
+.flutter-plugins-dependencies
+.packages
+.pub-cache/
+.pub/
+/build/
+
+# Symbolication related
+app.*.symbols
+
+# Obfuscation related
+app.*.map.json
+
+# Android Studio will place build artifacts here
+/android/app/debug
+/android/app/profile
+/android/app/release
diff --git a/dev/a11y_assessments/.metadata b/dev/a11y_assessments/.metadata
new file mode 100644
index 0000000000000..f35b49906d8e5
--- /dev/null
+++ b/dev/a11y_assessments/.metadata
@@ -0,0 +1,45 @@
+# This file tracks properties of this Flutter project.
+# Used by Flutter tool to assess capabilities and perform upgrades etc.
+#
+# This file should be version controlled and should not be manually edited.
+
+version:
+ revision: "b9c3f1f74c075a1766fd74418b5d79f528cf8c74"
+ channel: "master"
+
+project_type: app
+
+# Tracks metadata for the flutter migrate command
+migration:
+ platforms:
+ - platform: root
+ create_revision: b9c3f1f74c075a1766fd74418b5d79f528cf8c74
+ base_revision: b9c3f1f74c075a1766fd74418b5d79f528cf8c74
+ - platform: android
+ create_revision: b9c3f1f74c075a1766fd74418b5d79f528cf8c74
+ base_revision: b9c3f1f74c075a1766fd74418b5d79f528cf8c74
+ - platform: ios
+ create_revision: b9c3f1f74c075a1766fd74418b5d79f528cf8c74
+ base_revision: b9c3f1f74c075a1766fd74418b5d79f528cf8c74
+ - platform: linux
+ create_revision: b9c3f1f74c075a1766fd74418b5d79f528cf8c74
+ base_revision: b9c3f1f74c075a1766fd74418b5d79f528cf8c74
+ - platform: macos
+ create_revision: b9c3f1f74c075a1766fd74418b5d79f528cf8c74
+ base_revision: b9c3f1f74c075a1766fd74418b5d79f528cf8c74
+ - platform: web
+ create_revision: b9c3f1f74c075a1766fd74418b5d79f528cf8c74
+ base_revision: b9c3f1f74c075a1766fd74418b5d79f528cf8c74
+ - platform: windows
+ create_revision: b9c3f1f74c075a1766fd74418b5d79f528cf8c74
+ base_revision: b9c3f1f74c075a1766fd74418b5d79f528cf8c74
+
+ # User provided section
+
+ # List of Local paths (relative to this file) that should be
+ # ignored by the migrate tool.
+ #
+ # Files that are not part of the templates will be ignored by default.
+ unmanaged_files:
+ - 'lib/main.dart'
+ - 'ios/Runner.xcodeproj/project.pbxproj'
diff --git a/dev/a11y_assessments/README.md b/dev/a11y_assessments/README.md
new file mode 100644
index 0000000000000..1f8a64cafb983
--- /dev/null
+++ b/dev/a11y_assessments/README.md
@@ -0,0 +1,3 @@
+# a11y_assessments
+
+An application to conduct accessibility assessments.
diff --git a/dev/a11y_assessments/analysis_options.yaml b/dev/a11y_assessments/analysis_options.yaml
new file mode 100644
index 0000000000000..f04c6cf0f30d4
--- /dev/null
+++ b/dev/a11y_assessments/analysis_options.yaml
@@ -0,0 +1 @@
+include: ../../analysis_options.yaml
diff --git a/dev/a11y_assessments/android/.gitignore b/dev/a11y_assessments/android/.gitignore
new file mode 100644
index 0000000000000..6f568019d3c69
--- /dev/null
+++ b/dev/a11y_assessments/android/.gitignore
@@ -0,0 +1,13 @@
+gradle-wrapper.jar
+/.gradle
+/captures/
+/gradlew
+/gradlew.bat
+/local.properties
+GeneratedPluginRegistrant.java
+
+# Remember to never publicly share your keystore.
+# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
+key.properties
+**/*.keystore
+**/*.jks
diff --git a/dev/a11y_assessments/android/app/build.gradle b/dev/a11y_assessments/android/app/build.gradle
new file mode 100644
index 0000000000000..c60f9f431e37e
--- /dev/null
+++ b/dev/a11y_assessments/android/app/build.gradle
@@ -0,0 +1,71 @@
+// 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.
+
+plugins {
+ id "com.android.application"
+ id "kotlin-android"
+ id "dev.flutter.flutter-gradle-plugin"
+}
+
+def localProperties = new Properties()
+def localPropertiesFile = rootProject.file('local.properties')
+if (localPropertiesFile.exists()) {
+ localPropertiesFile.withReader('UTF-8') { reader ->
+ localProperties.load(reader)
+ }
+}
+
+def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
+if (flutterVersionCode == null) {
+ flutterVersionCode = '1'
+}
+
+def flutterVersionName = localProperties.getProperty('flutter.versionName')
+if (flutterVersionName == null) {
+ flutterVersionName = '1.0'
+}
+
+android {
+ namespace "com.example.a11y_assessments"
+ compileSdkVersion flutter.compileSdkVersion
+ ndkVersion flutter.ndkVersion
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+
+ kotlinOptions {
+ jvmTarget = '1.8'
+ }
+
+ sourceSets {
+ main.java.srcDirs += 'src/main/kotlin'
+ }
+
+ defaultConfig {
+ // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
+ applicationId "dev.flutter.a11yassessments"
+ // You can update the following values to match your application needs.
+ // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
+ minSdkVersion flutter.minSdkVersion
+ targetSdkVersion flutter.targetSdkVersion
+ versionCode flutterVersionCode.toInteger()
+ versionName flutterVersionName
+ }
+
+ buildTypes {
+ release {
+ // TODO: Add your own signing config for the release build.
+ // Signing with the debug keys for now, so `flutter run --release` works.
+ signingConfig signingConfigs.debug
+ }
+ }
+}
+
+flutter {
+ source '../..'
+}
+
+dependencies {}
diff --git a/dev/a11y_assessments/android/app/src/debug/AndroidManifest.xml b/dev/a11y_assessments/android/app/src/debug/AndroidManifest.xml
new file mode 100644
index 0000000000000..e00f903eae2aa
--- /dev/null
+++ b/dev/a11y_assessments/android/app/src/debug/AndroidManifest.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
diff --git a/dev/a11y_assessments/android/app/src/main/AndroidManifest.xml b/dev/a11y_assessments/android/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000000000..a1c931a7a55b9
--- /dev/null
+++ b/dev/a11y_assessments/android/app/src/main/AndroidManifest.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dev/a11y_assessments/android/app/src/main/kotlin/com/example/a11y_assessments/MainActivity.kt b/dev/a11y_assessments/android/app/src/main/kotlin/com/example/a11y_assessments/MainActivity.kt
new file mode 100644
index 0000000000000..43273ce8d8255
--- /dev/null
+++ b/dev/a11y_assessments/android/app/src/main/kotlin/com/example/a11y_assessments/MainActivity.kt
@@ -0,0 +1,6 @@
+package com.example.a11y_assessments
+
+import io.flutter.embedding.android.FlutterActivity
+
+class MainActivity: FlutterActivity() {
+}
diff --git a/dev/a11y_assessments/android/app/src/main/res/drawable-v21/launch_background.xml b/dev/a11y_assessments/android/app/src/main/res/drawable-v21/launch_background.xml
new file mode 100644
index 0000000000000..9f19e2f90407e
--- /dev/null
+++ b/dev/a11y_assessments/android/app/src/main/res/drawable-v21/launch_background.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/dev/a11y_assessments/android/app/src/main/res/drawable/launch_background.xml b/dev/a11y_assessments/android/app/src/main/res/drawable/launch_background.xml
new file mode 100644
index 0000000000000..3727f9e00a029
--- /dev/null
+++ b/dev/a11y_assessments/android/app/src/main/res/drawable/launch_background.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/dev/a11y_assessments/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/dev/a11y_assessments/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000000000..db77bb4b7b090
Binary files /dev/null and b/dev/a11y_assessments/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/dev/a11y_assessments/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/dev/a11y_assessments/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000000000..17987b79bb8a3
Binary files /dev/null and b/dev/a11y_assessments/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/dev/a11y_assessments/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/dev/a11y_assessments/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000000000..09d4391482be6
Binary files /dev/null and b/dev/a11y_assessments/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/dev/a11y_assessments/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/dev/a11y_assessments/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000000000..d5f1c8d34e7a8
Binary files /dev/null and b/dev/a11y_assessments/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/dev/a11y_assessments/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/dev/a11y_assessments/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000000000..4d6372eebdb28
Binary files /dev/null and b/dev/a11y_assessments/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/dev/a11y_assessments/android/app/src/main/res/values-night/styles.xml b/dev/a11y_assessments/android/app/src/main/res/values-night/styles.xml
new file mode 100644
index 0000000000000..f3ab3e83cd361
--- /dev/null
+++ b/dev/a11y_assessments/android/app/src/main/res/values-night/styles.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
diff --git a/dev/a11y_assessments/android/app/src/main/res/values/styles.xml b/dev/a11y_assessments/android/app/src/main/res/values/styles.xml
new file mode 100644
index 0000000000000..9a0ead3c04f75
--- /dev/null
+++ b/dev/a11y_assessments/android/app/src/main/res/values/styles.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
diff --git a/dev/a11y_assessments/android/app/src/profile/AndroidManifest.xml b/dev/a11y_assessments/android/app/src/profile/AndroidManifest.xml
new file mode 100644
index 0000000000000..e00f903eae2aa
--- /dev/null
+++ b/dev/a11y_assessments/android/app/src/profile/AndroidManifest.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
diff --git a/dev/a11y_assessments/android/build.gradle b/dev/a11y_assessments/android/build.gradle
new file mode 100644
index 0000000000000..d93b7eb6e10e2
--- /dev/null
+++ b/dev/a11y_assessments/android/build.gradle
@@ -0,0 +1,35 @@
+// 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.
+
+buildscript {
+ ext.kotlin_version = '1.7.10'
+ repositories {
+ google()
+ mavenCentral()
+ }
+
+ dependencies {
+ classpath 'com.android.tools.build:gradle:7.3.0'
+ classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
+ }
+}
+
+allprojects {
+ repositories {
+ google()
+ mavenCentral()
+ }
+}
+
+rootProject.buildDir = '../build'
+subprojects {
+ project.buildDir = "${rootProject.buildDir}/${project.name}"
+}
+subprojects {
+ project.evaluationDependsOn(':app')
+}
+
+tasks.register("clean", Delete) {
+ delete rootProject.buildDir
+}
diff --git a/dev/a11y_assessments/android/gradle.properties b/dev/a11y_assessments/android/gradle.properties
new file mode 100644
index 0000000000000..598d13fee4463
--- /dev/null
+++ b/dev/a11y_assessments/android/gradle.properties
@@ -0,0 +1,3 @@
+org.gradle.jvmargs=-Xmx4G
+android.useAndroidX=true
+android.enableJetifier=true
diff --git a/dev/a11y_assessments/android/gradle/wrapper/gradle-wrapper.properties b/dev/a11y_assessments/android/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000000000..3c472b99c6f35
--- /dev/null
+++ b/dev/a11y_assessments/android/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip
diff --git a/packages/flutter_tools/templates/app_shared/android.tmpl/settings.gradle b/dev/a11y_assessments/android/settings.gradle
similarity index 80%
rename from packages/flutter_tools/templates/app_shared/android.tmpl/settings.gradle
rename to dev/a11y_assessments/android/settings.gradle
index 55c4ca8b109a4..13766f66084b4 100644
--- a/packages/flutter_tools/templates/app_shared/android.tmpl/settings.gradle
+++ b/dev/a11y_assessments/android/settings.gradle
@@ -1,3 +1,7 @@
+// 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.
+
pluginManagement {
def flutterSdkPath = {
def properties = new Properties()
diff --git a/dev/a11y_assessments/ios/.gitignore b/dev/a11y_assessments/ios/.gitignore
new file mode 100644
index 0000000000000..7a7f9873ad7dc
--- /dev/null
+++ b/dev/a11y_assessments/ios/.gitignore
@@ -0,0 +1,34 @@
+**/dgph
+*.mode1v3
+*.mode2v3
+*.moved-aside
+*.pbxuser
+*.perspectivev3
+**/*sync/
+.sconsign.dblite
+.tags*
+**/.vagrant/
+**/DerivedData/
+Icon?
+**/Pods/
+**/.symlinks/
+profile
+xcuserdata
+**/.generated/
+Flutter/App.framework
+Flutter/Flutter.framework
+Flutter/Flutter.podspec
+Flutter/Generated.xcconfig
+Flutter/ephemeral/
+Flutter/app.flx
+Flutter/app.zip
+Flutter/flutter_assets/
+Flutter/flutter_export_environment.sh
+ServiceDefinitions.json
+Runner/GeneratedPluginRegistrant.*
+
+# Exceptions to above rules.
+!default.mode1v3
+!default.mode2v3
+!default.pbxuser
+!default.perspectivev3
diff --git a/dev/a11y_assessments/ios/Flutter/AppFrameworkInfo.plist b/dev/a11y_assessments/ios/Flutter/AppFrameworkInfo.plist
new file mode 100644
index 0000000000000..9625e105df39e
--- /dev/null
+++ b/dev/a11y_assessments/ios/Flutter/AppFrameworkInfo.plist
@@ -0,0 +1,26 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ en
+ CFBundleExecutable
+ App
+ CFBundleIdentifier
+ io.flutter.flutter.app
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ App
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1.0
+ MinimumOSVersion
+ 11.0
+
+
diff --git a/dev/a11y_assessments/ios/Flutter/Debug.xcconfig b/dev/a11y_assessments/ios/Flutter/Debug.xcconfig
new file mode 100644
index 0000000000000..592ceee85b89b
--- /dev/null
+++ b/dev/a11y_assessments/ios/Flutter/Debug.xcconfig
@@ -0,0 +1 @@
+#include "Generated.xcconfig"
diff --git a/dev/a11y_assessments/ios/Flutter/Release.xcconfig b/dev/a11y_assessments/ios/Flutter/Release.xcconfig
new file mode 100644
index 0000000000000..592ceee85b89b
--- /dev/null
+++ b/dev/a11y_assessments/ios/Flutter/Release.xcconfig
@@ -0,0 +1 @@
+#include "Generated.xcconfig"
diff --git a/dev/a11y_assessments/ios/Runner.xcodeproj/project.pbxproj b/dev/a11y_assessments/ios/Runner.xcodeproj/project.pbxproj
new file mode 100644
index 0000000000000..142bb384b0dd1
--- /dev/null
+++ b/dev/a11y_assessments/ios/Runner.xcodeproj/project.pbxproj
@@ -0,0 +1,613 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 54;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
+ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; };
+ 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
+ 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
+ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
+ 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
+ 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 97C146E61CF9000F007C117D /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 97C146ED1CF9000F007C117D;
+ remoteInfo = Runner;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 9705A1C41CF9048500538489 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; };
+ 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; };
+ 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; };
+ 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+ 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; };
+ 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; };
+ 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
+ 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; };
+ 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; };
+ 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; };
+ 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
+ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
+ 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
+ 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 97C146EB1CF9000F007C117D /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 331C8082294A63A400263BE5 /* RunnerTests */ = {
+ isa = PBXGroup;
+ children = (
+ 331C807B294A618700263BE5 /* RunnerTests.swift */,
+ );
+ path = RunnerTests;
+ sourceTree = "";
+ };
+ 9740EEB11CF90186004384FC /* Flutter */ = {
+ isa = PBXGroup;
+ children = (
+ 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
+ 9740EEB21CF90195004384FC /* Debug.xcconfig */,
+ 7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
+ 9740EEB31CF90195004384FC /* Generated.xcconfig */,
+ );
+ name = Flutter;
+ sourceTree = "";
+ };
+ 97C146E51CF9000F007C117D = {
+ isa = PBXGroup;
+ children = (
+ 9740EEB11CF90186004384FC /* Flutter */,
+ 97C146F01CF9000F007C117D /* Runner */,
+ 97C146EF1CF9000F007C117D /* Products */,
+ 331C8082294A63A400263BE5 /* RunnerTests */,
+ );
+ sourceTree = "";
+ };
+ 97C146EF1CF9000F007C117D /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 97C146EE1CF9000F007C117D /* Runner.app */,
+ 331C8081294A63A400263BE5 /* RunnerTests.xctest */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 97C146F01CF9000F007C117D /* Runner */ = {
+ isa = PBXGroup;
+ children = (
+ 97C146FA1CF9000F007C117D /* Main.storyboard */,
+ 97C146FD1CF9000F007C117D /* Assets.xcassets */,
+ 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
+ 97C147021CF9000F007C117D /* Info.plist */,
+ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
+ 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
+ 74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
+ 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
+ );
+ path = Runner;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 331C8080294A63A400263BE5 /* RunnerTests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */;
+ buildPhases = (
+ 331C807D294A63A400263BE5 /* Sources */,
+ 331C807F294A63A400263BE5 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 331C8086294A63A400263BE5 /* PBXTargetDependency */,
+ );
+ name = RunnerTests;
+ productName = RunnerTests;
+ productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
+ 97C146ED1CF9000F007C117D /* Runner */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
+ buildPhases = (
+ 9740EEB61CF901F6004384FC /* Run Script */,
+ 97C146EA1CF9000F007C117D /* Sources */,
+ 97C146EB1CF9000F007C117D /* Frameworks */,
+ 97C146EC1CF9000F007C117D /* Resources */,
+ 9705A1C41CF9048500538489 /* Embed Frameworks */,
+ 3B06AD1E1E4923F5004D2608 /* Thin Binary */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = Runner;
+ productName = Runner;
+ productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 97C146E61CF9000F007C117D /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ BuildIndependentTargetsInParallel = YES;
+ LastUpgradeCheck = 1430;
+ ORGANIZATIONNAME = "";
+ TargetAttributes = {
+ 331C8080294A63A400263BE5 = {
+ CreatedOnToolsVersion = 14.0;
+ TestTargetID = 97C146ED1CF9000F007C117D;
+ };
+ 97C146ED1CF9000F007C117D = {
+ CreatedOnToolsVersion = 7.3.1;
+ LastSwiftMigration = 1100;
+ };
+ };
+ };
+ buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
+ compatibilityVersion = "Xcode 9.3";
+ developmentRegion = en;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ Base,
+ );
+ mainGroup = 97C146E51CF9000F007C117D;
+ productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 97C146ED1CF9000F007C117D /* Runner */,
+ 331C8080294A63A400263BE5 /* RunnerTests */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 331C807F294A63A400263BE5 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 97C146EC1CF9000F007C117D /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
+ 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
+ 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
+ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
+ isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
+ );
+ name = "Thin Binary";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
+ };
+ 9740EEB61CF901F6004384FC /* Run Script */ = {
+ isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Run Script";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 331C807D294A63A400263BE5 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 97C146EA1CF9000F007C117D /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
+ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ 331C8086294A63A400263BE5 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 97C146ED1CF9000F007C117D /* Runner */;
+ targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin PBXVariantGroup section */
+ 97C146FA1CF9000F007C117D /* Main.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 97C146FB1CF9000F007C117D /* Base */,
+ );
+ name = Main.storyboard;
+ sourceTree = "";
+ };
+ 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 97C147001CF9000F007C117D /* Base */,
+ );
+ name = LaunchScreen.storyboard;
+ sourceTree = "";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ 249021D3217E4FDB00AE95B9 /* Profile */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ SDKROOT = iphoneos;
+ SUPPORTED_PLATFORMS = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Profile;
+ };
+ 249021D4217E4FDB00AE95B9 /* Profile */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ENABLE_MODULES = YES;
+ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
+ DEVELOPMENT_TEAM = S8QB4VV633;
+ ENABLE_BITCODE = NO;
+ INFOPLIST_FILE = Runner/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.a11yAssessments;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
+ SWIFT_VERSION = 5.0;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Profile;
+ };
+ 331C8088294A63A400263BE5 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ GENERATE_INFOPLIST_FILE = YES;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = com.example.a11yAssessments.RunnerTests;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
+ };
+ name = Debug;
+ };
+ 331C8089294A63A400263BE5 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ GENERATE_INFOPLIST_FILE = YES;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = com.example.a11yAssessments.RunnerTests;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_VERSION = 5.0;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
+ };
+ name = Release;
+ };
+ 331C808A294A63A400263BE5 /* Profile */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ GENERATE_INFOPLIST_FILE = YES;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = com.example.a11yAssessments.RunnerTests;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_VERSION = 5.0;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
+ };
+ name = Profile;
+ };
+ 97C147031CF9000F007C117D /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ 97C147041CF9000F007C117D /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ SDKROOT = iphoneos;
+ SUPPORTED_PLATFORMS = iphoneos;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-O";
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ 97C147061CF9000F007C117D /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ENABLE_MODULES = YES;
+ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
+ DEVELOPMENT_TEAM = S8QB4VV633;
+ ENABLE_BITCODE = NO;
+ INFOPLIST_FILE = Runner/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.a11yAssessments;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Debug;
+ };
+ 97C147071CF9000F007C117D /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ENABLE_MODULES = YES;
+ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
+ DEVELOPMENT_TEAM = S8QB4VV633;
+ ENABLE_BITCODE = NO;
+ INFOPLIST_FILE = Runner/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.a11yAssessments;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
+ SWIFT_VERSION = 5.0;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 331C8088294A63A400263BE5 /* Debug */,
+ 331C8089294A63A400263BE5 /* Release */,
+ 331C808A294A63A400263BE5 /* Profile */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 97C147031CF9000F007C117D /* Debug */,
+ 97C147041CF9000F007C117D /* Release */,
+ 249021D3217E4FDB00AE95B9 /* Profile */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 97C147061CF9000F007C117D /* Debug */,
+ 97C147071CF9000F007C117D /* Release */,
+ 249021D4217E4FDB00AE95B9 /* Profile */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 97C146E61CF9000F007C117D /* Project object */;
+}
diff --git a/dev/a11y_assessments/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/dev/a11y_assessments/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000000000..919434a6254f0
--- /dev/null
+++ b/dev/a11y_assessments/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/dev/a11y_assessments/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/dev/a11y_assessments/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 0000000000000..18d981003d68d
--- /dev/null
+++ b/dev/a11y_assessments/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/dev/a11y_assessments/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/dev/a11y_assessments/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
new file mode 100644
index 0000000000000..f9b0d7c5ea15f
--- /dev/null
+++ b/dev/a11y_assessments/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
@@ -0,0 +1,8 @@
+
+
+
+
+ PreviewsEnabled
+
+
+
diff --git a/dev/a11y_assessments/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/dev/a11y_assessments/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
new file mode 100644
index 0000000000000..87131a09bea5d
--- /dev/null
+++ b/dev/a11y_assessments/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dev/a11y_assessments/ios/Runner.xcworkspace/contents.xcworkspacedata b/dev/a11y_assessments/ios/Runner.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000000000..1d526a16ed0f1
--- /dev/null
+++ b/dev/a11y_assessments/ios/Runner.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/dev/a11y_assessments/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/dev/a11y_assessments/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 0000000000000..18d981003d68d
--- /dev/null
+++ b/dev/a11y_assessments/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/dev/a11y_assessments/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/dev/a11y_assessments/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
new file mode 100644
index 0000000000000..f9b0d7c5ea15f
--- /dev/null
+++ b/dev/a11y_assessments/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
@@ -0,0 +1,8 @@
+
+
+
+
+ PreviewsEnabled
+
+
+
diff --git a/dev/a11y_assessments/ios/Runner/AppDelegate.swift b/dev/a11y_assessments/ios/Runner/AppDelegate.swift
new file mode 100644
index 0000000000000..d815fed684a8a
--- /dev/null
+++ b/dev/a11y_assessments/ios/Runner/AppDelegate.swift
@@ -0,0 +1,17 @@
+// 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 UIKit
+import Flutter
+
+@UIApplicationMain
+@objc class AppDelegate: FlutterAppDelegate {
+ override func application(
+ _ application: UIApplication,
+ didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
+ ) -> Bool {
+ GeneratedPluginRegistrant.register(with: self)
+ return super.application(application, didFinishLaunchingWithOptions: launchOptions)
+ }
+}
diff --git a/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 0000000000000..d36b1fab2d9de
--- /dev/null
+++ b/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,122 @@
+{
+ "images" : [
+ {
+ "size" : "20x20",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-20x20@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "20x20",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-20x20@3x.png",
+ "scale" : "3x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-29x29@1x.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-29x29@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-29x29@3x.png",
+ "scale" : "3x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-40x40@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-40x40@3x.png",
+ "scale" : "3x"
+ },
+ {
+ "size" : "60x60",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-60x60@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "60x60",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-60x60@3x.png",
+ "scale" : "3x"
+ },
+ {
+ "size" : "20x20",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-20x20@1x.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "20x20",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-20x20@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-29x29@1x.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-29x29@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-40x40@1x.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-40x40@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "76x76",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-76x76@1x.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "76x76",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-76x76@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "83.5x83.5",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-83.5x83.5@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "1024x1024",
+ "idiom" : "ios-marketing",
+ "filename" : "Icon-App-1024x1024@1x.png",
+ "scale" : "1x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
diff --git a/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
new file mode 100644
index 0000000000000..b6a5d3f48e4e0
Binary files /dev/null and b/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png differ
diff --git a/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
new file mode 100644
index 0000000000000..28c6bf03016f6
Binary files /dev/null and b/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ
diff --git a/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
new file mode 100644
index 0000000000000..2ccbfd967d969
Binary files /dev/null and b/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ
diff --git a/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
new file mode 100644
index 0000000000000..f091b6b0bca85
Binary files /dev/null and b/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ
diff --git a/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
new file mode 100644
index 0000000000000..4cde12118dda4
Binary files /dev/null and b/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ
diff --git a/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
new file mode 100644
index 0000000000000..d0ef06e7edb86
Binary files /dev/null and b/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ
diff --git a/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
new file mode 100644
index 0000000000000..dcdc2306c2850
Binary files /dev/null and b/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ
diff --git a/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
new file mode 100644
index 0000000000000..2ccbfd967d969
Binary files /dev/null and b/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ
diff --git a/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
new file mode 100644
index 0000000000000..c8f9ed8f5cee1
Binary files /dev/null and b/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ
diff --git a/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
new file mode 100644
index 0000000000000..a6d6b8609df07
Binary files /dev/null and b/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ
diff --git a/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
new file mode 100644
index 0000000000000..a6d6b8609df07
Binary files /dev/null and b/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ
diff --git a/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
new file mode 100644
index 0000000000000..75b2d164a5a98
Binary files /dev/null and b/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ
diff --git a/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
new file mode 100644
index 0000000000000..c4df70d39da79
Binary files /dev/null and b/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ
diff --git a/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
new file mode 100644
index 0000000000000..6a84f41e14e27
Binary files /dev/null and b/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ
diff --git a/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
new file mode 100644
index 0000000000000..d0e1f58536026
Binary files /dev/null and b/dev/a11y_assessments/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ
diff --git a/dev/a11y_assessments/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/dev/a11y_assessments/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
new file mode 100644
index 0000000000000..0bedcf2fd4678
--- /dev/null
+++ b/dev/a11y_assessments/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "filename" : "LaunchImage.png",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "LaunchImage@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "LaunchImage@3x.png",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
diff --git a/dev/a11y_assessments/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/dev/a11y_assessments/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
new file mode 100644
index 0000000000000..9da19eacad3b0
Binary files /dev/null and b/dev/a11y_assessments/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png differ
diff --git a/dev/a11y_assessments/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/dev/a11y_assessments/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
new file mode 100644
index 0000000000000..9da19eacad3b0
Binary files /dev/null and b/dev/a11y_assessments/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png differ
diff --git a/dev/a11y_assessments/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/dev/a11y_assessments/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
new file mode 100644
index 0000000000000..9da19eacad3b0
Binary files /dev/null and b/dev/a11y_assessments/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png differ
diff --git a/dev/a11y_assessments/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/dev/a11y_assessments/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
new file mode 100644
index 0000000000000..89c2725b70f18
--- /dev/null
+++ b/dev/a11y_assessments/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
@@ -0,0 +1,5 @@
+# Launch Screen Assets
+
+You can customize the launch screen with your own desired assets by replacing the image files in this directory.
+
+You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
\ No newline at end of file
diff --git a/dev/a11y_assessments/ios/Runner/Base.lproj/LaunchScreen.storyboard b/dev/a11y_assessments/ios/Runner/Base.lproj/LaunchScreen.storyboard
new file mode 100644
index 0000000000000..f2e259c7c9390
--- /dev/null
+++ b/dev/a11y_assessments/ios/Runner/Base.lproj/LaunchScreen.storyboard
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dev/a11y_assessments/ios/Runner/Base.lproj/Main.storyboard b/dev/a11y_assessments/ios/Runner/Base.lproj/Main.storyboard
new file mode 100644
index 0000000000000..f3c28516fb38e
--- /dev/null
+++ b/dev/a11y_assessments/ios/Runner/Base.lproj/Main.storyboard
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dev/a11y_assessments/ios/Runner/Info.plist b/dev/a11y_assessments/ios/Runner/Info.plist
new file mode 100644
index 0000000000000..74b9bb41e71fc
--- /dev/null
+++ b/dev/a11y_assessments/ios/Runner/Info.plist
@@ -0,0 +1,49 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleDisplayName
+ A11y Assessments
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ a11y_assessments
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ $(FLUTTER_BUILD_NAME)
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ $(FLUTTER_BUILD_NUMBER)
+ LSRequiresIPhoneOS
+
+ UILaunchStoryboardName
+ LaunchScreen
+ UIMainStoryboardFile
+ Main
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UISupportedInterfaceOrientations~ipad
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ CADisableMinimumFrameDurationOnPhone
+
+ UIApplicationSupportsIndirectInputEvents
+
+
+
diff --git a/dev/a11y_assessments/ios/Runner/Runner-Bridging-Header.h b/dev/a11y_assessments/ios/Runner/Runner-Bridging-Header.h
new file mode 100644
index 0000000000000..95b7baf386d06
--- /dev/null
+++ b/dev/a11y_assessments/ios/Runner/Runner-Bridging-Header.h
@@ -0,0 +1,5 @@
+// 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 "GeneratedPluginRegistrant.h"
diff --git a/dev/a11y_assessments/ios/RunnerTests/RunnerTests.swift b/dev/a11y_assessments/ios/RunnerTests/RunnerTests.swift
new file mode 100644
index 0000000000000..6bfa573763f8b
--- /dev/null
+++ b/dev/a11y_assessments/ios/RunnerTests/RunnerTests.swift
@@ -0,0 +1,16 @@
+// 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 Flutter
+import UIKit
+import XCTest
+
+class RunnerTests: XCTestCase {
+
+ func testExample() {
+ // If you add code to the Runner application, consider adding tests here.
+ // See https://developer.apple.com/documentation/xctest for more information about using XCTest.
+ }
+
+}
diff --git a/dev/a11y_assessments/lib/main.dart b/dev/a11y_assessments/lib/main.dart
new file mode 100644
index 0000000000000..5b7a14d767a28
--- /dev/null
+++ b/dev/a11y_assessments/lib/main.dart
@@ -0,0 +1,80 @@
+// 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/foundation.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter/rendering.dart';
+
+import 'use_cases/use_cases.dart';
+
+// TODO(yjbanov): https://github.com/flutter/flutter/issues/83809
+// Currently this app (as most Flutter Web apps) relies on the
+// `autofocus` property to guide the a11y focus when navigating
+// across routes (screen transitions, dialogs, etc). We may want
+// to revisit this after we figure out a long-term story for a11y
+// focus. See also https://github.com/flutter/flutter/issues/97747
+void main() {
+ runApp(const App());
+ if (kIsWeb) {
+ SemanticsBinding.instance.ensureSemantics();
+ }
+}
+
+class App extends StatelessWidget {
+ const App({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+
+ final Map routes = Map.fromEntries(
+ useCases.map((UseCase useCase) => MapEntry(useCase.route, useCase.build)),
+ );
+ return MaterialApp(
+ title: 'Accessibility Assessments',
+ theme: ThemeData(
+ colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
+ useMaterial3: true,
+ ),
+ routes: {
+ '/': (_) => const HomePage(),
+ ...routes
+ },
+ );
+ }
+}
+
+class HomePage extends StatelessWidget {
+ const HomePage({super.key});
+
+ Widget _buildUseCaseItem(int index, UseCase useCase) {
+ return Padding(
+ padding: const EdgeInsets.all(10),
+ child: Builder(
+ builder: (BuildContext context) {
+ return TextButton(
+ autofocus: index == 0,
+ key: Key(useCase.name),
+ onPressed: () => Navigator.of(context).pushNamed(useCase.route),
+ child: Text(useCase.name),
+ );
+ }
+ )
+ );
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ appBar: AppBar(title: const Text('Accessibility Assessments')),
+ body: Center(
+ child: ListView(
+ children: List.generate(
+ useCases.length,
+ (int index) => _buildUseCaseItem(index, useCases[index]),
+ ),
+ ),
+ ),
+ );
+ }
+}
diff --git a/dev/a11y_assessments/lib/use_cases/check_box_list_tile.dart b/dev/a11y_assessments/lib/use_cases/check_box_list_tile.dart
new file mode 100644
index 0000000000000..b21f5d0c95f03
--- /dev/null
+++ b/dev/a11y_assessments/lib/use_cases/check_box_list_tile.dart
@@ -0,0 +1,59 @@
+// 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/material.dart';
+
+import 'use_cases.dart';
+
+class CheckBoxListTile extends UseCase {
+
+ @override
+ String get name => 'CheckBoxListTile';
+
+ @override
+ String get route => '/check-box-list-tile';
+
+ @override
+ Widget build(BuildContext context) => _MainWidget();
+}
+
+class _MainWidget extends StatefulWidget {
+ @override
+ State<_MainWidget> createState() => _MainWidgetState();
+}
+
+class _MainWidgetState extends State<_MainWidget> {
+ bool _checked = false;
+
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ appBar: AppBar(title: const Text('CheckBoxListTile')),
+ body: ListView(
+ children: [
+ CheckboxListTile(
+ autofocus: true,
+ value: _checked,
+ onChanged: (bool? value) {
+ setState(() {
+ _checked = value!;
+ });
+ },
+ title: const Text('a check box list title'),
+ ),
+ CheckboxListTile(
+ value: _checked,
+ onChanged: (bool? value) {
+ setState(() {
+ _checked = value!;
+ });
+ },
+ title: const Text('a disabled check box list title'),
+ enabled: false,
+ ),
+ ],
+ ),
+ );
+ }
+}
diff --git a/dev/a11y_assessments/lib/use_cases/date_picker.dart b/dev/a11y_assessments/lib/use_cases/date_picker.dart
new file mode 100644
index 0000000000000..a7192abc475c4
--- /dev/null
+++ b/dev/a11y_assessments/lib/use_cases/date_picker.dart
@@ -0,0 +1,52 @@
+// 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/material.dart';
+
+import 'use_cases.dart';
+
+class DatePickerUseCase extends UseCase {
+
+ @override
+ String get name => 'DatePicker';
+
+ @override
+ String get route => '/date-picker';
+
+ @override
+ Widget build(BuildContext context) => const _MainWidget();
+}
+
+class _MainWidget extends StatefulWidget {
+ const _MainWidget();
+
+ @override
+ State<_MainWidget> createState() => _MainWidgetState();
+}
+
+class _MainWidgetState extends State<_MainWidget> {
+
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ appBar: AppBar(
+ backgroundColor: Theme.of(context).colorScheme.inversePrimary,
+ title: const Text('DatePicker'),
+ ),
+ body: Center(
+ child: TextButton(
+ autofocus: true,
+ onPressed: () => showDatePicker(
+ context: context,
+ initialEntryMode: DatePickerEntryMode.calendarOnly,
+ initialDate: DateTime.now(),
+ firstDate: DateTime.now().subtract(const Duration(days: 365)),
+ lastDate: DateTime.now().add(const Duration(days: 365)),
+ ),
+ child: const Text('Show Date Picker'),
+ ),
+ ),
+ );
+ }
+}
diff --git a/dev/a11y_assessments/lib/use_cases/dialog.dart b/dev/a11y_assessments/lib/use_cases/dialog.dart
new file mode 100644
index 0000000000000..e110259f5c633
--- /dev/null
+++ b/dev/a11y_assessments/lib/use_cases/dialog.dart
@@ -0,0 +1,61 @@
+// 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/material.dart';
+
+import 'use_cases.dart';
+
+class DialogUseCase extends UseCase {
+
+ @override
+ String get name => 'Dialog';
+
+ @override
+ String get route => '/dialog';
+
+ @override
+ Widget build(BuildContext context) => const _MainWidget();
+}
+
+class _MainWidget extends StatelessWidget {
+ const _MainWidget();
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ appBar: AppBar(
+ backgroundColor: Theme.of(context).colorScheme.inversePrimary,
+ title: const Text('Dialog'),
+ ),
+ body: Center(
+ child: TextButton(
+ autofocus: true,
+ onPressed: () => showDialog(
+ context: context,
+ builder: (BuildContext context) => Dialog(
+ child: Padding(
+ padding: const EdgeInsets.all(8.0),
+ child: Column(
+ mainAxisSize: MainAxisSize.min,
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ const Text('This is a typical dialog.'),
+ const SizedBox(height: 15),
+ TextButton(
+ autofocus: true,
+ onPressed: () {
+ Navigator.pop(context);
+ },
+ child: const Text('Close'),
+ ),
+ ],
+ ),
+ ),
+ ),
+ ),
+ child: const Text('Show Dialog'),
+ ),
+ ),
+ );
+ }
+}
diff --git a/dev/a11y_assessments/lib/use_cases/slider.dart b/dev/a11y_assessments/lib/use_cases/slider.dart
new file mode 100644
index 0000000000000..8dbd398bf4e3b
--- /dev/null
+++ b/dev/a11y_assessments/lib/use_cases/slider.dart
@@ -0,0 +1,54 @@
+// 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/material.dart';
+
+import 'use_cases.dart';
+
+class SliderUseCase extends UseCase {
+
+ @override
+ String get name => 'Slider';
+
+ @override
+ String get route => '/slider';
+
+ @override
+ Widget build(BuildContext context) => const MainWidget();
+}
+
+class MainWidget extends StatefulWidget {
+ const MainWidget({super.key});
+
+ @override
+ State createState() => MainWidgetState();
+}
+
+class MainWidgetState extends State {
+ double currentSliderValue = 20;
+
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ appBar: AppBar(
+ backgroundColor: Theme.of(context).colorScheme.inversePrimary,
+ title: const Text('Slider'),
+ ),
+ body: Center(
+ child: Slider(
+ autofocus: true,
+ value: currentSliderValue,
+ max: 100,
+ divisions: 5,
+ label: currentSliderValue.round().toString(),
+ onChanged: (double value) {
+ setState(() {
+ currentSliderValue = value;
+ });
+ },
+ ),
+ ),
+ );
+ }
+}
diff --git a/dev/a11y_assessments/lib/use_cases/text_field.dart b/dev/a11y_assessments/lib/use_cases/text_field.dart
new file mode 100644
index 0000000000000..0038cb52f25cc
--- /dev/null
+++ b/dev/a11y_assessments/lib/use_cases/text_field.dart
@@ -0,0 +1,56 @@
+// 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/material.dart';
+
+import 'use_cases.dart';
+
+class TextFieldUseCase extends UseCase {
+
+ @override
+ String get name => 'TextField';
+
+ @override
+ String get route => '/text-field';
+
+ @override
+ Widget build(BuildContext context) => const _MainWidget();
+}
+
+class _MainWidget extends StatelessWidget {
+ const _MainWidget();
+
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ appBar: AppBar(
+ backgroundColor: Theme.of(context).colorScheme.inversePrimary,
+ title: const Text('TextField'),
+ ),
+ body: ListView(
+ children: [
+ const TextField(
+ key: Key('enabled text field'),
+ autofocus: true,
+ decoration: InputDecoration(
+ labelText: 'Email',
+ suffixText: '@gmail.com',
+ hintText: 'Enter your email',
+ ),
+ ),
+ TextField(
+ key: const Key('disabled text field'),
+ decoration: const InputDecoration(
+ labelText: 'Email',
+ suffixText: '@gmail.com',
+ hintText: 'Enter your email',
+ ),
+ enabled: false,
+ controller: TextEditingController(text: 'xyz'),
+ ),
+ ],
+ ),
+ );
+ }
+}
diff --git a/dev/a11y_assessments/lib/use_cases/text_field_password.dart b/dev/a11y_assessments/lib/use_cases/text_field_password.dart
new file mode 100644
index 0000000000000..3c6152dd34885
--- /dev/null
+++ b/dev/a11y_assessments/lib/use_cases/text_field_password.dart
@@ -0,0 +1,55 @@
+// 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/material.dart';
+
+import 'use_cases.dart';
+
+class TextFieldPasswordUseCase extends UseCase {
+
+ @override
+ String get name => 'TextField password';
+
+ @override
+ String get route => '/text-field-password';
+
+ @override
+ Widget build(BuildContext context) => const _MainWidget();
+}
+
+class _MainWidget extends StatelessWidget {
+ const _MainWidget();
+
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ appBar: AppBar(
+ backgroundColor: Theme.of(context).colorScheme.inversePrimary,
+ title: const Text('TextField password'),
+ ),
+ body: ListView(
+ children: const [
+ TextField(
+ key: Key('enabled password'),
+ autofocus: true,
+ decoration: InputDecoration(
+ labelText: 'Password',
+ hintText: 'Enter your password',
+ ),
+ obscureText: true,
+ ),
+ TextField(
+ key: Key('disabled password'),
+ decoration: InputDecoration(
+ labelText: 'Password',
+ hintText: 'Enter your password',
+ ),
+ enabled: false,
+ obscureText: true,
+ ),
+ ],
+ ),
+ );
+ }
+}
diff --git a/dev/a11y_assessments/lib/use_cases/use_cases.dart b/dev/a11y_assessments/lib/use_cases/use_cases.dart
new file mode 100644
index 0000000000000..056f9e2b11a4b
--- /dev/null
+++ b/dev/a11y_assessments/lib/use_cases/use_cases.dart
@@ -0,0 +1,27 @@
+// 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/widgets.dart';
+
+import 'check_box_list_tile.dart';
+import 'date_picker.dart';
+import 'dialog.dart';
+import 'slider.dart';
+import 'text_field.dart';
+import 'text_field_password.dart';
+
+abstract class UseCase {
+ String get name;
+ String get route;
+ Widget build(BuildContext context);
+}
+
+final List useCases = [
+ CheckBoxListTile(),
+ DialogUseCase(),
+ SliderUseCase(),
+ TextFieldUseCase(),
+ TextFieldPasswordUseCase(),
+ DatePickerUseCase(),
+];
diff --git a/dev/a11y_assessments/linux/.gitignore b/dev/a11y_assessments/linux/.gitignore
new file mode 100644
index 0000000000000..d3896c98444fb
--- /dev/null
+++ b/dev/a11y_assessments/linux/.gitignore
@@ -0,0 +1 @@
+flutter/ephemeral
diff --git a/dev/a11y_assessments/linux/CMakeLists.txt b/dev/a11y_assessments/linux/CMakeLists.txt
new file mode 100644
index 0000000000000..07dc63e3803d9
--- /dev/null
+++ b/dev/a11y_assessments/linux/CMakeLists.txt
@@ -0,0 +1,139 @@
+# Project-level configuration.
+cmake_minimum_required(VERSION 3.10)
+project(runner LANGUAGES CXX)
+
+# The name of the executable created for the application. Change this to change
+# the on-disk name of your application.
+set(BINARY_NAME "a11y_assessments")
+# The unique GTK application identifier for this application. See:
+# https://wiki.gnome.org/HowDoI/ChooseApplicationID
+set(APPLICATION_ID "com.example.a11y_assessments")
+
+# Explicitly opt in to modern CMake behaviors to avoid warnings with recent
+# versions of CMake.
+cmake_policy(SET CMP0063 NEW)
+
+# Load bundled libraries from the lib/ directory relative to the binary.
+set(CMAKE_INSTALL_RPATH "$ORIGIN/lib")
+
+# Root filesystem for cross-building.
+if(FLUTTER_TARGET_PLATFORM_SYSROOT)
+ set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT})
+ set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT})
+ set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+ set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
+ set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+ set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+endif()
+
+# Define build configuration options.
+if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
+ set(CMAKE_BUILD_TYPE "Debug" CACHE
+ STRING "Flutter build mode" FORCE)
+ set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
+ "Debug" "Profile" "Release")
+endif()
+
+# Compilation settings that should be applied to most targets.
+#
+# Be cautious about adding new options here, as plugins use this function by
+# default. In most cases, you should add new options to specific targets instead
+# of modifying this function.
+function(APPLY_STANDARD_SETTINGS TARGET)
+ target_compile_features(${TARGET} PUBLIC cxx_std_14)
+ target_compile_options(${TARGET} PRIVATE -Wall -Werror)
+ target_compile_options(${TARGET} PRIVATE "$<$>:-O3>")
+ target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>")
+endfunction()
+
+# Flutter library and tool build rules.
+set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter")
+add_subdirectory(${FLUTTER_MANAGED_DIR})
+
+# System-level dependencies.
+find_package(PkgConfig REQUIRED)
+pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0)
+
+add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}")
+
+# Define the application target. To change its name, change BINARY_NAME above,
+# not the value here, or `flutter run` will no longer work.
+#
+# Any new source files that you add to the application should be added here.
+add_executable(${BINARY_NAME}
+ "main.cc"
+ "my_application.cc"
+ "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc"
+)
+
+# Apply the standard set of build settings. This can be removed for applications
+# that need different build settings.
+apply_standard_settings(${BINARY_NAME})
+
+# Add dependency libraries. Add any application-specific dependencies here.
+target_link_libraries(${BINARY_NAME} PRIVATE flutter)
+target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK)
+
+# Run the Flutter tool portions of the build. This must not be removed.
+add_dependencies(${BINARY_NAME} flutter_assemble)
+
+# Only the install-generated bundle's copy of the executable will launch
+# correctly, since the resources must in the right relative locations. To avoid
+# people trying to run the unbundled copy, put it in a subdirectory instead of
+# the default top-level location.
+set_target_properties(${BINARY_NAME}
+ PROPERTIES
+ RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run"
+)
+
+
+# Generated plugin build rules, which manage building the plugins and adding
+# them to the application.
+include(flutter/generated_plugins.cmake)
+
+
+# === Installation ===
+# By default, "installing" just makes a relocatable bundle in the build
+# directory.
+set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle")
+if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
+ set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE)
+endif()
+
+# Start with a clean build bundle directory every time.
+install(CODE "
+ file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\")
+ " COMPONENT Runtime)
+
+set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data")
+set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib")
+
+install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}"
+ COMPONENT Runtime)
+
+install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}"
+ COMPONENT Runtime)
+
+install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
+ COMPONENT Runtime)
+
+foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES})
+ install(FILES "${bundled_library}"
+ DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
+ COMPONENT Runtime)
+endforeach(bundled_library)
+
+# Fully re-copy the assets directory on each build to avoid having stale files
+# from a previous install.
+set(FLUTTER_ASSET_DIR_NAME "flutter_assets")
+install(CODE "
+ file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\")
+ " COMPONENT Runtime)
+install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}"
+ DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime)
+
+# Install the AOT library on non-Debug builds only.
+if(NOT CMAKE_BUILD_TYPE MATCHES "Debug")
+ install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
+ COMPONENT Runtime)
+endif()
diff --git a/dev/a11y_assessments/linux/flutter/CMakeLists.txt b/dev/a11y_assessments/linux/flutter/CMakeLists.txt
new file mode 100644
index 0000000000000..d5bd01648a96d
--- /dev/null
+++ b/dev/a11y_assessments/linux/flutter/CMakeLists.txt
@@ -0,0 +1,88 @@
+# This file controls Flutter-level build steps. It should not be edited.
+cmake_minimum_required(VERSION 3.10)
+
+set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral")
+
+# Configuration provided via flutter tool.
+include(${EPHEMERAL_DIR}/generated_config.cmake)
+
+# TODO: Move the rest of this into files in ephemeral. See
+# https://github.com/flutter/flutter/issues/57146.
+
+# Serves the same purpose as list(TRANSFORM ... PREPEND ...),
+# which isn't available in 3.10.
+function(list_prepend LIST_NAME PREFIX)
+ set(NEW_LIST "")
+ foreach(element ${${LIST_NAME}})
+ list(APPEND NEW_LIST "${PREFIX}${element}")
+ endforeach(element)
+ set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE)
+endfunction()
+
+# === Flutter Library ===
+# System-level dependencies.
+find_package(PkgConfig REQUIRED)
+pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0)
+pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0)
+pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0)
+
+set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so")
+
+# Published to parent scope for install step.
+set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE)
+set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE)
+set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE)
+set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE)
+
+list(APPEND FLUTTER_LIBRARY_HEADERS
+ "fl_basic_message_channel.h"
+ "fl_binary_codec.h"
+ "fl_binary_messenger.h"
+ "fl_dart_project.h"
+ "fl_engine.h"
+ "fl_json_message_codec.h"
+ "fl_json_method_codec.h"
+ "fl_message_codec.h"
+ "fl_method_call.h"
+ "fl_method_channel.h"
+ "fl_method_codec.h"
+ "fl_method_response.h"
+ "fl_plugin_registrar.h"
+ "fl_plugin_registry.h"
+ "fl_standard_message_codec.h"
+ "fl_standard_method_codec.h"
+ "fl_string_codec.h"
+ "fl_value.h"
+ "fl_view.h"
+ "flutter_linux.h"
+)
+list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/")
+add_library(flutter INTERFACE)
+target_include_directories(flutter INTERFACE
+ "${EPHEMERAL_DIR}"
+)
+target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}")
+target_link_libraries(flutter INTERFACE
+ PkgConfig::GTK
+ PkgConfig::GLIB
+ PkgConfig::GIO
+)
+add_dependencies(flutter flutter_assemble)
+
+# === Flutter tool backend ===
+# _phony_ is a non-existent file to force this command to run every time,
+# since currently there's no way to get a full input/output list from the
+# flutter tool.
+add_custom_command(
+ OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS}
+ ${CMAKE_CURRENT_BINARY_DIR}/_phony_
+ COMMAND ${CMAKE_COMMAND} -E env
+ ${FLUTTER_TOOL_ENVIRONMENT}
+ "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh"
+ ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE}
+ VERBATIM
+)
+add_custom_target(flutter_assemble DEPENDS
+ "${FLUTTER_LIBRARY}"
+ ${FLUTTER_LIBRARY_HEADERS}
+)
diff --git a/dev/a11y_assessments/linux/main.cc b/dev/a11y_assessments/linux/main.cc
new file mode 100644
index 0000000000000..281a29e16b599
--- /dev/null
+++ b/dev/a11y_assessments/linux/main.cc
@@ -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.
+
+#include "my_application.h"
+
+int main(int argc, char** argv) {
+ g_autoptr(MyApplication) app = my_application_new();
+ return g_application_run(G_APPLICATION(app), argc, argv);
+}
diff --git a/dev/a11y_assessments/linux/my_application.cc b/dev/a11y_assessments/linux/my_application.cc
new file mode 100644
index 0000000000000..05e5133c60566
--- /dev/null
+++ b/dev/a11y_assessments/linux/my_application.cc
@@ -0,0 +1,108 @@
+// 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.
+
+#include "my_application.h"
+
+#include
+#ifdef GDK_WINDOWING_X11
+#include
+#endif
+
+#include "flutter/generated_plugin_registrant.h"
+
+struct _MyApplication {
+ GtkApplication parent_instance;
+ char** dart_entrypoint_arguments;
+};
+
+G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION)
+
+// Implements GApplication::activate.
+static void my_application_activate(GApplication* application) {
+ MyApplication* self = MY_APPLICATION(application);
+ GtkWindow* window =
+ GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application)));
+
+ // Use a header bar when running in GNOME as this is the common style used
+ // by applications and is the setup most users will be using (e.g. Ubuntu
+ // desktop).
+ // If running on X and not using GNOME then just use a traditional title bar
+ // in case the window manager does more exotic layout, e.g. tiling.
+ // If running on Wayland assume the header bar will work (may need changing
+ // if future cases occur).
+ gboolean use_header_bar = TRUE;
+#ifdef GDK_WINDOWING_X11
+ GdkScreen* screen = gtk_window_get_screen(window);
+ if (GDK_IS_X11_SCREEN(screen)) {
+ const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen);
+ if (g_strcmp0(wm_name, "GNOME Shell") != 0) {
+ use_header_bar = FALSE;
+ }
+ }
+#endif
+ if (use_header_bar) {
+ GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new());
+ gtk_widget_show(GTK_WIDGET(header_bar));
+ gtk_header_bar_set_title(header_bar, "a11y_assessments");
+ gtk_header_bar_set_show_close_button(header_bar, TRUE);
+ gtk_window_set_titlebar(window, GTK_WIDGET(header_bar));
+ } else {
+ gtk_window_set_title(window, "a11y_assessments");
+ }
+
+ gtk_window_set_default_size(window, 1280, 720);
+ gtk_widget_show(GTK_WIDGET(window));
+
+ g_autoptr(FlDartProject) project = fl_dart_project_new();
+ fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments);
+
+ FlView* view = fl_view_new(project);
+ gtk_widget_show(GTK_WIDGET(view));
+ gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view));
+
+ fl_register_plugins(FL_PLUGIN_REGISTRY(view));
+
+ gtk_widget_grab_focus(GTK_WIDGET(view));
+}
+
+// Implements GApplication::local_command_line.
+static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) {
+ MyApplication* self = MY_APPLICATION(application);
+ // Strip out the first argument as it is the binary name.
+ self->dart_entrypoint_arguments = g_strdupv(*arguments + 1);
+
+ g_autoptr(GError) error = nullptr;
+ if (!g_application_register(application, nullptr, &error)) {
+ g_warning("Failed to register: %s", error->message);
+ *exit_status = 1;
+ return TRUE;
+ }
+
+ g_application_activate(application);
+ *exit_status = 0;
+
+ return TRUE;
+}
+
+// Implements GObject::dispose.
+static void my_application_dispose(GObject* object) {
+ MyApplication* self = MY_APPLICATION(object);
+ g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev);
+ G_OBJECT_CLASS(my_application_parent_class)->dispose(object);
+}
+
+static void my_application_class_init(MyApplicationClass* klass) {
+ G_APPLICATION_CLASS(klass)->activate = my_application_activate;
+ G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line;
+ G_OBJECT_CLASS(klass)->dispose = my_application_dispose;
+}
+
+static void my_application_init(MyApplication* self) {}
+
+MyApplication* my_application_new() {
+ return MY_APPLICATION(g_object_new(my_application_get_type(),
+ "application-id", APPLICATION_ID,
+ "flags", G_APPLICATION_NON_UNIQUE,
+ nullptr));
+}
diff --git a/dev/a11y_assessments/linux/my_application.h b/dev/a11y_assessments/linux/my_application.h
new file mode 100644
index 0000000000000..8c66ec485434d
--- /dev/null
+++ b/dev/a11y_assessments/linux/my_application.h
@@ -0,0 +1,22 @@
+// 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.
+
+#ifndef FLUTTER_MY_APPLICATION_H_
+#define FLUTTER_MY_APPLICATION_H_
+
+#include
+
+G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION,
+ GtkApplication)
+
+/**
+ * my_application_new:
+ *
+ * Creates a new Flutter-based application.
+ *
+ * Returns: a new #MyApplication.
+ */
+MyApplication* my_application_new();
+
+#endif // FLUTTER_MY_APPLICATION_H_
diff --git a/dev/a11y_assessments/macos/.gitignore b/dev/a11y_assessments/macos/.gitignore
new file mode 100644
index 0000000000000..746adbb6b9e14
--- /dev/null
+++ b/dev/a11y_assessments/macos/.gitignore
@@ -0,0 +1,7 @@
+# Flutter-related
+**/Flutter/ephemeral/
+**/Pods/
+
+# Xcode-related
+**/dgph
+**/xcuserdata/
diff --git a/dev/a11y_assessments/macos/Flutter/Flutter-Debug.xcconfig b/dev/a11y_assessments/macos/Flutter/Flutter-Debug.xcconfig
new file mode 100644
index 0000000000000..c2efd0b608ba8
--- /dev/null
+++ b/dev/a11y_assessments/macos/Flutter/Flutter-Debug.xcconfig
@@ -0,0 +1 @@
+#include "ephemeral/Flutter-Generated.xcconfig"
diff --git a/dev/a11y_assessments/macos/Flutter/Flutter-Release.xcconfig b/dev/a11y_assessments/macos/Flutter/Flutter-Release.xcconfig
new file mode 100644
index 0000000000000..c2efd0b608ba8
--- /dev/null
+++ b/dev/a11y_assessments/macos/Flutter/Flutter-Release.xcconfig
@@ -0,0 +1 @@
+#include "ephemeral/Flutter-Generated.xcconfig"
diff --git a/dev/a11y_assessments/macos/Runner.xcodeproj/project.pbxproj b/dev/a11y_assessments/macos/Runner.xcodeproj/project.pbxproj
new file mode 100644
index 0000000000000..1da16b798e668
--- /dev/null
+++ b/dev/a11y_assessments/macos/Runner.xcodeproj/project.pbxproj
@@ -0,0 +1,695 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 54;
+ objects = {
+
+/* Begin PBXAggregateTarget section */
+ 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = {
+ isa = PBXAggregateTarget;
+ buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */;
+ buildPhases = (
+ 33CC111E2044C6BF0003C045 /* ShellScript */,
+ );
+ dependencies = (
+ );
+ name = "Flutter Assemble";
+ productName = FLX;
+ };
+/* End PBXAggregateTarget section */
+
+/* Begin PBXBuildFile section */
+ 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; };
+ 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; };
+ 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; };
+ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; };
+ 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; };
+ 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 33CC10E52044A3C60003C045 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 33CC10EC2044A3C60003C045;
+ remoteInfo = Runner;
+ };
+ 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 33CC10E52044A3C60003C045 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 33CC111A2044C6BA0003C045;
+ remoteInfo = FLX;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 33CC110E2044A8840003C045 /* Bundle Framework */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Bundle Framework";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+ 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; };
+ 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; };
+ 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; };
+ 33CC10ED2044A3C60003C045 /* a11y_assessments.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "a11y_assessments.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
+ 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; };
+ 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; };
+ 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; };
+ 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; };
+ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; };
+ 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; };
+ 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; };
+ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; };
+ 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; };
+ 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; };
+ 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; };
+ 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 331C80D2294CF70F00263BE5 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 33CC10EA2044A3C60003C045 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 331C80D6294CF71000263BE5 /* RunnerTests */ = {
+ isa = PBXGroup;
+ children = (
+ 331C80D7294CF71000263BE5 /* RunnerTests.swift */,
+ );
+ path = RunnerTests;
+ sourceTree = "";
+ };
+ 33BA886A226E78AF003329D5 /* Configs */ = {
+ isa = PBXGroup;
+ children = (
+ 33E5194F232828860026EE4D /* AppInfo.xcconfig */,
+ 9740EEB21CF90195004384FC /* Debug.xcconfig */,
+ 7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
+ 333000ED22D3DE5D00554162 /* Warnings.xcconfig */,
+ );
+ path = Configs;
+ sourceTree = "";
+ };
+ 33CC10E42044A3C60003C045 = {
+ isa = PBXGroup;
+ children = (
+ 33FAB671232836740065AC1E /* Runner */,
+ 33CEB47122A05771004F2AC0 /* Flutter */,
+ 331C80D6294CF71000263BE5 /* RunnerTests */,
+ 33CC10EE2044A3C60003C045 /* Products */,
+ D73912EC22F37F3D000D13A0 /* Frameworks */,
+ );
+ sourceTree = "";
+ };
+ 33CC10EE2044A3C60003C045 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 33CC10ED2044A3C60003C045 /* a11y_assessments.app */,
+ 331C80D5294CF71000263BE5 /* RunnerTests.xctest */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 33CC11242044D66E0003C045 /* Resources */ = {
+ isa = PBXGroup;
+ children = (
+ 33CC10F22044A3C60003C045 /* Assets.xcassets */,
+ 33CC10F42044A3C60003C045 /* MainMenu.xib */,
+ 33CC10F72044A3C60003C045 /* Info.plist */,
+ );
+ name = Resources;
+ path = ..;
+ sourceTree = "";
+ };
+ 33CEB47122A05771004F2AC0 /* Flutter */ = {
+ isa = PBXGroup;
+ children = (
+ 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */,
+ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */,
+ 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */,
+ 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */,
+ );
+ path = Flutter;
+ sourceTree = "";
+ };
+ 33FAB671232836740065AC1E /* Runner */ = {
+ isa = PBXGroup;
+ children = (
+ 33CC10F02044A3C60003C045 /* AppDelegate.swift */,
+ 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */,
+ 33E51913231747F40026EE4D /* DebugProfile.entitlements */,
+ 33E51914231749380026EE4D /* Release.entitlements */,
+ 33CC11242044D66E0003C045 /* Resources */,
+ 33BA886A226E78AF003329D5 /* Configs */,
+ );
+ path = Runner;
+ sourceTree = "";
+ };
+ D73912EC22F37F3D000D13A0 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 331C80D4294CF70F00263BE5 /* RunnerTests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */;
+ buildPhases = (
+ 331C80D1294CF70F00263BE5 /* Sources */,
+ 331C80D2294CF70F00263BE5 /* Frameworks */,
+ 331C80D3294CF70F00263BE5 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 331C80DA294CF71000263BE5 /* PBXTargetDependency */,
+ );
+ name = RunnerTests;
+ productName = RunnerTests;
+ productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
+ 33CC10EC2044A3C60003C045 /* Runner */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */;
+ buildPhases = (
+ 33CC10E92044A3C60003C045 /* Sources */,
+ 33CC10EA2044A3C60003C045 /* Frameworks */,
+ 33CC10EB2044A3C60003C045 /* Resources */,
+ 33CC110E2044A8840003C045 /* Bundle Framework */,
+ 3399D490228B24CF009A79C7 /* ShellScript */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 33CC11202044C79F0003C045 /* PBXTargetDependency */,
+ );
+ name = Runner;
+ productName = Runner;
+ productReference = 33CC10ED2044A3C60003C045 /* a11y_assessments.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 33CC10E52044A3C60003C045 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastSwiftUpdateCheck = 0920;
+ LastUpgradeCheck = 1430;
+ ORGANIZATIONNAME = "";
+ TargetAttributes = {
+ 331C80D4294CF70F00263BE5 = {
+ CreatedOnToolsVersion = 14.0;
+ TestTargetID = 33CC10EC2044A3C60003C045;
+ };
+ 33CC10EC2044A3C60003C045 = {
+ CreatedOnToolsVersion = 9.2;
+ LastSwiftMigration = 1100;
+ ProvisioningStyle = Automatic;
+ SystemCapabilities = {
+ com.apple.Sandbox = {
+ enabled = 1;
+ };
+ };
+ };
+ 33CC111A2044C6BA0003C045 = {
+ CreatedOnToolsVersion = 9.2;
+ ProvisioningStyle = Manual;
+ };
+ };
+ };
+ buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */;
+ compatibilityVersion = "Xcode 9.3";
+ developmentRegion = en;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ Base,
+ );
+ mainGroup = 33CC10E42044A3C60003C045;
+ productRefGroup = 33CC10EE2044A3C60003C045 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 33CC10EC2044A3C60003C045 /* Runner */,
+ 331C80D4294CF70F00263BE5 /* RunnerTests */,
+ 33CC111A2044C6BA0003C045 /* Flutter Assemble */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 331C80D3294CF70F00263BE5 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 33CC10EB2044A3C60003C045 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */,
+ 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 3399D490228B24CF009A79C7 /* ShellScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ );
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n";
+ };
+ 33CC111E2044C6BF0003C045 /* ShellScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ Flutter/ephemeral/FlutterInputs.xcfilelist,
+ );
+ inputPaths = (
+ Flutter/ephemeral/tripwire,
+ );
+ outputFileListPaths = (
+ Flutter/ephemeral/FlutterOutputs.xcfilelist,
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire";
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 331C80D1294CF70F00263BE5 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 33CC10E92044A3C60003C045 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */,
+ 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */,
+ 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 33CC10EC2044A3C60003C045 /* Runner */;
+ targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */;
+ };
+ 33CC11202044C79F0003C045 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */;
+ targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin PBXVariantGroup section */
+ 33CC10F42044A3C60003C045 /* MainMenu.xib */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 33CC10F52044A3C60003C045 /* Base */,
+ );
+ name = MainMenu.xib;
+ path = Runner;
+ sourceTree = "";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ 331C80DB294CF71000263BE5 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CURRENT_PROJECT_VERSION = 1;
+ GENERATE_INFOPLIST_FILE = YES;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = com.example.a11yAssessments.RunnerTests;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_VERSION = 5.0;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/a11y_assessments.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/a11y_assessments";
+ };
+ name = Debug;
+ };
+ 331C80DC294CF71000263BE5 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CURRENT_PROJECT_VERSION = 1;
+ GENERATE_INFOPLIST_FILE = YES;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = com.example.a11yAssessments.RunnerTests;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_VERSION = 5.0;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/a11y_assessments.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/a11y_assessments";
+ };
+ name = Release;
+ };
+ 331C80DD294CF71000263BE5 /* Profile */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CURRENT_PROJECT_VERSION = 1;
+ GENERATE_INFOPLIST_FILE = YES;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = com.example.a11yAssessments.RunnerTests;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_VERSION = 5.0;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/a11y_assessments.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/a11y_assessments";
+ };
+ name = Profile;
+ };
+ 338D0CE9231458BD00FA5F75 /* Profile */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CODE_SIGN_IDENTITY = "-";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ SDKROOT = macosx;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-O";
+ };
+ name = Profile;
+ };
+ 338D0CEA231458BD00FA5F75 /* Profile */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements;
+ CODE_SIGN_STYLE = Automatic;
+ COMBINE_HIDPI_IMAGES = YES;
+ INFOPLIST_FILE = Runner/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PROVISIONING_PROFILE_SPECIFIER = "";
+ SWIFT_VERSION = 5.0;
+ };
+ name = Profile;
+ };
+ 338D0CEB231458BD00FA5F75 /* Profile */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_STYLE = Manual;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Profile;
+ };
+ 33CC10F92044A3C60003C045 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CODE_SIGN_IDENTITY = "-";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ SDKROOT = macosx;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ };
+ name = Debug;
+ };
+ 33CC10FA2044A3C60003C045 /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CODE_SIGN_IDENTITY = "-";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ SDKROOT = macosx;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-O";
+ };
+ name = Release;
+ };
+ 33CC10FC2044A3C60003C045 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements;
+ CODE_SIGN_STYLE = Automatic;
+ COMBINE_HIDPI_IMAGES = YES;
+ INFOPLIST_FILE = Runner/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PROVISIONING_PROFILE_SPECIFIER = "";
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ };
+ name = Debug;
+ };
+ 33CC10FD2044A3C60003C045 /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements;
+ CODE_SIGN_STYLE = Automatic;
+ COMBINE_HIDPI_IMAGES = YES;
+ INFOPLIST_FILE = Runner/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PROVISIONING_PROFILE_SPECIFIER = "";
+ SWIFT_VERSION = 5.0;
+ };
+ name = Release;
+ };
+ 33CC111C2044C6BA0003C045 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_STYLE = Manual;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Debug;
+ };
+ 33CC111D2044C6BA0003C045 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_STYLE = Automatic;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 331C80DB294CF71000263BE5 /* Debug */,
+ 331C80DC294CF71000263BE5 /* Release */,
+ 331C80DD294CF71000263BE5 /* Profile */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 33CC10F92044A3C60003C045 /* Debug */,
+ 33CC10FA2044A3C60003C045 /* Release */,
+ 338D0CE9231458BD00FA5F75 /* Profile */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 33CC10FC2044A3C60003C045 /* Debug */,
+ 33CC10FD2044A3C60003C045 /* Release */,
+ 338D0CEA231458BD00FA5F75 /* Profile */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 33CC111C2044C6BA0003C045 /* Debug */,
+ 33CC111D2044C6BA0003C045 /* Release */,
+ 338D0CEB231458BD00FA5F75 /* Profile */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 33CC10E52044A3C60003C045 /* Project object */;
+}
diff --git a/dev/a11y_assessments/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/dev/a11y_assessments/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 0000000000000..18d981003d68d
--- /dev/null
+++ b/dev/a11y_assessments/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/dev/a11y_assessments/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/dev/a11y_assessments/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
new file mode 100644
index 0000000000000..f33a76e7500bc
--- /dev/null
+++ b/dev/a11y_assessments/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dev/a11y_assessments/macos/Runner.xcworkspace/contents.xcworkspacedata b/dev/a11y_assessments/macos/Runner.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000000000..1d526a16ed0f1
--- /dev/null
+++ b/dev/a11y_assessments/macos/Runner.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/dev/a11y_assessments/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/dev/a11y_assessments/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 0000000000000..18d981003d68d
--- /dev/null
+++ b/dev/a11y_assessments/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/dev/a11y_assessments/macos/Runner/AppDelegate.swift b/dev/a11y_assessments/macos/Runner/AppDelegate.swift
new file mode 100644
index 0000000000000..d080d41951d35
--- /dev/null
+++ b/dev/a11y_assessments/macos/Runner/AppDelegate.swift
@@ -0,0 +1,13 @@
+// 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 Cocoa
+import FlutterMacOS
+
+@NSApplicationMain
+class AppDelegate: FlutterAppDelegate {
+ override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
+ return true
+ }
+}
diff --git a/dev/a11y_assessments/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/dev/a11y_assessments/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 0000000000000..a2ec33f19f110
--- /dev/null
+++ b/dev/a11y_assessments/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,68 @@
+{
+ "images" : [
+ {
+ "size" : "16x16",
+ "idiom" : "mac",
+ "filename" : "app_icon_16.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "16x16",
+ "idiom" : "mac",
+ "filename" : "app_icon_32.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "32x32",
+ "idiom" : "mac",
+ "filename" : "app_icon_32.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "32x32",
+ "idiom" : "mac",
+ "filename" : "app_icon_64.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "128x128",
+ "idiom" : "mac",
+ "filename" : "app_icon_128.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "128x128",
+ "idiom" : "mac",
+ "filename" : "app_icon_256.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "256x256",
+ "idiom" : "mac",
+ "filename" : "app_icon_256.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "256x256",
+ "idiom" : "mac",
+ "filename" : "app_icon_512.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "512x512",
+ "idiom" : "mac",
+ "filename" : "app_icon_512.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "512x512",
+ "idiom" : "mac",
+ "filename" : "app_icon_1024.png",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
diff --git a/dev/a11y_assessments/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/dev/a11y_assessments/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png
new file mode 100644
index 0000000000000..3c4935a7ca84f
Binary files /dev/null and b/dev/a11y_assessments/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png differ
diff --git a/dev/a11y_assessments/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/dev/a11y_assessments/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png
new file mode 100644
index 0000000000000..ed4cc16421680
Binary files /dev/null and b/dev/a11y_assessments/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png differ
diff --git a/dev/a11y_assessments/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/dev/a11y_assessments/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png
new file mode 100644
index 0000000000000..483be61389733
Binary files /dev/null and b/dev/a11y_assessments/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png differ
diff --git a/dev/a11y_assessments/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/dev/a11y_assessments/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png
new file mode 100644
index 0000000000000..bcbf36df2f2aa
Binary files /dev/null and b/dev/a11y_assessments/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png differ
diff --git a/dev/a11y_assessments/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png b/dev/a11y_assessments/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png
new file mode 100644
index 0000000000000..9c0a652864769
Binary files /dev/null and b/dev/a11y_assessments/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png differ
diff --git a/dev/a11y_assessments/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/dev/a11y_assessments/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png
new file mode 100644
index 0000000000000..e71a726136a47
Binary files /dev/null and b/dev/a11y_assessments/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png differ
diff --git a/dev/a11y_assessments/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/dev/a11y_assessments/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png
new file mode 100644
index 0000000000000..8a31fe2dd3f91
Binary files /dev/null and b/dev/a11y_assessments/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png differ
diff --git a/dev/a11y_assessments/macos/Runner/Base.lproj/MainMenu.xib b/dev/a11y_assessments/macos/Runner/Base.lproj/MainMenu.xib
new file mode 100644
index 0000000000000..80e867a4e06b4
--- /dev/null
+++ b/dev/a11y_assessments/macos/Runner/Base.lproj/MainMenu.xib
@@ -0,0 +1,343 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dev/a11y_assessments/macos/Runner/Configs/AppInfo.xcconfig b/dev/a11y_assessments/macos/Runner/Configs/AppInfo.xcconfig
new file mode 100644
index 0000000000000..d209bdba247d7
--- /dev/null
+++ b/dev/a11y_assessments/macos/Runner/Configs/AppInfo.xcconfig
@@ -0,0 +1,14 @@
+// Application-level settings for the Runner target.
+//
+// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the
+// future. If not, the values below would default to using the project name when this becomes a
+// 'flutter create' template.
+
+// The application's name. By default this is also the title of the Flutter window.
+PRODUCT_NAME = a11y_assessments
+
+// The application's bundle identifier
+PRODUCT_BUNDLE_IDENTIFIER = com.example.a11yAssessments
+
+// The copyright displayed in application information
+PRODUCT_COPYRIGHT = Copyright © 2023 com.example. All rights reserved.
diff --git a/dev/a11y_assessments/macos/Runner/Configs/Debug.xcconfig b/dev/a11y_assessments/macos/Runner/Configs/Debug.xcconfig
new file mode 100644
index 0000000000000..36b0fd9464f45
--- /dev/null
+++ b/dev/a11y_assessments/macos/Runner/Configs/Debug.xcconfig
@@ -0,0 +1,2 @@
+#include "../../Flutter/Flutter-Debug.xcconfig"
+#include "Warnings.xcconfig"
diff --git a/dev/a11y_assessments/macos/Runner/Configs/Release.xcconfig b/dev/a11y_assessments/macos/Runner/Configs/Release.xcconfig
new file mode 100644
index 0000000000000..dff4f49561c81
--- /dev/null
+++ b/dev/a11y_assessments/macos/Runner/Configs/Release.xcconfig
@@ -0,0 +1,2 @@
+#include "../../Flutter/Flutter-Release.xcconfig"
+#include "Warnings.xcconfig"
diff --git a/dev/a11y_assessments/macos/Runner/Configs/Warnings.xcconfig b/dev/a11y_assessments/macos/Runner/Configs/Warnings.xcconfig
new file mode 100644
index 0000000000000..42bcbf4780b18
--- /dev/null
+++ b/dev/a11y_assessments/macos/Runner/Configs/Warnings.xcconfig
@@ -0,0 +1,13 @@
+WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings
+GCC_WARN_UNDECLARED_SELECTOR = YES
+CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES
+CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE
+CLANG_WARN__DUPLICATE_METHOD_MATCH = YES
+CLANG_WARN_PRAGMA_PACK = YES
+CLANG_WARN_STRICT_PROTOTYPES = YES
+CLANG_WARN_COMMA = YES
+GCC_WARN_STRICT_SELECTOR_MATCH = YES
+CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES
+CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES
+GCC_WARN_SHADOW = YES
+CLANG_WARN_UNREACHABLE_CODE = YES
diff --git a/dev/a11y_assessments/macos/Runner/DebugProfile.entitlements b/dev/a11y_assessments/macos/Runner/DebugProfile.entitlements
new file mode 100644
index 0000000000000..dddb8a30c851e
--- /dev/null
+++ b/dev/a11y_assessments/macos/Runner/DebugProfile.entitlements
@@ -0,0 +1,12 @@
+
+
+
+
+ com.apple.security.app-sandbox
+
+ com.apple.security.cs.allow-jit
+
+ com.apple.security.network.server
+
+
+
diff --git a/dev/a11y_assessments/macos/Runner/Info.plist b/dev/a11y_assessments/macos/Runner/Info.plist
new file mode 100644
index 0000000000000..4789daa6a443e
--- /dev/null
+++ b/dev/a11y_assessments/macos/Runner/Info.plist
@@ -0,0 +1,32 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIconFile
+
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ $(FLUTTER_BUILD_NAME)
+ CFBundleVersion
+ $(FLUTTER_BUILD_NUMBER)
+ LSMinimumSystemVersion
+ $(MACOSX_DEPLOYMENT_TARGET)
+ NSHumanReadableCopyright
+ $(PRODUCT_COPYRIGHT)
+ NSMainNibFile
+ MainMenu
+ NSPrincipalClass
+ NSApplication
+
+
diff --git a/dev/a11y_assessments/macos/Runner/MainFlutterWindow.swift b/dev/a11y_assessments/macos/Runner/MainFlutterWindow.swift
new file mode 100644
index 0000000000000..a6a6b9af83072
--- /dev/null
+++ b/dev/a11y_assessments/macos/Runner/MainFlutterWindow.swift
@@ -0,0 +1,19 @@
+// 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 Cocoa
+import FlutterMacOS
+
+class MainFlutterWindow: NSWindow {
+ override func awakeFromNib() {
+ let flutterViewController = FlutterViewController()
+ let windowFrame = self.frame
+ self.contentViewController = flutterViewController
+ self.setFrame(windowFrame, display: true)
+
+ RegisterGeneratedPlugins(registry: flutterViewController)
+
+ super.awakeFromNib()
+ }
+}
diff --git a/dev/a11y_assessments/macos/Runner/Release.entitlements b/dev/a11y_assessments/macos/Runner/Release.entitlements
new file mode 100644
index 0000000000000..852fa1a4728ae
--- /dev/null
+++ b/dev/a11y_assessments/macos/Runner/Release.entitlements
@@ -0,0 +1,8 @@
+
+
+
+
+ com.apple.security.app-sandbox
+
+
+
diff --git a/dev/a11y_assessments/macos/RunnerTests/RunnerTests.swift b/dev/a11y_assessments/macos/RunnerTests/RunnerTests.swift
new file mode 100644
index 0000000000000..102c76116822b
--- /dev/null
+++ b/dev/a11y_assessments/macos/RunnerTests/RunnerTests.swift
@@ -0,0 +1,16 @@
+// 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 FlutterMacOS
+import Cocoa
+import XCTest
+
+class RunnerTests: XCTestCase {
+
+ func testExample() {
+ // If you add code to the Runner application, consider adding tests here.
+ // See https://developer.apple.com/documentation/xctest for more information about using XCTest.
+ }
+
+}
diff --git a/dev/a11y_assessments/pubspec.yaml b/dev/a11y_assessments/pubspec.yaml
new file mode 100644
index 0000000000000..c5670ebb97cc1
--- /dev/null
+++ b/dev/a11y_assessments/pubspec.yaml
@@ -0,0 +1,38 @@
+name: a11y_assessments
+description: A new Flutter project
+
+environment:
+ sdk: '>=3.2.0-22.0.dev <4.0.0'
+
+dependencies:
+ flutter:
+ sdk: flutter
+
+ characters: 1.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ collection: 1.18.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ material_color_utilities: 0.5.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ meta: 1.10.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ vector_math: 2.1.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ web: 0.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+
+dev_dependencies:
+ flutter_test:
+ sdk: flutter
+
+ async: 2.11.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ boolean_selector: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ clock: 1.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ fake_async: 1.3.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ matcher: 0.12.16 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ path: 1.8.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ source_span: 1.10.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ stack_trace: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ stream_channel: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ string_scanner: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ term_glyph: 1.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ test_api: 0.6.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+
+flutter:
+ uses-material-design: true
+
+# PUBSPEC CHECKSUM: dc9e
diff --git a/dev/a11y_assessments/test/accessibility_guideline_test.dart b/dev/a11y_assessments/test/accessibility_guideline_test.dart
new file mode 100644
index 0000000000000..7bb1c56fcc3c9
--- /dev/null
+++ b/dev/a11y_assessments/test/accessibility_guideline_test.dart
@@ -0,0 +1,23 @@
+// 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:a11y_assessments/main.dart';
+import 'package:a11y_assessments/use_cases/use_cases.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_test/flutter_test.dart';
+
+void main() {
+ for (final UseCase useCase in useCases) {
+ testWidgets('testing accessibility guideline for ${useCase.name}', (WidgetTester tester) async {
+ await tester.pumpWidget(const App());
+ await tester.tap(find.byKey(Key(useCase.name)));
+ await tester.pumpAndSettle();
+
+ await expectLater(tester, meetsGuideline(textContrastGuideline));
+ await expectLater(tester, meetsGuideline(androidTapTargetGuideline));
+ await expectLater(tester, meetsGuideline(iOSTapTargetGuideline));
+ await expectLater(tester, meetsGuideline(labeledTapTargetGuideline));
+ });
+ }
+}
diff --git a/dev/a11y_assessments/test/date_picker_test.dart b/dev/a11y_assessments/test/date_picker_test.dart
new file mode 100644
index 0000000000000..a72c0ed7fd3aa
--- /dev/null
+++ b/dev/a11y_assessments/test/date_picker_test.dart
@@ -0,0 +1,20 @@
+// 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:a11y_assessments/use_cases/date_picker.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_test/flutter_test.dart';
+
+import 'test_utils.dart';
+
+void main() {
+ testWidgets('date picker can run', (WidgetTester tester) async {
+ await pumpsUseCase(tester, DatePickerUseCase());
+ expect(find.text('Show Date Picker'), findsOneWidget);
+
+ await tester.tap(find.text('Show Date Picker'));
+ await tester.pumpAndSettle();
+ expect(find.byType(DatePickerDialog), findsOneWidget);
+ });
+}
diff --git a/dev/a11y_assessments/test/dialog_test.dart b/dev/a11y_assessments/test/dialog_test.dart
new file mode 100644
index 0000000000000..98d8c71bb7f91
--- /dev/null
+++ b/dev/a11y_assessments/test/dialog_test.dart
@@ -0,0 +1,23 @@
+// 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:a11y_assessments/use_cases/dialog.dart';
+import 'package:flutter_test/flutter_test.dart';
+
+import 'test_utils.dart';
+
+void main() {
+ testWidgets('dialog can run', (WidgetTester tester) async {
+ await pumpsUseCase(tester, DialogUseCase());
+ expect(find.text('Show Dialog'), findsOneWidget);
+
+ await tester.tap(find.text('Show Dialog'));
+ await tester.pumpAndSettle();
+ expect(find.text('This is a typical dialog.'), findsOneWidget);
+
+ await tester.tap(find.text('Close'));
+ await tester.pumpAndSettle();
+ expect(find.text('Show Dialog'), findsOneWidget);
+ });
+}
diff --git a/dev/a11y_assessments/test/slider_test.dart b/dev/a11y_assessments/test/slider_test.dart
new file mode 100644
index 0000000000000..a8769e844e03a
--- /dev/null
+++ b/dev/a11y_assessments/test/slider_test.dart
@@ -0,0 +1,22 @@
+// 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:a11y_assessments/use_cases/slider.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_test/flutter_test.dart';
+
+import 'test_utils.dart';
+
+void main() {
+ testWidgets('slider can run', (WidgetTester tester) async {
+ await pumpsUseCase(tester, SliderUseCase());
+ expect(find.byType(Slider), findsOneWidget);
+
+ await tester.tapAt(tester.getCenter(find.byType(Slider)));
+ await tester.pumpAndSettle();
+
+ final MainWidgetState state = tester.state(find.byType(MainWidget));
+ expect(state.currentSliderValue, 60);
+ });
+}
diff --git a/dev/a11y_assessments/test/test_utils.dart b/dev/a11y_assessments/test/test_utils.dart
new file mode 100644
index 0000000000000..8b2ae281dbeeb
--- /dev/null
+++ b/dev/a11y_assessments/test/test_utils.dart
@@ -0,0 +1,17 @@
+// 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:a11y_assessments/use_cases/use_cases.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_test/flutter_test.dart';
+
+Future pumpsUseCase(WidgetTester tester, UseCase useCase) async {
+ await tester.pumpWidget(MaterialApp(
+ home: Builder(
+ builder: (BuildContext context) {
+ return useCase.build(context);
+ },
+ ),
+ ));
+}
diff --git a/dev/a11y_assessments/test/text_field_password_test.dart b/dev/a11y_assessments/test/text_field_password_test.dart
new file mode 100644
index 0000000000000..90e4fd6a6a078
--- /dev/null
+++ b/dev/a11y_assessments/test/text_field_password_test.dart
@@ -0,0 +1,33 @@
+// 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:a11y_assessments/use_cases/text_field_password.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_test/flutter_test.dart';
+
+import 'test_utils.dart';
+
+void main() {
+ testWidgets('text field password can run', (WidgetTester tester) async {
+ await pumpsUseCase(tester, TextFieldPasswordUseCase());
+ expect(find.byType(TextField), findsExactly(2));
+
+ // Test the enabled password
+ {
+ final Finder finder = find.byKey(const Key('enabled password'));
+ await tester.tap(finder);
+ await tester.pumpAndSettle();
+ await tester.enterText(finder, 'abc');
+ await tester.pumpAndSettle();
+ expect(find.text('abc'), findsOneWidget);
+ }
+
+ // Test the disabled password
+ {
+ final Finder finder = find.byKey(const Key('disabled password'));
+ final TextField passwordField = tester.widget(finder);
+ expect(passwordField.enabled, isFalse);
+ }
+ });
+}
diff --git a/dev/a11y_assessments/test/text_field_test.dart b/dev/a11y_assessments/test/text_field_test.dart
new file mode 100644
index 0000000000000..0b2ea4ad7a8c2
--- /dev/null
+++ b/dev/a11y_assessments/test/text_field_test.dart
@@ -0,0 +1,33 @@
+// 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:a11y_assessments/use_cases/text_field.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_test/flutter_test.dart';
+
+import 'test_utils.dart';
+
+void main() {
+ testWidgets('text field can run', (WidgetTester tester) async {
+ await pumpsUseCase(tester, TextFieldUseCase());
+ expect(find.byType(TextField), findsExactly(2));
+
+ // Test the enabled text field
+ {
+ final Finder finder = find.byKey(const Key('enabled text field'));
+ await tester.tap(finder);
+ await tester.pumpAndSettle();
+ await tester.enterText(finder, 'abc');
+ await tester.pumpAndSettle();
+ expect(find.text('abc'), findsOneWidget);
+ }
+
+ // Test the disabled text field
+ {
+ final Finder finder = find.byKey(const Key('disabled text field'));
+ final TextField textField = tester.widget(finder);
+ expect(textField.enabled, isFalse);
+ }
+ });
+}
diff --git a/dev/a11y_assessments/web/favicon.png b/dev/a11y_assessments/web/favicon.png
new file mode 100644
index 0000000000000..8aaa46ac1ae21
Binary files /dev/null and b/dev/a11y_assessments/web/favicon.png differ
diff --git a/dev/a11y_assessments/web/icons/Icon-192.png b/dev/a11y_assessments/web/icons/Icon-192.png
new file mode 100644
index 0000000000000..b749bfef07473
Binary files /dev/null and b/dev/a11y_assessments/web/icons/Icon-192.png differ
diff --git a/dev/a11y_assessments/web/icons/Icon-512.png b/dev/a11y_assessments/web/icons/Icon-512.png
new file mode 100644
index 0000000000000..88cfd48dff116
Binary files /dev/null and b/dev/a11y_assessments/web/icons/Icon-512.png differ
diff --git a/dev/a11y_assessments/web/icons/Icon-maskable-192.png b/dev/a11y_assessments/web/icons/Icon-maskable-192.png
new file mode 100644
index 0000000000000..b749bfef07473
Binary files /dev/null and b/dev/a11y_assessments/web/icons/Icon-maskable-192.png differ
diff --git a/dev/a11y_assessments/web/icons/Icon-maskable-512.png b/dev/a11y_assessments/web/icons/Icon-maskable-512.png
new file mode 100644
index 0000000000000..88cfd48dff116
Binary files /dev/null and b/dev/a11y_assessments/web/icons/Icon-maskable-512.png differ
diff --git a/dev/a11y_assessments/web/index.html b/dev/a11y_assessments/web/index.html
new file mode 100644
index 0000000000000..a074dee382c97
--- /dev/null
+++ b/dev/a11y_assessments/web/index.html
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ a11y_assessments
+
+
+
+
+
+
+
+
+
+
diff --git a/dev/a11y_assessments/web/manifest.json b/dev/a11y_assessments/web/manifest.json
new file mode 100644
index 0000000000000..b2bfc8ba99bf1
--- /dev/null
+++ b/dev/a11y_assessments/web/manifest.json
@@ -0,0 +1,35 @@
+{
+ "name": "a11y_assessments",
+ "short_name": "a11y_assessments",
+ "start_url": ".",
+ "display": "standalone",
+ "background_color": "#0175C2",
+ "theme_color": "#0175C2",
+ "description": "A new Flutter project.",
+ "orientation": "portrait-primary",
+ "prefer_related_applications": false,
+ "icons": [
+ {
+ "src": "icons/Icon-192.png",
+ "sizes": "192x192",
+ "type": "image/png"
+ },
+ {
+ "src": "icons/Icon-512.png",
+ "sizes": "512x512",
+ "type": "image/png"
+ },
+ {
+ "src": "icons/Icon-maskable-192.png",
+ "sizes": "192x192",
+ "type": "image/png",
+ "purpose": "maskable"
+ },
+ {
+ "src": "icons/Icon-maskable-512.png",
+ "sizes": "512x512",
+ "type": "image/png",
+ "purpose": "maskable"
+ }
+ ]
+}
diff --git a/dev/a11y_assessments/windows/.gitignore b/dev/a11y_assessments/windows/.gitignore
new file mode 100644
index 0000000000000..d492d0d98c8fd
--- /dev/null
+++ b/dev/a11y_assessments/windows/.gitignore
@@ -0,0 +1,17 @@
+flutter/ephemeral/
+
+# Visual Studio user-specific files.
+*.suo
+*.user
+*.userosscache
+*.sln.docstates
+
+# Visual Studio build-related files.
+x64/
+x86/
+
+# Visual Studio cache files
+# files ending in .cache can be ignored
+*.[Cc]ache
+# but keep track of directories ending in .cache
+!*.[Cc]ache/
diff --git a/dev/a11y_assessments/windows/CMakeLists.txt b/dev/a11y_assessments/windows/CMakeLists.txt
new file mode 100644
index 0000000000000..b2bc836676f14
--- /dev/null
+++ b/dev/a11y_assessments/windows/CMakeLists.txt
@@ -0,0 +1,102 @@
+# Project-level configuration.
+cmake_minimum_required(VERSION 3.14)
+project(a11y_assessments LANGUAGES CXX)
+
+# The name of the executable created for the application. Change this to change
+# the on-disk name of your application.
+set(BINARY_NAME "a11y_assessments")
+
+# Explicitly opt in to modern CMake behaviors to avoid warnings with recent
+# versions of CMake.
+cmake_policy(VERSION 3.14...3.25)
+
+# Define build configuration option.
+get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
+if(IS_MULTICONFIG)
+ set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release"
+ CACHE STRING "" FORCE)
+else()
+ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
+ set(CMAKE_BUILD_TYPE "Debug" CACHE
+ STRING "Flutter build mode" FORCE)
+ set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
+ "Debug" "Profile" "Release")
+ endif()
+endif()
+# Define settings for the Profile build mode.
+set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}")
+set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}")
+set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}")
+set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}")
+
+# Use Unicode for all projects.
+add_definitions(-DUNICODE -D_UNICODE)
+
+# Compilation settings that should be applied to most targets.
+#
+# Be cautious about adding new options here, as plugins use this function by
+# default. In most cases, you should add new options to specific targets instead
+# of modifying this function.
+function(APPLY_STANDARD_SETTINGS TARGET)
+ target_compile_features(${TARGET} PUBLIC cxx_std_17)
+ target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100")
+ target_compile_options(${TARGET} PRIVATE /EHsc)
+ target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0")
+ target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>")
+endfunction()
+
+# Flutter library and tool build rules.
+set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter")
+add_subdirectory(${FLUTTER_MANAGED_DIR})
+
+# Application build; see runner/CMakeLists.txt.
+add_subdirectory("runner")
+
+
+# Generated plugin build rules, which manage building the plugins and adding
+# them to the application.
+include(flutter/generated_plugins.cmake)
+
+
+# === Installation ===
+# Support files are copied into place next to the executable, so that it can
+# run in place. This is done instead of making a separate bundle (as on Linux)
+# so that building and running from within Visual Studio will work.
+set(BUILD_BUNDLE_DIR "$")
+# Make the "install" step default, as it's required to run.
+set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1)
+if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
+ set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE)
+endif()
+
+set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data")
+set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}")
+
+install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}"
+ COMPONENT Runtime)
+
+install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}"
+ COMPONENT Runtime)
+
+install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
+ COMPONENT Runtime)
+
+if(PLUGIN_BUNDLED_LIBRARIES)
+ install(FILES "${PLUGIN_BUNDLED_LIBRARIES}"
+ DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
+ COMPONENT Runtime)
+endif()
+
+# Fully re-copy the assets directory on each build to avoid having stale files
+# from a previous install.
+set(FLUTTER_ASSET_DIR_NAME "flutter_assets")
+install(CODE "
+ file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\")
+ " COMPONENT Runtime)
+install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}"
+ DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime)
+
+# Install the AOT library on non-Debug builds only.
+install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}"
+ CONFIGURATIONS Profile;Release
+ COMPONENT Runtime)
diff --git a/dev/a11y_assessments/windows/flutter/CMakeLists.txt b/dev/a11y_assessments/windows/flutter/CMakeLists.txt
new file mode 100644
index 0000000000000..903f4899d6fce
--- /dev/null
+++ b/dev/a11y_assessments/windows/flutter/CMakeLists.txt
@@ -0,0 +1,109 @@
+# This file controls Flutter-level build steps. It should not be edited.
+cmake_minimum_required(VERSION 3.14)
+
+set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral")
+
+# Configuration provided via flutter tool.
+include(${EPHEMERAL_DIR}/generated_config.cmake)
+
+# TODO: Move the rest of this into files in ephemeral. See
+# https://github.com/flutter/flutter/issues/57146.
+set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper")
+
+# Set fallback configurations for older versions of the flutter tool.
+if (NOT DEFINED FLUTTER_TARGET_PLATFORM)
+ set(FLUTTER_TARGET_PLATFORM "windows-x64")
+endif()
+
+# === Flutter Library ===
+set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll")
+
+# Published to parent scope for install step.
+set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE)
+set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE)
+set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE)
+set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE)
+
+list(APPEND FLUTTER_LIBRARY_HEADERS
+ "flutter_export.h"
+ "flutter_windows.h"
+ "flutter_messenger.h"
+ "flutter_plugin_registrar.h"
+ "flutter_texture_registrar.h"
+)
+list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/")
+add_library(flutter INTERFACE)
+target_include_directories(flutter INTERFACE
+ "${EPHEMERAL_DIR}"
+)
+target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib")
+add_dependencies(flutter flutter_assemble)
+
+# === Wrapper ===
+list(APPEND CPP_WRAPPER_SOURCES_CORE
+ "core_implementations.cc"
+ "standard_codec.cc"
+)
+list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/")
+list(APPEND CPP_WRAPPER_SOURCES_PLUGIN
+ "plugin_registrar.cc"
+)
+list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/")
+list(APPEND CPP_WRAPPER_SOURCES_APP
+ "flutter_engine.cc"
+ "flutter_view_controller.cc"
+)
+list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/")
+
+# Wrapper sources needed for a plugin.
+add_library(flutter_wrapper_plugin STATIC
+ ${CPP_WRAPPER_SOURCES_CORE}
+ ${CPP_WRAPPER_SOURCES_PLUGIN}
+)
+apply_standard_settings(flutter_wrapper_plugin)
+set_target_properties(flutter_wrapper_plugin PROPERTIES
+ POSITION_INDEPENDENT_CODE ON)
+set_target_properties(flutter_wrapper_plugin PROPERTIES
+ CXX_VISIBILITY_PRESET hidden)
+target_link_libraries(flutter_wrapper_plugin PUBLIC flutter)
+target_include_directories(flutter_wrapper_plugin PUBLIC
+ "${WRAPPER_ROOT}/include"
+)
+add_dependencies(flutter_wrapper_plugin flutter_assemble)
+
+# Wrapper sources needed for the runner.
+add_library(flutter_wrapper_app STATIC
+ ${CPP_WRAPPER_SOURCES_CORE}
+ ${CPP_WRAPPER_SOURCES_APP}
+)
+apply_standard_settings(flutter_wrapper_app)
+target_link_libraries(flutter_wrapper_app PUBLIC flutter)
+target_include_directories(flutter_wrapper_app PUBLIC
+ "${WRAPPER_ROOT}/include"
+)
+add_dependencies(flutter_wrapper_app flutter_assemble)
+
+# === Flutter tool backend ===
+# _phony_ is a non-existent file to force this command to run every time,
+# since currently there's no way to get a full input/output list from the
+# flutter tool.
+set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_")
+set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE)
+add_custom_command(
+ OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS}
+ ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN}
+ ${CPP_WRAPPER_SOURCES_APP}
+ ${PHONY_OUTPUT}
+ COMMAND ${CMAKE_COMMAND} -E env
+ ${FLUTTER_TOOL_ENVIRONMENT}
+ "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat"
+ ${FLUTTER_TARGET_PLATFORM} $
+ VERBATIM
+)
+add_custom_target(flutter_assemble DEPENDS
+ "${FLUTTER_LIBRARY}"
+ ${FLUTTER_LIBRARY_HEADERS}
+ ${CPP_WRAPPER_SOURCES_CORE}
+ ${CPP_WRAPPER_SOURCES_PLUGIN}
+ ${CPP_WRAPPER_SOURCES_APP}
+)
diff --git a/dev/a11y_assessments/windows/runner/CMakeLists.txt b/dev/a11y_assessments/windows/runner/CMakeLists.txt
new file mode 100644
index 0000000000000..394917c053a04
--- /dev/null
+++ b/dev/a11y_assessments/windows/runner/CMakeLists.txt
@@ -0,0 +1,40 @@
+cmake_minimum_required(VERSION 3.14)
+project(runner LANGUAGES CXX)
+
+# Define the application target. To change its name, change BINARY_NAME in the
+# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer
+# work.
+#
+# Any new source files that you add to the application should be added here.
+add_executable(${BINARY_NAME} WIN32
+ "flutter_window.cpp"
+ "main.cpp"
+ "utils.cpp"
+ "win32_window.cpp"
+ "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc"
+ "Runner.rc"
+ "runner.exe.manifest"
+)
+
+# Apply the standard set of build settings. This can be removed for applications
+# that need different build settings.
+apply_standard_settings(${BINARY_NAME})
+
+# Add preprocessor definitions for the build version.
+target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"")
+target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}")
+target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}")
+target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}")
+target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}")
+
+# Disable Windows macros that collide with C++ standard library functions.
+target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX")
+
+# Add dependency libraries and include directories. Add any application-specific
+# dependencies here.
+target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app)
+target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib")
+target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}")
+
+# Run the Flutter tool portions of the build. This must not be removed.
+add_dependencies(${BINARY_NAME} flutter_assemble)
diff --git a/dev/a11y_assessments/windows/runner/Runner.rc b/dev/a11y_assessments/windows/runner/Runner.rc
new file mode 100644
index 0000000000000..9b5eba68d5484
--- /dev/null
+++ b/dev/a11y_assessments/windows/runner/Runner.rc
@@ -0,0 +1,121 @@
+// Microsoft Visual C++ generated resource script.
+//
+#pragma code_page(65001)
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "winres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (United States) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE
+BEGIN
+ "resource.h\0"
+END
+
+2 TEXTINCLUDE
+BEGIN
+ "#include ""winres.h""\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE
+BEGIN
+ "\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+IDI_APP_ICON ICON "resources\\app_icon.ico"
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD)
+#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD
+#else
+#define VERSION_AS_NUMBER 1,0,0,0
+#endif
+
+#if defined(FLUTTER_VERSION)
+#define VERSION_AS_STRING FLUTTER_VERSION
+#else
+#define VERSION_AS_STRING "1.0.0"
+#endif
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION VERSION_AS_NUMBER
+ PRODUCTVERSION VERSION_AS_NUMBER
+ FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
+#ifdef _DEBUG
+ FILEFLAGS VS_FF_DEBUG
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS VOS__WINDOWS32
+ FILETYPE VFT_APP
+ FILESUBTYPE 0x0L
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904e4"
+ BEGIN
+ VALUE "CompanyName", "com.example" "\0"
+ VALUE "FileDescription", "a11y_assessments" "\0"
+ VALUE "FileVersion", VERSION_AS_STRING "\0"
+ VALUE "InternalName", "a11y_assessments" "\0"
+ VALUE "LegalCopyright", "Copyright (C) 2023 com.example. All rights reserved." "\0"
+ VALUE "OriginalFilename", "a11y_assessments.exe" "\0"
+ VALUE "ProductName", "a11y_assessments" "\0"
+ VALUE "ProductVersion", VERSION_AS_STRING "\0"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x409, 1252
+ END
+END
+
+#endif // English (United States) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
diff --git a/dev/a11y_assessments/windows/runner/flutter_window.cpp b/dev/a11y_assessments/windows/runner/flutter_window.cpp
new file mode 100644
index 0000000000000..252aa267868b6
--- /dev/null
+++ b/dev/a11y_assessments/windows/runner/flutter_window.cpp
@@ -0,0 +1,75 @@
+// 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.
+
+#include "flutter_window.h"
+
+#include
+
+#include "flutter/generated_plugin_registrant.h"
+
+FlutterWindow::FlutterWindow(const flutter::DartProject& project)
+ : project_(project) {}
+
+FlutterWindow::~FlutterWindow() {}
+
+bool FlutterWindow::OnCreate() {
+ if (!Win32Window::OnCreate()) {
+ return false;
+ }
+
+ RECT frame = GetClientArea();
+
+ // The size here must match the window dimensions to avoid unnecessary surface
+ // creation / destruction in the startup path.
+ flutter_controller_ = std::make_unique(
+ frame.right - frame.left, frame.bottom - frame.top, project_);
+ // Ensure that basic setup of the controller was successful.
+ if (!flutter_controller_->engine() || !flutter_controller_->view()) {
+ return false;
+ }
+ RegisterPlugins(flutter_controller_->engine());
+ SetChildContent(flutter_controller_->view()->GetNativeWindow());
+
+ flutter_controller_->engine()->SetNextFrameCallback([&]() {
+ this->Show();
+ });
+
+ // Flutter can complete the first frame before the "show window" callback is
+ // registered. The following call ensures a frame is pending to ensure the
+ // window is shown. It is a no-op if the first frame hasn't completed yet.
+ flutter_controller_->ForceRedraw();
+
+ return true;
+}
+
+void FlutterWindow::OnDestroy() {
+ if (flutter_controller_) {
+ flutter_controller_ = nullptr;
+ }
+
+ Win32Window::OnDestroy();
+}
+
+LRESULT
+FlutterWindow::MessageHandler(HWND hwnd, UINT const message,
+ WPARAM const wparam,
+ LPARAM const lparam) noexcept {
+ // Give Flutter, including plugins, an opportunity to handle window messages.
+ if (flutter_controller_) {
+ std::optional result =
+ flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam,
+ lparam);
+ if (result) {
+ return *result;
+ }
+ }
+
+ switch (message) {
+ case WM_FONTCHANGE:
+ flutter_controller_->engine()->ReloadSystemFonts();
+ break;
+ }
+
+ return Win32Window::MessageHandler(hwnd, message, wparam, lparam);
+}
diff --git a/dev/a11y_assessments/windows/runner/flutter_window.h b/dev/a11y_assessments/windows/runner/flutter_window.h
new file mode 100644
index 0000000000000..bbc5836c018a2
--- /dev/null
+++ b/dev/a11y_assessments/windows/runner/flutter_window.h
@@ -0,0 +1,37 @@
+// 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.
+
+#ifndef RUNNER_FLUTTER_WINDOW_H_
+#define RUNNER_FLUTTER_WINDOW_H_
+
+#include
+#include
+
+#include
+
+#include "win32_window.h"
+
+// A window that does nothing but host a Flutter view.
+class FlutterWindow : public Win32Window {
+ public:
+ // Creates a new FlutterWindow hosting a Flutter view running |project|.
+ explicit FlutterWindow(const flutter::DartProject& project);
+ virtual ~FlutterWindow();
+
+ protected:
+ // Win32Window:
+ bool OnCreate() override;
+ void OnDestroy() override;
+ LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam,
+ LPARAM const lparam) noexcept override;
+
+ private:
+ // The project to run.
+ flutter::DartProject project_;
+
+ // The Flutter instance hosted by this window.
+ std::unique_ptr flutter_controller_;
+};
+
+#endif // RUNNER_FLUTTER_WINDOW_H_
diff --git a/dev/a11y_assessments/windows/runner/main.cpp b/dev/a11y_assessments/windows/runner/main.cpp
new file mode 100644
index 0000000000000..125d42ba57ff2
--- /dev/null
+++ b/dev/a11y_assessments/windows/runner/main.cpp
@@ -0,0 +1,47 @@
+// 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.
+
+#include
+#include
+#include
+
+#include "flutter_window.h"
+#include "utils.h"
+
+int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
+ _In_ wchar_t *command_line, _In_ int show_command) {
+ // Attach to console when present (e.g., 'flutter run') or create a
+ // new console when running with a debugger.
+ if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) {
+ CreateAndAttachConsole();
+ }
+
+ // Initialize COM, so that it is available for use in the library and/or
+ // plugins.
+ ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED);
+
+ flutter::DartProject project(L"data");
+
+ std::vector command_line_arguments =
+ GetCommandLineArguments();
+
+ project.set_dart_entrypoint_arguments(std::move(command_line_arguments));
+
+ FlutterWindow window(project);
+ Win32Window::Point origin(10, 10);
+ Win32Window::Size size(1280, 720);
+ if (!window.Create(L"a11y_assessments", origin, size)) {
+ return EXIT_FAILURE;
+ }
+ window.SetQuitOnClose(true);
+
+ ::MSG msg;
+ while (::GetMessage(&msg, nullptr, 0, 0)) {
+ ::TranslateMessage(&msg);
+ ::DispatchMessage(&msg);
+ }
+
+ ::CoUninitialize();
+ return EXIT_SUCCESS;
+}
diff --git a/dev/a11y_assessments/windows/runner/resource.h b/dev/a11y_assessments/windows/runner/resource.h
new file mode 100644
index 0000000000000..c245ff19cb580
--- /dev/null
+++ b/dev/a11y_assessments/windows/runner/resource.h
@@ -0,0 +1,20 @@
+// 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.
+
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by Runner.rc
+//
+#define IDI_APP_ICON 101
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE 102
+#define _APS_NEXT_COMMAND_VALUE 40001
+#define _APS_NEXT_CONTROL_VALUE 1001
+#define _APS_NEXT_SYMED_VALUE 101
+#endif
+#endif
diff --git a/dev/a11y_assessments/windows/runner/resources/app_icon.ico b/dev/a11y_assessments/windows/runner/resources/app_icon.ico
new file mode 100644
index 0000000000000..2e4cc829b07d6
Binary files /dev/null and b/dev/a11y_assessments/windows/runner/resources/app_icon.ico differ
diff --git a/dev/a11y_assessments/windows/runner/runner.exe.manifest b/dev/a11y_assessments/windows/runner/runner.exe.manifest
new file mode 100644
index 0000000000000..a42ea7687cb67
--- /dev/null
+++ b/dev/a11y_assessments/windows/runner/runner.exe.manifest
@@ -0,0 +1,20 @@
+
+
+
+
+ PerMonitorV2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dev/a11y_assessments/windows/runner/utils.cpp b/dev/a11y_assessments/windows/runner/utils.cpp
new file mode 100644
index 0000000000000..f677d8d5f7141
--- /dev/null
+++ b/dev/a11y_assessments/windows/runner/utils.cpp
@@ -0,0 +1,69 @@
+// 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.
+
+#include "utils.h"
+
+#include
+#include
+#include
+#include
+
+#include
+
+void CreateAndAttachConsole() {
+ if (::AllocConsole()) {
+ FILE *unused;
+ if (freopen_s(&unused, "CONOUT$", "w", stdout)) {
+ _dup2(_fileno(stdout), 1);
+ }
+ if (freopen_s(&unused, "CONOUT$", "w", stderr)) {
+ _dup2(_fileno(stdout), 2);
+ }
+ std::ios::sync_with_stdio();
+ FlutterDesktopResyncOutputStreams();
+ }
+}
+
+std::vector GetCommandLineArguments() {
+ // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use.
+ int argc;
+ wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc);
+ if (argv == nullptr) {
+ return std::vector();
+ }
+
+ std::vector command_line_arguments;
+
+ // Skip the first argument as it's the binary name.
+ for (int i = 1; i < argc; i++) {
+ command_line_arguments.push_back(Utf8FromUtf16(argv[i]));
+ }
+
+ ::LocalFree(argv);
+
+ return command_line_arguments;
+}
+
+std::string Utf8FromUtf16(const wchar_t* utf16_string) {
+ if (utf16_string == nullptr) {
+ return std::string();
+ }
+ int target_length = ::WideCharToMultiByte(
+ CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string,
+ -1, nullptr, 0, nullptr, nullptr)
+ -1; // remove the trailing null character
+ int input_length = (int)wcslen(utf16_string);
+ std::string utf8_string;
+ if (target_length <= 0 || target_length > utf8_string.max_size()) {
+ return utf8_string;
+ }
+ utf8_string.resize(target_length);
+ int converted_length = ::WideCharToMultiByte(
+ CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string,
+ input_length, utf8_string.data(), target_length, nullptr, nullptr);
+ if (converted_length == 0) {
+ return std::string();
+ }
+ return utf8_string;
+}
diff --git a/dev/a11y_assessments/windows/runner/utils.h b/dev/a11y_assessments/windows/runner/utils.h
new file mode 100644
index 0000000000000..54414c989ba71
--- /dev/null
+++ b/dev/a11y_assessments/windows/runner/utils.h
@@ -0,0 +1,23 @@
+// 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.
+
+#ifndef RUNNER_UTILS_H_
+#define RUNNER_UTILS_H_
+
+#include
+#include
+
+// Creates a console for the process, and redirects stdout and stderr to
+// it for both the runner and the Flutter library.
+void CreateAndAttachConsole();
+
+// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string
+// encoded in UTF-8. Returns an empty std::string on failure.
+std::string Utf8FromUtf16(const wchar_t* utf16_string);
+
+// Gets the command line arguments passed in as a std::vector,
+// encoded in UTF-8. Returns an empty std::vector on failure.
+std::vector GetCommandLineArguments();
+
+#endif // RUNNER_UTILS_H_
diff --git a/dev/a11y_assessments/windows/runner/win32_window.cpp b/dev/a11y_assessments/windows/runner/win32_window.cpp
new file mode 100644
index 0000000000000..14a183d7eaa27
--- /dev/null
+++ b/dev/a11y_assessments/windows/runner/win32_window.cpp
@@ -0,0 +1,292 @@
+// 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.
+
+#include "win32_window.h"
+
+#include
+#include
+
+#include "resource.h"
+
+namespace {
+
+/// Window attribute that enables dark mode window decorations.
+///
+/// Redefined in case the developer's machine has a Windows SDK older than
+/// version 10.0.22000.0.
+/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute
+#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE
+#define DWMWA_USE_IMMERSIVE_DARK_MODE 20
+#endif
+
+constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW";
+
+/// Registry key for app theme preference.
+///
+/// A value of 0 indicates apps should use dark mode. A non-zero or missing
+/// value indicates apps should use light mode.
+constexpr const wchar_t kGetPreferredBrightnessRegKey[] =
+ L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize";
+constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme";
+
+// The number of Win32Window objects that currently exist.
+static int g_active_window_count = 0;
+
+using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd);
+
+// Scale helper to convert logical scaler values to physical using passed in
+// scale factor
+int Scale(int source, double scale_factor) {
+ return static_cast(source * scale_factor);
+}
+
+// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module.
+// This API is only needed for PerMonitor V1 awareness mode.
+void EnableFullDpiSupportIfAvailable(HWND hwnd) {
+ HMODULE user32_module = LoadLibraryA("User32.dll");
+ if (!user32_module) {
+ return;
+ }
+ auto enable_non_client_dpi_scaling =
+ reinterpret_cast(
+ GetProcAddress(user32_module, "EnableNonClientDpiScaling"));
+ if (enable_non_client_dpi_scaling != nullptr) {
+ enable_non_client_dpi_scaling(hwnd);
+ }
+ FreeLibrary(user32_module);
+}
+
+} // namespace
+
+// Manages the Win32Window's window class registration.
+class WindowClassRegistrar {
+ public:
+ ~WindowClassRegistrar() = default;
+
+ // Returns the singleton registrar instance.
+ static WindowClassRegistrar* GetInstance() {
+ if (!instance_) {
+ instance_ = new WindowClassRegistrar();
+ }
+ return instance_;
+ }
+
+ // Returns the name of the window class, registering the class if it hasn't
+ // previously been registered.
+ const wchar_t* GetWindowClass();
+
+ // Unregisters the window class. Should only be called if there are no
+ // instances of the window.
+ void UnregisterWindowClass();
+
+ private:
+ WindowClassRegistrar() = default;
+
+ static WindowClassRegistrar* instance_;
+
+ bool class_registered_ = false;
+};
+
+WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr;
+
+const wchar_t* WindowClassRegistrar::GetWindowClass() {
+ if (!class_registered_) {
+ WNDCLASS window_class{};
+ window_class.hCursor = LoadCursor(nullptr, IDC_ARROW);
+ window_class.lpszClassName = kWindowClassName;
+ window_class.style = CS_HREDRAW | CS_VREDRAW;
+ window_class.cbClsExtra = 0;
+ window_class.cbWndExtra = 0;
+ window_class.hInstance = GetModuleHandle(nullptr);
+ window_class.hIcon =
+ LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON));
+ window_class.hbrBackground = 0;
+ window_class.lpszMenuName = nullptr;
+ window_class.lpfnWndProc = Win32Window::WndProc;
+ RegisterClass(&window_class);
+ class_registered_ = true;
+ }
+ return kWindowClassName;
+}
+
+void WindowClassRegistrar::UnregisterWindowClass() {
+ UnregisterClass(kWindowClassName, nullptr);
+ class_registered_ = false;
+}
+
+Win32Window::Win32Window() {
+ ++g_active_window_count;
+}
+
+Win32Window::~Win32Window() {
+ --g_active_window_count;
+ Destroy();
+}
+
+bool Win32Window::Create(const std::wstring& title,
+ const Point& origin,
+ const Size& size) {
+ Destroy();
+
+ const wchar_t* window_class =
+ WindowClassRegistrar::GetInstance()->GetWindowClass();
+
+ const POINT target_point = {static_cast(origin.x),
+ static_cast(origin.y)};
+ HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST);
+ UINT dpi = FlutterDesktopGetDpiForMonitor(monitor);
+ double scale_factor = dpi / 96.0;
+
+ HWND window = CreateWindow(
+ window_class, title.c_str(), WS_OVERLAPPEDWINDOW,
+ Scale(origin.x, scale_factor), Scale(origin.y, scale_factor),
+ Scale(size.width, scale_factor), Scale(size.height, scale_factor),
+ nullptr, nullptr, GetModuleHandle(nullptr), this);
+
+ if (!window) {
+ return false;
+ }
+
+ UpdateTheme(window);
+
+ return OnCreate();
+}
+
+bool Win32Window::Show() {
+ return ShowWindow(window_handle_, SW_SHOWNORMAL);
+}
+
+// static
+LRESULT CALLBACK Win32Window::WndProc(HWND const window,
+ UINT const message,
+ WPARAM const wparam,
+ LPARAM const lparam) noexcept {
+ if (message == WM_NCCREATE) {
+ auto window_struct = reinterpret_cast(lparam);
+ SetWindowLongPtr(window, GWLP_USERDATA,
+ reinterpret_cast(window_struct->lpCreateParams));
+
+ auto that = static_cast(window_struct->lpCreateParams);
+ EnableFullDpiSupportIfAvailable(window);
+ that->window_handle_ = window;
+ } else if (Win32Window* that = GetThisFromHandle(window)) {
+ return that->MessageHandler(window, message, wparam, lparam);
+ }
+
+ return DefWindowProc(window, message, wparam, lparam);
+}
+
+LRESULT
+Win32Window::MessageHandler(HWND hwnd,
+ UINT const message,
+ WPARAM const wparam,
+ LPARAM const lparam) noexcept {
+ switch (message) {
+ case WM_DESTROY:
+ window_handle_ = nullptr;
+ Destroy();
+ if (quit_on_close_) {
+ PostQuitMessage(0);
+ }
+ return 0;
+
+ case WM_DPICHANGED: {
+ auto newRectSize = reinterpret_cast(lparam);
+ LONG newWidth = newRectSize->right - newRectSize->left;
+ LONG newHeight = newRectSize->bottom - newRectSize->top;
+
+ SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth,
+ newHeight, SWP_NOZORDER | SWP_NOACTIVATE);
+
+ return 0;
+ }
+ case WM_SIZE: {
+ RECT rect = GetClientArea();
+ if (child_content_ != nullptr) {
+ // Size and position the child window.
+ MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left,
+ rect.bottom - rect.top, TRUE);
+ }
+ return 0;
+ }
+
+ case WM_ACTIVATE:
+ if (child_content_ != nullptr) {
+ SetFocus(child_content_);
+ }
+ return 0;
+
+ case WM_DWMCOLORIZATIONCOLORCHANGED:
+ UpdateTheme(hwnd);
+ return 0;
+ }
+
+ return DefWindowProc(window_handle_, message, wparam, lparam);
+}
+
+void Win32Window::Destroy() {
+ OnDestroy();
+
+ if (window_handle_) {
+ DestroyWindow(window_handle_);
+ window_handle_ = nullptr;
+ }
+ if (g_active_window_count == 0) {
+ WindowClassRegistrar::GetInstance()->UnregisterWindowClass();
+ }
+}
+
+Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept {
+ return reinterpret_cast(
+ GetWindowLongPtr(window, GWLP_USERDATA));
+}
+
+void Win32Window::SetChildContent(HWND content) {
+ child_content_ = content;
+ SetParent(content, window_handle_);
+ RECT frame = GetClientArea();
+
+ MoveWindow(content, frame.left, frame.top, frame.right - frame.left,
+ frame.bottom - frame.top, true);
+
+ SetFocus(child_content_);
+}
+
+RECT Win32Window::GetClientArea() {
+ RECT frame;
+ GetClientRect(window_handle_, &frame);
+ return frame;
+}
+
+HWND Win32Window::GetHandle() {
+ return window_handle_;
+}
+
+void Win32Window::SetQuitOnClose(bool quit_on_close) {
+ quit_on_close_ = quit_on_close;
+}
+
+bool Win32Window::OnCreate() {
+ // No-op; provided for subclasses.
+ return true;
+}
+
+void Win32Window::OnDestroy() {
+ // No-op; provided for subclasses.
+}
+
+void Win32Window::UpdateTheme(HWND const window) {
+ DWORD light_mode;
+ DWORD light_mode_size = sizeof(light_mode);
+ LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey,
+ kGetPreferredBrightnessRegValue,
+ RRF_RT_REG_DWORD, nullptr, &light_mode,
+ &light_mode_size);
+
+ if (result == ERROR_SUCCESS) {
+ BOOL enable_dark_mode = light_mode == 0;
+ DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE,
+ &enable_dark_mode, sizeof(enable_dark_mode));
+ }
+}
diff --git a/dev/a11y_assessments/windows/runner/win32_window.h b/dev/a11y_assessments/windows/runner/win32_window.h
new file mode 100644
index 0000000000000..bb93e8879162e
--- /dev/null
+++ b/dev/a11y_assessments/windows/runner/win32_window.h
@@ -0,0 +1,106 @@
+// 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.
+
+#ifndef RUNNER_WIN32_WINDOW_H_
+#define RUNNER_WIN32_WINDOW_H_
+
+#include
+
+#include
+#include
+#include
+
+// A class abstraction for a high DPI-aware Win32 Window. Intended to be
+// inherited from by classes that wish to specialize with custom
+// rendering and input handling
+class Win32Window {
+ public:
+ struct Point {
+ unsigned int x;
+ unsigned int y;
+ Point(unsigned int x, unsigned int y) : x(x), y(y) {}
+ };
+
+ struct Size {
+ unsigned int width;
+ unsigned int height;
+ Size(unsigned int width, unsigned int height)
+ : width(width), height(height) {}
+ };
+
+ Win32Window();
+ virtual ~Win32Window();
+
+ // Creates a win32 window with |title| that is positioned and sized using
+ // |origin| and |size|. New windows are created on the default monitor. Window
+ // sizes are specified to the OS in physical pixels, hence to ensure a
+ // consistent size this function will scale the inputted width and height as
+ // as appropriate for the default monitor. The window is invisible until
+ // |Show| is called. Returns true if the window was created successfully.
+ bool Create(const std::wstring& title, const Point& origin, const Size& size);
+
+ // Show the current window. Returns true if the window was successfully shown.
+ bool Show();
+
+ // Release OS resources associated with window.
+ void Destroy();
+
+ // Inserts |content| into the window tree.
+ void SetChildContent(HWND content);
+
+ // Returns the backing Window handle to enable clients to set icon and other
+ // window properties. Returns nullptr if the window has been destroyed.
+ HWND GetHandle();
+
+ // If true, closing this window will quit the application.
+ void SetQuitOnClose(bool quit_on_close);
+
+ // Return a RECT representing the bounds of the current client area.
+ RECT GetClientArea();
+
+ protected:
+ // Processes and route salient window messages for mouse handling,
+ // size change and DPI. Delegates handling of these to member overloads that
+ // inheriting classes can handle.
+ virtual LRESULT MessageHandler(HWND window,
+ UINT const message,
+ WPARAM const wparam,
+ LPARAM const lparam) noexcept;
+
+ // Called when CreateAndShow is called, allowing subclass window-related
+ // setup. Subclasses should return false if setup fails.
+ virtual bool OnCreate();
+
+ // Called when Destroy is called.
+ virtual void OnDestroy();
+
+ private:
+ friend class WindowClassRegistrar;
+
+ // OS callback called by message pump. Handles the WM_NCCREATE message which
+ // is passed when the non-client area is being created and enables automatic
+ // non-client DPI scaling so that the non-client area automatically
+ // responds to changes in DPI. All other messages are handled by
+ // MessageHandler.
+ static LRESULT CALLBACK WndProc(HWND const window,
+ UINT const message,
+ WPARAM const wparam,
+ LPARAM const lparam) noexcept;
+
+ // Retrieves a class instance pointer for |window|
+ static Win32Window* GetThisFromHandle(HWND const window) noexcept;
+
+ // Update the window frame's theme to match the system theme.
+ static void UpdateTheme(HWND const window);
+
+ bool quit_on_close_ = false;
+
+ // window handle for top level window.
+ HWND window_handle_ = nullptr;
+
+ // window handle for hosted content.
+ HWND child_content_ = nullptr;
+};
+
+#endif // RUNNER_WIN32_WINDOW_H_
diff --git a/dev/automated_tests/pubspec.yaml b/dev/automated_tests/pubspec.yaml
index e930a775edacd..cbb1f6f65f8a8 100644
--- a/dev/automated_tests/pubspec.yaml
+++ b/dev/automated_tests/pubspec.yaml
@@ -1,7 +1,7 @@
name: flutter_automated_tests
environment:
- sdk: '>=3.0.0-0 <4.0.0'
+ sdk: '>=3.2.0-0 <4.0.0'
dependencies:
flutter:
@@ -12,17 +12,17 @@ dependencies:
sdk: flutter
integration_test:
sdk: flutter
- platform: 3.1.0
- test: 1.24.3
+ platform: 3.1.2
+ test: 1.24.6
- _fe_analyzer_shared: 61.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- analyzer: 5.13.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ _fe_analyzer_shared: 64.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ analyzer: 6.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args: 2.4.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
async: 2.11.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
characters: 1.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
clock: 1.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- collection: 1.17.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ collection: 1.18.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert: 3.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
coverage: 1.6.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
crypto: 3.0.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -37,7 +37,7 @@ dependencies:
logging: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
matcher: 0.12.16 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
material_color_utilities: 0.5.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- meta: 1.9.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ meta: 1.10.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
mime: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
node_preamble: 2.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
package_config: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -52,19 +52,19 @@ dependencies:
source_map_stack_trace: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
source_maps: 0.10.12 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
source_span: 1.10.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- stack_trace: 1.11.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- stream_channel: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ stack_trace: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ stream_channel: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
string_scanner: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
term_glyph: 1.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- test_api: 0.6.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- test_core: 0.5.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ test_api: 0.6.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ test_core: 0.5.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
typed_data: 1.3.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vector_math: 2.1.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- vm_service: 11.7.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ vm_service: 11.10.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
watcher: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- web: 0.1.4-beta # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ web: 0.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
web_socket_channel: 2.4.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- webkit_inspection_protocol: 1.2.0 # 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"
yaml: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
flutter:
@@ -72,4 +72,4 @@ flutter:
assets:
- icon/test.png
-# PUBSPEC CHECKSUM: 8050
+# PUBSPEC CHECKSUM: 29b0
diff --git a/dev/benchmarks/complex_layout/android/gradle.properties b/dev/benchmarks/complex_layout/android/gradle.properties
index 94adc3a3f97aa..598d13fee4463 100644
--- a/dev/benchmarks/complex_layout/android/gradle.properties
+++ b/dev/benchmarks/complex_layout/android/gradle.properties
@@ -1,3 +1,3 @@
-org.gradle.jvmargs=-Xmx1536M
+org.gradle.jvmargs=-Xmx4G
android.useAndroidX=true
android.enableJetifier=true
diff --git a/dev/benchmarks/complex_layout/pubspec.yaml b/dev/benchmarks/complex_layout/pubspec.yaml
index fe6ed3df54dc5..89380badb866a 100644
--- a/dev/benchmarks/complex_layout/pubspec.yaml
+++ b/dev/benchmarks/complex_layout/pubspec.yaml
@@ -2,7 +2,7 @@ name: complex_layout
description: A benchmark of a relatively complex layout.
environment:
- sdk: '>=3.0.0-0 <4.0.0'
+ sdk: '>=3.2.0-0 <4.0.0'
dependencies:
flutter:
@@ -19,33 +19,33 @@ dependencies:
async: 2.11.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
characters: 1.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- collection: 1.17.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ collection: 1.18.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
file: 6.1.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
matcher: 0.12.16 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
material_color_utilities: 0.5.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- meta: 1.9.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ meta: 1.10.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
path: 1.8.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
source_span: 1.10.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- stack_trace: 1.11.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- stream_channel: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ stack_trace: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ stream_channel: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
string_scanner: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
sync_http: 0.3.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
term_glyph: 1.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- test_api: 0.6.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ test_api: 0.6.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vector_math: 2.1.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- vm_service: 11.7.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- web: 0.1.4-beta # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ vm_service: 11.10.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ web: 0.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
webdriver: 3.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
dev_dependencies:
flutter_test:
sdk: flutter
- test: 1.24.3
+ test: 1.24.6
integration_test:
sdk: flutter
- _fe_analyzer_shared: 61.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- analyzer: 5.13.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ _fe_analyzer_shared: 64.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ analyzer: 6.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args: 2.4.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
clock: 1.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert: 3.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -70,11 +70,11 @@ dev_dependencies:
shelf_web_socket: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
source_map_stack_trace: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
source_maps: 0.10.12 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- test_core: 0.5.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ test_core: 0.5.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
typed_data: 1.3.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
watcher: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
web_socket_channel: 2.4.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- webkit_inspection_protocol: 1.2.0 # 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"
yaml: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
flutter:
@@ -83,4 +83,4 @@ flutter:
- packages/flutter_gallery_assets/people/square/ali.png
- packages/flutter_gallery_assets/places/india_chettinad_silk_maker.png
-# PUBSPEC CHECKSUM: 1c29
+# PUBSPEC CHECKSUM: d287
diff --git a/dev/benchmarks/complex_layout/windows/flutter/CMakeLists.txt b/dev/benchmarks/complex_layout/windows/flutter/CMakeLists.txt
index 10873dd1af99c..c8f7abf1ebea9 100644
--- a/dev/benchmarks/complex_layout/windows/flutter/CMakeLists.txt
+++ b/dev/benchmarks/complex_layout/windows/flutter/CMakeLists.txt
@@ -14,6 +14,11 @@ include(${EPHEMERAL_DIR}/generated_config.cmake)
# https://github.com/flutter/flutter/issues/57146.
set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper")
+# Set fallback configurations for older versions of the flutter tool.
+if (NOT DEFINED FLUTTER_TARGET_PLATFORM)
+ set(FLUTTER_TARGET_PLATFORM "windows-x64")
+endif()
+
# === Flutter Library ===
set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll")
@@ -96,7 +101,7 @@ add_custom_command(
COMMAND ${CMAKE_COMMAND} -E env
${FLUTTER_TOOL_ENVIRONMENT}
"${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat"
- windows-x64 $
+ ${FLUTTER_TARGET_PLATFORM} $
VERBATIM
)
add_custom_target(flutter_assemble DEPENDS
diff --git a/dev/benchmarks/macrobenchmarks/android/gradle.properties b/dev/benchmarks/macrobenchmarks/android/gradle.properties
index 94adc3a3f97aa..598d13fee4463 100644
--- a/dev/benchmarks/macrobenchmarks/android/gradle.properties
+++ b/dev/benchmarks/macrobenchmarks/android/gradle.properties
@@ -1,3 +1,3 @@
-org.gradle.jvmargs=-Xmx1536M
+org.gradle.jvmargs=-Xmx4G
android.useAndroidX=true
android.enableJetifier=true
diff --git a/dev/benchmarks/macrobenchmarks/ios/Runner.xcodeproj/project.pbxproj b/dev/benchmarks/macrobenchmarks/ios/Runner.xcodeproj/project.pbxproj
index e319fa8e46387..4cdd00ac38a27 100644
--- a/dev/benchmarks/macrobenchmarks/ios/Runner.xcodeproj/project.pbxproj
+++ b/dev/benchmarks/macrobenchmarks/ios/Runner.xcodeproj/project.pbxproj
@@ -132,7 +132,6 @@
1842E3C5134E282C88C541B8 /* Pods-Runner.release.xcconfig */,
F269DC09D76325C7B7334781 /* Pods-Runner.profile.xcconfig */,
);
- name = Pods;
path = Pods;
sourceTree = "";
};
@@ -351,7 +350,10 @@
DEVELOPMENT_TEAM = S8QB4VV633;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
PRODUCT_BUNDLE_IDENTIFIER = com.example.macrobenchmarks;
PRODUCT_NAME = "$(TARGET_NAME)";
VERSIONING_SYSTEM = "apple-generic";
@@ -464,9 +466,13 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
+ DEVELOPMENT_TEAM = S8QB4VV633;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
PRODUCT_BUNDLE_IDENTIFIER = com.example.macrobenchmarks;
PRODUCT_NAME = "$(TARGET_NAME)";
VERSIONING_SYSTEM = "apple-generic";
@@ -479,9 +485,13 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
+ DEVELOPMENT_TEAM = S8QB4VV633;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
PRODUCT_BUNDLE_IDENTIFIER = com.example.macrobenchmarks;
PRODUCT_NAME = "$(TARGET_NAME)";
VERSIONING_SYSTEM = "apple-generic";
diff --git a/dev/benchmarks/macrobenchmarks/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/dev/benchmarks/macrobenchmarks/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
index 9997cfd251cd2..098cec7a297ed 100644
--- a/dev/benchmarks/macrobenchmarks/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
+++ b/dev/benchmarks/macrobenchmarks/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -26,10 +26,7 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
- language = ""
shouldUseLaunchSchemeArgsEnv = "YES">
-
-
-
-
+
+
@@ -63,8 +60,6 @@
ReferencedContainer = "container:Runner.xcodeproj">
-
-
const LargeImageChangerPage(),
kLargeImagesRouteName: (BuildContext context) => const LargeImagesPage(),
kTextRouteName: (BuildContext context) => const TextPage(),
+ kPathTessellationRouteName: (BuildContext context) => const PathTessellationPage(),
kFullscreenTextRouteName: (BuildContext context) => const TextFieldPage(),
kAnimatedPlaceholderRouteName: (BuildContext context) => const AnimatedPlaceholderPage(),
kClipperCacheRouteName: (BuildContext context) => const ClipperCachePage(),
@@ -89,6 +95,10 @@ class MacrobenchmarksApp extends StatelessWidget {
kAnimatedBlurBackdropFilter: (BuildContext context) => const AnimatedBlurBackdropFilter(),
kSlidersRouteName: (BuildContext context) => const SlidersPage(),
kDrawPointsPageRougeName: (BuildContext context) => const DrawPointsPage(),
+ kDrawVerticesPageRouteName: (BuildContext context) => const DrawVerticesPage(),
+ kDrawAtlasPageRouteName: (BuildContext context) => const DrawAtlasPage(),
+ kAnimatedAdvancedBlend: (BuildContext context) => const AnimatedAdvancedBlend(),
+ kVeryLongPictureScrollingRouteName: (BuildContext context) => const VeryLongPictureScrollingPerf(),
},
);
}
@@ -162,6 +172,13 @@ class HomePage extends StatelessWidget {
Navigator.pushNamed(context, kLargeImagesRouteName);
},
),
+ ElevatedButton(
+ key: const Key(kPathTessellationRouteName),
+ child: const Text('Path Tessellation'),
+ onPressed: () {
+ Navigator.pushNamed(context, kPathTessellationRouteName);
+ },
+ ),
ElevatedButton(
key: const Key(kTextRouteName),
child: const Text('Text'),
@@ -336,7 +353,35 @@ class HomePage extends StatelessWidget {
onPressed: () {
Navigator.pushNamed(context, kDrawPointsPageRougeName);
},
- )
+ ),
+ ElevatedButton(
+ key: const Key(kDrawVerticesPageRouteName),
+ child: const Text('Draw Vertices'),
+ onPressed: () {
+ Navigator.pushNamed(context, kDrawVerticesPageRouteName);
+ },
+ ),
+ ElevatedButton(
+ key: const Key(kDrawAtlasPageRouteName),
+ child: const Text('Draw Atlas'),
+ onPressed: () {
+ Navigator.pushNamed(context, kDrawAtlasPageRouteName);
+ },
+ ),
+ ElevatedButton(
+ key: const Key(kAnimatedAdvancedBlend),
+ child: const Text('Animated Advanced Blend'),
+ onPressed: () {
+ Navigator.pushNamed(context, kAnimatedAdvancedBlend);
+ },
+ ),
+ ElevatedButton(
+ key: const Key(kVeryLongPictureScrollingRouteName),
+ child: const Text('Very Long Picture Scrolling'),
+ onPressed: () {
+ Navigator.pushNamed(context, kVeryLongPictureScrollingRouteName);
+ },
+ ),
],
),
);
diff --git a/dev/benchmarks/macrobenchmarks/lib/src/animated_advanced_blend.dart b/dev/benchmarks/macrobenchmarks/lib/src/animated_advanced_blend.dart
new file mode 100644
index 0000000000000..c3ea0f82171db
--- /dev/null
+++ b/dev/benchmarks/macrobenchmarks/lib/src/animated_advanced_blend.dart
@@ -0,0 +1,83 @@
+// 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/material.dart';
+
+class _MultiplyPainter extends CustomPainter {
+ _MultiplyPainter(this._color);
+
+ final Color _color;
+
+ @override
+ void paint(Canvas canvas, Size size) {
+ const int xDenominator = 2;
+ const int yDenominator = 10;
+ final double width = size.width / xDenominator;
+ final double height = size.height / yDenominator;
+
+ for (int y = 0; y < yDenominator; y++) {
+ for (int x = 0; x < xDenominator; x++) {
+ final Rect rect = Offset(x * width, y * height) & Size(width, height);
+ final Paint basePaint = Paint()
+ ..color = Color.fromARGB(
+ (((x + 1) * width) / size.width * 255.0).floor(),
+ (((y + 1) * height) / size.height * 255.0).floor(),
+ 255,
+ 127);
+ canvas.drawRect(rect, basePaint);
+
+ final Paint multiplyPaint = Paint()
+ ..color = _color
+ ..blendMode = BlendMode.multiply;
+ canvas.drawRect(rect, multiplyPaint);
+ }
+ }
+ }
+
+ @override
+ bool shouldRepaint(CustomPainter oldDelegate) {
+ return true;
+ }
+}
+
+class AnimatedAdvancedBlend extends StatefulWidget {
+ const AnimatedAdvancedBlend({super.key});
+
+ @override
+ State createState() => _AnimatedAdvancedBlendState();
+}
+
+class _AnimatedAdvancedBlendState extends State with SingleTickerProviderStateMixin {
+ late final AnimationController controller = AnimationController(vsync: this, duration: const Duration(milliseconds: 5000));
+ late final Animation animation = controller.drive(Tween(begin: 0.0, end: 1.0));
+ Color _color = const Color.fromARGB(255, 255, 0, 255);
+
+ @override
+ void initState() {
+ super.initState();
+ controller.repeat();
+ animation.addListener(() {
+ setState(() {
+ _color = Color.fromARGB((animation.value * 255).floor(), 255, 0, 255);
+ });
+ });
+ }
+
+ @override
+ void dispose() {
+ controller.dispose();
+ super.dispose();
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return MaterialApp(
+ home: Scaffold(
+ body: CustomPaint(
+ painter: _MultiplyPainter(_color),
+ child: Container(),
+ ),
+ ));
+ }
+}
diff --git a/dev/benchmarks/macrobenchmarks/lib/src/draw_atlas.dart b/dev/benchmarks/macrobenchmarks/lib/src/draw_atlas.dart
new file mode 100644
index 0000000000000..742301fb36753
--- /dev/null
+++ b/dev/benchmarks/macrobenchmarks/lib/src/draw_atlas.dart
@@ -0,0 +1,116 @@
+// 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 'dart:ui' as ui;
+
+import 'package:flutter/material.dart';
+
+Future loadImage(String asset) async {
+ final ui.ImmutableBuffer buffer = await ui.ImmutableBuffer.fromAsset(asset);
+ final ui.Codec codec = await PaintingBinding.instance.instantiateImageCodecWithSize(buffer);
+ final ui.FrameInfo frameInfo = await codec.getNextFrame();
+ return frameInfo.image;
+}
+
+class DrawAtlasPage extends StatefulWidget {
+ const DrawAtlasPage({super.key});
+
+ @override
+ State createState() => _DrawAtlasPageState();
+}
+
+class _DrawAtlasPageState extends State with SingleTickerProviderStateMixin {
+ late final AnimationController controller;
+ double tick = 0.0;
+ ui.Image? image;
+
+ @override
+ void initState() {
+ super.initState();
+ loadImage('packages/flutter_gallery_assets/food/butternut_squash_soup.png').then((ui.Image pending) {
+ setState(() {
+ image = pending;
+ });
+ });
+ controller = AnimationController(vsync: this, duration: const Duration(hours: 1));
+ controller.addListener(() {
+ setState(() {
+ tick += 1;
+ });
+ });
+ controller.forward(from: 0);
+ }
+
+ @override
+ void dispose() {
+ controller.dispose();
+ super.dispose();
+ }
+
+
+ @override
+ Widget build(BuildContext context) {
+ if (image == null) {
+ return const Placeholder();
+ }
+ return CustomPaint(
+ size: const Size(500, 500),
+ painter: VerticesPainter(tick, image!),
+ child: Container(),
+ );
+ }
+}
+
+class VerticesPainter extends CustomPainter {
+ VerticesPainter(this.tick, this.image);
+
+ final double tick;
+ final ui.Image image;
+
+ @override
+ void paint(Canvas canvas, Size size) {
+ canvas.translate(0, tick);
+ canvas.drawAtlas(
+ image,
+ [RSTransform.fromComponents(rotation: 0, scale: 1, anchorX: 0, anchorY: 0, translateX: 0, translateY: 0)],
+ [Rect.fromLTWH(0, 0, image.width.toDouble(), image.height.toDouble())],
+ [Colors.red],
+ BlendMode.plus,
+ null,
+ Paint()
+ );
+ canvas.drawAtlas(
+ image,
+ [RSTransform.fromComponents(rotation: 0, scale: 1, anchorX: 0, anchorY: 0, translateX: 250, translateY: 0)],
+ [Rect.fromLTWH(0, 0, image.width.toDouble(), image.height.toDouble())],
+ [Colors.green],
+ BlendMode.plus,
+ null,
+ Paint()
+ );
+ canvas.drawAtlas(
+ image,
+ [RSTransform.fromComponents(rotation: 0, scale: 1, anchorX: 0, anchorY: 0, translateX: 0, translateY: 250)],
+ [Rect.fromLTWH(0, 0, image.width.toDouble(), image.height.toDouble())],
+ [Colors.blue],
+ BlendMode.plus,
+ null,
+ Paint()
+ );
+ canvas.drawAtlas(
+ image,
+ [RSTransform.fromComponents(rotation: 0, scale: 1, anchorX: 0, anchorY: 0, translateX: 250, translateY: 250)],
+ [Rect.fromLTWH(0, 0, image.width.toDouble(), image.height.toDouble())],
+ [Colors.yellow],
+ BlendMode.plus,
+ null,
+ Paint()
+ );
+ }
+
+ @override
+ bool shouldRepaint(covariant CustomPainter oldDelegate) {
+ return true;
+ }
+}
diff --git a/dev/benchmarks/macrobenchmarks/lib/src/draw_points.dart b/dev/benchmarks/macrobenchmarks/lib/src/draw_points.dart
index a3ca792cb50d5..09989f7c695df 100644
--- a/dev/benchmarks/macrobenchmarks/lib/src/draw_points.dart
+++ b/dev/benchmarks/macrobenchmarks/lib/src/draw_points.dart
@@ -72,10 +72,10 @@ class PointsPainter extends CustomPainter {
}
canvas.drawPaint(Paint()..color = Colors.white);
for (int i = 0; i < 8; i++) {
- final double x = ((size.width / i) + tick) % size.width;
+ final double x = ((size.width / (i + 1)) + tick) % size.width;
for (int j = 0; j < data.length; j += 2) {
data[j] = x;
- data[j + 1] = (size.height / j) + 200;
+ data[j + 1] = (size.height / (j + 1)) + 200;
}
final Paint paint = Paint()
..color = kColors[i]
diff --git a/dev/benchmarks/macrobenchmarks/lib/src/draw_vertices.dart b/dev/benchmarks/macrobenchmarks/lib/src/draw_vertices.dart
new file mode 100644
index 0000000000000..669919d4bcde0
--- /dev/null
+++ b/dev/benchmarks/macrobenchmarks/lib/src/draw_vertices.dart
@@ -0,0 +1,114 @@
+// 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 'dart:ui' as ui;
+
+import 'package:flutter/material.dart';
+
+Future loadImage(String asset) async {
+ final ui.ImmutableBuffer buffer = await ui.ImmutableBuffer.fromAsset(asset);
+ final ui.Codec codec = await PaintingBinding.instance.instantiateImageCodecWithSize(buffer);
+ final ui.FrameInfo frameInfo = await codec.getNextFrame();
+ return frameInfo.image;
+}
+
+class DrawVerticesPage extends StatefulWidget {
+ const DrawVerticesPage({super.key});
+
+ @override
+ State createState() => _DrawVerticesPageState();
+}
+
+class _DrawVerticesPageState extends State with SingleTickerProviderStateMixin {
+ late final AnimationController controller;
+ double tick = 0.0;
+ ui.Image? image;
+
+ @override
+ void initState() {
+ super.initState();
+ loadImage('packages/flutter_gallery_assets/food/butternut_squash_soup.png').then((ui.Image pending) {
+ setState(() {
+ image = pending;
+ });
+ });
+ controller = AnimationController(vsync: this, duration: const Duration(hours: 1));
+ controller.addListener(() {
+ setState(() {
+ tick += 1;
+ });
+ });
+ controller.forward(from: 0);
+ }
+
+ @override
+ void dispose() {
+ controller.dispose();
+ super.dispose();
+ }
+
+
+ @override
+ Widget build(BuildContext context) {
+ if (image == null) {
+ return const Placeholder();
+ }
+ return CustomPaint(
+ size: const Size(500, 500),
+ painter: VerticesPainter(tick, image!),
+ child: Container(),
+ );
+ }
+}
+
+class VerticesPainter extends CustomPainter {
+ VerticesPainter(this.tick, this.image);
+
+ final double tick;
+ final ui.Image image;
+
+ @override
+ void paint(Canvas canvas, Size size) {
+ canvas.translate(0, tick);
+ final ui.Vertices vertices = ui.Vertices(
+ VertexMode.triangles,
+ const [
+ Offset.zero,
+ Offset(0, 250),
+ Offset(250, 0),
+ Offset(0, 250),
+ Offset(250, 0),
+ Offset(250, 250)
+ ],
+ textureCoordinates: [
+ Offset.zero,
+ Offset(0, image.height.toDouble()),
+ Offset(image.width.toDouble(), 0),
+ Offset(0, image.height.toDouble()),
+ Offset(image.width.toDouble(), 0),
+ Offset(image.width.toDouble(), image.height.toDouble())
+ ],
+ colors: [
+ Colors.red,
+ Colors.blue,
+ Colors.green,
+ Colors.red,
+ Colors.blue,
+ Colors.green,
+ ]
+ );
+ canvas.drawVertices(vertices, BlendMode.plus, Paint()..shader = ImageShader(image, TileMode.clamp, TileMode.clamp, Matrix4.identity().storage));
+ canvas.translate(250, 0);
+ canvas.drawVertices(vertices, BlendMode.plus, Paint()..shader = ImageShader(image, TileMode.clamp, TileMode.clamp, Matrix4.identity().storage));
+ canvas.translate(0, 250);
+ canvas.drawVertices(vertices, BlendMode.plus, Paint()..shader = ImageShader(image, TileMode.clamp, TileMode.clamp, Matrix4.identity().storage));
+ canvas.translate(-250, 0);
+ canvas.drawVertices(vertices, BlendMode.plus, Paint()..shader = ImageShader(image, TileMode.clamp, TileMode.clamp, Matrix4.identity().storage));
+ }
+
+ @override
+ bool shouldRepaint(covariant CustomPainter oldDelegate) {
+ return true;
+ }
+}
diff --git a/dev/benchmarks/macrobenchmarks/lib/src/path_tessellation.dart b/dev/benchmarks/macrobenchmarks/lib/src/path_tessellation.dart
new file mode 100644
index 0000000000000..6fc395aba9041
--- /dev/null
+++ b/dev/benchmarks/macrobenchmarks/lib/src/path_tessellation.dart
@@ -0,0 +1,341 @@
+// 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/material.dart';
+
+class PathTessellationPage extends StatefulWidget {
+ const PathTessellationPage({super.key});
+
+ @override
+ State createState() => _PathTessellationPageState();
+}
+
+class _PathTessellationPageState extends State
+ with SingleTickerProviderStateMixin {
+ late AnimationController _controller;
+
+ @override
+ void initState() {
+ super.initState();
+ _controller =
+ AnimationController(vsync: this, lowerBound: 1.0, upperBound: 1.3);
+ _controller.addListener(() {
+ setState(() {});
+ });
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ final double scale = _controller.value;
+ return SafeArea(
+ child: ColoredBox(
+ color: Colors.black,
+ child: Stack(
+ fit: StackFit.expand,
+ children: [
+ ListView.builder(
+ key: const Key(
+ 'list_view'), // this key is used by the driver test,
+ itemBuilder: (BuildContext context, int index) {
+ return Container(
+ margin: const EdgeInsets.all(1.0),
+ decoration: BoxDecoration(
+ color: Colors.white.withOpacity(0.2),
+ ),
+ child: IconRow(iconSize: (30 + 0.5 * (index % 10)) * scale),
+ );
+ },
+ itemCount: 200,
+ itemExtent: 50,
+ ),
+ Positioned(
+ top: 0,
+ left: 0,
+ right: 0,
+ child: Container(
+ color: Colors.black.withOpacity(0.7),
+ height: 100,
+ child: IconRow(iconSize: 50.0 * scale),
+ ),
+ ),
+ Positioned(
+ bottom: 0,
+ left: 0,
+ right: 0,
+ child: ColoredBox(
+ color: Colors.black.withOpacity(0.7),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.stretch,
+ children: [
+ SizedBox(
+ height: 100,
+ child: IconRow(iconSize: 55.0 * scale),
+ ),
+ MaterialButton(
+ textColor: Colors.white,
+ key: const Key(
+ 'animate_button'), // this key is used by the driver test
+ child: const Text('Animate'),
+ onPressed: () {
+ if (_controller.isAnimating) {
+ _controller.stop();
+ } else {
+ _controller.repeat(
+ period: const Duration(seconds: 1),
+ reverse: true,
+ );
+ }
+ },
+ ),
+ ],
+ ),
+ ),
+ ),
+ ],
+ ),
+ ),
+ );
+ }
+}
+
+class IconRow extends StatelessWidget {
+ const IconRow({
+ super.key,
+ required this.iconSize,
+ });
+
+ final double iconSize;
+
+ @override
+ Widget build(BuildContext context) {
+ return Row(
+ mainAxisAlignment: MainAxisAlignment.spaceEvenly,
+ children: [
+ SizedBox.square(
+ dimension: iconSize,
+ child: CustomPaint(
+ painter: _SettingsIconPainter(),
+ willChange: true,
+ ),
+ ),
+ SizedBox.square(
+ dimension: iconSize,
+ child: CustomPaint(
+ painter: _CameraIconPainter(),
+ willChange: true,
+ ),
+ ),
+ SizedBox.square(
+ dimension: iconSize,
+ child: CustomPaint(
+ painter: _CalendarIconPainter(),
+ willChange: true,
+ ),
+ ),
+ SizedBox.square(
+ dimension: iconSize,
+ child: CustomPaint(
+ painter: _ConversationIconPainter(),
+ willChange: true,
+ ),
+ ),
+ SizedBox.square(
+ dimension: iconSize,
+ child: CustomPaint(
+ painter: _GeometryIconPainter(),
+ willChange: true,
+ ),
+ ),
+ ],
+ );
+ }
+}
+
+/// Parses SVG path data into a [Path] object.
+Path _pathFromString(String pathString) {
+ int start = 0;
+ final RegExp pattern = RegExp('[MLCHVZ]');
+ Offset current = Offset.zero;
+ final Path path = Path();
+
+ void performCommand(String command) {
+ final String type = command[0];
+ final List arguments = command
+ .substring(1)
+ .split(' ')
+ .where((String element) => element.isNotEmpty)
+ .map((String e) => double.parse(e))
+ .toList(growable: false);
+ switch (type) {
+ case 'M':
+ path.moveTo(arguments[0], arguments[1]);
+ current = Offset(arguments[0], arguments[1]);
+ case 'L':
+ path.lineTo(arguments[0], arguments[1]);
+ current = Offset(arguments[0], arguments[1]);
+ case 'C':
+ path.cubicTo(arguments[0], arguments[1], arguments[2], arguments[3],
+ arguments[4], arguments[5]);
+ current = Offset(arguments[4], arguments[5]);
+ case 'H':
+ path.lineTo(arguments[0], current.dy);
+ current = Offset(arguments[0], current.dy);
+ case 'V':
+ path.lineTo(current.dx, arguments[0]);
+ current = Offset(current.dx, arguments[0]);
+ }
+ }
+
+ while (true) {
+ start = pathString.indexOf(pattern, start);
+ if (start == -1) {
+ break;
+ }
+ int end = pathString.indexOf(pattern, start + 1);
+ if (end == -1) {
+ end = pathString.length;
+ }
+ final String command = pathString.substring(start, end);
+ performCommand(command);
+ start = end;
+ }
+ return path;
+}
+
+class _SettingsIconPainter extends CustomPainter {
+ @override
+ void paint(Canvas canvas, Size size) {
+ final Matrix4 scale =
+ Matrix4.diagonal3Values(size.width / 20, size.height / 20, 1.0);
+
+ Path path;
+ path = _path1.transform(scale.storage)..fillType = PathFillType.evenOdd;
+ canvas.drawPath(path, Paint()..color = const Color(0x60F84F39));
+
+ path = _path2.transform(scale.storage)..fillType = PathFillType.evenOdd;
+ canvas.drawPath(path, Paint()..color = const Color(0xFFF84F39));
+
+ path = _path3.transform(scale.storage)..fillType = PathFillType.evenOdd;
+ canvas.drawPath(path, Paint()..color = const Color(0xFFF84F39));
+ }
+
+ static final Path _path1 = _pathFromString(
+ 'M8.3252 2.675L7.7877 4.0625L5.93771 5.1125L4.4627 4.8875C4.2171 4.85416 3.96713 4.89459 3.74456 5.00365C3.52199 5.11271 3.33686 5.28548 3.21271 5.5L2.7127 6.375C2.58458 6.59294 2.52555 6.8446 2.5434 7.09678C2.56126 7.34895 2.65516 7.58979 2.8127 7.7875L3.7502 8.95V11.05L2.8377 12.2125C2.68016 12.4102 2.58626 12.651 2.5684 12.9032C2.55055 13.1554 2.60958 13.4071 2.73771 13.625L3.2377 14.5C3.36186 14.7145 3.54699 14.8873 3.76956 14.9963C3.99213 15.1054 4.2421 15.1458 4.4877 15.1125L5.96271 14.8875L7.7877 15.9375L8.3252 17.325C8.41585 17.5599 8.57534 17.762 8.78277 17.9047C8.9902 18.0475 9.2359 18.1243 9.48771 18.125H10.5377C10.7895 18.1243 11.0352 18.0475 11.2426 17.9047C11.4501 17.762 11.6096 17.5599 11.7002 17.325L12.2377 15.9375L14.0627 14.8875L15.5377 15.1125C15.7833 15.1458 16.0333 15.1054 16.2559 14.9963C16.4784 14.8873 16.6636 14.7145 16.7877 14.5L17.2877 13.625C17.4158 13.4071 17.4749 13.1554 17.457 12.9032C17.4392 12.651 17.3453 12.4102 17.1877 12.2125L16.2502 11.05V8.95L17.1627 7.7875C17.3203 7.58979 17.4142 7.34895 17.432 7.09678C17.4499 6.8446 17.3908 6.59294 17.2627 6.375L16.7627 5.5C16.6386 5.28548 16.4534 5.11271 16.2309 5.00365C16.0083 4.89459 15.7583 4.85416 15.5127 4.8875L14.0377 5.1125L12.2127 4.0625L11.6752 2.675C11.5846 2.44008 11.4251 2.23801 11.2176 2.09527C11.0102 1.95252 10.7645 1.87574 10.5127 1.875H9.48771C9.2359 1.87574 8.9902 1.95252 8.78277 2.09527C8.57534 2.23801 8.41585 2.44008 8.3252 2.675ZM10 12.5C11.3807 12.5 12.5 11.3807 12.5 10C12.5 8.61929 11.3807 7.5 10 7.5C8.61929 7.5 7.5 8.61929 7.5 10C7.5 11.3807 8.61929 12.5 10 12.5Z');
+ static final Path _path2 = _pathFromString(
+ 'M9.48771 1.25L9.48586 1.25001C9.10816 1.25112 8.7396 1.36628 8.42845 1.5804C8.11747 1.79441 7.87833 2.0973 7.74232 2.44945L7.2854 3.62894L5.81769 4.46197L4.55695 4.26965L4.54677 4.26818C4.17836 4.21818 3.80341 4.27882 3.46955 4.44241C3.13569 4.606 2.858 4.86515 2.67177 5.18693L2.17177 6.06191C1.98107 6.38797 1.89329 6.76406 1.91997 7.14092C1.94675 7.51918 2.08759 7.88043 2.32392 8.177L3.12521 9.17062V10.834L2.34736 11.825C2.11197 12.1212 1.97169 12.4817 1.94497 12.8591C1.91828 13.236 2.00608 13.6121 2.1968 13.9381L2.69505 14.8101L2.69677 14.8131C2.883 15.1349 3.16069 15.394 3.49455 15.5576C3.82841 15.7212 4.20336 15.7818 4.57177 15.7318L5.84067 15.5383L7.28466 16.3691L7.28539 16.3711L7.74211 17.55C7.87812 17.9021 8.11745 18.2056 8.42843 18.4196C8.73958 18.6337 9.10814 18.7489 9.48584 18.75L9.48769 18.75L10.5145 18.75C10.8922 18.7489 11.2608 18.6337 11.5719 18.4196C11.8829 18.2056 12.1473 17.9021 12.2833 17.55L12.7408 16.3691L14.1847 15.5383L15.4434 15.7304L15.4536 15.7318C15.822 15.7818 16.197 15.7212 16.5309 15.5576C16.8647 15.394 17.1424 15.1349 17.3286 14.8131L17.3304 14.8101L17.8287 13.9381C18.0193 13.612 18.1071 13.2359 18.0804 12.8591C18.0537 12.4808 17.9128 12.1196 17.6765 11.823L16.8752 10.8294V9.166L17.6515 8.177L17.6531 8.17502C17.8884 7.87883 18.0287 7.51834 18.0554 7.14092C18.0821 6.76407 17.9943 6.38798 17.8036 6.06192L17.3054 5.18991L17.3036 5.18693C17.1174 4.86515 16.8397 4.606 16.5059 4.44241C16.172 4.27882 15.797 4.21809 15.4286 4.2681L14.1597 4.46166L12.7158 3.63087L12.258 2.44923C12.122 2.09718 11.8829 1.79437 11.572 1.5804C11.2608 1.36628 10.8923 1.25112 10.5146 1.25L9.48771 1.25ZM10.5116 2.5H9.48879C9.36315 2.50053 9.24059 2.5389 9.13708 2.61013C9.03337 2.68151 8.95363 2.78254 8.9083 2.9L8.3705 4.28827C8.31845 4.42266 8.22154 4.53492 8.09621 4.60606L6.24621 5.65606C6.12411 5.72535 5.98224 5.75153 5.84346 5.73036L4.37442 5.50627C4.25298 5.49062 4.12958 5.51099 4.01957 5.5649C3.90871 5.61922 3.81643 5.70515 3.75436 5.81183L3.25154 6.69178C3.18747 6.80075 3.15792 6.92655 3.16684 7.05264C3.17574 7.17824 3.22235 7.2982 3.30057 7.39684L4.23671 8.55766C4.32633 8.66878 4.37521 8.80724 4.37521 8.95V11.05C4.37521 11.1899 4.32824 11.3258 4.24184 11.4359L3.32651 12.602C3.24773 12.7009 3.20077 12.8213 3.19184 12.9474C3.18292 13.0735 3.21243 13.1993 3.27649 13.3083L3.2804 13.3149L3.77864 14.1869L3.77933 14.1881C3.8414 14.2948 3.93369 14.3808 4.04457 14.4351C4.15457 14.489 4.27796 14.5094 4.39939 14.4937L5.86846 14.2696C6.00848 14.2483 6.15161 14.2751 6.27439 14.3458L8.09939 15.3958C8.22322 15.467 8.3189 15.5785 8.3705 15.7117L8.908 17.0992C8.95333 17.2167 9.03337 17.3185 9.13708 17.3899C9.24061 17.4611 9.36321 17.4995 9.48887 17.5H10.5365C10.6622 17.4995 10.7848 17.4611 10.8883 17.3899C10.992 17.3185 11.0718 17.2175 11.1171 17.1L11.6549 15.7117C11.7065 15.5785 11.8022 15.467 11.926 15.3958L13.751 14.3458C13.8738 14.2751 14.0169 14.2483 14.157 14.2696L15.626 14.4937C15.7475 14.5094 15.8708 14.489 15.9808 14.4351C16.0917 14.3808 16.184 14.2949 16.2461 14.1882L16.2468 14.1869L16.7489 13.3082C16.8129 13.1993 16.8425 13.0735 16.8336 12.9474C16.8247 12.8218 16.7781 12.7019 16.6999 12.6032L16.6989 12.602L15.7637 11.4423C15.6741 11.3312 15.6252 11.1928 15.6252 11.05V8.95C15.6252 8.81006 15.6722 8.67418 15.7586 8.5641L16.6711 7.4016L16.6739 7.398C16.7527 7.29915 16.7996 7.17873 16.8086 7.05264C16.8175 6.92655 16.788 6.80072 16.7239 6.69175L16.72 6.68511L16.2218 5.81307L16.2211 5.81187C16.159 5.70517 16.0667 5.61923 15.9558 5.5649C15.8458 5.51099 15.7224 5.49062 15.601 5.50627L14.132 5.73036C13.9919 5.75172 13.8488 5.72488 13.726 5.65424L11.901 4.60424C11.7772 4.533 11.6815 4.42148 11.6299 4.28827L11.0924 2.90077C11.0471 2.78331 10.967 2.68151 10.8633 2.61013C10.7598 2.5389 10.6373 2.50053 10.5116 2.5Z');
+ static final Path _path3 = _pathFromString(
+ 'M10.0002 6.875C9.1714 6.875 8.37655 7.20424 7.7905 7.79029C7.20445 8.37635 6.87521 9.1712 6.87521 10C6.87521 10.6181 7.05848 11.2223 7.40186 11.7362C7.74524 12.2501 8.2333 12.6506 8.80432 12.8871C9.37534 13.1237 10.0037 13.1855 10.6099 13.065C11.2161 12.9444 11.7729 12.6467 12.2099 12.2097C12.647 11.7727 12.9446 11.2159 13.0652 10.6097C13.1857 10.0035 13.1239 9.37514 12.8873 8.80412C12.6508 8.2331 12.2503 7.74504 11.7364 7.40166C11.2225 7.05828 10.6183 6.875 10.0002 6.875ZM10.0002 8.125C9.50292 8.125 9.02601 8.32255 8.67438 8.67418C8.32275 9.02581 8.12521 9.50272 8.12521 10C8.12521 10.3708 8.23517 10.7334 8.4412 11.0417C8.64723 11.35 8.94006 11.5904 9.28267 11.7323C9.62529 11.8742 10.0023 11.9113 10.366 11.839C10.7297 11.7666 11.0638 11.5881 11.326 11.3258C11.5883 11.0636 11.7668 10.7295 11.8392 10.3658C11.9115 10.0021 11.8744 9.62508 11.7325 9.28247C11.5906 8.93986 11.3502 8.64703 11.0419 8.441C10.7336 8.23497 10.371 8.125 10.0002 8.125Z');
+
+ @override
+ bool shouldRepaint(covariant CustomPainter oldDelegate) {
+ return false;
+ }
+}
+
+class _CameraIconPainter extends CustomPainter {
+ @override
+ void paint(Canvas canvas, Size size) {
+ final Matrix4 scale =
+ Matrix4.diagonal3Values(size.width / 20, size.height / 20, 1.0);
+
+ Path path;
+ path = _path1.transform(scale.storage)..fillType = PathFillType.evenOdd;
+ canvas.drawPath(path, Paint()..color = const Color(0xFFF84F39));
+
+ path = _path2.transform(scale.storage)..fillType = PathFillType.evenOdd;
+ canvas.drawPath(path, Paint()..color = const Color(0x60F84F39));
+ }
+
+ static final Path _path1 = _pathFromString(
+ 'M3.26366 17H16.7363C17.4857 17 18.0503 16.8123 18.4302 16.4369C18.8101 16.0615 19 15.5035 19 14.7631V7.01229C19 6.27188 18.8101 5.71397 18.4302 5.33855C18.0503 4.96313 17.4857 4.77542 16.7363 4.77542H14.6132C14.4154 4.77542 14.2567 4.76238 14.137 4.73631C14.0173 4.70503 13.9107 4.65549 13.817 4.58771C13.7233 4.51471 13.6219 4.41825 13.5126 4.29832L12.9115 3.61788C12.7242 3.41453 12.5212 3.26071 12.3027 3.15642C12.0893 3.05214 11.7953 3 11.4206 3H8.50911C8.13443 3 7.83781 3.05214 7.61925 3.15642C7.4059 3.26071 7.20555 3.41453 7.01821 3.61788L6.41717 4.29832C6.24545 4.48082 6.09193 4.60596 5.95663 4.67374C5.82134 4.74153 5.61058 4.77542 5.32437 4.77542H3.26366C2.50911 4.77542 1.94189 4.96313 1.56201 5.33855C1.18734 5.71397 1 6.27188 1 7.01229V14.7631C1 15.5035 1.18734 16.0615 1.56201 16.4369C1.94189 16.8123 2.50911 17 3.26366 17ZM3.27927 15.9207C2.89419 15.9207 2.59757 15.819 2.38942 15.6156C2.18647 15.4123 2.085 15.1099 2.085 14.7084V7.07486C2.085 6.67337 2.18647 6.37095 2.38942 6.1676C2.59757 5.95903 2.89419 5.85475 3.27927 5.85475H5.57415C5.9072 5.85475 6.1752 5.81825 6.37814 5.74525C6.58109 5.67225 6.77624 5.53147 6.96357 5.32291L7.55681 4.6581C7.76496 4.42346 7.9497 4.26965 8.11101 4.19665C8.27233 4.12365 8.50911 4.08715 8.82134 4.08715H11.1084C11.4258 4.08715 11.6626 4.12365 11.8187 4.19665C11.9801 4.26965 12.1648 4.42346 12.3729 4.6581L12.9662 5.32291C13.1535 5.53147 13.3487 5.67225 13.5516 5.74525C13.7546 5.81825 14.0225 5.85475 14.3556 5.85475H16.7207C17.1058 5.85475 17.4024 5.95903 17.6106 6.1676C17.8187 6.37095 17.9228 6.67337 17.9228 7.07486V14.7084C17.9228 15.1099 17.8187 15.4123 17.6106 15.6156C17.4024 15.819 17.1058 15.9207 16.7207 15.9207H3.27927ZM10 14.8101C10.7493 14.8101 11.4284 14.6302 12.0373 14.2704C12.6461 13.9054 13.1301 13.4179 13.4892 12.8078C13.8534 12.1926 14.0356 11.5095 14.0356 10.7587C14.0356 10.0078 13.8534 9.32477 13.4892 8.7095C13.1301 8.09423 12.6461 7.6067 12.0373 7.24693C11.4284 6.88194 10.7493 6.69944 10 6.69944C9.25585 6.69944 8.57676 6.88194 7.96271 7.24693C7.35386 7.6067 6.8673 8.09423 6.50304 8.7095C6.14397 9.32477 5.96444 10.0078 5.96444 10.7587C5.96444 11.5095 6.14397 12.1926 6.50304 12.8078C6.8673 13.4179 7.35386 13.9054 7.96271 14.2704C8.57676 14.6302 9.25585 14.8101 10 14.8101ZM10 13.7855C9.4484 13.7855 8.94363 13.6499 8.48569 13.3788C8.03296 13.1076 7.66869 12.7426 7.39289 12.2838C7.12229 11.825 6.98699 11.3166 6.98699 10.7587C6.98699 10.1955 7.12229 9.68454 7.39289 9.2257C7.66349 8.76685 8.02775 8.40447 8.48569 8.13855C8.94363 7.86741 9.4484 7.73184 10 7.73184C10.5568 7.73184 11.0616 7.86741 11.5143 8.13855C11.9722 8.40447 12.3365 8.76685 12.6071 9.2257C12.8829 9.68454 13.0208 10.1955 13.0208 10.7587C13.0208 11.3166 12.8829 11.825 12.6071 12.2838C12.3365 12.7426 11.9722 13.1076 11.5143 13.3788C11.0616 13.6499 10.5568 13.7855 10 13.7855ZM14.3556 8.04469C14.3556 8.30019 14.4467 8.51657 14.6288 8.69385C14.8109 8.86592 15.0269 8.95196 15.2767 8.95196C15.516 8.94674 15.7242 8.8581 15.9011 8.68603C16.0833 8.50875 16.1743 8.29497 16.1743 8.04469C16.1743 7.79963 16.0833 7.58845 15.9011 7.41117C15.7242 7.22868 15.516 7.13743 15.2767 7.13743C15.0269 7.13743 14.8109 7.22868 14.6288 7.41117C14.4467 7.58845 14.3556 7.79963 14.3556 8.04469Z');
+ static final Path _path2 = _pathFromString(
+ 'M2.30754 15.6907C2.51782 15.8969 2.81748 16 3.20651 16H16.7856C17.1746 16 17.4743 15.8969 17.6846 15.6907C17.8949 15.4845 18 15.1778 18 14.7707V7.02974C18 6.6226 17.8949 6.31593 17.6846 6.10972C17.4743 5.89822 17.1746 5.79247 16.7856 5.79247H14.3963C14.0598 5.79247 13.7891 5.75545 13.584 5.68143C13.379 5.6074 13.1819 5.46464 12.9926 5.25314L12.3933 4.57898C12.183 4.34104 11.9964 4.18506 11.8334 4.11104C11.6757 4.03701 11.4365 4 11.1158 4H8.80532C8.4899 4 8.2507 4.03701 8.08773 4.11104C7.92476 4.18506 7.73813 4.34104 7.52785 4.57898L6.92854 5.25314C6.73928 5.46464 6.54214 5.6074 6.33711 5.68143C6.13208 5.75545 5.86134 5.79247 5.52489 5.79247H3.20651C2.81748 5.79247 2.51782 5.89822 2.30754 6.10972C2.10251 6.31593 2 6.6226 2 7.02974V14.7707C2 15.1778 2.10251 15.4845 2.30754 15.6907ZM9.99547 14C9.99547 14 8.76994 13.8432 8.23868 13.5297C7.71345 13.2162 7.29086 12.7941 6.97089 12.2636C6.65696 11.733 6.5 11.1451 6.5 10.5C6.5 9.84884 6.65696 9.25797 6.97089 8.72739C7.28482 8.19681 7.70742 7.77778 8.23868 7.47028C8.76994 7.15676 9.35554 7 9.99547 7C10.6414 7 11.7523 7.47028 11.7523 7.47028C11.7523 7.47028 12.7061 8.19681 13.0201 8.72739C13.34 9.25797 13.5 9.84884 13.5 10.5C13.5 11.1451 13.34 11.733 13.0201 12.2636C12.7061 12.7941 12.2835 13.2162 11.7523 13.5297C11.227 13.8432 9.99547 14 9.99547 14Z');
+
+ @override
+ bool shouldRepaint(covariant CustomPainter oldDelegate) {
+ return false;
+ }
+}
+
+class _CalendarIconPainter extends CustomPainter {
+ @override
+ void paint(Canvas canvas, Size size) {
+ final Matrix4 scale =
+ Matrix4.diagonal3Values(size.width / 20, size.height / 20, 1.0);
+
+ Path path;
+ path = _path1.transform(scale.storage)..fillType = PathFillType.evenOdd;
+ canvas.drawPath(path, Paint()..color = const Color(0x60F84F39));
+
+ path = _path2.transform(scale.storage)..fillType = PathFillType.evenOdd;
+ canvas.drawPath(path, Paint()..color = const Color(0xFFF84F39));
+ }
+
+ static final Path _path1 = _pathFromString(
+ 'M16.7812 6.85938H3.28125V4.5L5 3H15L16.7812 4.5V6.85938Z');
+ static final Path _path2 = _pathFromString(
+ 'M6.5606 11.2462C7.07732 11.2462 7.4962 10.8273 7.4962 10.3106C7.4962 9.79388 7.07732 9.375 6.5606 9.375C6.04388 9.375 5.625 9.79388 5.625 10.3106C5.625 10.8273 6.04388 11.2462 6.5606 11.2462ZM7.4962 13.4356C7.4962 13.9523 7.07732 14.3712 6.5606 14.3712C6.04388 14.3712 5.625 13.9523 5.625 13.4356C5.625 12.9189 6.04388 12.5 6.5606 12.5C7.07732 12.5 7.4962 12.9189 7.4962 13.4356ZM10.0005 11.2462C10.5173 11.2462 10.9361 10.8273 10.9361 10.3106C10.9361 9.79388 10.5173 9.375 10.0005 9.375C9.48382 9.375 9.06494 9.79388 9.06494 10.3106C9.06494 10.8273 9.48382 11.2462 10.0005 11.2462ZM10.9361 13.4356C10.9361 13.9523 10.5173 14.3712 10.0005 14.3712C9.48382 14.3712 9.06494 13.9523 9.06494 13.4356C9.06494 12.9189 9.48382 12.5 10.0005 12.5C10.5173 12.5 10.9361 12.9189 10.9361 13.4356ZM13.4356 11.2462C13.9523 11.2462 14.3712 10.8273 14.3712 10.3106C14.3712 9.79388 13.9523 9.375 13.4356 9.375C12.9189 9.375 12.5 9.79388 12.5 10.3106C12.5 10.8273 12.9189 11.2462 13.4356 11.2462ZM17.5 5.625C17.5 3.89911 16.1009 2.5 14.375 2.5H5.625C3.89911 2.5 2.5 3.89911 2.5 5.625V14.375C2.5 16.1009 3.89911 17.5 5.625 17.5H14.375C16.1009 17.5 17.5 16.1009 17.5 14.375V5.625ZM3.75 7.5H16.25V14.375C16.25 15.4105 15.4105 16.25 14.375 16.25H5.625C4.58947 16.25 3.75 15.4105 3.75 14.375V7.5ZM5.625 3.75H14.375C15.4105 3.75 16.25 4.58947 16.25 5.625V6.25H3.75V5.625C3.75 4.58947 4.58947 3.75 5.625 3.75Z');
+
+ @override
+ bool shouldRepaint(covariant CustomPainter oldDelegate) {
+ return false;
+ }
+}
+
+class _ConversationIconPainter extends CustomPainter {
+ @override
+ void paint(Canvas canvas, Size size) {
+ final Matrix4 scale =
+ Matrix4.diagonal3Values(size.width / 20, size.height / 20, 1.0);
+
+ Path path;
+ path = _path1.transform(scale.storage)..fillType = PathFillType.evenOdd;
+ canvas.drawPath(path, Paint()..color = const Color(0x60F84F39));
+
+ path = _path2.transform(scale.storage)..fillType = PathFillType.evenOdd;
+ canvas.drawPath(path, Paint()..color = const Color(0xFFF84F39));
+ }
+
+ static final Path _path1 = _pathFromString(
+ 'M14.4141 8.33333C14.4141 11.555 11.8024 14.1667 8.58073 14.1667C7.64487 14.1667 6.76047 13.9463 5.97663 13.5546L2.65625 14.4661L3.70864 11.5424C3.10106 10.6218 2.7474 9.51887 2.7474 8.33333C2.7474 5.11167 5.35907 2.5 8.58073 2.5C11.8024 2.5 14.4141 5.11167 14.4141 8.33333Z');
+ static final Path _path2 = _pathFromString(
+ 'M8.5382 1.81665C4.84709 1.81665 1.85486 4.80888 1.85486 8.49998C1.85486 9.65241 2.1471 10.7384 2.66182 11.686L1.89645 13.6887C1.5494 14.5968 2.38481 15.5128 3.32097 15.2506L5.74289 14.5723C6.59409 14.9647 7.54146 15.1833 8.5382 15.1833C12.2293 15.1833 15.2215 12.1911 15.2215 8.49998C15.2215 4.80888 12.2293 1.81665 8.5382 1.81665ZM3.22153 8.49998C3.22153 5.56367 5.60188 3.18332 8.5382 3.18332C11.4745 3.18332 13.8549 5.56367 13.8549 8.49998C13.8549 11.4363 11.4745 13.8167 8.5382 13.8167C7.66578 13.8167 6.84431 13.607 6.11952 13.2361L5.88143 13.1142L3.30309 13.8364L4.17436 11.5565L3.99903 11.2698C3.5059 10.4636 3.22153 9.51607 3.22153 8.49998ZM16.5636 7.07206L16.1464 6.61586L16.2475 7.22577C16.317 7.64558 16.3533 8.07677 16.3533 8.51656C16.3533 8.69251 16.3475 8.86707 16.3361 9.04007L16.3328 9.08869L16.3542 9.13249C16.6951 9.83163 16.8175 10.5975 16.8175 11.5C16.8175 12.5161 16.5332 13.4636 16.04 14.2698L15.8647 14.5565L16.736 16.8363L14.1576 16.1142L13.9195 16.2361C13.1948 16.607 12.3733 16.8166 11.5009 16.8166C10.5879 16.8166 9.87033 16.6947 9.19041 16.3496L9.14498 16.3266L9.09417 16.3303C8.90419 16.3441 8.71231 16.3511 8.51875 16.3511C8.10958 16.3511 7.70785 16.3197 7.31582 16.2593L6.72389 16.1681L7.16334 16.575C8.31731 17.6436 9.75888 18.1833 11.5009 18.1833C12.4976 18.1833 13.445 17.9647 14.2962 17.5723L16.7181 18.2506C17.6543 18.5128 18.4897 17.5968 18.1426 16.6887L17.3772 14.6859C17.892 13.7384 18.1842 12.6524 18.1842 11.5C18.1842 9.75761 17.6387 8.24759 16.5636 7.07206Z');
+
+ @override
+ bool shouldRepaint(covariant CustomPainter oldDelegate) {
+ return false;
+ }
+}
+
+class _GeometryIconPainter extends CustomPainter {
+ @override
+ void paint(Canvas canvas, Size canvasSize) {
+ const Size size = Size(20, 20);
+ canvas.scale(
+ canvasSize.width / size.width, canvasSize.height / size.height);
+
+ final Paint paint = Paint()..color = const Color(0xFFF84F39);
+ final Rect frame = Offset.zero & size;
+ canvas.drawDRRect(
+ RRect.fromRectAndRadius(frame, const Radius.elliptical(5, 4)),
+ RRect.fromRectAndRadius(
+ frame.deflate(1), const Radius.elliptical(4, 3)),
+ paint);
+ canvas.drawRRect(
+ RRect.fromRectAndRadius(
+ const Rect.fromLTWH(3, 3, 6, 6), const Radius.elliptical(2, 1)),
+ paint);
+ canvas.drawRRect(
+ RRect.fromRectAndRadius(
+ const Rect.fromLTWH(11, 11, 6, 6), const Radius.elliptical(2, 1)),
+ paint);
+ canvas.drawCircle(const Offset(14, 6), 3, paint);
+ canvas.drawCircle(const Offset(6, 14), 3, paint);
+ }
+
+ @override
+ bool shouldRepaint(covariant CustomPainter oldDelegate) {
+ return false;
+ }
+}
diff --git a/dev/benchmarks/macrobenchmarks/lib/src/very_long_picture_scrolling.dart b/dev/benchmarks/macrobenchmarks/lib/src/very_long_picture_scrolling.dart
new file mode 100644
index 0000000000000..fb6a7cf20b6a8
--- /dev/null
+++ b/dev/benchmarks/macrobenchmarks/lib/src/very_long_picture_scrolling.dart
@@ -0,0 +1,240 @@
+// 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 'dart:math';
+import 'dart:typed_data';
+import 'dart:ui';
+import 'package:flutter/material.dart';
+
+// Adapted from test case submitted in
+// https://github.com/flutter/flutter/issues/92366
+// Converted to use fixed data rather than reading a waveform file
+class VeryLongPictureScrollingPerf extends StatefulWidget {
+ const VeryLongPictureScrollingPerf({super.key});
+
+ @override
+ State createState() => VeryLongPictureScrollingPerfState();
+}
+
+class VeryLongPictureScrollingPerfState extends State {
+ bool consolidate = false;
+ bool useList = false;
+ Int16List waveData = loadGraph();
+
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ appBar: AppBar(
+ actions: [
+ Row(
+ children: [
+ const Text('list:'),
+ Checkbox(value: useList, onChanged: (bool? value) => setState(() {
+ useList = value!;
+ }),),
+ ],
+ ),
+ Row(
+ children: [
+ const Text('consolidate:'),
+ Checkbox(value: consolidate, onChanged: (bool? value) => setState(() {
+ consolidate = value!;
+ }),),
+ ],
+ ),
+ ],
+ ),
+ backgroundColor: Colors.transparent,
+ body: SizedBox(
+ width: MediaQuery.of(context).size.width,
+ height: MediaQuery.of(context).size.height,
+ child: useList
+ ? ListView.builder(
+ key: const ValueKey('vlp_list_view_scrollable'),
+ scrollDirection: Axis.horizontal,
+ clipBehavior: Clip.none,
+ itemCount: (waveData.length / 200).ceil(),
+ itemExtent: 100,
+ itemBuilder: (BuildContext context, int index) => CustomPaint(
+ painter: PaintSomeTest(
+ waveData: waveData,
+ from: index * 200,
+ to: min((index + 1) * 200, waveData.length - 1),
+ )
+ ),
+ )
+ : SingleChildScrollView(
+ key: const ValueKey('vlp_single_child_scrollable'),
+ scrollDirection: Axis.horizontal,
+ child: SizedBox(
+ width: MediaQuery.of(context).size.width * 20,
+ height: MediaQuery.of(context).size.height,
+ child: RepaintBoundary(
+ child: CustomPaint(
+ isComplex: true,
+ painter: PaintTest(
+ consolidate: consolidate,
+ waveData: waveData,
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ );
+ }
+}
+
+class PaintTest extends CustomPainter {
+ const PaintTest({
+ required this.consolidate,
+ required this.waveData,
+ });
+
+ final bool consolidate;
+ final Int16List waveData;
+
+ @override
+ void paint(Canvas canvas, Size size) {
+ final double height = size.height;
+ double x = 0;
+ const double strokeSize = .5;
+ const double zoomFactor = .5;
+
+ final Paint paintPos = Paint()
+ ..color = Colors.pink
+ ..strokeWidth = strokeSize
+ ..isAntiAlias = false
+ ..style = PaintingStyle.stroke;
+
+ final Paint paintNeg = Paint()
+ ..color = Colors.pink
+ ..strokeWidth = strokeSize
+ ..isAntiAlias = false
+ ..style = PaintingStyle.stroke;
+
+ final Paint paintZero = Paint()
+ ..color = Colors.green
+ ..strokeWidth = strokeSize
+ ..isAntiAlias = false
+ ..style = PaintingStyle.stroke;
+
+ int index = 0;
+ Paint? listPaint;
+ final Float32List offsets = Float32List(consolidate ? waveData.length * 4 : 4);
+ int used = 0;
+ for (index = 0; index < waveData.length; index++) {
+ Paint curPaint;
+ Offset p1;
+ if (waveData[index].isNegative) {
+ curPaint = paintPos;
+ p1 = Offset(x, height * 1 / 2 - waveData[index] / 32768 * (height / 2));
+ } else if (waveData[index] == 0) {
+ curPaint = paintZero;
+ p1 = Offset(x, height * 1 / 2 + 1);
+ } else {
+ curPaint = (waveData[index] == 0) ? paintZero : paintNeg;
+ p1 = Offset(x, height * 1 / 2 - waveData[index] / 32767 * (height / 2));
+ }
+ final Offset p0 = Offset(x, height * 1 / 2);
+ if (consolidate) {
+ if (listPaint != null && listPaint != curPaint) {
+ canvas.drawRawPoints(PointMode.lines, offsets.sublist(0, used), listPaint);
+ used = 0;
+ }
+ listPaint = curPaint;
+ offsets[used++] = p0.dx;
+ offsets[used++] = p0.dy;
+ offsets[used++] = p1.dx;
+ offsets[used++] = p1.dy;
+ } else {
+ canvas.drawLine(p0, p1, curPaint);
+ }
+ x += zoomFactor;
+ }
+ if (consolidate && used > 0) {
+ canvas.drawRawPoints(PointMode.lines, offsets.sublist(0, used), listPaint!);
+ }
+ }
+
+ @override
+ bool shouldRepaint(CustomPainter oldDelegate) {
+ return oldDelegate is! PaintTest ||
+ oldDelegate.consolidate != consolidate ||
+ oldDelegate.waveData != waveData;
+ }
+}
+
+class PaintSomeTest extends CustomPainter {
+ const PaintSomeTest({
+ required this.waveData,
+ int? from,
+ int? to,
+ }) : from = from ?? 0, to = to?? waveData.length;
+
+ final Int16List waveData;
+ final int from;
+ final int to;
+
+ @override
+ void paint(Canvas canvas, Size size) {
+ final double height = size.height;
+ double x = 0;
+ const double strokeSize = .5;
+ const double zoomFactor = .5;
+
+ final Paint paintPos = Paint()
+ ..color = Colors.pink
+ ..strokeWidth = strokeSize
+ ..isAntiAlias = false
+ ..style = PaintingStyle.stroke;
+
+ final Paint paintNeg = Paint()
+ ..color = Colors.pink
+ ..strokeWidth = strokeSize
+ ..isAntiAlias = false
+ ..style = PaintingStyle.stroke;
+
+ final Paint paintZero = Paint()
+ ..color = Colors.green
+ ..strokeWidth = strokeSize
+ ..isAntiAlias = false
+ ..style = PaintingStyle.stroke;
+
+ for (int index = from; index <= to; index++) {
+ Paint curPaint;
+ Offset p1;
+ if (waveData[index].isNegative) {
+ curPaint = paintPos;
+ p1 = Offset(x, height * 1 / 2 - waveData[index] / 32768 * (height / 2));
+ } else if (waveData[index] == 0) {
+ curPaint = paintZero;
+ p1 = Offset(x, height * 1 / 2 + 1);
+ } else {
+ curPaint = (waveData[index] == 0) ? paintZero : paintNeg;
+ p1 = Offset(x, height * 1 / 2 - waveData[index] / 32767 * (height / 2));
+ }
+ final Offset p0 = Offset(x, height * 1 / 2);
+ canvas.drawLine(p0, p1, curPaint);
+ x += zoomFactor;
+ }
+ }
+
+ @override
+ bool shouldRepaint(CustomPainter oldDelegate) {
+ return oldDelegate is! PaintSomeTest ||
+ oldDelegate.waveData != waveData ||
+ oldDelegate.from != from ||
+ oldDelegate.to != to;
+ }
+}
+
+Int16List loadGraph() {
+ final Int16List waveData = Int16List(350000);
+ final Random r = Random(0x42);
+ for (int i = 0; i < waveData.length; i++) {
+ waveData[i] = r.nextInt(32768) - 16384;
+ }
+ return waveData;
+}
diff --git a/dev/benchmarks/macrobenchmarks/lib/src/web/bench_harness.dart b/dev/benchmarks/macrobenchmarks/lib/src/web/bench_harness.dart
new file mode 100644
index 0000000000000..8c95cf42cf862
--- /dev/null
+++ b/dev/benchmarks/macrobenchmarks/lib/src/web/bench_harness.dart
@@ -0,0 +1,63 @@
+// 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 'dart:ui' as ui;
+
+import 'package:flutter/material.dart';
+
+import 'recorder.dart';
+
+class BenchWidgetRecorder extends WidgetRecorder {
+ BenchWidgetRecorder() : super(name: benchmarkName);
+
+ static const String benchmarkName = 'bench_widget_recorder';
+
+ @override
+ Widget createWidget() {
+ // This is intentionally using a simple widget. The benchmark is meant to
+ // measure the overhead of the harness, so this method should induce as
+ // little work as possible.
+ return const SizedBox.expand();
+ }
+}
+
+class BenchWidgetBuildRecorder extends WidgetBuildRecorder {
+ BenchWidgetBuildRecorder() : super(name: benchmarkName);
+
+ static const String benchmarkName = 'bench_widget_build_recorder';
+
+ @override
+ Widget createWidget() {
+ // This is intentionally using a simple widget. The benchmark is meant to
+ // measure the overhead of the harness, so this method should induce as
+ // little work as possible.
+ return const SizedBox.expand();
+ }
+}
+
+class BenchRawRecorder extends RawRecorder {
+ BenchRawRecorder() : super(name: benchmarkName);
+
+ static const String benchmarkName = 'bench_raw_recorder';
+
+ @override
+ void body(Profile profile) {
+ profile.record('profile.record', () {
+ // This is intentionally empty. The benchmark only measures the overhead
+ // of the harness.
+ }, reported: true);
+ }
+}
+
+class BenchSceneBuilderRecorder extends SceneBuilderRecorder {
+ BenchSceneBuilderRecorder() : super(name: benchmarkName);
+
+ static const String benchmarkName = 'bench_scene_builder_recorder';
+
+ @override
+ void onDrawFrame(ui.SceneBuilder sceneBuilder) {
+ // This is intentionally empty. The benchmark only measures the overhead
+ // of the harness.
+ }
+}
diff --git a/dev/benchmarks/macrobenchmarks/lib/src/web/bench_pageview_scroll_linethrough.dart b/dev/benchmarks/macrobenchmarks/lib/src/web/bench_pageview_scroll_linethrough.dart
index c605072714d85..f5ee8dd906eb8 100644
--- a/dev/benchmarks/macrobenchmarks/lib/src/web/bench_pageview_scroll_linethrough.dart
+++ b/dev/benchmarks/macrobenchmarks/lib/src/web/bench_pageview_scroll_linethrough.dart
@@ -95,7 +95,7 @@ class _CustomPainter extends CustomPainter {
yPosition = viewPadding;
_textPainter.textDirection = TextDirection.ltr;
_textPainter.textWidthBasis = TextWidthBasis.longestLine;
- _textPainter.textScaleFactor = 1;
+ _textPainter.textScaler = TextScaler.noScaling;
const TextStyle textStyle =
TextStyle(color: Colors.black87, fontSize: 13, fontFamily: 'Roboto');
diff --git a/dev/benchmarks/macrobenchmarks/lib/src/web/recorder.dart b/dev/benchmarks/macrobenchmarks/lib/src/web/recorder.dart
index ae583dc8ba80e..89661d6ddac1c 100644
--- a/dev/benchmarks/macrobenchmarks/lib/src/web/recorder.dart
+++ b/dev/benchmarks/macrobenchmarks/lib/src/web/recorder.dart
@@ -4,12 +4,9 @@
import 'dart:async';
import 'dart:js_interop';
-// The analyzer currently thinks `js_interop_unsafe` is unused, but it is used
-// for `JSObject.[]=`.
-// ignore: unused_import
-import 'dart:js_interop_unsafe';
import 'dart:math' as math;
import 'dart:ui';
+import 'dart:ui_web' as ui_web;
import 'package:flutter/foundation.dart';
import 'package:flutter/gestures.dart';
@@ -86,8 +83,6 @@ Future _dummyAsyncVoidCallback() async {}
@sealed
class Runner {
/// Creates a runner for the [recorder].
- ///
- /// All arguments must not be null.
Runner({
required this.recorder,
this.setUpAllDidRun = _dummyAsyncVoidCallback,
@@ -1335,10 +1330,7 @@ void registerEngineBenchmarkValueListener(String name, EngineBenchmarkValueListe
if (_engineBenchmarkListeners.isEmpty) {
// The first listener is being registered. Register the global listener.
- web.window['_flutter_internal_on_benchmark'.toJS] =
- // Upcast to [Object] to export.
- // ignore: unnecessary_cast
- (_dispatchEngineBenchmarkValue as Object).toJS;
+ ui_web.benchmarkValueCallback = _dispatchEngineBenchmarkValue;
}
_engineBenchmarkListeners[name] = listener;
}
@@ -1349,7 +1341,7 @@ void stopListeningToEngineBenchmarkValues(String name) {
if (_engineBenchmarkListeners.isEmpty) {
// The last listener unregistered. Remove the global listener.
- web.window['_flutter_internal_on_benchmark'.toJS] = null;
+ ui_web.benchmarkValueCallback = null;
}
}
diff --git a/dev/benchmarks/macrobenchmarks/lib/web_benchmarks.dart b/dev/benchmarks/macrobenchmarks/lib/web_benchmarks.dart
index e4e18d598b908..1beddb177940f 100644
--- a/dev/benchmarks/macrobenchmarks/lib/web_benchmarks.dart
+++ b/dev/benchmarks/macrobenchmarks/lib/web_benchmarks.dart
@@ -17,6 +17,7 @@ import 'src/web/bench_clipped_out_pictures.dart';
import 'src/web/bench_default_target_platform.dart';
import 'src/web/bench_draw_rect.dart';
import 'src/web/bench_dynamic_clip_on_static_picture.dart';
+import 'src/web/bench_harness.dart';
import 'src/web/bench_image_decoding.dart';
import 'src/web/bench_material_3.dart';
import 'src/web/bench_material_3_semantics.dart';
@@ -43,7 +44,13 @@ const bool isSkwasm = bool.fromEnvironment('FLUTTER_WEB_USE_SKWASM');
/// When adding a new benchmark, add it to this map. Make sure that the name
/// of your benchmark is unique.
final Map benchmarks = {
- // Benchmarks that run both in CanvasKit and HTML modes
+ // Benchmarks the overhead of the benchmark harness itself.
+ BenchRawRecorder.benchmarkName: () => BenchRawRecorder(),
+ BenchWidgetRecorder.benchmarkName: () => BenchWidgetRecorder(),
+ BenchWidgetBuildRecorder.benchmarkName: () => BenchWidgetBuildRecorder(),
+ BenchSceneBuilderRecorder.benchmarkName: () => BenchSceneBuilderRecorder(),
+
+ // Benchmarks that run in all renderers.
BenchDefaultTargetPlatform.benchmarkName: () => BenchDefaultTargetPlatform(),
BenchBuildImage.benchmarkName: () => BenchBuildImage(),
BenchCardInfiniteScroll.benchmarkName: () => BenchCardInfiniteScroll.forward(),
diff --git a/dev/benchmarks/macrobenchmarks/macos/Runner.xcodeproj/project.pbxproj b/dev/benchmarks/macrobenchmarks/macos/Runner.xcodeproj/project.pbxproj
index 5f2846150efb5..1b628dcde2b6f 100644
--- a/dev/benchmarks/macrobenchmarks/macos/Runner.xcodeproj/project.pbxproj
+++ b/dev/benchmarks/macrobenchmarks/macos/Runner.xcodeproj/project.pbxproj
@@ -181,7 +181,6 @@
33CC10EB2044A3C60003C045 /* Resources */,
33CC110E2044A8840003C045 /* Bundle Framework */,
3399D490228B24CF009A79C7 /* ShellScript */,
- A7656B4F0E64AD6C5DDAE467 /* [CP] Embed Pods Frameworks */,
);
buildRules = (
);
@@ -310,23 +309,6 @@
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
- A7656B4F0E64AD6C5DDAE467 /* [CP] Embed Pods Frameworks */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
- );
- name = "[CP] Embed Pods Frameworks";
- outputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
- showEnvVarsInLog = 0;
- };
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
diff --git a/dev/benchmarks/macrobenchmarks/pubspec.yaml b/dev/benchmarks/macrobenchmarks/pubspec.yaml
index 7617d7829eb31..8956855932a47 100644
--- a/dev/benchmarks/macrobenchmarks/pubspec.yaml
+++ b/dev/benchmarks/macrobenchmarks/pubspec.yaml
@@ -2,7 +2,7 @@ name: macrobenchmarks
description: Performance benchmarks using flutter drive.
environment:
- sdk: '>=3.0.0-0 <4.0.0'
+ sdk: '>=3.2.0-0 <4.0.0'
dependencies:
flutter:
@@ -18,37 +18,37 @@ dependencies:
# flutter update-packages --force-upgrade
flutter_gallery_assets: 1.0.2
- web: 0.1.4-beta
+ web: 0.3.0
async: 2.11.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
characters: 1.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
clock: 1.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- collection: 1.17.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ collection: 1.18.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
fake_async: 1.3.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
file: 6.1.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
matcher: 0.12.16 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
material_color_utilities: 0.5.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- meta: 1.9.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ meta: 1.10.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
path: 1.8.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
source_span: 1.10.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- stack_trace: 1.11.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- stream_channel: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ stack_trace: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ stream_channel: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
string_scanner: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
sync_http: 0.3.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
term_glyph: 1.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- test_api: 0.6.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ test_api: 0.6.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vector_math: 2.1.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- vm_service: 11.7.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ vm_service: 11.10.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
webdriver: 3.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
dev_dependencies:
- test: 1.24.3
+ test: 1.24.6
integration_test:
sdk: flutter
- _fe_analyzer_shared: 61.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- analyzer: 5.13.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ _fe_analyzer_shared: 64.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ analyzer: 6.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args: 2.4.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert: 3.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
coverage: 1.6.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -71,11 +71,11 @@ dev_dependencies:
shelf_web_socket: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
source_map_stack_trace: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
source_maps: 0.10.12 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- test_core: 0.5.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ test_core: 0.5.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
typed_data: 1.3.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
watcher: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
web_socket_channel: 2.4.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- webkit_inspection_protocol: 1.2.0 # 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"
yaml: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
flutter:
@@ -210,4 +210,4 @@ flutter:
fonts:
- asset: packages/flutter_gallery_assets/fonts/GalleryIcons.ttf
-# PUBSPEC CHECKSUM: 1c29
+# PUBSPEC CHECKSUM: d287
diff --git a/dev/benchmarks/macrobenchmarks/test/very_long_picture_scrolling_perf_e2e.dart b/dev/benchmarks/macrobenchmarks/test/very_long_picture_scrolling_perf_e2e.dart
new file mode 100644
index 0000000000000..ff54e0cce6dd4
--- /dev/null
+++ b/dev/benchmarks/macrobenchmarks/test/very_long_picture_scrolling_perf_e2e.dart
@@ -0,0 +1,36 @@
+// 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/foundation.dart';
+import 'package:flutter_test/flutter_test.dart';
+import 'package:macrobenchmarks/common.dart';
+
+import 'util.dart';
+
+void main() {
+ macroPerfTestE2E(
+ 'very_long_picture_scrolling_perf',
+ kVeryLongPictureScrollingRouteName,
+ pageDelay: const Duration(seconds: 1),
+ duration: const Duration(seconds: 30),
+ body: (WidgetController controller) async {
+ final Finder nestedScroll = find.byKey(const ValueKey('vlp_single_child_scrollable'));
+ expect(nestedScroll, findsOneWidget);
+ Future scrollOnce(double offset) async {
+ await controller.timedDrag(
+ nestedScroll,
+ Offset(offset, 0.0),
+ const Duration(milliseconds: 3500),
+ );
+ await Future.delayed(const Duration(milliseconds: 500));
+ }
+ for (int i = 0; i < 2; i += 1) {
+ await scrollOnce(-3000.0);
+ await scrollOnce(-3000.0);
+ await scrollOnce(3000.0);
+ await scrollOnce(3000.0);
+ }
+ },
+ );
+}
diff --git a/dev/benchmarks/macrobenchmarks/test_driver/animated_advanced_blend_perf_test.dart b/dev/benchmarks/macrobenchmarks/test_driver/animated_advanced_blend_perf_test.dart
new file mode 100644
index 0000000000000..9a7ad83cfb3cb
--- /dev/null
+++ b/dev/benchmarks/macrobenchmarks/test_driver/animated_advanced_blend_perf_test.dart
@@ -0,0 +1,16 @@
+// 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:macrobenchmarks/common.dart';
+
+import 'util.dart';
+
+void main() {
+ macroPerfTest(
+ 'animated_advanced_blend_perf',
+ kAnimatedAdvancedBlend,
+ pageDelay: const Duration(seconds: 1),
+ duration: const Duration(seconds: 10),
+ );
+}
diff --git a/dev/benchmarks/macrobenchmarks/test_driver/draw_atlas_perf_test.dart b/dev/benchmarks/macrobenchmarks/test_driver/draw_atlas_perf_test.dart
new file mode 100644
index 0000000000000..a25028c1516a7
--- /dev/null
+++ b/dev/benchmarks/macrobenchmarks/test_driver/draw_atlas_perf_test.dart
@@ -0,0 +1,16 @@
+// 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:macrobenchmarks/common.dart';
+
+import 'util.dart';
+
+void main() {
+ macroPerfTest(
+ 'draw_atlas_perf',
+ kDrawAtlasPageRouteName,
+ pageDelay: const Duration(seconds: 1),
+ duration: const Duration(seconds: 10),
+ );
+}
diff --git a/dev/benchmarks/macrobenchmarks/test_driver/draw_vertices_perf_test.dart b/dev/benchmarks/macrobenchmarks/test_driver/draw_vertices_perf_test.dart
new file mode 100644
index 0000000000000..e0c578656175e
--- /dev/null
+++ b/dev/benchmarks/macrobenchmarks/test_driver/draw_vertices_perf_test.dart
@@ -0,0 +1,16 @@
+// 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:macrobenchmarks/common.dart';
+
+import 'util.dart';
+
+void main() {
+ macroPerfTest(
+ 'draw_vertices_perf',
+ kDrawVerticesPageRouteName,
+ pageDelay: const Duration(seconds: 1),
+ duration: const Duration(seconds: 10),
+ );
+}
diff --git a/dev/benchmarks/macrobenchmarks/test_driver/path_tessellation_dynamic_perf_test.dart b/dev/benchmarks/macrobenchmarks/test_driver/path_tessellation_dynamic_perf_test.dart
new file mode 100644
index 0000000000000..c18701fdb7dd7
--- /dev/null
+++ b/dev/benchmarks/macrobenchmarks/test_driver/path_tessellation_dynamic_perf_test.dart
@@ -0,0 +1,23 @@
+// 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_driver/flutter_driver.dart';
+import 'package:macrobenchmarks/common.dart';
+
+import 'util.dart';
+
+void main() {
+ macroPerfTest(
+ 'tessellation_perf_dynamic',
+ kPathTessellationRouteName,
+ pageDelay: const Duration(seconds: 1),
+ duration: const Duration(seconds: 10),
+ setupOps: (FlutterDriver driver) async {
+ final SerializableFinder animateButton =
+ find.byValueKey('animate_button');
+ await driver.tap(animateButton);
+ await Future.delayed(const Duration(seconds: 1));
+ },
+ );
+}
diff --git a/dev/benchmarks/macrobenchmarks/test_driver/path_tessellation_static_perf_test.dart b/dev/benchmarks/macrobenchmarks/test_driver/path_tessellation_static_perf_test.dart
new file mode 100644
index 0000000000000..5be534bda7924
--- /dev/null
+++ b/dev/benchmarks/macrobenchmarks/test_driver/path_tessellation_static_perf_test.dart
@@ -0,0 +1,31 @@
+// 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_driver/flutter_driver.dart';
+import 'package:macrobenchmarks/common.dart';
+
+import 'util.dart';
+
+void main() {
+ macroPerfTest(
+ 'tessellation_perf_static',
+ kPathTessellationRouteName,
+ pageDelay: const Duration(seconds: 1),
+ driverOps: (FlutterDriver driver) async {
+ final SerializableFinder listView = find.byValueKey('list_view');
+ Future scrollOnce(double offset) async {
+ await driver.scroll(
+ listView, 0.0, offset, const Duration(milliseconds: 450));
+ await Future.delayed(const Duration(milliseconds: 500));
+ }
+
+ for (int i = 0; i < 3; i += 1) {
+ await scrollOnce(-600.0);
+ await scrollOnce(-600.0);
+ await scrollOnce(600.0);
+ await scrollOnce(600.0);
+ }
+ },
+ );
+}
diff --git a/dev/benchmarks/macrobenchmarks/test_driver/util.dart b/dev/benchmarks/macrobenchmarks/test_driver/util.dart
index bf74fbf8ec5ba..87b8fd2507804 100644
--- a/dev/benchmarks/macrobenchmarks/test_driver/util.dart
+++ b/dev/benchmarks/macrobenchmarks/test_driver/util.dart
@@ -23,7 +23,11 @@ Future runDriverTestForRoute(String routeName, DriverTestCallBack body) as
expect(scrollable, isNotNull);
final SerializableFinder button = find.byValueKey(routeName);
expect(button, isNotNull);
- await driver.scrollUntilVisible(scrollable, button, dyScroll: -100.0);
+ // -320 comes from the logical pixels for a full screen scroll for the
+ // smallest reference device, iPhone 4, whose physical screen dimensions are
+ // 960px × 640px.
+ const double dyScroll = -320.0;
+ await driver.scrollUntilVisible(scrollable, button, dyScroll: dyScroll);
await driver.tap(button);
await body(driver);
diff --git a/dev/benchmarks/microbenchmarks/android/gradle.properties b/dev/benchmarks/microbenchmarks/android/gradle.properties
index 94adc3a3f97aa..598d13fee4463 100644
--- a/dev/benchmarks/microbenchmarks/android/gradle.properties
+++ b/dev/benchmarks/microbenchmarks/android/gradle.properties
@@ -1,3 +1,3 @@
-org.gradle.jvmargs=-Xmx1536M
+org.gradle.jvmargs=-Xmx4G
android.useAndroidX=true
android.enableJetifier=true
diff --git a/dev/benchmarks/microbenchmarks/lib/gestures/gesture_detector_bench.dart b/dev/benchmarks/microbenchmarks/lib/gestures/gesture_detector_bench.dart
index 717535f367da1..a5ca499555987 100644
--- a/dev/benchmarks/microbenchmarks/lib/gestures/gesture_detector_bench.dart
+++ b/dev/benchmarks/microbenchmarks/lib/gestures/gesture_detector_bench.dart
@@ -4,8 +4,8 @@
import 'package:flutter_test/flutter_test.dart';
-import './apps/button_matrix_app.dart' as button_matrix;
import '../common.dart';
+import 'apps/button_matrix_app.dart' as button_matrix;
const int _kNumWarmUpIters = 20;
const int _kNumIters = 300;
diff --git a/dev/benchmarks/microbenchmarks/lib/stocks/layout_bench.dart b/dev/benchmarks/microbenchmarks/lib/stocks/layout_bench.dart
index e42211d594cd7..9d72b87aa3a87 100644
--- a/dev/benchmarks/microbenchmarks/lib/stocks/layout_bench.dart
+++ b/dev/benchmarks/microbenchmarks/lib/stocks/layout_bench.dart
@@ -39,7 +39,7 @@ Future main() async {
size: const Size(355.0, 635.0),
view: tester.view,
);
- final RenderView renderView = WidgetsBinding.instance.renderView;
+ final RenderView renderView = WidgetsBinding.instance.renderViews.single;
binding.framePolicy = LiveTestWidgetsFlutterBindingFramePolicy.benchmark;
watch.start();
diff --git a/dev/benchmarks/microbenchmarks/pubspec.yaml b/dev/benchmarks/microbenchmarks/pubspec.yaml
index c54fbc3f85e6f..0c91c7ef6683a 100644
--- a/dev/benchmarks/microbenchmarks/pubspec.yaml
+++ b/dev/benchmarks/microbenchmarks/pubspec.yaml
@@ -2,27 +2,27 @@ name: microbenchmarks
description: Small benchmarks for very specific parts of the Flutter framework.
environment:
- sdk: '>=3.0.0-0 <4.0.0'
+ sdk: '>=3.2.0-0 <4.0.0'
dependencies:
- meta: 1.9.1
+ meta: 1.10.0
flutter:
sdk: flutter
flutter_test:
sdk: flutter
stocks:
path: ../test_apps/stocks
- test: 1.24.3
+ test: 1.24.6
flutter_gallery_assets: 1.0.2
- _fe_analyzer_shared: 61.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- analyzer: 5.13.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ _fe_analyzer_shared: 64.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ analyzer: 6.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args: 2.4.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
async: 2.11.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
characters: 1.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
clock: 1.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- collection: 1.17.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ collection: 1.18.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert: 3.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
coverage: 1.6.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
crypto: 3.0.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -53,19 +53,19 @@ dependencies:
source_map_stack_trace: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
source_maps: 0.10.12 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
source_span: 1.10.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- stack_trace: 1.11.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- stream_channel: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ stack_trace: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ stream_channel: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
string_scanner: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
term_glyph: 1.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- test_api: 0.6.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- test_core: 0.5.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ test_api: 0.6.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ test_core: 0.5.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
typed_data: 1.3.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vector_math: 2.1.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- vm_service: 11.7.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ vm_service: 11.10.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
watcher: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- web: 0.1.4-beta # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ web: 0.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
web_socket_channel: 2.4.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- webkit_inspection_protocol: 1.2.0 # 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"
yaml: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
flutter:
@@ -137,4 +137,4 @@ flutter:
- packages/flutter_gallery_assets/people/square/stella.png
- packages/flutter_gallery_assets/people/square/trevor.png
-# PUBSPEC CHECKSUM: 06a0
+# PUBSPEC CHECKSUM: bcfe
diff --git a/dev/benchmarks/multiple_flutters/android/app/build.gradle b/dev/benchmarks/multiple_flutters/android/app/build.gradle
index 8e2b72d7c70d9..1df6b8ce74052 100644
--- a/dev/benchmarks/multiple_flutters/android/app/build.gradle
+++ b/dev/benchmarks/multiple_flutters/android/app/build.gradle
@@ -14,7 +14,7 @@ android {
}
namespace "dev.flutter.multipleflutters"
- compileSdkVersion 31
+ compileSdkVersion 33
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
@@ -28,7 +28,7 @@ android {
defaultConfig {
applicationId "dev.flutter.multipleflutters"
minSdkVersion 24
- targetSdkVersion 31
+ targetSdkVersion 33
versionCode 1
versionName "1.0"
diff --git a/dev/benchmarks/multiple_flutters/android/gradle.properties b/dev/benchmarks/multiple_flutters/android/gradle.properties
index 98bed167dc90f..9930279818e98 100644
--- a/dev/benchmarks/multiple_flutters/android/gradle.properties
+++ b/dev/benchmarks/multiple_flutters/android/gradle.properties
@@ -6,7 +6,7 @@
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
-org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
+org.gradle.jvmargs=-Xmx4G -Dfile.encoding=UTF-8
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
@@ -18,4 +18,4 @@ android.useAndroidX=true
# Automatically convert third-party libraries to use AndroidX
android.enableJetifier=true
# Kotlin code style for this project: "official" or "obsolete":
-kotlin.code.style=official
\ No newline at end of file
+kotlin.code.style=official
diff --git a/dev/benchmarks/multiple_flutters/module/pubspec.yaml b/dev/benchmarks/multiple_flutters/module/pubspec.yaml
index fe87a6f038a95..eacd619a209a9 100644
--- a/dev/benchmarks/multiple_flutters/module/pubspec.yaml
+++ b/dev/benchmarks/multiple_flutters/module/pubspec.yaml
@@ -4,43 +4,41 @@ description: A module that is embedded in the multiple_flutters benchmark test.
version: 1.0.0+1
environment:
- sdk: '>=3.0.0-0 <4.0.0'
+ sdk: '>=3.2.0-0 <4.0.0'
dependencies:
flutter:
sdk: flutter
- cupertino_icons: 1.0.5
+ cupertino_icons: 1.0.6
google_fonts: 4.0.4
async: 2.11.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
characters: 1.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- collection: 1.17.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ collection: 1.18.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
crypto: 3.0.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- ffi: 2.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- file: 6.1.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ ffi: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http: 0.13.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 4.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
material_color_utilities: 0.5.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- meta: 1.9.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ meta: 1.10.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
path: 1.8.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- path_provider: 2.0.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- path_provider_android: 2.0.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- path_provider_foundation: 2.2.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- path_provider_linux: 2.1.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- path_provider_platform_interface: 2.0.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- path_provider_windows: 2.1.7 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- platform: 3.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- plugin_platform_interface: 2.1.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- process: 4.2.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ path_provider: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ path_provider_android: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ path_provider_foundation: 2.3.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ path_provider_linux: 2.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ path_provider_platform_interface: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ path_provider_windows: 2.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ platform: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ plugin_platform_interface: 2.1.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
source_span: 1.10.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
string_scanner: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
term_glyph: 1.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
typed_data: 1.3.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vector_math: 2.1.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- web: 0.1.4-beta # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- win32: 5.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- xdg_directories: 1.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ web: 0.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ win32: 5.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ xdg_directories: 1.0.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
flutter:
uses-material-design: true
@@ -50,4 +48,4 @@ flutter:
androidPackage: com.example.multiple_flutters_module
iosBundleIdentifier: com.example.multipleFluttersModule
-# PUBSPEC CHECKSUM: 4eb9
+# PUBSPEC CHECKSUM: 5c31
diff --git a/dev/benchmarks/platform_channels_benchmarks/pubspec.yaml b/dev/benchmarks/platform_channels_benchmarks/pubspec.yaml
index ebb1feccb255e..97c7fe140ce69 100644
--- a/dev/benchmarks/platform_channels_benchmarks/pubspec.yaml
+++ b/dev/benchmarks/platform_channels_benchmarks/pubspec.yaml
@@ -5,7 +5,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
version: 1.0.0+1
environment:
- sdk: '>=3.0.0-0 <4.0.0'
+ sdk: '>=3.2.0-0 <4.0.0'
dependencies:
flutter:
@@ -14,16 +14,16 @@ dependencies:
sdk: flutter
microbenchmarks:
path: ../microbenchmarks
- cupertino_icons: 1.0.5
+ cupertino_icons: 1.0.6
- _fe_analyzer_shared: 61.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- analyzer: 5.13.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ _fe_analyzer_shared: 64.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ analyzer: 6.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args: 2.4.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
async: 2.11.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
characters: 1.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
clock: 1.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- collection: 1.17.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ collection: 1.18.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert: 3.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
coverage: 1.6.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
crypto: 3.0.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -39,7 +39,7 @@ dependencies:
logging: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
matcher: 0.12.16 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
material_color_utilities: 0.5.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- meta: 1.9.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ meta: 1.10.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
mime: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
node_preamble: 2.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
package_config: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -53,20 +53,20 @@ dependencies:
source_map_stack_trace: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
source_maps: 0.10.12 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
source_span: 1.10.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- stack_trace: 1.11.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- stream_channel: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ stack_trace: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ stream_channel: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
string_scanner: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
term_glyph: 1.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- test: 1.24.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- test_api: 0.6.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- test_core: 0.5.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ test: 1.24.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ test_api: 0.6.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ test_core: 0.5.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
typed_data: 1.3.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vector_math: 2.1.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- vm_service: 11.7.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ vm_service: 11.10.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
watcher: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- web: 0.1.4-beta # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ web: 0.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
web_socket_channel: 2.4.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- webkit_inspection_protocol: 1.2.0 # 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"
yaml: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
dev_dependencies:
@@ -74,4 +74,4 @@ dev_dependencies:
flutter:
uses-material-design: true
-# PUBSPEC CHECKSUM: 918b
+# PUBSPEC CHECKSUM: 7bea
diff --git a/dev/benchmarks/platform_views_layout/android/gradle.properties b/dev/benchmarks/platform_views_layout/android/gradle.properties
index 94adc3a3f97aa..598d13fee4463 100644
--- a/dev/benchmarks/platform_views_layout/android/gradle.properties
+++ b/dev/benchmarks/platform_views_layout/android/gradle.properties
@@ -1,3 +1,3 @@
-org.gradle.jvmargs=-Xmx1536M
+org.gradle.jvmargs=-Xmx4G
android.useAndroidX=true
android.enableJetifier=true
diff --git a/dev/benchmarks/platform_views_layout/pubspec.yaml b/dev/benchmarks/platform_views_layout/pubspec.yaml
index 396fbd7838694..cd9dc6f60c4ee 100644
--- a/dev/benchmarks/platform_views_layout/pubspec.yaml
+++ b/dev/benchmarks/platform_views_layout/pubspec.yaml
@@ -2,7 +2,7 @@ name: platform_views_layout
description: A benchmark for platform views.
environment:
- sdk: '>=3.0.0-0 <4.0.0'
+ sdk: '>=3.2.0-0 <4.0.0'
dependencies:
flutter:
@@ -19,31 +19,31 @@ dependencies:
async: 2.11.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
characters: 1.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- collection: 1.17.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ collection: 1.18.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
file: 6.1.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
matcher: 0.12.16 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
material_color_utilities: 0.5.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- meta: 1.9.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ meta: 1.10.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
path: 1.8.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
source_span: 1.10.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- stack_trace: 1.11.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- stream_channel: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ stack_trace: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ stream_channel: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
string_scanner: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
sync_http: 0.3.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
term_glyph: 1.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- test_api: 0.6.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ test_api: 0.6.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vector_math: 2.1.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- vm_service: 11.7.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- web: 0.1.4-beta # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ vm_service: 11.10.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ web: 0.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
webdriver: 3.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
dev_dependencies:
flutter_test:
sdk: flutter
- test: 1.24.3
+ test: 1.24.6
- _fe_analyzer_shared: 61.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- analyzer: 5.13.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ _fe_analyzer_shared: 64.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ analyzer: 6.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args: 2.4.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
clock: 1.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert: 3.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -68,11 +68,11 @@ dev_dependencies:
shelf_web_socket: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
source_map_stack_trace: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
source_maps: 0.10.12 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- test_core: 0.5.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ test_core: 0.5.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
typed_data: 1.3.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
watcher: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
web_socket_channel: 2.4.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- webkit_inspection_protocol: 1.2.0 # 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"
yaml: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
flutter:
@@ -81,4 +81,4 @@ flutter:
- packages/flutter_gallery_assets/people/square/ali.png
- packages/flutter_gallery_assets/places/india_chettinad_silk_maker.png
-# PUBSPEC CHECKSUM: 1c29
+# PUBSPEC CHECKSUM: d287
diff --git a/dev/benchmarks/platform_views_layout_hybrid_composition/android/gradle.properties b/dev/benchmarks/platform_views_layout_hybrid_composition/android/gradle.properties
index 94adc3a3f97aa..598d13fee4463 100644
--- a/dev/benchmarks/platform_views_layout_hybrid_composition/android/gradle.properties
+++ b/dev/benchmarks/platform_views_layout_hybrid_composition/android/gradle.properties
@@ -1,3 +1,3 @@
-org.gradle.jvmargs=-Xmx1536M
+org.gradle.jvmargs=-Xmx4G
android.useAndroidX=true
android.enableJetifier=true
diff --git a/dev/benchmarks/platform_views_layout_hybrid_composition/pubspec.yaml b/dev/benchmarks/platform_views_layout_hybrid_composition/pubspec.yaml
index df764b6158940..446a0b58dcec3 100644
--- a/dev/benchmarks/platform_views_layout_hybrid_composition/pubspec.yaml
+++ b/dev/benchmarks/platform_views_layout_hybrid_composition/pubspec.yaml
@@ -2,7 +2,7 @@ name: platform_views_layout_hybrid_composition
description: A benchmark for platform views, using hybrid composition on android.
environment:
- sdk: '>=3.0.0-0 <4.0.0'
+ sdk: '>=3.2.0-0 <4.0.0'
dependencies:
flutter:
@@ -19,31 +19,31 @@ dependencies:
async: 2.11.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
characters: 1.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- collection: 1.17.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ collection: 1.18.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
file: 6.1.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
matcher: 0.12.16 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
material_color_utilities: 0.5.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- meta: 1.9.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ meta: 1.10.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
path: 1.8.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
source_span: 1.10.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- stack_trace: 1.11.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- stream_channel: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ stack_trace: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ stream_channel: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
string_scanner: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
sync_http: 0.3.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
term_glyph: 1.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- test_api: 0.6.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ test_api: 0.6.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vector_math: 2.1.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- vm_service: 11.7.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- web: 0.1.4-beta # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ vm_service: 11.10.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ web: 0.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
webdriver: 3.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
dev_dependencies:
flutter_test:
sdk: flutter
- test: 1.24.3
+ test: 1.24.6
- _fe_analyzer_shared: 61.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- analyzer: 5.13.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ _fe_analyzer_shared: 64.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ analyzer: 6.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args: 2.4.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
clock: 1.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert: 3.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -68,11 +68,11 @@ dev_dependencies:
shelf_web_socket: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
source_map_stack_trace: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
source_maps: 0.10.12 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- test_core: 0.5.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ test_core: 0.5.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
typed_data: 1.3.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
watcher: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
web_socket_channel: 2.4.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- webkit_inspection_protocol: 1.2.0 # 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"
yaml: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
flutter:
@@ -81,4 +81,4 @@ flutter:
- packages/flutter_gallery_assets/people/square/ali.png
- packages/flutter_gallery_assets/places/india_chettinad_silk_maker.png
-# PUBSPEC CHECKSUM: 1c29
+# PUBSPEC CHECKSUM: d287
diff --git a/dev/benchmarks/test_apps/stocks/android/gradle.properties b/dev/benchmarks/test_apps/stocks/android/gradle.properties
index 94adc3a3f97aa..598d13fee4463 100644
--- a/dev/benchmarks/test_apps/stocks/android/gradle.properties
+++ b/dev/benchmarks/test_apps/stocks/android/gradle.properties
@@ -1,3 +1,3 @@
-org.gradle.jvmargs=-Xmx1536M
+org.gradle.jvmargs=-Xmx4G
android.useAndroidX=true
android.enableJetifier=true
diff --git a/dev/benchmarks/test_apps/stocks/pubspec.yaml b/dev/benchmarks/test_apps/stocks/pubspec.yaml
index 5d08473095290..526153083cc05 100644
--- a/dev/benchmarks/test_apps/stocks/pubspec.yaml
+++ b/dev/benchmarks/test_apps/stocks/pubspec.yaml
@@ -1,7 +1,7 @@
name: stocks
environment:
- sdk: '>=3.0.0-0 <4.0.0'
+ sdk: '>=3.2.0-0 <4.0.0'
dependencies:
flutter:
@@ -15,27 +15,27 @@ dependencies:
async: 2.11.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
characters: 1.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
clock: 1.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- collection: 1.17.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ collection: 1.18.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 4.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
material_color_utilities: 0.5.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- meta: 1.9.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ meta: 1.10.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
path: 1.8.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
source_span: 1.10.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
string_scanner: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
term_glyph: 1.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
typed_data: 1.3.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vector_math: 2.1.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- web: 0.1.4-beta # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ web: 0.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
dev_dependencies:
flutter_test:
sdk: flutter
flutter_driver:
sdk: flutter
- test: 1.24.3
+ test: 1.24.6
- _fe_analyzer_shared: 61.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- analyzer: 5.13.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ _fe_analyzer_shared: 64.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ analyzer: 6.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args: 2.4.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert: 3.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -61,19 +61,19 @@ dev_dependencies:
shelf_web_socket: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
source_map_stack_trace: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
source_maps: 0.10.12 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- stack_trace: 1.11.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- stream_channel: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ stack_trace: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ stream_channel: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
sync_http: 0.3.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- test_api: 0.6.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- test_core: 0.5.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- vm_service: 11.7.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ test_api: 0.6.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ test_core: 0.5.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ vm_service: 11.10.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
watcher: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
web_socket_channel: 2.4.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
webdriver: 3.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- webkit_inspection_protocol: 1.2.0 # 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"
yaml: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
flutter:
uses-material-design: true
-# PUBSPEC CHECKSUM: d14b
+# PUBSPEC CHECKSUM: 6aa9
diff --git a/dev/bots/analyze.dart b/dev/bots/analyze.dart
index 19056c54f36b1..39f739277f716 100644
--- a/dev/bots/analyze.dart
+++ b/dev/bots/analyze.dart
@@ -87,6 +87,9 @@ Future run(List arguments) async {
foundError(['The analyze.dart script must be run with --enable-asserts.']);
}
+ printProgress('TargetPlatform tool/framework consistency');
+ await verifyTargetPlatform(flutterRoot);
+
printProgress('No Double.clamp');
await verifyNoDoubleClamp(flutterRoot);
@@ -187,6 +190,13 @@ Future run(List arguments) async {
workingDirectory: flutterRoot,
);
+ // Make sure that all of the existing samples are linked from at least one API doc comment.
+ printProgress('Code sample link validation...');
+ await runCommand(dart,
+ ['--enable-asserts', path.join(flutterRoot, 'dev', 'bots', 'check_code_samples.dart')],
+ workingDirectory: flutterRoot,
+ );
+
// Try analysis against a big version of the gallery; generate into a temporary directory.
printProgress('Dart analysis (mega gallery)...');
final Directory outDir = Directory.systemTemp.createTempSync('flutter_mega_gallery.');
@@ -259,6 +269,84 @@ class _DoubleClampVisitor extends RecursiveAstVisitor {
}
}
+Future verifyTargetPlatform(String workingDirectory) async {
+ final File framework = File('$workingDirectory/packages/flutter/lib/src/foundation/platform.dart');
+ final Set frameworkPlatforms = {};
+ List lines = framework.readAsLinesSync();
+ int index = 0;
+ while (true) {
+ if (index >= lines.length) {
+ foundError(['${framework.path}: Can no longer find TargetPlatform enum.']);
+ return;
+ }
+ if (lines[index].startsWith('enum TargetPlatform {')) {
+ index += 1;
+ break;
+ }
+ index += 1;
+ }
+ while (true) {
+ if (index >= lines.length) {
+ foundError(['${framework.path}: Could not find end of TargetPlatform enum.']);
+ return;
+ }
+ String line = lines[index].trim();
+ final int comment = line.indexOf('//');
+ if (comment >= 0) {
+ line = line.substring(0, comment);
+ }
+ if (line == '}') {
+ break;
+ }
+ if (line.isNotEmpty) {
+ if (line.endsWith(',')) {
+ frameworkPlatforms.add(line.substring(0, line.length - 1));
+ } else {
+ foundError(['${framework.path}:$index: unparseable line when looking for TargetPlatform values']);
+ }
+ }
+ index += 1;
+ }
+ final File tool = File('$workingDirectory/packages/flutter_tools/lib/src/resident_runner.dart');
+ final Set toolPlatforms = {};
+ lines = tool.readAsLinesSync();
+ index = 0;
+ while (true) {
+ if (index >= lines.length) {
+ foundError(['${tool.path}: Can no longer find nextPlatform logic.']);
+ return;
+ }
+ if (lines[index].trim().startsWith('const List platforms = [')) {
+ index += 1;
+ break;
+ }
+ index += 1;
+ }
+ while (true) {
+ if (index >= lines.length) {
+ foundError(['${tool.path}: Could not find end of nextPlatform logic.']);
+ return;
+ }
+ final String line = lines[index].trim();
+ if (line.startsWith("'") && line.endsWith("',")) {
+ toolPlatforms.add(line.substring(1, line.length - 2));
+ } else if (line == '];') {
+ break;
+ } else {
+ foundError(['${tool.path}:$index: unparseable line when looking for nextPlatform values']);
+ }
+ index += 1;
+ }
+ final Set frameworkExtra = frameworkPlatforms.difference(toolPlatforms);
+ if (frameworkExtra.isNotEmpty) {
+ foundError(['TargetPlatform has some extra values not found in the tool: ${frameworkExtra.join(", ")}']);
+ }
+ final Set toolExtra = toolPlatforms.difference(frameworkPlatforms);
+ if (toolExtra.isNotEmpty) {
+ foundError(['The nextPlatform logic in the tool has some extra values not found in TargetPlatform: ${toolExtra.join(", ")}']);
+ }
+}
+
/// Verify that we use clampDouble instead of Double.clamp for performance reasons.
///
/// We currently can't distinguish valid uses of clamp from problematic ones so
diff --git a/dev/bots/analyze_snippet_code.dart b/dev/bots/analyze_snippet_code.dart
index 119311239e780..924ae2a03efb5 100644
--- a/dev/bots/analyze_snippet_code.dart
+++ b/dev/bots/analyze_snippet_code.dart
@@ -5,7 +5,7 @@
// To run this, from the root of the Flutter repository:
// bin/cache/dart-sdk/bin/dart --enable-asserts dev/bots/analyze_snippet_code.dart
-// In general, please prefer using full inline examples in API docs.
+// In general, please prefer using full linked examples in API docs.
//
// For documentation on creating sample code, see ../../examples/api/README.md
// See also our style guide's discussion on documentation and sample code:
@@ -13,7 +13,7 @@
//
// This tool is used to analyze smaller snippets of code in the API docs.
// Such snippets are wrapped in ```dart ... ``` blocks, which may themselves
-// be wrapped in {@tool snippet} ... {@endtool} blocks to set them apart
+// be wrapped in {@tool snippet} ... {@end-tool} blocks to set them apart
// in the rendered output.
//
// Such snippets:
@@ -55,10 +55,17 @@
//
// At the top of a file you can say `// Examples can assume:` and then list some
// commented-out declarations that will be included in the analysis for snippets
-// in that file.
+// in that file. This section may also contain explicit import statements.
//
-// Snippets generally import all the main Flutter packages (including material
-// and flutter_test), as well as most core Dart packages with the usual prefixes.
+// For files without an `// Examples can assume:` section or if that section
+// contains no explicit imports, the snippets will implicitly import all the
+// main Flutter packages (including material and flutter_test), as well as most
+// core Dart packages with the usual prefixes.
+//
+// When invoked without an additional path argument, the script will analyze
+// the code snippets for all packages in the "packages" subdirectory that do
+// not specify "nodoc: true" in their pubspec.yaml (i.e. all packages for which
+// we publish docs will have their doc code snippets analyzed).
import 'dart:async';
import 'dart:convert';
@@ -70,7 +77,7 @@ import 'package:path/path.dart' as path;
import 'package:watcher/watcher.dart';
final String _flutterRoot = path.dirname(path.dirname(path.dirname(path.fromUri(Platform.script))));
-final String _defaultFlutterPackage = path.join(_flutterRoot, 'packages', 'flutter', 'lib');
+final String _packageFlutter = path.join(_flutterRoot, 'packages', 'flutter', 'lib');
final String _defaultDartUiLocation = path.join(_flutterRoot, 'bin', 'cache', 'pkg', 'sky_engine', 'lib', 'ui');
final String _flutter = path.join(_flutterRoot, 'bin', Platform.isWindows ? 'flutter.bat' : 'flutter');
@@ -142,12 +149,28 @@ Future main(List arguments) async {
exit(0);
}
- Directory flutterPackage;
+ final List flutterPackages;
if (parsedArguments.rest.length == 1) {
// Used for testing.
- flutterPackage = Directory(parsedArguments.rest.single);
+ flutterPackages = [Directory(parsedArguments.rest.single)];
} else {
- flutterPackage = Directory(_defaultFlutterPackage);
+ // By default analyze snippets in all packages in the packages subdirectory
+ // that do not specify "nodoc: true" in their pubspec.yaml.
+ flutterPackages = [];
+ final String packagesRoot = path.join(_flutterRoot, 'packages');
+ for (final FileSystemEntity entity in Directory(packagesRoot).listSync()) {
+ if (entity is! Directory) {
+ continue;
+ }
+ final File pubspec = File(path.join(entity.path, 'pubspec.yaml'));
+ if (!pubspec.existsSync()) {
+ throw StateError("Unexpected package '${entity.path}' found in packages directory");
+ }
+ if (!pubspec.readAsStringSync().contains('nodoc: true')) {
+ flutterPackages.add(Directory(path.join(entity.path, 'lib')));
+ }
+ }
+ assert(flutterPackages.length >= 4);
}
final bool includeDartUi = parsedArguments.wasParsed('dart-ui-location') || parsedArguments['include-dart-ui'] as bool;
@@ -165,14 +188,14 @@ Future main(List arguments) async {
if (parsedArguments['interactive'] != null) {
await _runInteractive(
- flutterPackage: flutterPackage,
+ flutterPackages: flutterPackages,
tempDirectory: parsedArguments['temp'] as String?,
filePath: parsedArguments['interactive'] as String,
dartUiLocation: includeDartUi ? dartUiLocation : null,
);
} else {
if (await _SnippetChecker(
- flutterPackage,
+ flutterPackages,
tempDirectory: parsedArguments['temp'] as String?,
verbose: parsedArguments['verbose'] as bool,
dartUiLocation: includeDartUi ? dartUiLocation : null,
@@ -360,7 +383,7 @@ class _SnippetChecker {
/// supplied, the default location of the `dart:ui` code in the Flutter
/// repository is used (i.e. "/bin/cache/pkg/sky_engine/lib/ui").
_SnippetChecker(
- this._flutterPackage, {
+ this._flutterPackages, {
String? tempDirectory,
this.verbose = false,
Directory? dartUiLocation,
@@ -438,8 +461,8 @@ class _SnippetChecker {
/// automatically if there are no errors unless _keepTmp is true.
final Directory _tempDirectory;
- /// The package directory for the flutter package within the flutter root dir.
- final Directory _flutterPackage;
+ /// The package directories within the flutter root dir that will be checked.
+ final List _flutterPackages;
/// The directory for the dart:ui code to be analyzed with the flutter code.
///
@@ -453,12 +476,14 @@ class _SnippetChecker {
}
static const List ignoresDirectives = [
- '// ignore_for_file: duplicate_ignore',
'// ignore_for_file: directives_ordering',
+ '// ignore_for_file: duplicate_ignore',
+ '// ignore_for_file: no_leading_underscores_for_local_identifiers',
'// ignore_for_file: prefer_final_locals',
'// ignore_for_file: unnecessary_import',
'// ignore_for_file: unreachable_from_main',
'// ignore_for_file: unused_element',
+ '// ignore_for_file: unused_element_parameter',
'// ignore_for_file: unused_local_variable',
];
@@ -480,7 +505,7 @@ class _SnippetChecker {
"import 'dart:typed_data';",
"import 'dart:ui' as ui;",
"import 'package:flutter_test/flutter_test.dart';",
- for (final File file in _listDartFiles(Directory(_defaultFlutterPackage)))
+ for (final File file in _listDartFiles(Directory(_packageFlutter)))
"import 'package:flutter/${path.basename(file.path)}';",
].map<_Line>((String code) => _Line.generated(code: code)).toList();
}
@@ -490,13 +515,14 @@ class _SnippetChecker {
/// Returns true if any errors are found, false otherwise.
Future checkSnippets() async {
final Map snippets = {};
- if (_dartUiLocation != null && !_dartUiLocation!.existsSync()) {
- stderr.writeln('Unable to analyze engine dart snippets at ${_dartUiLocation!.path}.');
+ if (_dartUiLocation != null && !_dartUiLocation.existsSync()) {
+ stderr.writeln('Unable to analyze engine dart snippets at ${_dartUiLocation.path}.');
}
final List filesToAnalyze = [
- ..._listDartFiles(_flutterPackage, recursive: true),
- if (_dartUiLocation != null && _dartUiLocation!.existsSync())
- ..._listDartFiles(_dartUiLocation!, recursive: true),
+ for (final Directory flutterPackage in _flutterPackages)
+ ..._listDartFiles(flutterPackage, recursive: true),
+ if (_dartUiLocation != null && _dartUiLocation.existsSync())
+ ..._listDartFiles(_dartUiLocation, recursive: true),
];
final Set