first commit
Some checks are pending
Quality check / Flutter analysis (push) Waiting to run
Quality check / CodeQL analysis (java-kotlin) (push) Waiting to run

This commit is contained in:
FabioMich66 2026-03-05 15:51:30 +01:00
commit 19a982ede6
17025 changed files with 3794277 additions and 0 deletions

View file

@ -0,0 +1,37 @@
#!/usr/bin/env bash
# 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.
set -e
# This is executed by the skia autoroller after the roll has happened but before
# the PR is uploaded. Previously this logic was hardcoded into the autoroller
# and was reserved for updating the LICENSE file. Now the autoroller delegates
# to this script.
# See also:
# - https://skia-review.googlesource.com/c/buildbot/+/1025936
# - https://issues.skia.org/issues/433551375
REPO_PATH=$(dirname "$(readlink -f "$0")")
PROFILE_PATH="$REPO_PATH/engine/src/out/host_profile"
GN="$REPO_PATH/engine/src/flutter/tools/gn"
LICENSE_CPP="$REPO_PATH/engine/src/out/host_profile/licenses_cpp"
WORKING_DIR="$REPO_PATH/engine/src"
LICENSES_PATH="$REPO_PATH/engine/src/flutter/sky/packages/sky_engine/LICENSE"
DATA_PATH="$REPO_PATH/engine/src/flutter/tools/licenses_cpp/data"
cd "$REPO_PATH/engine/src"
./tools/dart/create_updated_flutter_deps.py
cd "$REPO_PATH"
gclient sync -D
# This calls `gn gen`.
"$GN" --runtime-mode profile --no-goma --no-rbe --enable-minimal-linux
ninja -C "$PROFILE_PATH" licenses_cpp
"$LICENSE_CPP" \
--working_dir="$WORKING_DIR" \
--licenses_path="$LICENSES_PATH" \
--data_dir="$DATA_PATH" \
--root_package="flutter" \
--v=1

7136
.flutter/.ci.yaml Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,21 @@
# Minimize verbosity.
have_fun: false
code_review:
# For now, use the default of MEDIUM for testing. Based on desired verbosity,
# we can change this to LOW or HIGH in the future.
comment_severity_threshold: MEDIUM
pull_request_opened:
# Explicitly set help to false in case the default changes in the future, as
# having a help message on every PR would be spammy.
help: false
# These tend to be verbose, and since we expect PR authors to clearly
# describe their PRs this would be at best duplicative.
summary: false
include_drafts: false
ignore_patterns:
# Avoid code reviews on rolls.
- DEPS
- "bin/internal/*.version"
- "engine/src/flutter/ci/licenses_golden/**"
# Avoid code reviews on all third_party files.
- "**/third_party/**"

View file

@ -0,0 +1,84 @@
# Flutter Style Guide
This style guide outlines the coding conventions for contributions to the
flutter/flutter repository. It is based on the more comprehensive official
[style guide for the Flutter repository](https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md).
## Best Practices
- Code should follow the guidance and principles described in
[the Flutter contribution guide](https://github.com/flutter/flutter/blob/main/CONTRIBUTING.md).
- Code should be tested and follow the guidance described in the [writing effective tests guide](https://github.com/flutter/flutter/blob/main/docs/contributing/testing/Writing-Effective-Tests.md) and the [running and writing tests guide](https://github.com/flutter/flutter/blob/main/docs/contributing/testing/Running-and-writing-tests.md).
- Changes to the [engine/ directory](https://github.com/flutter/flutter/tree/main/engine) should additionally have appropriate tests as described in [the engine test guidance](https://github.com/flutter/flutter/blob/main/docs/engine/testing/Testing-the-engine.md).
- PR descriptions should include the Pre-launch Checklist from
[the PR template](https://github.com/flutter/flutter/blob/main/.github/PULL_REQUEST_TEMPLATE.md),
with all of the steps completed.
- The most relevant guidelines should take precedence over less relevant
guidelines. For Flutter code, the
[Flutter styleguide](https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md)
should be followed as the first priority, and
[Effective Dart: Style](https://dart.dev/effective-dart/style)
should only be followed when it does not conflict with the former.
## Review Agent Guidelines
- Only review changes to the `master` branch. Other changes have already been reviewed (and are being cherrypicked).
## General Philosophy
- **Optimize for readability**: Code is read more often than it is written.
- **Avoid duplicating state**: Keep only one source of truth.
- Write what you need and no more, but when you write it, do it right.
- **Error messages should be useful**: Every error message is an opportunity to make someone love our product.
## Dart Formatting
- All Dart code is formatted using `dart format`. This is enforced by CI.
- Constructors come first in a class definition, with the default constructor preceding named constructors.
- Other class members should be ordered logically (e.g., by lifecycle, or grouping related fields and methods).
## Miscellaneous Languages
- Python code is formatted using `yapf`, linted with `pylint`, and should follow the [Google Python Style Guide](https://google.github.io/styleguide/pyguide.html).
- C++ code is formatted using `clang-format`, linted with `clang-tidy`, and should follow the [Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html).
- Shaders are formatted using `clang-format`.
- Kotlin code is formatted using `ktformat`, linted with `ktlint`, and should follow the [Android Kotlin Style Guide](https://developer.android.com/kotlin/style-guide).
- Java code is formatted using `google-java-format` and should follow the [Google Java Style Guide](https://google.github.io/styleguide/javaguide.html).
- Objective-C is formatted using `clang-format`, linted with `clang-tidy`, and should follow the [Google Objective-C Style Guide](https://google.github.io/styleguide/objcguide.html).
- Swift is formatted and linted using `swift-format` and should follow the [Google Swift Style Guide](https://google.github.io/swift).
- GN code is formatted using `gn format` and should follow the [GN Style Guide](https://gn.googlesource.com/gn/+/main/docs/style_guide.md).
## Documentation
- All public members should have documentation.
- **Answer your own questions**: If you have a question, find the answer, and then document it where you first looked.
- **Documentation should be useful**: Explain the *why* and the *how*.
- **Introduce terms**: Assume the reader does not know everything. Link to definitions.
- **Provide sample code**: Use `{@tool dartpad}` for runnable examples.
- Inline code samples are contained within `{@tool dartpad}` and `{@end-tool}`, and use the format of the following example to insert the code sample:
- `/// ** See code in examples/api/lib/widgets/sliver/sliver_list.0.dart **`
- Do not confuse this format with `/// See also:` sections of the documentation, which provide helpful breadcrumbs to developers.
- **Provide illustrations or screenshots** for widgets.
- Use `///` for public-quality documentation, even on private members.
## Review Agent Guidelines
When providing a summary, the review agent must adhere to the following principles:
- **Be Objective:** Focus on a neutral, descriptive summary of the changes. Avoid subjective value judgments
like "good," "bad," "positive," or "negative." The goal is to report what the code does, not to evaluate it.
- **Use Code as the Source of Truth:** Base all summaries on the code diff. Do not trust or rephrase the PR
description, which may be outdated or inaccurate. A summary must reflect the actual changes in the code.
- **Be Concise:** Generate summaries that are brief and to the point. Focus on the most significant changes,
and avoid unnecessary details or verbose explanations. This ensures the feedback is easy to scan and understand.
## Further Reading
For more detailed guidance, refer to the following documents:
- [Style guide for the Flutter repository](https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md)
- [Effective Dart: Style](https://dart.dev/effective-dart/style)
- [Tree Hygiene](https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md)
- [The Flutter contribution guide](https://github.com/flutter/flutter/blob/main/CONTRIBUTING.md)
- [Writing effective tests guide](https://github.com/flutter/flutter/blob/main/docs/contributing/testing/Writing-Effective-Tests.md)
- [Running and writing tests guide](https://github.com/flutter/flutter/blob/main/docs/contributing/testing/Running-and-writing-tests.md)
- [Engine testing guide](https://github.com/flutter/flutter/blob/main/docs/engine/testing/Testing-the-engine.md)

39
.flutter/.gitattributes vendored Normal file
View file

@ -0,0 +1,39 @@
# Auto detect text files and perform LF normalization
* text=auto
# Always perform LF normalization on these files
*.dart text
*.gradle text
*.html text
*.java text
*.json text
*.md text
*.py text
*.sh text
*.txt text
*.xml text
*.yaml text
# Make sure that these Windows files always have CRLF line endings in checkout
*.bat text eol=crlf
*.ps1 text eol=crlf
*.rc text eol=crlf
*.sln text eol=crlf
*.props text eol=crlf
*.vcxproj text eol=crlf
*.vcxproj.filters text eol=crlf
# Including templatized versions.
*.sln.tmpl text eol=crlf
*.props.tmpl text eol=crlf
*.vcxproj.tmpl text eol=crlf
# Make sure that these Linux files always have LF line endings in checkout
bin/flutter text eol=lf
bin/flutter-dev text eol=lf
bin/dart text eol=lf
# Never perform LF normalization on these files
*.ico binary
*.jar binary
*.png binary
*.zip binary

View file

@ -0,0 +1,85 @@
name: I am having difficulty installing Flutter or getting it to work
description: You have run into problems while downloading or installing Flutter, or the
"flutter" tool is crashing, or you are running into some other issue before even
being able to use "flutter run".
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
If you have found a bug or if our documentation doesn't have an answer
to what you're looking for, then fill out the template below.
- type: markdown
attributes:
value: |
Before filling the form fields, please consider the following:
- Ensure that you have searched the [existing issues](https://github.com/flutter/flutter/issues)
- Read the [guide to filing a bug](https://docs.flutter.dev/resources/bug-reports)
- 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: Actual results
description: Please tell us what is actually happening
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: |
<details open>
<summary>Logs</summary>
```console
<!-- Paste your logs here -->
```
</details>
- type: textarea
attributes:
label: Flutter Doctor output
description: |
Please provide the full output of running `flutter doctor -v`
value: |
<details open>
<summary>Doctor output</summary>
```console
<!-- Paste your output here -->
```
</details>
validations:
required: true

View file

@ -0,0 +1,121 @@
name: Report a bug
description: |
You found a bug in Flutter causing your application to crash or
throw an exception, a widget is buggy, or something looks wrong.
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: markdown
attributes:
value: |
Before filling the form fields, please consider the following:
- Ensure that you have searched the [existing issues](https://github.com/flutter/flutter/issues)
- Read the [guide to filing a bug](https://docs.flutter.dev/resources/bug-reports)
- 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 use https://dartpad.dev/ or 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.
Note: Please do not upload screenshots of text. Instead, use code blocks
or the above mentioned ways to upload your code sample.
value: |
<details open><summary>Code sample</summary>
```dart
[Paste your code here]
```
</details>
validations:
required: true
- type: textarea
attributes:
label: Screenshots or Video
description: |
Upload any screenshots or video of the bug if applicable.
value: |
<details open>
<summary>Screenshots / Video demonstration</summary>
[Upload media here]
</details>
- 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: |
<details open><summary>Logs</summary>
```console
[Paste your logs here]
```
</details>
- type: textarea
attributes:
label: Flutter Doctor output
description: |
Please provide the full output of running `flutter doctor -v`
value: |
<details open><summary>Doctor output</summary>
```console
[Paste your output here]
```
</details>
validations:
required: true

View file

@ -0,0 +1,50 @@
name: Feature request
description: Suggest a new idea for Flutter.
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: markdown
attributes:
value: |
Before filling the form fields, please consider the following:
- Ensure that you have searched the [existing issues](https://github.com/flutter/flutter/issues)
- Read the [guide to filing a bug](https://docs.flutter.dev/resources/bug-reports)
- type: textarea
attributes:
label: Use case
description: |
Please tell us the problem you are running into that led to you wanting
a new feature.
Is your feature request related to a problem? Please give a clear and
concise description of what the problem is.
Describe the alternative solutions you've considered. Is there a package
on pub.dev/flutter that already solves this?
validations:
required: true
- type: textarea
attributes:
label: Proposal
description: |
Briefly but precisely describe what you would like Flutter to be able to do.
Consider attaching something showing what you are imagining:
* images
* videos
* code samples
Does this have to be provided by Flutter directly, or can it be provided
by a package on pub.dev/flutter? If so, maybe consider implementing and
publishing such a package rather than filing an issue.
validations:
required: true

View file

@ -0,0 +1,114 @@
name: My app has some non-speed performance issues
description: |
You are writing an application but have discovered that it uses too much memory,
too much energy (e.g., CPU/GPU usage is high), or its app size is too large.
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, and how you measured the performance.
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: |
<details open><summary>Code sample</summary>
```dart
[Paste your code here]
```
</details>
validations:
required: true
- 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: 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: |
<details open><summary>Logs</summary>
```console
[Paste your logs here]
```
</details>
- type: textarea
attributes:
label: Flutter Doctor output
description: |
Finally, paste the output of running `flutter doctor -v` here, with your device plugged in.
value: |
<details open><summary>Doctor output</summary>
```console
[Paste your output here]
```
</details>
validations:
required: true

View file

@ -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: |
<details open><summary>Code sample</summary>
```dart
[Paste your code here]
```
</details>
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: |
<details open><summary>Timeline Traces JSON</summary>
```json
[Paste the Timeline Traces here]
```
</details>
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.
Dont use "adb screenrecord", as that affects the performance of the profile run.
value: |
<details open>
<summary>Video demonstration</summary>
[Upload media here]
</details>
- 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: |
<details open><summary>Logs</summary>
```console
[Paste your logs here]
```
</details>
- type: textarea
attributes:
label: Flutter Doctor output
description: |
Finally, paste the output of running `flutter doctor -v` here, with your device plugged in.
value: |
<details open><summary>Doctor output</summary>
```console
[Paste your output here]
```
</details>
validations:
required: true

View file

@ -0,0 +1,37 @@
name: Flutter's CI infrastructure 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 contributing to Flutter!
This template is for requests made to [`team-infra`](https://flutter.dev/to/team-infra).
If you are filing this to track your **own** contributed work to infrastructure, and the
work is already agreed upon (routine maintenance, etc), feel free to skip this template;
and use a blank issue - just remember to assign the bug to yourself so it's clear we do
not have to triage it.
- type: markdown
attributes:
value: |
Please search [existing infra issues](https://github.com/flutter/flutter/issues?q=is%3Aopen+is%3Aissue+label%3Ateam-infra) before filing a new issue.
- type: checkboxes
id: priority
attributes:
label: Help us understand the severity of this issue
description: Please only choose one
options:
- label: breakage; unable to contribute or trigger builds will no workarounds
- label: inconvenient workarounds exist, but significant effort required
- label: needed for a Flutter team-wide priority (already agreed upon)
- label: nice-to-have; none of the above
- type: textarea
attributes:
label: What do you need help with
description: If you have a bug, What should the expect output be?
value: ...

View file

@ -0,0 +1,32 @@
name: Share a Flutter design document
description: As a contributor, I would like to share a design document.
labels: ['design doc']
body:
- type: markdown
attributes:
value: |
Thank you for your interest in contributing to Flutter!
Please ensure that you are following
https://github.com/flutter/flutter/blob/main/docs/contributing/Design-Documents.md
when sharing a design document.
Please fill out the sections below to the best of your ability.
- type: input
id: document_link
attributes:
label: Document Link
description: |
Insert the "https://flutter.dev/go" link for your document here.
For details on creating a link, see the instructions in
https://flutter.dev/go/template
validations:
required: true
- type: textarea
id: proposal_description
attributes:
label: What problem are you solving?
description: |
Please provide a brief description of the problem you are solving.
validations:
required: true

View file

@ -0,0 +1,221 @@
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: markdown
attributes:
value: |
Before filling the form fields, please consider the following:
- Ensure that you have searched the [existing package issues](https://github.com/flutter/flutter/issues?q=is%3Aopen+is%3Aissue+label%3Apackage)
- Read the [guide to filing a bug](https://docs.flutter.dev/resources/bug-reports)
- 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
- espresso
- extension_google_sign_in_as_googleapis_auth
- file_selector
- flutter_lints
- flutter_migrate
- flutter_plugin_android_lifecycle
- flutter_svg
- flutter_template_images
- go_router
- go_router_builder
- google_adsense
- google_fonts
- google_identity_services_web
- google_maps_flutter
- google_sign_in
- image_picker
- in_app_purchase
- interactive_media_ads
- local_auth
- metrics_center
- multicast_dns
- path_parsing
- path_provider
- pigeon
- plugin_platform_interface
- pointer_interceptor
- process
- quick_actions
- rfw
- shared_preferences
- standard_message_codec
- two_dimensional_scrollables
- url_launcher
- vector_graphics
- 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: |
<details><summary>pubspec.lock</summary>
```lock
[Paste file content here]
```
</details>
- 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: |
<details open><summary>Code sample</summary>
```dart
[Paste your code here]
```
</details>
validations:
required: true
- type: textarea
attributes:
label: Screenshots or Videos
description: |
Upload any screenshots or videos of the bug if applicable.
value: |
<details open>
<summary>Screenshots / Video demonstration</summary>
[Upload media here]
</details>
- 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: |
<details open><summary>Logs</summary>
```console
[Paste your logs here]
```
</details>
- type: textarea
attributes:
label: Flutter Doctor output
description: |
Please provide the full output of running `flutter doctor -v`
value: |
<details open><summary>Doctor output</summary>
```console
[Paste your output here]
```
</details>
validations:
required: true

View file

@ -0,0 +1,25 @@
name: Create an umbrella issue
description: As a contributor, I would like to create an umbrella issue for a
feature to be added to the feature tracker.
title: '☂️ <Feature Title>'
projects: ["flutter/82"]
body:
- type: input
id: design_doc
attributes:
label: Design Doc
description: Add a design doc if there is one for this feature.
- type: textarea
id: description
attributes:
label: Description
description: Please describe the feature you are adding.
validations:
required: true
- type: textarea
id: tracking_issues
attributes:
label: Tracking Issues
description: List of issues associated with this feature.
validations:
required: true

View file

@ -0,0 +1,137 @@
name: Report a google3 bug
description: |
You found a bug in Flutter causing your application to crash or
throw an exception, a widget is buggy, or something looks wrong.
title: "[Google3 Bug]: "
labels: ['customer: google']
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: markdown
attributes:
value: |
Before filling the form fields, please consider the following:
- Ensure that you have searched the [existing issues](https://github.com/flutter/flutter/issues)
- Read the [guide to filing a bug](https://docs.flutter.dev/resources/bug-reports)
- type: markdown
attributes:
value: |
Flutter GitHub issues are public and so you must avoid posting any Google confidential information in them.
- type: checkboxes
id: priority-indicator
attributes:
label: Help us understand the severity of this issue
description: Please only choose one
options:
- label: causing severe production issues e.g. malfunctions or data loss
- label: blocking next binary release
- label: blocking a client feature launch within a quarter
- label: nice-to-have but does not block a launch within the next quarter
- 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 use https://dartpad.dev/ or 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.
Note: Please do not upload screenshots of text. Instead, use code blocks
or the above mentioned ways to upload your code sample.
value: |
<details open><summary>Code sample</summary>
```dart
[Paste your code here]
```
</details>
validations:
required: true
- type: textarea
attributes:
label: Screenshots or Video
description: |
Upload any screenshots or video of the bug if applicable.
value: |
<details open>
<summary>Screenshots / Video demonstration</summary>
[Upload media here]
</details>
- 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: |
<details open><summary>Logs</summary>
```console
[Paste your logs here]
```
</details>
- type: textarea
attributes:
label: Flutter Doctor output
description: |
Please provide the full output of running `flutter doctor -v`
value: |
<details open><summary>Doctor output</summary>
```console
[Paste your output here]
```
</details>
validations:
required: true

View file

@ -0,0 +1,5 @@
blank_issues_enabled: true
contact_links:
- name: I want help writing my application
url: https://stackoverflow.com/tags/flutter
about: Ask your questions about how to achieve a particular effect in Flutter or get help with using a particular API.

View file

@ -0,0 +1,48 @@
This pull request is created by [automatic cherry pick workflow](https://github.com/flutter/flutter/blob/main/docs/releases/Flutter-Cherrypick-Process.md#automatically-creates-a-cherry-pick-request)
Please fill in the form below, and a flutter domain expert will evaluate this cherry pick request.
### Issue Link:
What is the link to the issue this cherry-pick is addressing?
https://github.com/flutter/flutter/issues/< Replace with issue link here >
### Impact Description:
What is the impact (ex. visual jank on Samsung phones, app crash, cannot ship an iOS app)?
Does it impact development (ex. flutter doctor crashes when Android Studio is installed),
or the shipping of production apps (the app crashes on launch).
This information is for domain experts and release engineers to understand the consequences of saying yes or no to the cherry pick.
< Replace with impact description here >
### Changelog Description:
Explain this cherry pick:
* In one line that is accessible to most Flutter developers.
* That describes the state prior to the fix.
* That includes which platforms are impacted.
See [best practices](https://github.com/flutter/flutter/blob/main/docs/releases/Hotfix-Documentation-Best-Practices.md) for examples.
< Replace with changelog description here >
[flutter/<ISSUE_NUMBER>] When <SCENARIO> [on <PLAFORMS(S)>], <DESCRIPTION>
### Workaround:
Is there a workaround for this issue?
< Replace with workaround here >
### Risk:
What is the risk level of this cherry-pick?
- [ ] Low
- [ ] Medium
- [ ] High
### Test Coverage:
Are you confident that your fix is well-tested by automated tests?
- [ ] Yes
- [ ] No
### Validation Steps:
What are the steps to validate that this fix works?
< Replace with validation steps here >

View file

@ -0,0 +1,39 @@
<!--
Thanks for filing a pull request!
Reviewers are typically assigned within a week of filing a request.
To learn more about code review, see our documentation on Tree Hygiene: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
-->
*Replace this paragraph with a description of what this PR is changing or adding, and why. Consider including before/after screenshots.*
*List which issues are fixed by this PR. You must list at least one issue. An issue is not required if the PR fixes something trivial like a typo.*
*If you had to change anything in the [flutter/tests] repo, include a link to the migration guide as per the [breaking change policy].*
## Pre-launch Checklist
- [ ] I read the [Contributor Guide] and followed the process outlined there for submitting PRs.
- [ ] I read the [Tree Hygiene] wiki page, which explains my responsibilities.
- [ ] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement].
- [ ] I signed the [CLA].
- [ ] I listed at least one issue that this PR fixes in the description above.
- [ ] I updated/added relevant documentation (doc comments with `///`).
- [ ] I added new tests to check the change I am making, or this PR is [test-exempt].
- [ ] I followed the [breaking change policy] and added [Data Driven Fixes] where supported.
- [ ] All existing and new tests are passing.
If you need help, consider asking for advice on the #hackers-new channel on [Discord].
**Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed.
<!-- Links -->
[Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md

View file

@ -0,0 +1,143 @@
name: Composite Flutter Setup
description: checkouts the tree, setups the environment
inputs:
ANDROID_TOOLS_VERSION:
description: 'android tools version'
default: '13114758'
ANDROID_PLATFORM:
description: 'android platform version'
default: 'android-36'
ANDROID_BUILDTOOLS:
description: 'android buildtools version'
default: '36.1.0'
runs:
using: 'composite'
steps:
# Real checkout on github actions for pull requests
- name: Checkout code (non-act pull_request)
uses: actions/checkout@v4
if: github.event_name == 'pull_request' && !env.ACT
with:
fetch-depth: 0
fetch-tags: true
# Checkout the PR; not the merge commit - we need to describe tags
ref: ${{ github.event.pull_request.head.sha }}
# Real checkout on github actions for post submit
- name: Checkout code (non-act push)
uses: actions/checkout@v4
if: github.event_name == 'push' && !env.ACT
with:
fetch-depth: 0
fetch-tags: true
# Checkout the PR; not the merge commit - we need to describe tags
ref: ${{ github.event.pull_request.head.sha }}
# Fake checkout if running locally
- name: Checkout code (act local)
uses: actions/checkout@v4
if: env.ACT
# If this is a branch / pr NOT on fluter/flutter, set the remote upstream
# so the flutter tool can figure out the version
- name: Set upstream (if not flutter/flutter)
shell: bash
if: github.repository != 'flutter/flutter' && !env.ACT
run: |
git remote add upstream https://github.com/flutter/flutter.git
git fetch --all --tags
# If running locally; install the JDK - Github runners have everything on them
- name: Set up our JDK environment
if: env.ACT
uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00
with:
java-version: '21'
distribution: 'temurin'
# If running locally; install Android SDK tools - Github runners have everything on them
- name: Set Android SDK environment variable
shell: bash
if: env.ACT
run: |
echo "ANDROID_SDK_ROOT=/opt/android/sdk" >> $GITHUB_ENV
echo "ANDROID_HOME=/opt/android/sdk" >> $GITHUB_ENV
- name: Get Android SDK version
shell: bash
id: android-sdk-version
if: env.ACT
run: |
echo "revision=${{inputs.ANDROID_TOOLS_VERSION}};${{inputs.ANDROID_PLATFORM}};build-tools;${{inputs.ANDROID_BUILDTOOLS}}" >> "$GITHUB_OUTPUT"
- name: Android SDK Cache
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684
id: android-sdk-setup
if: env.ACT
with:
path: /opt/android/sdk
key: ${{ runner.os }}-${{ steps.android-sdk-version.outputs.revision }}
- name: Setup Android SDK (cold cache)
if: env.ACT && steps.android-sdk-setup.outputs.cache-hit != 'true'
uses: android-actions/setup-android@9fc6c4e9069bf8d3d10b2204b1fb8f6ef7065407
with:
packages: 'tools platform-tools platforms;${{inputs.ANDROID_PLATFORM}} build-tools;${{inputs.ANDROID_BUILDTOOLS}}'
log-accepted-android-sdk-licenses: false
cmdline-tools-version: ${{ inputs.ANDROID_TOOLS_VERSION }}
- name: Setup Android SDK (warm cache)
shell: bash
if: env.ACT && steps.android-sdk-setup.outputs.cache-hit == 'true'
run: |
echo "/opt/android/sdk/cmdline-tools/${{ inputs.ANDROID_TOOLS_VERSION }}/bin" >> "$GITHUB_PATH"
echo "/opt/android/sdk/platform-tools" >> "$GITHUB_PATH"
- name: Add `flutter` to the PATH
shell: bash
run: |
echo "$GITHUB_WORKSPACE/bin" >> "$GITHUB_PATH"
- name: Setup PUB_CACHE environment variable
shell: bash
run: |
echo "PUB_CACHE=/opt/pub-cache" >> $GITHUB_ENV
# Get the Flutter revision. This is the key for the cache for artifacts
# under bin/cache
- name: Get Flutter version
shell: bash
id: flutter-revision
run: |
echo "revision=$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT"
- name: Flutter artifacts cache
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684
id: flutter-artifacts
with:
path: ${{ github.workspace }}/bin/cache
key: ${{ runner.os }}-flutter-${{ steps.flutter-revision.outputs.revision }}
- name: pub deps hash
shell: bash
id: pub-deps-hash
run: |
# Generate stable hash of pubspec.yaml files
find dev examples packages -name "pubspec.yaml" -print0 | sort -z | xargs -0 cat | sha256sum >> "$RUNNER_TEMP/pub_deps_sha"
echo "revision=$(cat "$RUNNER_TEMP/pub_deps_sha")" >> "$GITHUB_OUTPUT"
- name: pub package cache
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684
id: pub-cache
with:
path: |
/opt/pub-cache
${{ github.workspace }}/**/.dart_tool
${{ github.workspace }}/**/pubspec.lock
key: ${{ runner.os }}-pub-${{ steps.pub-deps-hash.outputs.revision }}
- name: Flutter Doctor
shell: bash
run: |
flutter doctor
- name: flutter pub get (online)
shell: bash
if: steps.pub-cache.outputs.cache-hit != 'true'
run: |
flutter pub get

23
.flutter/.github/dependabot.yml vendored Normal file
View file

@ -0,0 +1,23 @@
# See Dependabot documentation for all configuration options:
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
groups:
all-github-actions:
patterns: [ "*" ]
reviewers:
- "christopherfujino"
- "jmagman"
labels:
- "team-infra"
- "autosubmit"
# Updating patch versions for "github-actions" is too chatty.
# See https://github.com/flutter/flutter/issues/158350.
ignore:
- dependency-name: "*"
update-types: ["version-update:semver-patch"]

261
.flutter/.github/labeler.yml vendored Normal file
View file

@ -0,0 +1,261 @@
# Copyright 2013 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.
# See https://github.com/actions/labeler/blob/main/README.md for docs.
# Use git ls-files '<pattern>' to see the list of matching files.
'a: accessibility':
- changed-files:
- any-glob-to-any-file:
- '**/accessibility/*'
- '**/*accessibility*'
- '**/semantics/*'
- '**/*semantics*'
'a: animation':
- changed-files:
- any-glob-to-any-file:
- '**/animation/*'
- '**/*animation*'
'a: desktop':
- changed-files:
- any-glob-to-any-file:
- '**/linux/**/*'
- '**/macos/**/*'
- '**/windows/**/*'
- engine/src/flutter/shell/platform/darwin/common/**/*
'a: internationalization':
- changed-files:
- any-glob-to-any-file:
- packages/flutter_localizations/**/*
'a: tests':
- changed-files:
- any-glob-to-any-file:
- packages/flutter_driver/**/*
- packages/flutter_goldens/**/*
- packages/flutter_test/**/*
- packages/integration_test/**/*
'a: text input':
- changed-files:
- all-globs-to-any-file:
- '**/*text*'
- '!**/*context*'
- '!**/*texture*'
'd: api docs':
- changed-files:
- any-glob-to-any-file:
- examples/api/**/*
'd: docs/':
- changed-files:
- any-glob-to-any-file:
- docs/**/*
'd: examples':
- changed-files:
- any-glob-to-any-file:
- examples/**/*
'e: embedder':
- changed-files:
- any-glob-to-any-file:
- engine/src/flutter/shell/platform/embedder
'e: impeller':
- changed-files:
- any-glob-to-any-file:
- engine/src/flutter/impeller/**/*
engine:
- changed-files:
- any-glob-to-any-file:
- DEPS
- engine/**/*
- docs/engine/**/*
'f: cupertino':
- changed-files:
- any-glob-to-any-file:
- '**/cupertino/*'
- '**/*cupertino*'
- docs/libraries/cupertino/**/*
'f: focus':
- changed-files:
- any-glob-to-any-file:
- '**/focus/*'
- '**/*focus*'
'f: gestures':
- changed-files:
- any-glob-to-any-file:
- '**/gestures/*'
- '**/*gestures*'
'f: material design':
- changed-files:
- any-glob-to-any-file:
- '**/material/*'
- '**/*material*'
- docs/libraries/material/**/*
'f: routes':
- changed-files:
- any-glob-to-any-file:
- '**/navigator/*'
- '**/*navigator*'
- '**/route/*'
- '**/*route*'
'f: scrolling':
- changed-files:
- any-glob-to-any-file:
- '**/*scroll*'
- '**/scroll/*'
- '**/*sliver*'
- '**/sliver/*'
- '**/*viewport*'
- '**/viewport/*'
framework:
- changed-files:
- any-glob-to-any-file:
- packages/flutter/**/*
- packages/flutter_driver/**/*
- packages/flutter_goldens/**/*
- packages/flutter_localizations/**/*
- packages/flutter_test/**/*
- packages/integration_test/**/*
- examples/api/**/*
- docs/about/**/*
- docs/contributing/**/*
- docs/libraries/**/*
'f: integration_test':
- changed-files:
- any-glob-to-any-file:
- packages/integration_test/**/*
package:
- changed-files:
- any-glob-to-any-file:
- docs/ecosystem/**/*
platform-android:
- changed-files:
- any-glob-to-any-file:
- docs/platform/android/**/*
- engine/src/flutter/shell/platform/android/**/*
- packages/flutter_tools/*android*
- packages/flutter_tools/gradle/**/*
platform-ios:
- changed-files:
- any-glob-to-any-file:
- engine/src/flutter/shell/platform/darwin/common/**/*
- engine/src/flutter/shell/platform/darwin/ios/**/*
- packages/flutter_tools/lib/src/ios/**/*
platform-fuchsia:
- changed-files:
- any-glob-to-any-file:
- engine/src/flutter/shell/platform/fuchsia/**/*
platform-linux:
- changed-files:
- any-glob-to-any-file:
- engine/src/flutter/shell/platform/linux/**/*
platform-macos:
- changed-files:
- any-glob-to-any-file:
- engine/src/flutter/src/flutter/shell/platform/darwin/common/**/*
- engine/src/flutter/shell/platform/darwin/macos/**/*
platform-web:
- changed-files:
- any-glob-to-any-file:
- '**/web_sdk/**/*'
- engine/src/flutter/lib/web_ui/**/*
- packages/flutter_web_plugins
platform-windows:
- changed-files:
- any-glob-to-any-file:
- engine/src/flutter/shell/platform/windows/**/*
'customer: gallery':
- changed-files:
- any-glob-to-any-file:
- examples/flutter_gallery/**/*
'c: tech-debt':
- changed-files:
- any-glob-to-any-file:
- '**/fix_data.yaml'
- '**/*.expect'
- '**/*test_fixes*'
'c: contributor-productivity':
- changed-files:
- any-glob-to-any-file:
- docs/contributing/**/*
# Keep this synced with CODEOWNERS.
team-android:
- changed-files:
- any-glob-to-any-file:
- docs/platform/android/**/*
- engine/src/flutter/shell/platform/android/**/*
- packages/flutter_tools/**/*android*
- packages/flutter_tools/**/*gradle*
team-ecosystem:
- changed-files:
- any-glob-to-any-file:
- docs/ecosystem/**/*
team-engine:
- changed-files:
- any-glob-to-any-file:
- docs/engine/**/*
team-infra:
- changed-files:
- any-glob-to-any-file:
- docs/infra/**/*
- docs/releases/**/*
# Keep this synced with CODEOWNERS.
team-ios:
- changed-files:
- any-glob-to-any-file:
- engine/src/flutter/shell/platform/darwin/common/**/*
- engine/src/flutter/shell/platform/darwin/ios/framework/**/*
- packages/flutter_tools/**/ios/*
- packages/flutter_tools/**/macos/*
- packages/flutter_tools/**/*xcode*
- packages/flutter_tools/**/*ios*
- packages/flutter_tools/**/*macos*
team-tool:
- changed-files:
- any-glob-to-any-file:
- docs/tool/**/*
team-web:
- changed-files:
- any-glob-to-any-file:
- docs/platforms/web/**/*
tool:
- changed-files:
- any-glob-to-any-file:
- packages/flutter_tools/**/*
- packages/fuchsia_remote_debug_protocol/**/*
- docs/tool/**/*

68
.flutter/.github/release.yml vendored Normal file
View file

@ -0,0 +1,68 @@
changelog:
exclude:
authors:
- engine-flutter-autoroll
- fluttergithubbot
labels:
- passed first triage
- passed secondary triage
- "team: flakes"
- revert
categories:
- title: Framework
labels:
- framework
- "a: text input"
- "f: scrolling"
- "f: routes"
- "f: selection"
- "f: gestures"
exclude:
labels:
- "f: material design"
- title: Material
labels:
- "f: material design"
# Mobile
- title: iOS
labels:
- platform-ios
- "f: cupertino"
- title: Android
labels:
- platform-android
# Desktop
- title: macOS
labels:
- platform-mac
- title: Windows
labels:
- platform-windows
- title: Linux
labels:
- platform-linux
# Web
- title: Web
labels:
- platform-web
- "browser: chrome-desktop"
- "browser: edge"
- "browser: firefox"
- "browser: safari-macos"
# Misc
- title: Tooling
labels:
- tool
- title: DevTools
labels:
- "d: devtools"
- "d: intellij"
- "d: tools_metadata"
- "f: inspector"
- title: Documentation
labels:
- "d: examples"
- "d: api docs"
- title: Other Changes
labels:
- '*'

View file

@ -0,0 +1,26 @@
# Copyright 2013 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.
name: Generate a content aware hash for the Flutter Engine
on: workflow_dispatch
permissions:
contents: read
jobs:
generate-engine-content-hash:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
- name: Generate Hash
run: |
# Script updated to handle gh-readonly-queue/ branches
engine_content_hash=$(bin/internal/content_aware_hash.sh)
# test notice annotation for retrival from api
echo "::notice ::{\"engine_content_hash\": \"${engine_content_hash}\"}"
# test summary writing
echo "{\"engine_content_hash\": \"${engine_content_hash}\"" >> $GITHUB_STEP_SUMMARY

29
.flutter/.github/workflows/coverage.yml vendored Normal file
View file

@ -0,0 +1,29 @@
# Copyright 2013 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.
name: coverage
on:
push:
branches:
- master
paths:
- 'packages/flutter/**'
permissions: read-all
jobs:
build:
name: coverage
runs-on: ubuntu-latest
if: ${{ github.repository == 'flutter/flutter' }}
steps:
- uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3
- name: ./bin/flutter test --coverage
run: pushd packages/flutter;../../bin/flutter test --coverage -j 1;popd
- name: upload coverage
uses: codecov/codecov-action@fdcc8476540edceab3de004e990f80d881c6cc00
with:
files: packages/flutter/coverage/lcov.info
verbose: true

99
.flutter/.github/workflows/easy-cp.yml vendored Normal file
View file

@ -0,0 +1,99 @@
# 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.
name: Cherry-pick Labeled PR to Release Branch
on:
pull_request_target:
branches: master
types: [labeled]
permissions:
contents: read
pull-requests: write
jobs:
cherrypick_not_merged_remove_label:
name: cherrypick_not_merged_remove_label
runs-on: ubuntu-latest
if: |
(github.event.label.name == format('cp{0} beta', ':') || github.event.label.name == format('cp{0} stable', ':')) &&
(github.event.pull_request.merged == false)
steps:
- name: Leave Comment and Remove Label
run: |
gh pr edit ${{ github.event.pull_request.number }} --remove-label "cp: beta"
gh pr edit ${{ github.event.pull_request.number }} --remove-label "cp: stable"
gh pr comment ${{ github.event.pull_request.number }} -R flutter/flutter -b "Only merged pull requests can be cherrypicked."
env:
GITHUB_TOKEN: ${{ secrets.FLUTTERACTIONSBOT_CP_TOKEN }}
cherrypick_to_release:
name: cherrypick_to_release
runs-on: ubuntu-latest
if: |
(github.event.label.name == format('cp{0} beta', ':') || github.event.label.name == format('cp{0} stable', ':')) &&
(github.event.pull_request.merged == true)
steps:
- name: Get Release Channel
run: |
echo "CHANNEL=$(echo ${{ github.event.label.name }} | cut -d ':' -f 2 | xargs)" >> $GITHUB_ENV
- name: Get Release Candidate Branch
run: |
RELEASE_BRANCH=$(curl https://raw.githubusercontent.com/flutter/flutter/$CHANNEL/bin/internal/release-candidate-branch.version)
echo "RELEASE_BRANCH=$(echo $RELEASE_BRANCH | tr -d '\n')" >> $GITHUB_ENV
- name: Get Cherry Pick PR
run: |
echo "COMMIT_SHA=$(echo ${{ github.event.pull_request.merge_commit_sha }})" >> $GITHUB_ENV
- name: Checkout Flutter Repo
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3
with:
repository: flutteractionsbot/flutter
path: flutter
ref: master
persist-credentials: false
# Checkout all history commits on master branch, so that the cp commit is a known object
fetch-depth: 0
# use same name when checking out branch, since the marketplace action does a hard reset.
- name: Attempt CP
id: attempt-cp
working-directory: ./flutter
run: |
git config user.name "GitHub Actions Bot"
git config user.email "<>"
git remote add upstream https://github.com/flutter/flutter.git
git fetch upstream $RELEASE_BRANCH
git fetch upstream master
git checkout -b cp-${CHANNEL}-${COMMIT_SHA} --track upstream/$RELEASE_BRANCH
git cherry-pick $COMMIT_SHA
- name: Create PR on CP success
if: ${{ steps.attempt-cp.conclusion == 'success' }}
working-directory: ./flutter
id: create-pr
run: |
git push https://${{ env.GITHUB_TOKEN }}@github.com/flutteractionsbot/flutter cp-${CHANNEL}-${COMMIT_SHA}
{
echo 'PR_URL<<EOF'
gh pr create --title "[CP-${CHANNEL}]${PR_TITLE}" --body-file ".github/PR_TEMPLATE/PULL_REQUEST_CP_TEMPLATE.md" --base ${RELEASE_BRANCH} --label "cp: review" --repo flutter/flutter --head flutteractionsbot:cp-${CHANNEL}-${COMMIT_SHA}
echo EOF
} >> "$GITHUB_ENV"
env:
GITHUB_TOKEN: ${{ secrets.FLUTTERACTIONSBOT_CP_TOKEN }}
PR_TITLE: ${{ github.event.pull_request.title }}
- name: Leave Comment on CP success
if: ${{ steps.create-pr.conclusion == 'success' }}
run: |
echo $PR_URL
NEW_PR_NUMBER="${PR_URL##*/}"
SUCCESS_MSG=" @${{ github.actor }} please fill out the PR description above, afterwards the release team will review this request."
gh pr comment $NEW_PR_NUMBER -R flutter/flutter -b "${SUCCESS_MSG}"
env:
GITHUB_TOKEN: ${{ secrets.FLUTTERACTIONSBOT_CP_TOKEN }}
- name: Leave Comment on CP failure
if: ${{ failure() && steps.attempt-cp.conclusion == 'failure' }}
run: |
FAILURE_MSG="Failed to create CP due to merge conflicts.<br>"
FAILURE_MSG+="You will need to create the PR manually. See [the cherrypick wiki](https://github.com/flutter/flutter/blob/main/docs/releases/Flutter-Cherrypick-Process.md) for more info."
gh pr comment ${{ github.event.pull_request.number }} -R flutter/flutter -b "${FAILURE_MSG}"
env:
GITHUB_TOKEN: ${{ secrets.FLUTTERACTIONSBOT_CP_TOKEN }}

22
.flutter/.github/workflows/labeler.yml vendored Normal file
View file

@ -0,0 +1,22 @@
# Copyright 2013 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.
name: "Pull Request Labeler"
on:
- pull_request_target
# Declare default permissions as read only.
permissions: read-all
jobs:
triage:
if: ${{ github.repository == 'flutter/flutter' }}
permissions:
pull-requests: write
runs-on: ubuntu-latest
steps:
# Source available at https://github.com/actions/labeler/blob/main/README.md
- uses: actions/labeler@634933edcd8ababfe52f92936142cc22ac488b1b
with:
sync-labels: true

35
.flutter/.github/workflows/lock.yaml vendored Normal file
View file

@ -0,0 +1,35 @@
# Copyright 2013 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.
# Configuration for Lock Threads - https://github.com/dessant/lock-threads
name: 'Lock Threads'
# By specifying the access of one of the scopes, all of those that are not
# specified are set to 'none'.
permissions:
issues: write
on:
schedule:
- cron: '0 * * * *'
jobs:
lock:
permissions:
issues: write
runs-on: ubuntu-latest
if: ${{ github.repository == 'flutter/flutter' }}
steps:
- uses: dessant/lock-threads@7266a7ce5c1df01b1c6db85bf8cd86c737dadbe7
with:
process-only: 'issues'
github-token: ${{ github.token }}
# Number of days of inactivity before a closed issue is locked.
issue-inactive-days: '14'
issue-comment: >
This thread has been automatically locked since there has not been
any recent activity after it was closed. If you are still experiencing a
similar issue, please open a new bug, including the output of
`flutter doctor -v` and a minimal reproduction of the issue.

View file

@ -0,0 +1,58 @@
name: Sync stable CHANGELOG to master
on:
push:
branches: [stable]
paths:
- 'CHANGELOG.md'
jobs:
merge-changelog:
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
steps:
- name: Setup Repository
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
with:
repository: ${{ github.repository }}
ref: master
- name: Configure git
run: |
git config user.name "[bot] Merge Changelog"
git config user.email "<>"
- name: Read CHANGELOG.md from the stable branch
id: read_stable_changelog
run: |
CHANGELOG_CONTENT=$(git show origin/stable:CHANGELOG.md)
echo "CHANGELOG_CONTENT<<EOF" >> $GITHUB_ENV
echo "$CHANGELOG_CONTENT" >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
- name: Prepare PR branch and commit changes
id: prepare_pr_branch
run: |
PR_BRANCH="sync-changelog-stable-to-master-$(date +%s)"
echo "pr_branch_name=$PR_BRANCH" >> "$GITHUB_OUTPUT"
git checkout -b "$PR_BRANCH" master
echo "${{ env.CHANGELOG_CONTENT }}" > CHANGELOG.md
git add CHANGELOG.md
git commit -m "Sync CHANGELOG.md from stable"
git push origin "$PR_BRANCH"
- name: Create Pull Request
env:
GH_TOKEN: ${{ github.token }}
run: |
PR_HEAD_BRANCH=${{ steps.prepare_pr_branch.outputs.pr_branch_name }}
gh pr create \
--base master \
--head "$PR_HEAD_BRANCH" \
--title "Sync CHANGELOG.md from stable" \
--body "This PR automates the synchronization of \`CHANGELOG.md\` from the \`stable\` branch to the \`master\` branch." \
--label autosubmit

28
.flutter/.github/workflows/mirror.yml vendored Normal file
View file

@ -0,0 +1,28 @@
# Copyright 2013 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.
# Mirror master to main branches in the flutter repository.
on:
push:
branches:
- 'master'
# Declare default permissions as read only.
permissions: read-all
jobs:
mirror_job:
permissions:
pull-requests: write
runs-on: ubuntu-latest
if: ${{ github.repository == 'flutter/flutter' }}
name: Mirror master branch to main branch
steps:
- name: Mirror action step
id: mirror
uses: google/mirror-branch-action@30c52ee21f5d3bd7fb28b95501c11aae7f17eebb
with:
github-token: ${{ secrets.FLUTTERMIRRORINGBOT_TOKEN }}
source: 'master'
dest: 'main'

View file

@ -0,0 +1,44 @@
# Copyright 2013 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.
name: No Response
# Both `issue_comment` and `scheduled` event types are required for this Action
# to work properly.
on:
issue_comment:
types: [created]
schedule:
# Schedule for five minutes after the hour, every hour
- cron: '5 * * * *'
# By specifying the access of one of the scopes, all of those that are not
# specified are set to 'none'.
permissions:
issues: write
jobs:
noResponse:
runs-on: ubuntu-latest
if: ${{ github.repository == 'flutter/flutter' }}
steps:
- uses: godofredoc/no-response@0ce2dc0e63e1c7d2b87752ceed091f6d32c9df09
with:
token: ${{ github.token }}
# Comment to post when closing an Issue for lack of response. Set to `false` to disable
closeComment: >
Without additional information, we are unfortunately not sure how to
resolve this issue. We are therefore reluctantly going to close this
bug for now.
If you find this problem please file a new issue with the same description,
what happens, logs and the output of 'flutter doctor -v'. All system setups
can be slightly different so it's always better to open new issues and reference
the related ones.
Thanks for your contribution.
# Number of days of inactivity before an issue is closed for lack of response.
daysUntilClose: 21
# Label requiring a response.
responseRequiredLabel: "waiting for customer response"

View file

@ -0,0 +1,30 @@
name: Tool tests general - experiment
on:
pull_request:
branches: [master]
paths:
- '.github/workflows/tool-test-general.yml'
- 'dev/**'
- 'packages/flutter_tools/**'
- 'bin/**'
- '.ci.yaml'
- 'engine/**'
- 'DEPS'
push:
branches: [master]
jobs:
Linux_tool-tests-general:
permissions:
contents: read
runs-on: ubuntu-latest
steps:
# Note: we must check out the tree for the composite action to be available
- uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
- uses: ./.github/actions/composite-flutter-setup
- name: Tool Test
run: |
SHARD=tool_tests SUBSHARD=general dart --enable-asserts dev/bots/test.dart

165
.flutter/.gitignore vendored Normal file
View file

@ -0,0 +1,165 @@
# Do not remove or rename entries in this file, only add new ones
# See https://github.com/flutter/flutter/issues/128635 for more context.
# Miscellaneous
*.class
*.lock
*.log
*.pyc
*.swp
.DS_Store
.atom/
.buildlog/
.history
.svn/
# As packages are no longer pinned, we use a lockfile for testing locally.
# When unpinning packages, Using lockfiles ensures that failures in PRs are
# actually due to those PRs, not due to a package being updated.
!/pubspec.lock
# IntelliJ related
*.iml
*.ipr
*.iws
.idea/
# Visual Studio Code related
.classpath
.project
.settings/
.vscode/*
.ccls-cache
# This file, on the master branch, should never exist or be checked-in.
#
# On a *final* release branch, that is, what will ship to stable or beta, the
# file can be force added (git add --force) and checked-in in order to effectively
# "pin" the engine artifact version so the flutter tool does not need to use git
# to determine the engine artifacts.
#
# See https://github.com/flutter/flutter/blob/main/docs/tool/Engine-artifacts.md.
/bin/internal/engine.version
# Flutter repo-specific
/bin/cache/
/bin/internal/bootstrap.bat
/bin/internal/bootstrap.sh
/bin/internal/engine.realm
/bin/mingit/
/dev/benchmarks/mega_gallery/
/dev/bots/.recipe_deps
/dev/bots/android_tools/
/dev/devicelab/ABresults*.json
/dev/docs/doc/
/dev/docs/api_docs.zip
/dev/docs/flutter.docs.zip
/dev/docs/lib/
/dev/docs/pubspec.yaml
/dev/integration_tests/**/xcuserdata
/dev/integration_tests/**/Pods
/packages/flutter/coverage/
version
analysis_benchmark.json
# packages file containing multi-root paths
.packages.generated
# Flutter/Dart/Pub related
**/doc/api/
.dart_tool/
.flutter-plugins-dependencies
**/generated_plugin_registrant.dart
.packages
.pub-preload-cache/
.pub-cache/
.pub/
build/
flutter_*.png
linked_*.ds
unlinked.ds
unlinked_spec.ds
# Android related
**/android/**/gradle-wrapper.jar
.gradle/
**/android/captures/
**/android/gradlew
**/android/gradlew.bat
**/android/**/GeneratedPluginRegistrant.java
**/android/key.properties
*.jks
local.properties
**/.cxx/
# iOS/XCode related
**/ios/**/*.mode1v3
**/ios/**/*.mode2v3
**/ios/**/*.moved-aside
**/ios/**/*.pbxuser
**/ios/**/*.perspectivev3
**/ios/**/*sync/
**/ios/**/.sconsign.dblite
**/ios/**/.tags*
**/ios/**/.vagrant/
**/ios/**/DerivedData/
**/ios/**/Icon?
**/ios/**/Pods/
**/ios/**/.symlinks/
**/ios/**/profile
**/ios/**/xcuserdata
**/ios/.generated/
**/ios/Flutter/.last_build_id
**/ios/Flutter/App.framework
**/ios/Flutter/Flutter.framework
**/ios/Flutter/Flutter.podspec
**/ios/Flutter/Generated.xcconfig
**/ios/Flutter/ephemeral
**/ios/Flutter/app.flx
**/ios/Flutter/app.zip
**/ios/Flutter/flutter_assets/
**/ios/Flutter/flutter_export_environment.sh
**/ios/ServiceDefinitions.json
**/ios/Runner/GeneratedPluginRegistrant.*
# macOS
**/Flutter/ephemeral/
**/Pods/
**/macos/Flutter/GeneratedPluginRegistrant.swift
**/macos/Flutter/ephemeral
**/xcuserdata/
# Windows
**/windows/flutter/ephemeral/
**/windows/flutter/generated_plugin_registrant.cc
**/windows/flutter/generated_plugin_registrant.h
**/windows/flutter/generated_plugins.cmake
# Linux
**/linux/flutter/ephemeral/
**/linux/flutter/generated_plugin_registrant.cc
**/linux/flutter/generated_plugin_registrant.h
**/linux/flutter/generated_plugins.cmake
# Coverage
coverage/
# Symbols
app.*.symbols
# Exceptions to above rules.
!**/ios/**/default.mode1v3
!**/ios/**/default.mode2v3
!**/ios/**/default.pbxuser
!**/ios/**/default.perspectivev3
!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
!/dev/ci/**/Gemfile.lock
!.vscode/settings.json
# Monorepo
.cipd
.gclient
.gclient_entries
.python-version
.gclient_previous_custom_vars
.gclient_previous_sync_commits

9
.flutter/.vscode/settings.json vendored Normal file
View file

@ -0,0 +1,9 @@
// VSCode workspace settings that are shared among all users of this project.
// This only affects subdirectories of this project.
{
"html.format.enable": false,
"githubPullRequests.ignoredPullRequestBranches": [
"master"
],
"files.trimTrailingWhitespace": true
}

139
.flutter/AUTHORS Normal file
View file

@ -0,0 +1,139 @@
# Below is a list of people and organizations that have contributed
# to the Flutter project. Names should be added to the list like so:
#
# Name/Organization <email address>
#
# Anyone who has contributed to the Flutter project in any way (not
# limited to submitting PRs) is welcome to submit a PR to add their
# name to this file.
#
# Thanks to everyone for your contributions!
Google Inc.
The Chromium Authors
The Fuchsia Authors
Jim Simon <jim.j.simon@gmail.com>
Lex Berezhny <lex@damoti.com>
Wyatt Arent <hello@wyatt.ninja>
Michael Perrotte <mikemimik@gmail.com>
Günter Zöchbauer <guenter@gzoechbauer.com>
Raju Bitter <rajubitter@gmail.com>
Michael Beckler <mcbeckler@gmail.com>
Alexandre Ardhuin <alexandre.ardhuin@gmail.com>
Luke Freeman <luke@goposse.com>
Vincent Le Quéméner <eu.lequem@gmail.com>
Mike Hoolehan <mike@hoolehan.com>
German Saprykin <saprykin.h@gmail.com>
Stefano Rodriguez <hlsroddy@gmail.com>
Yusuke Konishi <yahpeycoy0403@gmail.com>
Fredrik Simón <fredrik@fsimon.net>
Ali Bitek <alibitek@protonmail.ch>
Tetsuhiro Ueda <najeira@gmail.com>
Dan Field <dfield@gmail.com>
Noah Groß <gross@ngsger.de>
Victor Choueiri <victor@ctrlanddev.com>
Christian Mürtz <teraarts@t-online.de>
Lukasz Piliszczuk <lukasz@intheloup.io>
Felix Schmidt <felix.free@gmx.de>
Artur Rymarz <artur.rymarz@gmail.com>
Chema Molins <chemamolins@gmail.com>
Stefan Mitev <mr.mitew@gmail.com>
Jasper van Riet <jaspervanriet@gmail.com>
Mattijs Fuijkschot <mattijs.fuijkschot@gmail.com>
Volodymyr Lykhonis <vladimirlichonos@gmail.com>
TruongSinh Tran-Nguyen <i@truongsinh.pro>
Sander Dalby Larsen <srdlarsen@gmail.com>
Marco Scannadinari <m@scannadinari.co.uk>
Frederik Schweiger <mail@flschweiger.net>
Martin Staadecker <machstg@gmail.com>
Igor Katsuba <katsuba.igor@gmail.com>
Diego Velásquez <diego.velasquez.lopez@gmail.com>
Simon Lightfoot <simon@devangels.london>
Sarbagya Dhaubanjar <mail@sarbagyastha.com.np>
Rody Davis Jr <rody.davis.jr@gmail.com>
Robin Jespersen <info@unitedpartners.de>
Jefferson Quesado <jeff.quesado@gmail.com>
Mark Diener <rpzrpzrpz@gmail.com>
Alek Åström <alek.astrom@gmail.com>
Efthymios Sarpmpanis <e.sarbanis@gmail.com>
Cédric Wyss <cedi.wyss@gmail.com>
Michel Feinstein <michel@feinstein.com.br>
Michael Lee <ckmichael8@gmail.com>
Katarina Sheremet <katarina@sheremet.ch>
Nicolas Schneider <nioncode+git@gmail.com>
Mikhail Zotyev <mbixjkee1392@gmail.com>
Maria Melnik <melnikmk@gmail.com>
Ayush Bherwani <ayush.bherwani1998@gmail.com>
Luke Cheng <chengludev@gmail.com>
Brian Wang <xinlei966@gmail.com>
法的空间 <zmtzawqlp@live.com>
CaiJingLong <cjl_spy@163.com>
Alex Li <alexv.525.li@gmail.com>
Ram Navan <hiramprasad@gmail.com>
meritozh <ah841814092@gmail.com>
Terrence Addison Tandijono(flotilla) <terrenceaddison32@gmail.com>
YeungKC <flutter@yeungkc.com>
Nobuhiro Tabuki <japanese.around30@gmail.com>
nt4f04uNd <nt4f04und@gmail.com>
Anurag Roy <anuragr9847@gmail.com>
Andrey Kabylin <andrey@kabylin.ru>
vimerzhao <vimerzhao@gmail.com>
Pedro Massango <pedromassango.developer@gmail.com>
Hidenori Matsubayashi <Hidenori.Matsubayashi@sony.com>
Perqin Xie <perqinxie@gmail.com>
Seongyun Kim <helloworld@cau.ac.kr>
Ludwik Trammer <ludwik@gmail.com>
J-P Nurmi <jpnurmi@gmail.com>
Marian Triebe <m.triebe@live.de>
Alexis Rouillard <contact@arouillard.fr>
Mirko Mucaria <skogsfrae@gmail.com>
Karol Czeryna <karol.czeryna@gmail.com>
Callum Moffat <callum@moffatman.com>
Koutaro Mori <koutaro.mo@gmail.com>
Sergei Smitskoi <sergflutterdev@gmail.com>
Casey Rogers <caseycrogers@berkeley.edu>
Pradumna Saraf <pradumnasaraf@gmail.com>
Kai Yu <yk3372@gmail.com>
Denis Grafov <grafov.denis@gmail.com>
TheOneWithTheBraid <the-one@with-the-braid.cf>
Alberto Miola <betoman96@gmail.com>
Twin Sun, LLC <google-contrib@twinsunsolutions.com>
Taskulu LDA <contributions@taskulu.com>
Jonathan Joelson <jon@joelson.co>
Elsabe Ros <hello@elsabe.dev>
Nguyễn Phúc Lợi <nploi1998@gmail.com>
Jingyi Chen <jingyichen@link.cuhk.edu.cn>
Junhua Lin <1075209054@qq.com>
Tomasz Gucio <tgucio@gmail.com>
Jason C.H <ctrysbita@outlook.com>
Hubert Jóźwiak <hjozwiakdx@gmail.com>
David Neuy <quantjump@gmail.com>
Eli Albert <crasowas@gmail.com>
Jan Kuß <jan@kuss.dev>
André Sousa <andrelvsousa@gmail.com>
Bartek Pacia <barpac02@gmail.com>
Mike Rydstrom <m.rydstrom@gmail.com>
Harish Anbalagan <warriorharish95668@gmail.com>
Kim Jiun <kkimj@hanyang.ac.kr>
LinXunFeng <linxunfeng@yeah.net>
Sabin Neupane <sabin.neupane26@gmail.com>
Mahdi Bagheri <1839491@gmail.com>
Mok Kah Wai <taboosun1996@gmail.com>
Lucas Saudon <lsaudon@gmail.com>
Om Phatak <everythingoutdated@gmail.com>
Amir Panahandeh <amirpanahandeh@gmail.com>
Kostiantyn Sokolovskyi <sokolovskyi.konstantin@gmail.com>
Valentin Vignal <valentin.vignal.dev@outlook.fr>
Cedric Vanden Bosch <cedvdb@youvision.dev>
Flop <kukuzuo@gmail.com>
Dimil Kalathiya <kalathiyadimil@gmail.com>
Nate Wilson <nate.w5687@gmail.com>
dy0gu <support@dy0gu.com>
Albert Wolszon <albert@wolszon.me>
Mohammed Chahboun <m97.chahboun@gmail.com>
Abdessalem Mohellebi <mohellebiabdessalem@gmail.com>
Jin Jeongsu <jinjs.dev@gmail.com>
Mairon Slusarz <maironlucaslusarz@gmail.com>
Ricardo Dalarme <ricardodalarme@outlook.com>
yiiim <ybz975218925@live.com>
letrungdo <letrdo@gmail.com>

1034
.flutter/CHANGELOG.md Normal file

File diff suppressed because it is too large Load diff

37
.flutter/CODEOWNERS Normal file
View file

@ -0,0 +1,37 @@
# Below is a list of Flutter team members' GitHub handles who are
# suggested reviewers for contributions to this repository.
#
# These names are just suggestions. It is fine to have your changes
# reviewed by someone else.
#
# Use git ls-files '<pattern>' without a / prefix to see the list of matching files.
/engine/src/build/config/ios/** @vashworth
/packages/flutter_tools/templates/module/ios/ @vashworth
/packages/flutter_tools/templates/**/Podfile* @vashworth
/packages/flutter_tools/lib/src/ios/ @vashworth
# Internal dev infra that is closely tied to team-infra.
/bin/internal/** @jtmcdole
/dev/tools/test/** @jtmcdole
# The following files define an Application Binary Interface (ABI) that must maintain
# both forward and backward compatibility. Changes should be heavily
# scrutinized as mistakes are irreversible.
/engine/src/flutter/shell/platform/embedder/embedder.h @chinmaygarde @loic-sharma
/engine/src/flutter/shell/platform/embedder/tests/embedder_frozen.h @chinmaygarde @loic-sharma
# Android team - keep this synced with .github/labeler.yml's team-android section.
/docs/platform/android/** @flutter/android-reviewers
/engine/src/flutter/shell/platform/android/** @flutter/android-reviewers
/packages/flutter_tools/**/*android* @flutter/android-reviewers
/packages/flutter_tools/**/*gradle* @flutter/android-reviewers
# iOS team - keep this synced with .github/labeler.yml's team-ios section.
/engine/src/flutter/shell/platform/darwin/common/ @flutter/ios-reviewers
/engine/src/flutter/shell/platform/darwin/ios/framework/ @flutter/ios-reviewers
/packages/flutter_tools/**/ios/* @flutter/ios-reviewers
/packages/flutter_tools/**/macos/* @flutter/ios-reviewers
/packages/flutter_tools/**/*xcode* @flutter/ios-reviewers
/packages/flutter_tools/**/*ios* @flutter/ios-reviewers
/packages/flutter_tools/**/*macos* @flutter/ios-reviewers

View file

@ -0,0 +1,52 @@
<!-- when updating this file also update https://github.com/flutter/.github/blob/main/CODE_OF_CONDUCT.md -->
# Code of conduct
The Flutter project expects Flutter's contributors to act professionally
and respectfully. Flutter contributors are expected to maintain the safety
and dignity of Flutter's social environments (such as GitHub and Discord).
Specifically:
* Respect people, their identities, their culture, and their work.
* Be kind. Be courteous. Be welcoming.
* Listen. Consider and acknowledge people's points before responding.
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).
The Flutter project will not tolerate harassment in Flutter's
community, even outside of Flutter's public communication channels.
## Conflict resolution
When multiple contributors disagree on the direction for a particular
patch or the general direction of the project, the conflict should be
resolved by communication. The people who disagree should get
together, try to understand each other's points of view, and work to
find a design that addresses everyone's concerns.
This is usually sufficient to resolve issues. If you cannot come to an
agreement, ask for the advice of a more senior member of the project.
Be wary of agreement by attrition, where one person argues a point
repeatedly until other participants give up in the interests of moving
on. This is not conflict resolution, as it does not address everyone's
concerns. Be wary of agreement by compromise, where two good competing
solutions are merged into one mediocre solution. A conflict is
addressed when the participants agree that the final solution is
_better_ than all the conflicting proposals. Sometimes the solution is
more work than either of the proposals. [Embrace the yak shave](./docs/contributing/Style-guide-for-Flutter-repo.md#lazy-programming).
## Questions
It's always ok to ask questions. Our systems are large, and nobody will be
an expert in all the systems. Once you find the answer, document it in
the first place you looked. That way, the next person will be brought
up to speed even quicker.
!["I try not to make fun of people for admitting they don't know things, because for each thing 'everyone knows' by the time they're adults, every day there are, on average, 10,000 people in the US hearing about it for the first time. If I make fun of people, I train them not to tell me when they have those moments. And I miss out on the fun." "Diet coke and mentos thing? What's that?" "Oh, man! We're going to the grocery store." "Why?" "You're one of today's lucky 10,000."](https://imgs.xkcd.com/comics/ten_thousand.png)
Source: _[xkcd, May 2012](https://xkcd.com/1053/)_

211
.flutter/CONTRIBUTING.md Normal file
View file

@ -0,0 +1,211 @@
<!-- when editing this file also update https://github.com/flutter/.github/blob/main/CONTRIBUTING.md -->
Contributing to Flutter
=======================
_tl;dr: join [Discord](./docs/contributing/Chat.md), be [courteous](CODE_OF_CONDUCT.md), follow the steps below to set up a development environment; if you stick around and contribute, you can [join the team](./docs/contributing/Contributor-access.md) and get commit access._
Welcome
-------
We invite you to join the Flutter team, which is made up of volunteers and sponsored folk alike!
There are many ways to contribute, including writing code, filing issues on GitHub, helping people
on our mailing lists, our chat channels, or on Stack Overflow, helping to triage, reproduce, or
fix bugs that people have filed, adding to our documentation,
doing outreach about Flutter, or helping out in any other way.
We grant commit access (which includes full rights to the issue
database, such as being able to edit labels) to people who have gained
our trust and demonstrated a commitment to Flutter. For more details
see the [Contributor access](./docs/contributing/Contributor-access.md)
page in our docs.
We communicate primarily over GitHub and [Discord](./docs/contributing/Chat.md).
Before you get started, we encourage you to read these documents which describe some of our community norms:
1. [Our code of conduct](CODE_OF_CONDUCT.md), which stipulates explicitly
that everyone must be gracious, respectful, and professional. This
also documents our conflict resolution policy and encourages people
to ask questions.
2. [Values](./docs/about/Values.md),
which talks about what we care most about.
Helping out in the issue database
---------------------------------
Triage is the process of going through bug reports and determining if they are valid, finding out
how to reproduce them, catching duplicate reports, and generally making our issues list
useful for our engineers.
If you want to help us triage, you are very welcome to do so!
1. Join the #hackers-triage [Discord channel](./docs/contributing/Chat.md).
2. Read [our code of conduct](CODE_OF_CONDUCT.md), which stipulates explicitly
that everyone must be gracious, respectful, and professional. If you're helping out
with triage, you are representing the Flutter team, and so you want to make sure to
make a good impression!
3. Help out as described in our [triage guide](./docs/triage/README.md)
You won't be able to add labels at first, so instead start by trying to
do the other steps, e.g. trying to reproduce the problem and asking for people to
provide enough details that you can reproduce the problem, pointing out duplicates,
and so on. Chat on the #hackers-triage channel to let us know what you're up to!
4. Familiarize yourself with our
[issue hygiene](./docs/contributing/issue_hygiene/README.md) wiki page,
which covers the meanings of some important GitHub labels and
milestones.
5. Once you've been doing this for a while, someone will invite you to the flutter-hackers
team on GitHub and you'll be able to add labels too. See the
[contributor access](./docs/contributing/Contributor-access.md) wiki
page for details.
Quality Assurance
-----------------
One of the most useful tasks, closely related to triage, is finding and filing bug reports. Testing
beta releases, looking for regressions, creating test cases, adding to our test suites, and
other work along these lines can really drive the quality of the product up. Creating tests
that increase our test coverage, writing tests for issues others have filed, all these tasks
are really valuable contributions to open source projects.
If this interests you, you can jump in and submit bug reports without needing anyone's permission!
The #quality-assurance channel on our [Discord server](./docs/contributing/Chat.md)
is a good place to talk about what you're doing. We're especially eager for QA testing when
we announce a beta release. See [quality assurance](./docs/releases/Quality-Assurance.md) for
more details.
If you want to contribute test cases, you can also submit PRs. See the next section
for how to set up your development environment, or ask in #hackers-test on Discord.
> As a personal side note, this is exactly the kind of work that first got me into open
> source. I was a Quality Assurance volunteer on the Mozilla project, writing test cases for
> browsers, long before I wrote a line of code for any open source project. —Hixie
Developing for Flutter
----------------------
If you prefer to write code, consider starting with the list of good
first issues for [Flutter][flutter-gfi] or for [Flutter DevTools][devtools-gfi].
Reference the respective sections below for further instructions.
[flutter-gfi]: https://github.com/flutter/flutter/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22
[devtools-gfi]: https://github.com/flutter/devtools/labels/good%20first%20issue
### Framework and Engine
To develop for Flutter, you will eventually need to become familiar
with our processes and conventions. This section lists the documents
that describe these methodologies. The following list is ordered: you
are strongly recommended to go through these documents in the order
presented.
1. [Setting up your engine development environment](./docs/engine/contributing/Setting-up-the-Engine-development-environment.md),
which describes the steps you need to configure your computer to
work on Flutter's engine. If you only want to write code for the
Flutter framework, you can skip this step. Flutter's engine mainly
uses C++, Java, and Objective-C.
2. [Setting up your framework development environment](./docs/contributing/Setting-up-the-Framework-development-environment.md),
which describes the steps you need to configure your computer to
work on Flutter's framework. Flutter's framework mainly uses Dart.
3. [Tree hygiene](./docs/contributing/Tree-hygiene.md),
which covers how to land a PR, how to do code review, how to
handle breaking changes, how to handle regressions, and how to
handle post-commit test failures.
4. [Our style guide](./docs/contributing/Style-guide-for-Flutter-repo.md),
which includes advice for designing APIs for Flutter, and how to
format code in the framework.
5. [Flutter design doc template](https://flutter.dev/go/template),
which should be used when proposing a new technical design. This is a good
practice to do before coding more intricate changes.
See also our [guidance for writing design docs](./docs/contributing/Design-Documents.md).
[![How to contribute to Flutter](https://img.youtube.com/vi/4yBgOBAOx_A/0.jpg)](https://www.youtube.com/watch?v=4yBgOBAOx_A)
In addition to the documents, there is a video linked above on **How to contribute to Flutter**
from the [Flutter](https://youtube.com/c/flutterdev) YouTube channel,
there are many pages in [our docs](./docs/README.md),
and an article [Contributing to Flutter: Getting Started](https://medium.com/@ayushbherwani/contributing-to-flutter-getting-started-a0db68cbcd5b)
on Medium that may be of interest. For a curated list of pages see the sidebar
on the wiki's home page. They are more or less listed in order of importance.
### DevTools
Contributing code to Dart & Flutter DevTools may be a good place to start if you are
looking to dip your toes into contributing with a relatively low-cost setup or if you
are generally excited about improving the Dart & Flutter developer experience.
Please see the DevTools [CONTRIBUTING.md](https://github.com/flutter/devtools/blob/master/CONTRIBUTING.md)
guide to get started.
### Helping with existing PRs
Once you've learned the process of contributing, if you aren't sure what to work on next you
might be interested in helping other developers complete their contributions by picking up an
incomplete patch from the list of [issues with partial patches][has-partial-patch].
[has-partial-patch]: https://github.com/flutter/flutter/labels/has%20partial%20patch
Outreach
--------
If your interests lie in the direction of developer relations and developer outreach,
whether advocating for Flutter, answering questions in fora like
[Stack Overflow](https://stackoverflow.com/questions/tagged/flutter?sort=Newest&filters=NoAnswers,NoAcceptedAnswer&edited=true)
or [Reddit](https://www.reddit.com/r/flutterhelp/new/?f=flair_name%3A%22OPEN%22),
or creating content for our [documentation](https://docs.flutter.dev/)
or sites like [YouTube](https://www.youtube.com/results?search_query=flutter&sp=EgQIAxAB),
the best starting point is to join the #hackers-devrel [Discord channel](./docs/contributing/Chat.md).
From there, you can describe what you're interested in doing, and go ahead and do it!
As others become familiar with your work, they may have feedback, be interested in
collaborating, or want to coordinate their efforts with yours.
API documentation
-----------------
Another great area to contribute in is sample code and API documentation. If this is an area that interests you, join our
[Discord](./docs/contributing/Chat.md) server and introduce yourself on the #hackers-devrel, #hackers-framework,
or #hackers-engine channels, describing your area of interest. As our API docs are integrated into our source code, see the
"developing for Flutter" section above for a guide on how to set up your developer environment.
To contribute API documentation, an excellent command of the English language is particularly helpful, as is a careful attention to detail.
We have a [whole section in our style guide](./docs/contributing/Style-guide-for-Flutter-repo.md#documentation-dartdocs-javadocs-etc)
that you should read before you write API documentation. It includes notes on the "Flutter Voice", such as our word and grammar conventions.
In general, a really productive way to improve documentation is to use Flutter and stop any time you have a question: find the answer, then
document the answer where you first looked for it.
We also keep [a list of areas that need better API documentation](https://github.com/flutter/flutter/issues?q=is%3Aopen+is%3Aissue+label%3A%22d%3A+api+docs%22+sort%3Areactions-%2B1-desc).
In many cases, we have written down what needs to be said in the relevant issue, we just haven't gotten around to doing it!
We're especially eager to add sample code and diagrams to our API documentation. Diagrams are generated from Flutter code that
draws to a canvas, and stored in a [special repository](https://github.com/flutter/assets-for-api-docs/#readme). It can be a lot of fun
to create new diagrams for the API docs.
Releases
--------
If you are interested in participating in our release process, which may involve writing release notes and blog posts, coordinating the actual
generation of binaries, updating our release tooling, and other work of that nature, then reach out on the #hackers-releases
channel of our [Discord](./docs/contributing/Chat.md) server.
Social events in the contributor community
------------------------------------------
Finally, one area where you could have a lot of impact is in contributing to social interactions among the Flutter contributor community itself.
This could take the form of organizing weekly video chats on our Discord, or planning tech talks from contributors, for example.
If this is an area that is of interest to you, please join our [Discord](./docs/contributing/Chat.md) and ping Hixie on the #hackers
channel!

991
.flutter/DEPS Normal file
View file

@ -0,0 +1,991 @@
# The dependencies referenced by the Flutter Engine.
#
# This file is referenced by the .gclient file at the root of the checkout.
# To preview changes to the dependencies, update this file and run
# `gclient sync`.
#
# When adding a new dependency, please update the top-level .gitignore file
# to list the dependency's destination directory.
vars = {
'android_git': 'https://android.googlesource.com',
'chromium_git': 'https://chromium.googlesource.com',
'swiftshader_git': 'https://swiftshader.googlesource.com',
'dart_git': 'https://dart.googlesource.com',
'flutter_git': 'https://flutter.googlesource.com',
'skia_git': 'https://skia.googlesource.com',
'llvm_git': 'https://llvm.googlesource.com',
'skia_revision': '837be28dd21818d2169e1e6789e89e771a55f01d',
# WARNING: DO NOT EDIT canvaskit_cipd_instance MANUALLY
# See `lib/web_ui/README.md` for how to roll CanvasKit to a new version.
'canvaskit_cipd_instance': '61aeJQ9laGfEFF_Vlc_u0MCkqB6xb2hAYHRBxKH-Uw4C',
# Do not download the Emscripten SDK by default.
# This prevents us from downloading the Emscripten toolchain for builds
# which do not build for the web. This toolchain is needed to build CanvasKit
# for the web engine.
'download_emsdk': False,
# For experimental features some dependencies may only be avaialable in the master/main
# channels. This variable is being set when CI is checking out the repository.
'release_candidate': False,
# As Dart does, we use Fuchsia's GN and Clang toolchain. These revision
# should be kept up to date with the revisions pulled by Dart.
#
# The list of revisions for these tools comes from Fuchsia, here:
# https://fuchsia.googlesource.com/integration/+/HEAD/toolchain
# If there are problems with the toolchain, contact fuchsia-toolchain@.
#
# Note, if you are *manually* rolling clang (i.e. the auto-roll is disabled)
# you'll need to run post-submits (i.e. for Clang Tidy) in order to test that
# updates to Clang Tidy will not turn the tree red.
#
# See https://github.com/flutter/flutter/wiki/Engine-presubmits-and-postsubmits#post-submit
'clang_version': 'git_revision:8c7a2ce01a77c96028fe2c8566f65c45ad9408d3',
'reclient_version': 're_client_version:0.185.0.db415f21-gomaip',
'gcloud_version': 'version:2@444.0.0.chromium.3',
'esbuild_version': '0.19.5',
# When updating the Dart revision, ensure that all entries that are
# dependencies of Dart are also updated to match the entries in the
# Dart SDK's DEPS file for that revision of Dart. The DEPS file for
# Dart is: https://github.com/dart-lang/sdk/blob/main/DEPS
# You can use //tools/dart/create_updated_flutter_deps.py to produce
# updated revision list of existing dependencies. You will need to
# gclient sync before and after update deps to ensure all deps are updated.
# updated revision list of existing dependencies.
'dart_revision': '1a420a3f9a9ae64426d90b711cf1e6d73e953f23',
# WARNING: DO NOT EDIT MANUALLY
# The lines between blank lines above and below are generated by a script. See create_updated_flutter_deps.py
'dart_ai_rev': 'a3a196bf4773c7a7a9f93b6798232fb0d8220bc3',
'dart_binaryen_rev': '6ec7b5f9c615d3b224c67ae221d6812c8f8e1a96',
'dart_boringssl_rev': '9f138d05879fcf61965d1ea9d6c8b2cfc8bc12cb',
'dart_core_rev': 'cbb485437c61d37753bcc98818beca54d5b38f69',
'dart_devtools_rev': 'c13b1e172794a71ffe9436a5cfe0a0a9d7509d78',
'dart_ecosystem_rev': 'eac66d93142907b39f2271647c111f36ff3365b9',
'dart_http_rev': 'a22386e9c390290c916d1c53a3d3c1447ec120ce',
'dart_i18n_rev': 'dd8a792a8492370a594706c8304d2eb8db844d7a',
'dart_libprotobuf_rev': '24487dd1045c7f3d64a21f38a3f0c06cc4cf2edb',
'dart_perfetto_rev': '13ce0c9e13b0940d2476cd0cff2301708a9a2e2b',
'dart_protobuf_gn_rev': 'ca669f79945418f6229e4fef89b666b2a88cbb10',
'dart_protobuf_rev': '9e30258e0aa6a6430ee36c84b75308a9702fde42',
'dart_pub_rev': 'bc20c071806565606f6650e0260104b4a5c14fa8',
'dart_sync_http_rev': '6666fff944221891182e1f80bf56569338164d72',
'dart_tools_rev': '87270e60a5c92f127acb29d6e0dbc2d920c3f669',
'dart_vector_math_rev': '70a9a2cb610d040b247f3ca2cd70a94c1c6f6f23',
'dart_web_rev': '35fc98dd8f9da175ed0a2dcf246299e922e1e1e2',
'dart_webdev_rev': '234e44c2ba0aa6cee5a36026538ca89457bf0d55',
'dart_webdriver_rev': '09104f459ed834d48b132f6b7734923b1fbcf2e9',
'dart_webkit_inspection_protocol_rev': '0f7685804d77ec02c6564d7ac1a6c8a2341c5bdf',
'ocmock_rev': 'c4ec0e3a7a9f56cfdbd0aa01f4f97bb4b75c5ef8', # v3.7.1
# Download a prebuilt Dart SDK by default
'download_dart_sdk': True,
# Download a prebuilt esbuild by default
'download_esbuild': True,
# Checkout Android dependencies only on platforms where we build for Android targets.
'download_android_deps': 'host_os == "mac" or (host_os == "linux" and host_cpu == "x64")',
# Checkout Java dependencies only on platforms that do not have java installed on path.
'download_jdk': True,
# Checkout Windows dependencies only if we are building on Windows.
'download_windows_deps' : 'host_os == "win"',
# Checkout Linux dependencies only when building on Linux.
'download_linux_deps': 'host_os == "linux"',
# Checkout Fuchsia dependencies only on Linux. This is the umbrella flag which
# controls the behavior of all fuchsia related flags. I.e. any fuchsia related
# logic or condition may not work if this flag is False.
# TODO(zijiehe): Make this condition more strict to only download fuchsia
# dependencies when necessary: b/40935282
'download_fuchsia_deps': 'host_os == "linux"',
# Downloads the fuchsia SDK as listed in fuchsia_sdk_path var. This variable
# is currently only used for the Fuchsia LSC process and is not intended for
# local development.
'download_fuchsia_sdk': False,
'fuchsia_sdk_path': '',
# Whether to download and run the Fuchsia emulator locally to test Fuchsia
# builds.
'run_fuchsia_emu': False,
# An LLVM backend needs LLVM binaries and headers. To avoid build time
# increases we can use prebuilts. We don't want to download this on every
# CQ/CI bot nor do we want the average Dart developer to incur that cost.
# So by default we will not download prebuilts. This variable is needed in
# the flutter engine to ensure that Dart gn has access to it as well.
"checkout_llvm": False,
# Setup Git hooks by default.
'setup_githooks': True,
# When this is true, the Flutter Engine's configuration files and scripts for
# RBE will be downloaded from CIPD. This option is only usable by Googlers.
'use_rbe': False,
# Upstream URLs for third party dependencies, used in
# determining common ancestor commit for vulnerability scanning
# prefixed with 'upstream_' in order to be identified by parsing tool.
# The vulnerability database being used in this scan can be browsed
# using this UI https://osv.dev/list
# If a new dependency needs to be added, the upstream (non-mirrored)
# git URL for that dependency should be added to this list
# with the key-value pair being:
# 'upstream_[dep name from last slash and before .git in URL]':'[git URL]'
# example:
"upstream_abseil-cpp": "https://github.com/abseil/abseil-cpp.git",
"upstream_angle": "https://github.com/google/angle.git",
"upstream_archive": "https://github.com/brendan-duncan/archive.git",
"upstream_benchmark": "https://github.com/google/benchmark.git",
"upstream_boringssl": "https://github.com/openssl/openssl.git",
"upstream_brotli": "https://github.com/google/brotli.git",
"upstream_dart_style": "https://github.com/dart-lang/dart_style.git",
"upstream_dartdoc": "https://github.com/dart-lang/dartdoc.git",
"upstream_equatable": "https://github.com/felangel/equatable.git",
"upstream_ffi": "https://github.com/dart-lang/ffi.git",
"upstream_flatbuffers": "https://github.com/google/flatbuffers.git",
"upstream_freetype2": "https://gitlab.freedesktop.org/freetype/freetype.git",
"upstream_gcloud": "https://github.com/dart-lang/gcloud.git",
"upstream_glfw": "https://github.com/glfw/glfw.git",
"upstream_googleapis": "https://github.com/google/googleapis.dart.git",
"upstream_googletest": "https://github.com/google/googletest.git",
"upstream_gtest-parallel": "https://github.com/google/gtest-parallel.git",
"upstream_harfbuzz": "https://github.com/harfbuzz/harfbuzz.git",
"upstream_http": "https://github.com/dart-lang/http.git",
"upstream_icu": "https://github.com/unicode-org/icu.git",
"upstream_imgui": "https://github.com/ocornut/imgui.git",
"upstream_inja": "https://github.com/pantor/inja.git",
"upstream_json": "https://github.com/nlohmann/json.git",
"upstream_libcxx": "https://github.com/llvm-mirror/libcxx.git",
"upstream_libcxxabi": "https://github.com/llvm-mirror/libcxxabi.git",
"upstream_libexpat": "https://github.com/libexpat/libexpat.git",
"upstream_libjpeg-turbo": "https://github.com/libjpeg-turbo/libjpeg-turbo.git",
"upstream_libpng": "https://github.com/glennrp/libpng.git",
"upstream_libtess2": "https://github.com/memononen/libtess2.git",
"upstream_libwebp": "https://chromium.googlesource.com/webm/libwebp.git",
"upstream_leak_tracker": "https://github.com/dart-lang/leak_tracker.git",
"upstream_mockito": "https://github.com/dart-lang/mockito.git",
"upstream_ocmock": "https://github.com/erikdoe/ocmock.git",
"upstream_packages": "https://github.com/flutter/packages.git",
"upstream_process_runner": "https://github.com/google/process_runner.git",
"upstream_process": "https://github.com/google/process.dart.git",
"upstream_protobuf": "https://github.com/google/protobuf.dart.git",
"upstream_pub_semver": "https://github.com/dart-lang/pub_semver.git",
"upstream_pub": "https://github.com/dart-lang/pub.git",
"upstream_pyyaml": "https://github.com/yaml/pyyaml.git",
"upstream_quiver-dart": "https://github.com/google/quiver-dart.git",
"upstream_rapidjson": "https://github.com/Tencent/rapidjson.git",
"upstream_sdk": "https://github.com/dart-lang/sdk.git",
"upstream_shaderc": "https://github.com/google/shaderc.git",
"upstream_shelf": "https://github.com/dart-lang/shelf.git",
"upstream_skia": "https://skia.googlesource.com/skia.git",
"upstream_sqlite": "https://github.com/sqlite/sqlite.git",
"upstream_SwiftShader": "https://swiftshader.googlesource.com/SwiftShader.git",
"upstream_tar": "https://github.com/simolus3/tar.git",
"upstream_test": "https://github.com/dart-lang/test.git",
"upstream_usage": "https://github.com/dart-lang/usage.git",
"upstream_vector_math": "https://github.com/google/vector_math.dart.git",
"upstream_VulkanMemoryAllocator": "https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git",
"upstream_webdev": "https://github.com/dart-lang/webdev.git",
"upstream_webkit_inspection_protocol": "https://github.com/google/webkit_inspection_protocol.dart.git",
"upstream_wuffs-mirror-release-c": "https://github.com/google/wuffs-mirror-release-c.git",
"upstream_yapf": "https://github.com/google/yapf.git",
"upstream_zlib": "https://github.com/madler/zlib.git",
# The version / instance id of the cipd:chromium/fuchsia/test-scripts which
# will be used altogether with fuchsia-sdk to setup the build / test
# environment.
'fuchsia_test_scripts_version': 'nR2ESa1Gd8yPcWo063yCqGBh6aAsLcwhgsRPFU0I0v0C',
# The version / instance id of the cipd:chromium/fuchsia/gn-sdk which will be
# used altogether with fuchsia-sdk to generate gn based build rules.
'fuchsia_gn_sdk_version': 'NAEC5tfgSl8g94nwpKsGtNMEdbiAlgwrNa9XQ7cIcbcC',
}
gclient_gn_args_file = 'engine/src/flutter/third_party/dart/build/config/gclient_args.gni'
gclient_gn_args = [
'checkout_llvm'
]
# Only these hosts are allowed for dependencies in this DEPS file.
# If you need to add a new host, contact chrome infrastructure team.
allowed_hosts = [
'boringssl.googlesource.com',
'chrome-infra-packages.appspot.com',
'chromium.googlesource.com',
'dart.googlesource.com',
'flutter.googlesource.com',
'llvm.googlesource.com',
'skia.googlesource.com',
'swiftshader.googlesource.com',
]
deps = {
'engine/src/flutter/third_party/depot_tools':
Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '580b4ff3f5cd0dcaa2eacda28cefe0f45320e8f7',
'engine/src/flutter/third_party/rapidjson':
Var('flutter_git') + '/third_party/rapidjson' + '@' + 'ef3564c5c8824989393b87df25355baf35ff544b',
'engine/src/flutter/third_party/harfbuzz':
Var('flutter_git') + '/third_party/harfbuzz' + '@' + 'ea6a172f84f2cbcfed803b5ae71064c7afb6b5c2',
'engine/src/flutter/third_party/libcxx':
Var('llvm_git') + '/llvm-project/libcxx' + '@' + 'bd557f6f764d1e40b62528a13b124ce740624f8f',
'engine/src/flutter/third_party/libcxxabi':
Var('llvm_git') + '/llvm-project/libcxxabi' + '@' + 'a4dda1589d37a7e4b4f7a81ebad01b1083f2e726',
'engine/src/flutter/third_party/llvm_libc':
Var('llvm_git') + '/llvm-project/libc' + '@' + '5af39a19a1ad51ce93972cdab206dcd3ff9b6afa',
'engine/src/flutter/third_party/glfw':
Var('flutter_git') + '/third_party/glfw' + '@' + 'dd8a678a66f1967372e5a5e3deac41ebf65ee127',
'engine/src/flutter/third_party/shaderc':
Var('chromium_git') + '/external/github.com/google/shaderc' + '@' + '37e25539ce199ecaf19fb7f7d27818716d36686d',
'engine/src/flutter/third_party/vulkan-deps':
Var('chromium_git') + '/vulkan-deps' + '@' + 'a9e2ca3b57aba86a22a2df1b84bf12f8cc98806e',
'engine/src/flutter/third_party/flatbuffers':
Var('chromium_git') + '/external/github.com/google/flatbuffers' + '@' + '067bfdbde9b10c1beb5d6b02d67ae9db8b96f736',
'engine/src/flutter/third_party/icu':
Var('chromium_git') + '/chromium/deps/icu.git' + '@' + 'a86a32e67b8d1384b33f8fa48c83a6079b86f8cd',
'engine/src/flutter/third_party/gtest-parallel':
Var('chromium_git') + '/external/github.com/google/gtest-parallel' + '@' + '38191e2733d7cbaeaef6a3f1a942ddeb38a2ad14',
'engine/src/flutter/third_party/benchmark':
Var('chromium_git') + '/external/github.com/google/benchmark' + '@' + '431abd149fd76a072f821913c0340137cc755f36',
'engine/src/flutter/third_party/googletest':
Var('chromium_git') + '/external/github.com/google/googletest' + '@' + '7f036c5563af7d0329f20e8bb42effb04629f0c0',
'engine/src/flutter/third_party/re2':
Var('chromium_git') + '/external/github.com/google/re2' + '@' + 'c84a140c93352cdabbfb547c531be34515b12228',
'engine/src/flutter/third_party/brotli':
Var('skia_git') + '/external/github.com/google/brotli.git' + '@' + '350100a5bb9d9671aca85213b2ec7a70a361b0cd',
'engine/src/flutter/third_party/yapf':
Var('flutter_git') + '/third_party/yapf' + '@' + '212c5b5ad8e172d2d914ae454c121c89cccbcb35',
'engine/src/flutter/third_party/boringssl/src':
'https://boringssl.googlesource.com/boringssl.git' + '@' + Var('dart_boringssl_rev'),
'engine/src/flutter/third_party/protobuf':
Var('flutter_git') + '/third_party/protobuf' + '@' + Var('dart_libprotobuf_rev'),
# TODO(67373): These are temporarily checked in, but this dep can be restored
# once the buildmoot is completed.
# 'engine/src/flutter/build/secondary/third_party/protobuf':
# Var('flutter_git') + '/third_party/protobuf-gn' + '@' + Var('dart_protobuf_gn_rev'),
'engine/src/flutter/third_party/dart':
Var('dart_git') + '/sdk.git' + '@' + Var('dart_revision'),
# WARNING: Unused Dart dependencies in the list below till "WARNING:" marker are removed automatically - see create_updated_flutter_deps.py.
'engine/src/flutter/third_party/dart/third_party/binaryen/src':
Var('chromium_git') + '/external/github.com/WebAssembly/binaryen.git' + '@' + Var('dart_binaryen_rev'),
'engine/src/flutter/third_party/dart/third_party/devtools':
{'dep_type': 'cipd', 'packages': [{'package': 'dart/third_party/flutter/devtools', 'version': 'git_revision:c13b1e172794a71ffe9436a5cfe0a0a9d7509d78'}]},
'engine/src/flutter/third_party/dart/third_party/perfetto/src':
Var('android_git') + '/platform/external/perfetto' + '@' + Var('dart_perfetto_rev'),
'engine/src/flutter/third_party/dart/third_party/pkg/ai':
Var('dart_git') + '/ai.git' + '@' + Var('dart_ai_rev'),
'engine/src/flutter/third_party/dart/third_party/pkg/core':
Var('dart_git') + '/core.git' + '@' + Var('dart_core_rev'),
'engine/src/flutter/third_party/dart/third_party/pkg/dart_style':
Var('dart_git') + '/dart_style.git@e8190bf2242654daee7ebf21fd6d8c8046989822',
'engine/src/flutter/third_party/dart/third_party/pkg/dartdoc':
Var('dart_git') + '/dartdoc.git@6d1aa6f5045c33d3723aba05e3e0dc1403b763c0',
'engine/src/flutter/third_party/dart/third_party/pkg/ecosystem':
Var('dart_git') + '/ecosystem.git' + '@' + Var('dart_ecosystem_rev'),
'engine/src/flutter/third_party/dart/third_party/pkg/http':
Var('dart_git') + '/http.git' + '@' + Var('dart_http_rev'),
'engine/src/flutter/third_party/dart/third_party/pkg/i18n':
Var('dart_git') + '/i18n.git' + '@' + Var('dart_i18n_rev'),
'engine/src/flutter/third_party/dart/third_party/pkg/leak_tracker':
Var('dart_git') + '/leak_tracker.git@f5620600a5ce1c44f65ddaa02001e200b096e14c',
'engine/src/flutter/third_party/dart/third_party/pkg/native':
Var('dart_git') + '/native.git@9a11537944f2ee295df46104624fb714c3dd7741',
'engine/src/flutter/third_party/dart/third_party/pkg/protobuf':
Var('dart_git') + '/protobuf.git' + '@' + Var('dart_protobuf_rev'),
'engine/src/flutter/third_party/dart/third_party/pkg/pub':
Var('dart_git') + '/pub.git' + '@' + Var('dart_pub_rev'),
'engine/src/flutter/third_party/dart/third_party/pkg/shelf':
Var('dart_git') + '/shelf.git@dd830a0338b31bee92fe7ebc20b9bb963403b6b0',
'engine/src/flutter/third_party/dart/third_party/pkg/sync_http':
Var('dart_git') + '/sync_http.git' + '@' + Var('dart_sync_http_rev'),
'engine/src/flutter/third_party/dart/third_party/pkg/tar':
Var('dart_git') + '/external/github.com/simolus3/tar.git@13479f7c2a18f499e840ad470cfcca8c579f6909',
'engine/src/flutter/third_party/dart/third_party/pkg/test':
Var('dart_git') + '/test.git@f95c0f5c10fa9af35014117cb00ec17d2a117265',
'engine/src/flutter/third_party/dart/third_party/pkg/tools':
Var('dart_git') + '/tools.git' + '@' + Var('dart_tools_rev'),
'engine/src/flutter/third_party/dart/third_party/pkg/vector_math':
Var('dart_git') + '/external/github.com/google/vector_math.dart.git' + '@' + Var('dart_vector_math_rev'),
'engine/src/flutter/third_party/dart/third_party/pkg/web':
Var('dart_git') + '/web.git' + '@' + Var('dart_web_rev'),
'engine/src/flutter/third_party/dart/third_party/pkg/webdev':
Var('dart_git') + '/webdev.git' + '@' + Var('dart_webdev_rev'),
'engine/src/flutter/third_party/dart/third_party/pkg/webdriver':
Var('dart_git') + '/external/github.com/google/webdriver.dart.git' + '@' + Var('dart_webdriver_rev'),
'engine/src/flutter/third_party/dart/third_party/pkg/webkit_inspection_protocol':
Var('dart_git') + '/external/github.com/google/webkit_inspection_protocol.dart.git' + '@' + Var('dart_webkit_inspection_protocol_rev'),
'engine/src/flutter/third_party/dart/tools/sdks/dart-sdk':
{'dep_type': 'cipd', 'packages': [{'package': 'dart/dart-sdk/${{platform}}', 'version': 'git_revision:782552bdddc112c62db28ec7e9b2763f4457a3ea'}]},
# WARNING: end of dart dependencies list that is cleaned up automatically - see create_updated_flutter_deps.py.
# Prebuilt Dart SDK of the same revision as the Dart SDK source checkout
'engine/src/flutter/prebuilts/linux-x64/dart-sdk': {
'packages': [
{
'package': 'flutter/dart-sdk/linux-amd64',
'version': 'git_revision:'+Var('dart_revision')
}
],
'dep_type': 'cipd',
'condition': 'host_os == "linux" and download_dart_sdk'
},
'engine/src/flutter/prebuilts/linux-arm64/dart-sdk': {
'packages': [
{
'package': 'flutter/dart-sdk/linux-arm64',
'version': 'git_revision:'+Var('dart_revision')
}
],
'dep_type': 'cipd',
'condition': 'host_os == "linux" and download_dart_sdk'
},
'engine/src/flutter/prebuilts/macos-x64/dart-sdk': {
'packages': [
{
'package': 'flutter/dart-sdk/mac-amd64',
'version': 'git_revision:'+Var('dart_revision')
}
],
'dep_type': 'cipd',
'condition': 'host_os == "mac" and download_dart_sdk'
},
'engine/src/flutter/prebuilts/macos-arm64/dart-sdk': {
'packages': [
{
'package': 'flutter/dart-sdk/mac-arm64',
'version': 'git_revision:'+Var('dart_revision')
}
],
'dep_type': 'cipd',
'condition': 'host_os == "mac" and download_dart_sdk'
},
'engine/src/flutter/prebuilts/windows-x64/dart-sdk': {
'packages': [
{
'package': 'flutter/dart-sdk/windows-amd64',
'version': 'git_revision:'+Var('dart_revision')
}
],
'dep_type': 'cipd',
'condition': 'host_os == "win" and download_dart_sdk'
},
'engine/src/flutter/prebuilts/windows-arm64/dart-sdk': {
'packages': [
{
'package': 'flutter/dart-sdk/windows-arm64',
'version': 'git_revision:'+Var('dart_revision')
}
],
'dep_type': 'cipd',
'condition': 'host_os == "win" and download_dart_sdk'
},
# esbuild download
'engine/src/flutter/prebuilts/linux-x64/esbuild': {
'packages': [
{
'package': 'flutter/tools/esbuild/linux-amd64',
'version': Var('esbuild_version')
}
],
'dep_type': 'cipd',
'condition': 'host_os == "linux" and download_esbuild'
},
'engine/src/flutter/prebuilts/macos-x64/esbuild': {
'packages': [
{
'package': 'flutter/tools/esbuild/mac-amd64',
'version': Var('esbuild_version')
}
],
'dep_type': 'cipd',
'condition': 'host_os == "mac" and download_esbuild'
},
'engine/src/flutter/prebuilts/macos-arm64/esbuild': {
'packages': [
{
'package': 'flutter/tools/esbuild/mac-arm64',
'version': Var('esbuild_version')
}
],
'dep_type': 'cipd',
'condition': 'host_os == "mac" and download_esbuild'
},
'engine/src/flutter/prebuilts/windows-x64/esbuild': {
'packages': [
{
'package': 'flutter/tools/esbuild/windows-amd64',
'version': Var('esbuild_version')
}
],
'dep_type': 'cipd',
'condition': 'host_os == "win" and download_esbuild'
},
'engine/src/flutter/third_party/expat':
Var('chromium_git') + '/external/github.com/libexpat/libexpat.git' + '@' + '8e49998f003d693213b538ef765814c7d21abada',
'engine/src/flutter/third_party/freetype2':
Var('flutter_git') + '/third_party/freetype2' + '@' + 'bfc3453fdc85d87b45c896f68bf2e49ebdaeef0a',
'engine/src/flutter/third_party/skia':
Var('skia_git') + '/skia.git' + '@' + Var('skia_revision'),
'engine/src/flutter/third_party/ocmock':
Var('flutter_git') + '/third_party/ocmock' + '@' + Var('ocmock_rev'),
'engine/src/flutter/third_party/libjpeg-turbo/src':
Var('flutter_git') + '/third_party/libjpeg-turbo' + '@' + '0fb821f3b2e570b2783a94ccd9a2fb1f4916ae9f',
'engine/src/flutter/third_party/libpng':
Var('flutter_git') + '/third_party/libpng' + '@' + 'f139fd5d80944f5453b079672e50f32ca98ef076',
'engine/src/flutter/third_party/libwebp':
Var('chromium_git') + '/webm/libwebp.git' + '@' + 'ca332209cb5567c9b249c86788cb2dbf8847e760', # 1.3.2
'engine/src/flutter/third_party/wuffs':
Var('skia_git') + '/external/github.com/google/wuffs-mirror-release-c.git' + '@' + '600cd96cf47788ee3a74b40a6028b035c9fd6a61',
'engine/src/flutter/third_party/zlib':
Var('chromium_git') + '/chromium/src/third_party/zlib.git' + '@' + '7d77fb7fd66d8a5640618ad32c71fdeb7d3e02df',
'engine/src/flutter/third_party/cpu_features/src':
Var('chromium_git') + '/external/github.com/google/cpu_features.git' + '@' + '936b9ab5515dead115606559502e3864958f7f6e',
'engine/src/flutter/third_party/inja':
Var('flutter_git') + '/third_party/inja' + '@' + '88bd6112575a80d004e551c98cf956f88ff4d445',
'engine/src/flutter/third_party/libtess2':
Var('flutter_git') + '/third_party/libtess2' + '@' + '725e5e08ec8751477565f1d603fd7eb9058c277c',
'engine/src/flutter/third_party/sqlite':
Var('flutter_git') + '/third_party/sqlite' + '@' + '0f61bd2023ba94423b4e4c8cfb1a23de1fe6a21c',
'engine/src/flutter/third_party/pyyaml':
Var('flutter_git') + '/third_party/pyyaml.git' + '@' + '03c67afd452cdff45b41bfe65e19a2fb5b80a0e8',
'engine/src/flutter/third_party/swiftshader':
Var('swiftshader_git') + '/SwiftShader.git' + '@' + '794b0cfce1d828d187637e6d932bae484fbe0976',
'engine/src/flutter/third_party/angle':
Var('flutter_git') + '/third_party/angle' + '@' + '6950c6c99fa1a2d653922871ede6679d74840289',
'engine/src/flutter/third_party/vulkan_memory_allocator':
Var('chromium_git') + '/external/github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator' + '@' + 'c788c52156f3ef7bc7ab769cb03c110a53ac8fcb',
'engine/src/third_party/abseil-cpp':
Var('chromium_git') + '/chromium/src/third_party/abseil-cpp' + '@' + '564023aa53767b5f60b3a556f0a025b7b7e8241e',
# Dart packages
'engine/src/flutter/third_party/pkg/archive':
Var('chromium_git') + '/external/github.com/brendan-duncan/archive.git' + '@' + 'f1d164f8f5d8aea0be620a9b1e8d300b75a29388', # 3.6.1
'engine/src/flutter/third_party/pkg/equatable':
Var('flutter_git') + '/third_party/equatable.git' + '@' + '2117551ff3054f8edb1a58f63ffe1832a8d25623', # 2.0.5
'engine/src/flutter/third_party/pkg/flutter_packages':
Var('flutter_git') + '/mirrors/packages' + '@' + '25454e63851fe7933f04d025606e68c1eac4fe0f', # various
'engine/src/flutter/third_party/pkg/gcloud':
Var('flutter_git') + '/third_party/gcloud.git' + '@' + 'a5276b85c4714378e84b1fb478b8feeeb686ac26', # 0.8.6-dev
'engine/src/flutter/third_party/pkg/googleapis':
Var('flutter_git') + '/third_party/googleapis.dart.git' + '@' + '526011f56d98eab183cc6075ee1392e8303e43e2', # various
'engine/src/flutter/third_party/pkg/io':
Var('flutter_git') + '/third_party/io.git' + '@' + '997a6243aad20af4238147d9ec00bf638b9169af', # 1.0.5-wip
'engine/src/flutter/third_party/pkg/node_preamble':
Var('flutter_git') + '/third_party/node_preamble.dart.git' + '@' + '47245865175929ec452d8058e563c267b64c3d64', # 2.0.2
'engine/src/flutter/third_party/pkg/process':
Var('dart_git') + '/process.dart' + '@' + '0c9aeac86dcc4e3a6cf760b76fed507107e244d5', # 4.2.1
'engine/src/flutter/third_party/pkg/process_runner':
Var('flutter_git') + '/third_party/process_runner.git' + '@' + 'f24c69efdcaf109168f23d381fa281453d2bc9b1', # 4.1.2
'engine/src/flutter/third_party/pkg/vector_math':
Var('dart_git') + '/external/github.com/google/vector_math.dart.git' + '@' + '0a5fd95449083d404df9768bc1b321b88a7d2eef', # 2.1.0
'engine/src/flutter/third_party/imgui':
Var('flutter_git') + '/third_party/imgui.git' + '@' + '3ea0fad204e994d669f79ed29dcaf61cd5cb571d',
'engine/src/flutter/third_party/json':
Var('flutter_git') + '/third_party/json.git' + '@' + '17d9eacd248f58b73f4d1be518ef649fe2295642',
'engine/src/flutter/third_party/gradle': {
'packages': [
{
# See tools/gradle/README.md for update instructions.
# Version here means the CIPD tag.
'version': 'version:8.11.1',
'package': 'flutter/gradle'
}
],
'condition': 'download_android_deps',
'dep_type': 'cipd'
},
'engine/src/flutter/third_party/android_tools/trace_to_text': {
'packages': [
{
# 25.0 downloads for both mac-amd64 and mac-arm64
# 26.1 is not found with either platform
# 27.1 is the latest release of perfetto
'version': 'git_tag:v25.0',
'package': 'perfetto/trace_to_text/${{platform}}'
}
],
'condition': 'download_android_deps',
'dep_type': 'cipd'
},
'engine/src/flutter/third_party/android_tools/google-java-format': {
'packages': [
{
'package': 'flutter/android/google-java-format',
'version': 'version:1.7-1'
}
],
# We want to be able to format these as part of CI, and the CI step that
# checks formatting runs without downloading the rest of the Android build
# tooling. Therefore unlike all the other Android-related tools, we want to
# download this every time.
'dep_type': 'cipd',
},
'engine/src/flutter/third_party/android_tools': {
'packages': [
{
'package': 'flutter/android/sdk/all/${{platform}}',
'version': 'version:36v8unmodified'
}
],
'condition': 'download_android_deps',
'dep_type': 'cipd',
},
'engine/src/flutter/third_party/android_embedding_dependencies': {
'packages': [
{
'package': 'flutter/android/embedding_bundle',
'version': 'last_updated:2025-10-15T09:53:03-0700'
}
],
'condition': 'download_android_deps',
'dep_type': 'cipd',
},
'engine/src/flutter/third_party/java/openjdk': {
'packages': [
{
'package': 'flutter/java/openjdk/${{platform}}',
'version': 'version:21'
}
],
# Always download the JDK since java is required for running the formatter.
'dep_type': 'cipd',
},
'engine/src/flutter/third_party/gn': {
'packages': [
{
'package': 'gn/gn/${{platform}}',
'version': 'git_revision:81b24e01531ecf0eff12ec9359a555ec3944ec4e'
},
],
'dep_type': 'cipd',
},
'third_party/ninja': {
'packages': [
{
'package': 'infra/3pp/tools/ninja/${{platform}}',
'version': 'version:2@1.11.1.chromium.4',
}
],
'dep_type': 'cipd',
},
'engine/src/flutter/prebuilts/emsdk': {
'url': Var('skia_git') + '/external/github.com/emscripten-core/emsdk.git' + '@' + '2514ec738de72cebbba7f4fdba0cf2fabcb779a5',
'condition': 'download_emsdk',
},
# Clang on mac and linux are expected to typically be the same revision.
# They are separated out so that the autoroller can more easily manage them.
'engine/src/flutter/buildtools/mac-x64/clang': {
'packages': [
{
'package': 'fuchsia/third_party/clang/mac-amd64',
'version': Var('clang_version'),
}
],
'condition': 'host_os == "mac"', # On ARM64 Macs too because Goma doesn't support the host-arm64 toolchain.
'dep_type': 'cipd',
},
'engine/src/flutter/buildtools/mac-arm64/clang': {
'packages': [
{
'package': 'fuchsia/third_party/clang/mac-arm64',
'version': Var('clang_version'),
}
],
'condition': 'host_os == "mac" and host_cpu == "arm64"',
'dep_type': 'cipd',
},
'engine/src/flutter/buildtools/linux-x64/clang': {
'packages': [
{
'package': 'fuchsia/third_party/clang/linux-amd64',
'version': Var('clang_version'),
}
],
'condition': 'host_os == "linux" or host_os == "mac"',
'dep_type': 'cipd',
},
'engine/src/flutter/buildtools/linux-arm64/clang': {
'packages': [
{
'package': 'fuchsia/third_party/clang/linux-arm64',
'version': Var('clang_version'),
}
],
'condition': 'host_os == "linux" and host_cpu == "arm64"',
'dep_type': 'cipd',
},
'engine/src/flutter/buildtools/windows-x64/clang': {
'packages': [
{
'package': 'fuchsia/third_party/clang/windows-amd64',
'version': Var('clang_version'),
}
],
'condition': 'download_windows_deps',
'dep_type': 'cipd',
},
# RBE binaries and configs.
'engine/src/flutter/buildtools/linux-x64/reclient': {
'packages': [
{
'package': 'infra/rbe/client/${{platform}}',
'version': Var('reclient_version'),
}
],
'condition': 'use_rbe and host_os == "linux" and host_cpu == "x64"',
'dep_type': 'cipd',
},
'engine/src/flutter/buildtools/mac-arm64/reclient': {
'packages': [
{
'package': 'infra/rbe/client/${{platform}}',
'version': Var('reclient_version'),
}
],
'condition': 'use_rbe and host_os == "mac" and host_cpu == "arm64"',
'dep_type': 'cipd',
},
'engine/src/flutter/buildtools/mac-x64/reclient': {
'packages': [
{
'package': 'infra/rbe/client/${{platform}}',
'version': Var('reclient_version'),
}
],
'condition': 'use_rbe and host_os == "mac" and host_cpu == "x64"',
'dep_type': 'cipd',
},
'engine/src/flutter/buildtools/windows-x64/reclient': {
'packages': [
{
'package': 'infra/rbe/client/${{platform}}',
'version': Var('reclient_version'),
}
],
'condition': 'use_rbe and download_windows_deps',
'dep_type': 'cipd',
},
'engine/src/flutter/build/rbe': {
'packages': [
{
'package': 'flutter_internal/rbe/reclient_cfgs',
'version': 'LNMZdvF2Y86Dq05IWthtVJ_PswIFSRiywIHrkfHhelUC',
}
],
'condition': 'use_rbe',
'dep_type': 'cipd',
},
# gcloud
'engine/src/flutter/buildtools/linux-x64/gcloud': {
'packages': [
{
'package': 'infra/3pp/tools/gcloud/${{platform}}',
'version': Var('gcloud_version'),
}
],
'condition': 'use_rbe and host_os == "linux" and host_cpu == "x64"',
'dep_type': 'cipd',
},
'engine/src/flutter/buildtools/mac-arm64/gcloud': {
'packages': [
{
'package': 'infra/3pp/tools/gcloud/${{platform}}',
'version': Var('gcloud_version'),
}
],
'condition': 'use_rbe and host_os == "mac" and host_cpu == "arm64"',
'dep_type': 'cipd',
},
# Get the SDK from https://chrome-infra-packages.appspot.com/p/fuchsia/sdk/core at the 'latest' tag
# Get the toolchain from https://chrome-infra-packages.appspot.com/p/fuchsia/clang at the 'goma' tag
'engine/src/third_party/fuchsia-sdk/sdk': {
'packages': [
{
'package': 'fuchsia/sdk/core/linux-amd64',
'version': 'rxeg-6UB678HKJ4UQLCcLXWIpyiqp3-AZhNclbbePEkC'
}
],
'condition': 'download_fuchsia_deps and not download_fuchsia_sdk',
'dep_type': 'cipd',
},
'engine/src/flutter/tools/fuchsia/test_scripts': {
'packages': [
{
'package': 'chromium/fuchsia/test-scripts',
'version': Var('fuchsia_test_scripts_version'),
}
],
'condition': 'download_fuchsia_deps',
'dep_type': 'cipd',
},
'engine/src/flutter/tools/fuchsia/gn-sdk': {
'packages': [
{
'package': 'chromium/fuchsia/gn-sdk',
'version': Var('fuchsia_gn_sdk_version'),
}
],
'condition': 'download_fuchsia_deps',
'dep_type': 'cipd',
},
'engine/src/flutter/third_party/google_fonts_for_unit_tests': {
'packages': [
{
'package': 'flutter/flutter_font_fallbacks',
'version': '44bd38be0bc8c189a397ca6dd6f737746a9e0c6117b96a8f84f1edf6acd1206b'
}
],
'dep_type': 'cipd',
}
}
recursedeps = [
'engine/src/flutter/third_party/vulkan-deps',
]
hooks = [
{
# Generate the Dart SDK's .dart_tool/package_confg.json file.
'name': 'Generate .dart_tool/package_confg.json',
'pattern': '.',
'action': ['python3', 'engine/src/flutter/third_party/dart/tools/generate_package_config.py'],
},
{
# Generate the sdk/version file.
'name': 'Generate sdk/version',
'pattern': '.',
'action': ['python3', 'engine/src/flutter/third_party/dart/tools/generate_sdk_version_file.py'],
},
{
# Update the Windows toolchain if necessary.
'name': 'win_toolchain',
'condition': 'download_windows_deps',
'pattern': '.',
'action': ['python3', 'engine/src/build/vs_toolchain.py', 'update'],
},
{
'name': 'dia_dll',
'pattern': '.',
'condition': 'download_windows_deps',
'action': [
'python3',
'engine/src/flutter/tools/dia_dll.py',
],
},
{
'name': 'linux_sysroot_x64',
'pattern': '.',
'condition': 'download_linux_deps',
'action': [
'python3',
'engine/src/build/linux/sysroot_scripts/install-sysroot.py',
'--arch=x64'],
},
{
'name': 'linux_sysroot_arm64',
'pattern': '.',
'condition': 'download_linux_deps',
'action': [
'python3',
'engine/src/build/linux/sysroot_scripts/install-sysroot.py',
'--arch=arm64'],
},
{
'name': 'linux_sysroot_riscv64',
'pattern': '.',
'condition': 'download_linux_deps',
'action': [
'python3',
'engine/src/build/linux/sysroot_scripts/install-sysroot.py',
'--arch=riscv64'],
},
{
'name': 'pub get --offline',
'pattern': '.',
'action': [
'python3',
'engine/src/flutter/tools/pub_get_offline.py',
]
},
{
'name': 'Download Fuchsia SDK',
'pattern': '.',
'condition': 'download_fuchsia_deps and download_fuchsia_sdk',
'action': [
'python3',
'engine/src/flutter/tools/download_fuchsia_sdk.py',
'--fail-loudly',
'--verbose',
'--host-os',
Var('host_os'),
'--fuchsia-sdk-path',
Var('fuchsia_sdk_path'),
]
},
{
'name': 'Activate Emscripten SDK',
'pattern': '.',
'condition': 'download_emsdk',
'action': [
'python3',
'engine/src/flutter/tools/activate_emsdk.py',
]
},
{
'name': 'Setup githooks',
'pattern': '.',
'condition': 'setup_githooks',
'action': [
'python3',
'engine/src/flutter/tools/githooks/setup.py',
]
},
{
'name': 'Download Fuchsia system images',
'pattern': '.',
'condition': 'run_fuchsia_emu',
'action': [
'env',
'DOWNLOAD_FUCHSIA_SDK={download_fuchsia_sdk}',
'FUCHSIA_SDK_PATH={fuchsia_sdk_path}',
'python3',
'engine/src/flutter/tools/fuchsia/with_envs.py',
'engine/src/flutter/tools/fuchsia/test_scripts/update_product_bundles.py',
'terminal.x64,terminal.qemu-arm64',
]
},
# The following script checks if it is running in the LUCI environment,
# and does nothing if so. This is because Xcode is not yet installed in CI
# when this hook is run.
{
'name': 'Find the iOS and macOS SDKs',
'pattern': '.',
'condition': 'host_os == "mac"',
'action': [
'python3',
'engine/src/build/mac/darwin_sdk.py',
'--as-gclient-hook'
]
},
{
'name': 'Generate Fuchsia GN build rules',
'pattern': '.',
'condition': 'download_fuchsia_deps',
'action': [
'python3',
'engine/src/flutter/tools/fuchsia/with_envs.py',
'engine/src/flutter/tools/fuchsia/test_scripts/gen_build_defs.py',
],
},
]

25
.flutter/LICENSE Normal file
View file

@ -0,0 +1,25 @@
Copyright 2014 The Flutter Authors. All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.
* Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

17
.flutter/PATENT_GRANT Normal file
View file

@ -0,0 +1,17 @@
Google hereby grants to you a perpetual, worldwide, non-exclusive,
no-charge, royalty-free, irrevocable (except as stated in this
section) patent license to make, have made, use, offer to sell, sell,
import, transfer, and otherwise run, modify and propagate the contents
of this implementation, where such license applies only to those
patent claims, both currently owned by Google and acquired in the
future, licensable by Google that are necessarily infringed by this
implementation. This grant does not include claims that would be
infringed only as a consequence of further modification of this
implementation. If you or your agent or exclusive licensee institute
or order or agree to the institution of patent litigation or any other
patent enforcement activity against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that this
implementation constitutes direct or contributory patent infringement,
or inducement of patent infringement, then any patent rights granted
to you under this License for this implementation shall terminate as
of the date such litigation is filed.

127
.flutter/README.md Normal file
View file

@ -0,0 +1,127 @@
<a href="https://flutter.dev/">
<h1 align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://storage.googleapis.com/cms-storage-bucket/6e19fee6b47b36ca613f.png">
<img alt="Flutter" src="https://storage.googleapis.com/cms-storage-bucket/c823e53b3a1a7b0d36a9.png">
</picture>
</h1>
</a>
[![Flutter CI Status](https://flutter-dashboard.appspot.com/api/public/build-status-badge?repo=flutter)](https://flutter-dashboard.appspot.com/#/build?repo=flutter)
[![Discord badge][]][Discord instructions]
[![Twitter handle][]][Twitter badge]
[![BlueSky badge][]][BlueSky handle]
[![codecov](https://codecov.io/gh/flutter/flutter/branch/master/graph/badge.svg?token=11yDrJU2M2)](https://codecov.io/gh/flutter/flutter)
[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/5631/badge)](https://bestpractices.coreinfrastructure.org/projects/5631)
[![SLSA 1](https://slsa.dev/images/gh-badge-level1.svg)](https://slsa.dev)
Flutter is Google's SDK for crafting beautiful, fast user experiences for
mobile, web, and desktop from a single codebase. Flutter works with existing
code, is used by developers and organizations around the world, and is free and
open source.
## Documentation
* [Install Flutter](https://docs.flutter.dev/get-started)
* [Flutter documentation](https://docs.flutter.dev)
* [Development wiki](./docs/README.md)
* [Contributing to Flutter](https://github.com/flutter/flutter/blob/main/CONTRIBUTING.md)
For release and other announcements, join the
[flutter-announce](https://groups.google.com/g/flutter-announce)
mailing list. Our documentation also tracks [breaking
changes](https://docs.flutter.dev/release/breaking-changes) across releases.
## Terms of service
The Flutter tool may occasionally download resources from Google servers. By
downloading or using the Flutter SDK, you agree to the Google Terms of Service:
https://policies.google.com/terms
For example, when installed from GitHub (as opposed to from a prepackaged
archive), the Flutter tool will download the Dart SDK from Google servers
immediately when first run, as it is used to execute the `flutter` tool itself.
This will also occur when Flutter is upgraded (e.g. by running the `flutter
upgrade` command).
## About Flutter
We think Flutter will help you create beautiful, fast apps, with a productive,
extensible and open development model, whether you're targeting iOS or Android,
web, Windows, macOS, Linux or embedding it as the UI toolkit for a platform of
your choice.
### Beautiful user experiences
We want to enable designers to deliver their full creative vision without being
forced to water it down due to limitations of the underlying framework.
Flutter's [layered architecture] gives you control over every pixel on the
screen and its powerful compositing capabilities let you overlay and animate
graphics, video, text, and controls without limitation. Flutter includes a full
[set of widgets][widget catalog] that deliver pixel-perfect experiences whether
you're building for iOS ([Cupertino]) or other platforms ([Material]), along with
support for customizing or creating entirely new visual components.
<p align="center"><img src="https://github.com/flutter/website/blob/main/site/web/assets/images/docs/homepage/reflectly-hero-600px.png?raw=true" alt="Reflectly hero image"></p>
### Fast results
Flutter is fast. It's powered by hardware-accelerated 2D graphics
libraries like [Skia] (which underpins Chrome and Android) and
[Impeller]. We architected Flutter to
support glitch-free, jank-free graphics at the native speed of your device.
Flutter code is powered by the world-class [Dart programming language], which enables
compilation to 32-bit and 64-bit ARM machine code for iOS and Android,
JavaScript and WebAssembly for the web, as well as Intel x64 and ARM
for desktop devices.
<p align="center"><img src="https://github.com/flutter/website/blob/main/site/web/assets/images/docs/homepage/dart-diagram-small.png?raw=true" alt="Dart diagram"></p>
### Productive development
Flutter offers [stateful hot reload][Hot reload], allowing you to make changes to your code
and see the results instantly without restarting your app or losing its state.
[![Hot reload animation][]][Hot reload]
### Extensible and open model
Flutter works with any development tool (or none at all), and also includes
editor plug-ins for both [Visual Studio Code] and [IntelliJ / Android Studio].
Flutter provides [tens of thousands of packages][Flutter packages] to speed your
development, regardless of your target platform. And accessing other native code
is easy, with support for both FFI ([on Android][Android FFI], [on iOS][iOS FFI],
[on macOS][macOS FFI], and [on Windows][Windows FFI]) as well as
[platform-specific APIs][platform channels].
Flutter is a fully open-source project, and we welcome contributions.
Information on how to get started can be found in our
[contributor guide](CONTRIBUTING.md).
[flutter.dev]: https://flutter.dev
[Discord instructions]: ./docs/contributing/Chat.md
[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
[BlueSky badge]: https://img.shields.io/badge/Bluesky-0285FF?logo=bluesky&logoColor=fff&label=Follow%20me%20on&color=0285FF
[BlueSky handle]: https://bsky.app/profile/flutter.dev
[layered architecture]: https://docs.flutter.dev/resources/inside-flutter
[architectural overview]: https://docs.flutter.dev/resources/architectural-overview
[widget catalog]: https://docs.flutter.dev/ui/widgets
[Cupertino]: https://docs.flutter.dev/ui/widgets/cupertino
[Material]: https://docs.flutter.dev/ui/widgets/material
[Skia]: https://skia.org/
[Dart programming language]: https://dart.dev/
[Hot reload animation]: https://github.com/flutter/website/blob/main/site/web/assets/images/docs/tools/android-studio/hot-reload.gif?raw=true
[Hot reload]: https://docs.flutter.dev/tools/hot-reload
[Visual Studio Code]: https://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter
[IntelliJ / Android Studio]: https://plugins.jetbrains.com/plugin/9212-flutter
[Flutter packages]: https://pub.dev/flutter
[Android FFI]: https://docs.flutter.dev/platform-integration/android/c-interop
[iOS FFI]: https://docs.flutter.dev/platform-integration/ios/c-interop
[macOS FFI]: https://docs.flutter.dev/platform-integration/macos/c-interop
[Windows FFI]: https://docs.flutter.dev/platform-integration/windows/building#integrating-with-windows
[platform channels]: https://docs.flutter.dev/platform-integration/platform-channels
[interop example]: https://github.com/flutter/flutter/tree/main/examples/platform_channel
[Impeller]: https://docs.flutter.dev/perf/impeller

370
.flutter/TESTOWNERS Normal file
View file

@ -0,0 +1,370 @@
# Below is a list of Flutter team members' GitHub handles who are
# test owners of this repository.
#
# These owners are mainly team leaders and their sub-teams. Please feel
# free to claim ownership by adding your handle to corresponding tests.
#
# This file will be used as a reference when new flaky bugs are filed and
# the TL will be assigned and the sub-team will be labeled by default
# for further triage.
## Linux Android DeviceLab tests
/dev/devicelab/bin/tasks/analyzer_benchmark.dart @bkonyi @flutter/tool
/dev/devicelab/bin/tasks/android_choreographer_do_frame_test.dart @reidbaker @flutter/engine
/dev/devicelab/bin/tasks/android_defines_test.dart @jesswrd @flutter/android
/dev/devicelab/bin/tasks/android_java11_dependency_smoke_tests.dart @jesswrd @flutter/android
/dev/devicelab/bin/tasks/android_java17_dependency_smoke_tests.dart @jesswrd @flutter/android
/dev/devicelab/bin/tasks/android_lifecycles_test.dart @reidbaker @flutter/engine
/dev/devicelab/bin/tasks/android_picture_cache_complexity_scoring_perf__timeline_summary.dart @flar @flutter/engine
/dev/devicelab/bin/tasks/android_stack_size_test.dart @bkonyi @flutter/tool
/dev/devicelab/bin/tasks/android_verified_input_test.dart @gmackall @flutter/android
/dev/devicelab/bin/tasks/android_view_scroll_perf__timeline_summary.dart @jtmcdole @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/animated_complex_image_filtered_perf__e2e_summary.dart @jonahwilliams @flutter/engine
/dev/devicelab/bin/tasks/animated_complex_opacity_perf__e2e_summary.dart @jonahwilliams @flutter/engine
/dev/devicelab/bin/tasks/animated_image_gc_perf.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/animated_placeholder_perf__e2e_summary.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/backdrop_filter_perf__e2e_summary.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/basic_material_app_android__compile.dart @camsim99 @flutter/tool
/dev/devicelab/bin/tasks/clipper_cache_perf__e2e_summary.dart @flar @flutter/engine
/dev/devicelab/bin/tasks/codegen_integration.dart @bkonyi @flutter/tool
/dev/devicelab/bin/tasks/color_filter_and_fade_perf__e2e_summary.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/color_filter_cache_perf__e2e_summary.dart @flar @flutter/engine
/dev/devicelab/bin/tasks/color_filter_with_unstable_child_perf__e2e_summary.dart @flar @flutter/engine
/dev/devicelab/bin/tasks/complex_layout_android__compile.dart @mboetger @flutter/tool
/dev/devicelab/bin/tasks/complex_layout_android__scroll_smoothness.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/complex_layout_scroll_perf__devtools_memory.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/complex_layout_scroll_perf_impeller__timeline_summary.dart @jonahwilliams @flutter/engine
/dev/devicelab/bin/tasks/complex_layout_scroll_perf_impeller_gles__timeline_summary.dart @jonahwilliams @flutter/engine
/dev/devicelab/bin/tasks/complex_layout_semantics_perf.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/cubic_bezier_perf__e2e_summary.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/cubic_bezier_perf_sksl_warmup__e2e_summary.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/cull_opacity_perf__e2e_summary.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/devtools_profile_start_test.dart @bkonyi @flutter/tool
/dev/devicelab/bin/tasks/draw_arcs_all_fill_styles_perf__timeline_summary.dart @b-luk @flutter/engine
/dev/devicelab/bin/tasks/draw_arcs_all_stroke_styles_perf__timeline_summary.dart @b-luk @flutter/engine
/dev/devicelab/bin/tasks/draw_atlas_perf__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_vertices_perf_opengles__timeline_summary.dart @jonahwilliams @flutter/engine
/dev/devicelab/bin/tasks/dynamic_path_stroke_tessellation_perf__timeline_summary.dart @flar @flutter/engine
/dev/devicelab/bin/tasks/dynamic_path_tessellation_perf__timeline_summary.dart @jonahwilliams @flutter/engine
/dev/devicelab/bin/tasks/embedded_android_views_integration_test.dart @gmackall @flutter/android
/dev/devicelab/bin/tasks/engine_dependency_proxy_test.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/fast_scroll_heavy_gridview__memory.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/flutter_engine_group_performance.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/flutter_gallery__back_button_memory.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/flutter_gallery__image_cache_memory.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/flutter_gallery__memory_nav.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/flutter_gallery__start_up.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/flutter_gallery__start_up_delayed.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/flutter_gallery__transition_perf.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/flutter_gallery__transition_perf_e2e.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/flutter_gallery__transition_perf_hybrid.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/flutter_gallery__transition_perf_with_semantics.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/flutter_gallery_android__compile.dart @camsim99 @flutter/tool
/dev/devicelab/bin/tasks/flutter_gallery_lazy__start_up.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/flutter_gallery_sksl_warmup__transition_perf.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/flutter_gallery_sksl_warmup__transition_perf_e2e.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/flutter_gallery_v2_chrome_run_test.dart @yjbanov @flutter/web
/dev/devicelab/bin/tasks/flutter_gallery_v2_web_compile_test.dart @yjbanov @flutter/web
/dev/devicelab/bin/tasks/flutter_test_performance.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/fullscreen_textfield_perf.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/fullscreen_textfield_perf__e2e_summary.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/gradient_consistent_perf__e2e_summary.dart @flar @flutter/engine
/dev/devicelab/bin/tasks/gradient_dynamic_perf__e2e_summary.dart @flar @flutter/engine
/dev/devicelab/bin/tasks/gradient_static_perf__e2e_summary.dart @flar @flutter/engine
/dev/devicelab/bin/tasks/gradle_java8_compile_test.dart @jesswrd @flutter/android
/dev/devicelab/bin/tasks/hot_mode_dev_cycle_linux__benchmark.dart @bkonyi @flutter/tool
/dev/devicelab/bin/tasks/hybrid_android_views_integration_test.dart @gmackall @flutter/android
/dev/devicelab/bin/tasks/image_list_jit_reported_duration.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/image_list_reported_duration.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/large_image_changer_perf_android.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/linux_chrome_dev_mode.dart @bkonyi @flutter/tool
/dev/devicelab/bin/tasks/list_text_layout_impeller_perf__e2e_summary.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/list_text_layout_perf__e2e_summary.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/multi_widget_construction_perf__e2e_summary.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/new_gallery__crane_perf.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/old_gallery__transition_perf.dart @jonahwilliams @flutter/engine
/dev/devicelab/bin/tasks/opacity_peephole_col_of_alpha_savelayer_rows_perf__e2e_summary.dart @flar @flutter/engine
/dev/devicelab/bin/tasks/opacity_peephole_col_of_rows_perf__e2e_summary.dart @flar @flutter/engine
/dev/devicelab/bin/tasks/opacity_peephole_fade_transition_text_perf__e2e_summary.dart @flar @flutter/engine
/dev/devicelab/bin/tasks/opacity_peephole_grid_of_alpha_savelayers_perf__e2e_summary.dart @flar @flutter/engine
/dev/devicelab/bin/tasks/opacity_peephole_grid_of_opacity_perf__e2e_summary.dart @flar @flutter/engine
/dev/devicelab/bin/tasks/opacity_peephole_one_rect_perf__e2e_summary.dart @flar @flutter/engine
/dev/devicelab/bin/tasks/opacity_peephole_opacity_of_grid_perf__e2e_summary.dart @flar @flutter/engine
/dev/devicelab/bin/tasks/picture_cache_perf__e2e_summary.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/platform_channels_benchmarks.dart @gaaclarke @flutter/engine
/dev/devicelab/bin/tasks/platform_views_hcpp_scroll_perf__timeline_summary.dart @jonahwilliams @flutter/engine
/dev/devicelab/bin/tasks/platform_views_scroll_perf__timeline_summary.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/platform_views_scroll_perf_impeller__timeline_summary.dart @bdero @flutter/engine
/dev/devicelab/bin/tasks/plugin_dependencies_test.dart @stuartmorgan-g @flutter/tool
/dev/devicelab/bin/tasks/routing_test.dart @bkonyi @flutter/tool
/dev/devicelab/bin/tasks/rrect_blur_perf__timeline_summary.dart @gaaclarke @flutter/engine
/dev/devicelab/bin/tasks/shader_mask_cache_perf__e2e_summary.dart @flar @flutter/engine
/dev/devicelab/bin/tasks/slider_perf_android.dart @tahatesser @flutter/framework
/dev/devicelab/bin/tasks/spell_check_test.dart @camsim99 @flutter/android
/dev/devicelab/bin/tasks/spell_check_test_ios.dart @LongCatIsLooong @flutter/ios
/dev/devicelab/bin/tasks/static_path_stroke_tessellation_perf__timeline_summary.dart @flar @flutter/engine
/dev/devicelab/bin/tasks/static_path_tessellation_perf__timeline_summary.dart @jonahwilliams @flutter/engine
/dev/devicelab/bin/tasks/textfield_perf__e2e_summary.dart @jtmcdole @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
## Windows Android DeviceLab tests
/dev/devicelab/bin/tasks/basic_material_app_win__compile.dart @bkonyi @flutter/tool
/dev/devicelab/bin/tasks/channels_integration_test_win.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/complex_layout_win__compile.dart @bkonyi @flutter/tool
/dev/devicelab/bin/tasks/flavors_test_win.dart @bkonyi @flutter/tool
/dev/devicelab/bin/tasks/flutter_gallery_win__compile.dart @bkonyi @flutter/tool
/dev/devicelab/bin/tasks/hot_mode_dev_cycle_win__benchmark.dart @bkonyi @flutter/tool
/dev/devicelab/bin/tasks/windows_chrome_dev_mode.dart @yjbanov @flutter/web
## Mac Android DeviceLab tests
/dev/devicelab/bin/tasks/android_semantics_integration_test.dart @Piinks @flutter/framework
/dev/devicelab/bin/tasks/backdrop_filter_perf__timeline_summary.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/channels_integration_test.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/color_filter_and_fade_perf__timeline_summary.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/complex_layout__start_up.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/complex_layout_scroll_perf__memory.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/complex_layout_scroll_perf__timeline_summary.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/cubic_bezier_perf__timeline_summary.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/cubic_bezier_perf_sksl_warmup__timeline_summary.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/cull_opacity_perf__timeline_summary.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/drive_perf_debug_warning.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/external_textures_integration_test.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/fading_child_animation_perf__timeline_summary.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/fast_scroll_large_images__memory.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/flavors_test.dart @bkonyi @flutter/tool
/dev/devicelab/bin/tasks/flutter_view__start_up.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/fullscreen_textfield_perf__timeline_summary.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/hello_world__memory.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/hello_world_android__compile.dart @camsim99 @flutter/tool
/dev/devicelab/bin/tasks/hello_world_impeller.dart @gaaclarke @flutter/engine
/dev/devicelab/bin/tasks/home_scroll_perf__timeline_summary.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/hot_mode_dev_cycle__benchmark.dart @bkonyi @flutter/tool
/dev/devicelab/bin/tasks/imagefiltered_transform_animation_perf__timeline_summary.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/integration_test_test.dart @bkonyi @flutter/tool
/dev/devicelab/bin/tasks/integration_ui_driver.dart @bkonyi @flutter/tool
/dev/devicelab/bin/tasks/integration_ui_frame_number.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/integration_ui_keyboard_resize.dart @bkonyi @flutter/tool
/dev/devicelab/bin/tasks/integration_ui_screenshot.dart @bkonyi @flutter/tool
/dev/devicelab/bin/tasks/integration_ui_textfield.dart @bkonyi @flutter/tool
/dev/devicelab/bin/tasks/microbenchmarks.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/native_assets_android.dart @dcharkes @flutter/android
/dev/devicelab/bin/tasks/new_gallery__transition_perf.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/new_gallery_impeller__transition_perf.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/new_gallery_impeller_old_zoom__transition_perf.dart @jonahwilliams @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 @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/platform_channel_sample_test.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/platform_interaction_test.dart @stuartmorgan-g @flutter/plugin
/dev/devicelab/bin/tasks/platform_view__start_up.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/run_release_test.dart @bkonyi @flutter/tool
/dev/devicelab/bin/tasks/service_extensions_test.dart @bkonyi @flutter/tool
/dev/devicelab/bin/tasks/textfield_perf__timeline_summary.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/tiles_scroll_perf__timeline_summary.dart @jtmcdole @flutter/engine
## Mac iOS DeviceLab tests
/dev/devicelab/bin/tasks/animated_blur_backdrop_filter_perf_ios__timeline_summary.dart @jonahwilliams @flutter/engine
/dev/devicelab/bin/tasks/animated_complex_opacity_perf_ios__e2e_summary.dart @hellohuanlin @flutter/engine
/dev/devicelab/bin/tasks/animation_with_microtasks_perf_ios__timeline_summary.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/backdrop_filter_perf_ios__timeline_summary.dart @louisehsu @flutter/engine
/dev/devicelab/bin/tasks/basic_material_app_ios__compile.dart @vashworth @flutter/tool
/dev/devicelab/bin/tasks/channels_integration_test_ios.dart @LongCatIsLooong @flutter/engine
/dev/devicelab/bin/tasks/codegen_integration_mac.dart @bkonyi @flutter/tool
/dev/devicelab/bin/tasks/color_filter_and_fade_perf_ios__e2e_summary.dart @hellohuanlin @flutter/engine
/dev/devicelab/bin/tasks/complex_layout_ios__start_up.dart @vashworth @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 @louisehsu @flutter/engine
/dev/devicelab/bin/tasks/cubic_bezier_perf_ios_sksl_warmup__timeline_summary.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/draw_arcs_all_fill_styles_perf_ios__timeline_summary.dart @b-luk @flutter/engine
/dev/devicelab/bin/tasks/draw_arcs_all_stroke_styles_perf_ios__timeline_summary.dart @b-luk @flutter/engine
/dev/devicelab/bin/tasks/draw_atlas_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/dynamic_path_stroke_tessellation_perf_ios__timeline_summary.dart @flar @flutter/engine
/dev/devicelab/bin/tasks/dynamic_path_tessellation_perf_ios__timeline_summary.dart @jonahwilliams @flutter/engine
/dev/devicelab/bin/tasks/external_textures_integration_test_ios.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/flavors_test_ios.dart @vashworth @flutter/tool
/dev/devicelab/bin/tasks/flutter_gallery__transition_perf_e2e_ios.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/flutter_gallery_ios__compile.dart @vashworth @flutter/engine
/dev/devicelab/bin/tasks/flutter_gallery_ios__start_up.dart @vashworth @flutter/engine
/dev/devicelab/bin/tasks/flutter_gallery_ios_sksl_warmup__transition_perf.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/flutter_view_ios__start_up.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/fullscreen_textfield_perf_ios__e2e_summary.dart @LongCatIsLooong @flutter/engine
/dev/devicelab/bin/tasks/hello_world_ios__compile.dart @vashworth @flutter/engine
/dev/devicelab/bin/tasks/hot_mode_dev_cycle_ios__benchmark.dart @louisehsu @flutter/tool
/dev/devicelab/bin/tasks/imagefiltered_transform_animation_perf_ios__timeline_summary.dart @louisehsu @flutter/engine
/dev/devicelab/bin/tasks/imitation_game_flutter__compile.dart @louisehsu @flutter/tool
/dev/devicelab/bin/tasks/imitation_game_swiftui__compile.dart @louisehsu @flutter/tool
/dev/devicelab/bin/tasks/integration_test_test_ios.dart @LongCatIsLooong @flutter/engine
/dev/devicelab/bin/tasks/integration_ui_ios_driver.dart LongCatIsLooong @flutter/tool
/dev/devicelab/bin/tasks/integration_ui_ios_frame_number.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/integration_ui_ios_keyboard_resize.dart @LongCatIsLooong @flutter/engine
/dev/devicelab/bin/tasks/integration_ui_ios_screenshot.dart @LongCatIsLooong @flutter/tool
/dev/devicelab/bin/tasks/integration_ui_ios_textfield.dart @LongCatIsLooong @flutter/tool
/dev/devicelab/bin/tasks/ios_app_with_extensions_test.dart @hellohuanlin @flutter/tool
/dev/devicelab/bin/tasks/ios_defines_test.dart @vashworth @flutter/tool
/dev/devicelab/bin/tasks/ios_picture_cache_complexity_scoring_perf__timeline_summary.dart @flar @flutter/engine
/dev/devicelab/bin/tasks/ios_platform_view_tests.dart @stuartmorgan-g @flutter/plugin
/dev/devicelab/bin/tasks/keyboard_hot_restart_ios.dart @loic-sharma @flutter/ios
/dev/devicelab/bin/tasks/large_image_changer_perf_ios.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/microbenchmarks_ios.dart @louisehsu @flutter/engine
/dev/devicelab/bin/tasks/native_assets_ios.dart @dcharkes @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 @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/new_gallery_skia_ios__transition_perf.dart @jtmcdole @flutter/engine
/dev/devicelab/bin/tasks/platform_channel_sample_test_ios.dart @hellohuanlin @flutter/engine
/dev/devicelab/bin/tasks/platform_channel_sample_test_swift.dart @hellohuanlin @flutter/engine
/dev/devicelab/bin/tasks/platform_channels_benchmarks_ios.dart @gaaclarke @flutter/engine
/dev/devicelab/bin/tasks/platform_interaction_test_ios.dart @hellohuanlin @flutter/engine
/dev/devicelab/bin/tasks/platform_view_ios__start_up.dart @stuartmorgan-g @flutter/plugin
/dev/devicelab/bin/tasks/platform_views_scroll_perf_ad_banners__timeline_summary.dart @hellohuanlin @flutter/engine
/dev/devicelab/bin/tasks/platform_views_scroll_perf_bottom_ad_banner__timeline_summary.dart @hellohuanlin @flutter/engine
/dev/devicelab/bin/tasks/platform_views_scroll_perf_ios__timeline_summary.dart @hellohuanlin @flutter/engine
/dev/devicelab/bin/tasks/platform_views_scroll_perf_non_intersecting_impeller_ios__timeline_summary.dart @jonahwilliams @flutter/engine
/dev/devicelab/bin/tasks/post_backdrop_filter_perf_ios__timeline_summary.dart @louisehsu @flutter/engine
/dev/devicelab/bin/tasks/route_test_ios.dart @LongCatIsLooong @flutter/tool
/dev/devicelab/bin/tasks/rrect_blur_perf_ios__timeline_summary.dart @gaaclarke @flutter/engine
/dev/devicelab/bin/tasks/simple_animation_perf_ios.dart @LongCatIsLooong @flutter/engine
/dev/devicelab/bin/tasks/static_path_stroke_tessellation_perf_ios__timeline_summary.dart @flar @flutter/engine
/dev/devicelab/bin/tasks/static_path_tessellation_perf_ios__timeline_summary.dart @jonahwilliams @flutter/engine
/dev/devicelab/bin/tasks/tiles_scroll_perf_ios__timeline_summary.dart @louisehsu @flutter/engine
/dev/devicelab/bin/tasks/very_long_picture_scrolling_perf_ios__e2e_summary.dart @flar @flutter/engine
## Host only DeviceLab tests
/dev/devicelab/bin/tasks/android_display_cutout.dart @reidbaker @flutter/android
/dev/devicelab/bin/tasks/android_release_builds_exclude_dev_dependencies_test.dart @camsim99 @flutter/android
/dev/devicelab/bin/tasks/animated_complex_opacity_perf_macos__e2e_summary.dart @cbracken @flutter/desktop
/dev/devicelab/bin/tasks/basic_material_app_macos__compile.dart @cbracken @flutter/desktop
/dev/devicelab/bin/tasks/build_aar_module_test.dart @bkonyi @flutter/tool
/dev/devicelab/bin/tasks/build_android_host_app_with_module_aar.dart @mboetger @flutter/android
/dev/devicelab/bin/tasks/build_android_host_app_with_module_source.dart @mboetger @flutter/android
/dev/devicelab/bin/tasks/build_ios_framework_module_test.dart @vashworth @flutter/tool
/dev/devicelab/bin/tasks/channels_integration_test_macos.dart @gaaclarke @flutter/desktop
/dev/devicelab/bin/tasks/complex_layout_macos__compile.dart @cbracken @flutter/desktop
/dev/devicelab/bin/tasks/complex_layout_macos__start_up.dart @cbracken @flutter/desktop
/dev/devicelab/bin/tasks/complex_layout_scroll_perf_macos__timeline_summary.dart @cbracken @flutter/desktop
/dev/devicelab/bin/tasks/complex_layout_win_desktop__compile.dart @yaakovschectman @flutter/desktop
/dev/devicelab/bin/tasks/complex_layout_win_desktop__start_up.dart @yaakovschectman @flutter/desktop
/dev/devicelab/bin/tasks/dart_plugin_registry_test.dart @stuartmorgan-g @flutter/plugin
/dev/devicelab/bin/tasks/entrypoint_dart_registrant.dart @aaclarke @flutter/plugin
/dev/devicelab/bin/tasks/flavors_test_macos.dart @vashworth @flutter/desktop
/dev/devicelab/bin/tasks/flutter_gallery_macos__compile.dart @cbracken @flutter/desktop
/dev/devicelab/bin/tasks/flutter_gallery_macos__start_up.dart @cbracken @flutter/desktop
/dev/devicelab/bin/tasks/flutter_gallery_win_desktop__compile.dart @yaakovschectman @flutter/desktop
/dev/devicelab/bin/tasks/flutter_gallery_win_desktop__start_up.dart @yaakovschectman @flutter/desktop
/dev/devicelab/bin/tasks/flutter_tool_startup.dart @jensjoha @flutter/tool
/dev/devicelab/bin/tasks/flutter_tool_startup__linux.dart @jensjoha @flutter/tool
/dev/devicelab/bin/tasks/flutter_tool_startup__macos.dart @jensjoha @flutter/tool
/dev/devicelab/bin/tasks/flutter_tool_startup__windows.dart @jensjoha @flutter/tool
/dev/devicelab/bin/tasks/flutter_view_macos__start_up.dart @cbracken @flutter/desktop
/dev/devicelab/bin/tasks/flutter_view_win_desktop__start_up.dart @yaakovschectman @flutter/desktop
/dev/devicelab/bin/tasks/gradle_desugar_classes_test.dart @mboetger @flutter/tool
/dev/devicelab/bin/tasks/gradle_plugin_bundle_test.dart @gmackall @flutter/plugin
/dev/devicelab/bin/tasks/gradle_plugin_fat_apk_test.dart @gmackall @flutter/plugin
/dev/devicelab/bin/tasks/gradle_plugin_light_apk_test.dart @gmackall @flutter/plugin
/dev/devicelab/bin/tasks/hello_world_macos__compile.dart @cbracken @flutter/desktop
/dev/devicelab/bin/tasks/hello_world_win_desktop__compile.dart @yaakovschectman @flutter/desktop
/dev/devicelab/bin/tasks/hot_mode_dev_cycle_ios_simulator.dart @louisehsu @flutter/tool
/dev/devicelab/bin/tasks/hot_mode_dev_cycle_macos_target__benchmark.dart @cbracken @flutter/tool
/dev/devicelab/bin/tasks/hot_mode_dev_cycle_win_target__benchmark.dart @cbracken @flutter/desktop
/dev/devicelab/bin/tasks/integration_ui_test_test_macos.dart @cbracken @flutter/desktop
/dev/devicelab/bin/tasks/ios_debug_workflow.dart @vashworth @flutter/ios
/dev/devicelab/bin/tasks/linux_desktop_impeller.dart @jonahwilliams @flutter/engine
/dev/devicelab/bin/tasks/linux_feature_flags_test.dart @loic-sharma @flutter/desktop
/dev/devicelab/bin/tasks/mac_desktop_impeller.dart @jonahwilliams @flutter/engine
/dev/devicelab/bin/tasks/macos_chrome_dev_mode.dart @bkonyi @flutter/tool
/dev/devicelab/bin/tasks/module_custom_host_app_name_test.dart @bkonyi @flutter/tool
/dev/devicelab/bin/tasks/module_host_with_custom_build_test.dart @bkonyi @flutter/tool
/dev/devicelab/bin/tasks/module_test_ios.dart @vashworth @flutter/tool
/dev/devicelab/bin/tasks/module_uiscene_test_ios.dart @vashworth @flutter/ios
/dev/devicelab/bin/tasks/native_assets_ios_simulator.dart @dcharkes @flutter/ios
/dev/devicelab/bin/tasks/native_ui_tests_macos.dart @cbracken @flutter/desktop
/dev/devicelab/bin/tasks/platform_channel_sample_test_macos.dart @cbracken @flutter/desktop
/dev/devicelab/bin/tasks/platform_channel_sample_test_windows.dart @cbracken @flutter/desktop
/dev/devicelab/bin/tasks/platform_view_macos__start_up.dart @cbracken @flutter/desktop
/dev/devicelab/bin/tasks/platform_view_win_desktop__start_up.dart @yaakovschectman @flutter/desktop
/dev/devicelab/bin/tasks/plugin_lint_mac.dart @stuartmorgan-g @flutter/plugin
/dev/devicelab/bin/tasks/plugin_test_android_standard.dart @stuartmorgan-g @flutter/plugin
/dev/devicelab/bin/tasks/plugin_test_android_variants.dart @stuartmorgan-g @flutter/plugin
/dev/devicelab/bin/tasks/plugin_test_ios.dart @stuartmorgan-g @flutter/ios
/dev/devicelab/bin/tasks/plugin_test_linux.dart @stuartmorgan-g @flutter/desktop
/dev/devicelab/bin/tasks/plugin_test_macos.dart @vashworth @flutter/desktop
/dev/devicelab/bin/tasks/plugin_test_windows.dart @loic-sharma @flutter/desktop
/dev/devicelab/bin/tasks/run_debug_test_android.dart @camsim99 @flutter/android
/dev/devicelab/bin/tasks/run_debug_test_linux.dart @loic-sharma @flutter/tool
/dev/devicelab/bin/tasks/run_debug_test_macos.dart @cbracken @flutter/tool
/dev/devicelab/bin/tasks/run_debug_test_windows.dart @loic-sharma @flutter/tool
/dev/devicelab/bin/tasks/run_release_test_linux.dart @loic-sharma @flutter/tool
/dev/devicelab/bin/tasks/run_release_test_macos.dart @cbracken @flutter/tool
/dev/devicelab/bin/tasks/run_release_test_windows.dart @loic-sharma @flutter/tool
/dev/devicelab/bin/tasks/technical_debt__cost.dart @Piinks @flutter/framework
/dev/devicelab/bin/tasks/web_benchmarks_canvaskit.dart @yjbanov @flutter/web
/dev/devicelab/bin/tasks/web_benchmarks_ddc.dart @yjbanov @flutter/web
/dev/devicelab/bin/tasks/web_benchmarks_ddc_hot_reload.dart @yjbanov @flutter/web
/dev/devicelab/bin/tasks/web_benchmarks_skwasm.dart @eyebrowsoffire @flutter/web
/dev/devicelab/bin/tasks/web_benchmarks_skwasm_st.dart @eyebrowsoffire @flutter/web
/dev/devicelab/bin/tasks/windowing_test_linux.dart @robert-ancell @flutter/desktop
/dev/devicelab/bin/tasks/windowing_test_macos.dart @knopp @flutter/desktop
/dev/devicelab/bin/tasks/windowing_test_windows.dart @mattkae @flutter/desktop
/dev/devicelab/bin/tasks/windows_desktop_impeller.dart @jonahwilliams @flutter/engine
/dev/devicelab/bin/tasks/windows_home_scroll_perf__timeline_summary.dart @jonahwilliams @flutter/engine
/dev/devicelab/bin/tasks/windows_startup_test.dart @loic-sharma @flutter/desktop
## Host only framework tests
# Linux docs_deploy_stable
# Linux docs_generate_release
# Linux docs_publish
/dev/bots/docs.sh @Piinks @flutter/framework
# Linux packages_autoroller
/dev/conductor/core @christopherfujino @flutter/tool
# Linux web_e2e_test
/dev/integration_tests/web_e2e_tests @yjbanov @flutter/web
# Linux web_smoke_test
/examples/hello_world/test_driver/smoke_web_engine.dart @yjbanov @flutter/web
# Linux android views
/dev/integration_tests/android_views @gmackall @flutter/android
# Linux deferred components
/dev/integration_tests/deferred_components_test @mboetger @flutter/android
## Firebase tests
/dev/integration_tests/release_smoke_test @reidbaker @flutter/android
## Shards tests
# TODO(keyonghan): add files/paths for below framework host only testss.
# https://github.com/flutter/flutter/issues/82068
#
# analyze @Piinks @flutter/framework
# android_engine_opengles_tests @reidbaker @flutter/android
# android_engine_vulkan_tests @reidbaker @flutter/android
# android_java11_tool_integration_tests @jesswrd @flutter/android
# android_preview_tool_integration_tests @mboetger @flutter/android
# build_tests @bkonyi @flutter/tool
# ci_yaml flutter roller @keyonghan @flutter/infra
# coverage @christopherfujino @flutter/infra
# customer_testing @Piinks @flutter/framework
# docs @Piinks @flutter/framework
# flutter_packaging @christopherfujino @flutter/infra
# flutter_plugins @stuartmorgan-g @flutter/plugin
# framework_tests @Piinks @flutter/framework
# fuchsia_precache @bkonyi @flutter/tool
# realm_checker @eyebrowsoffire @flutter/tool
# skp_generator @Hixie
# test_ownership @keyonghan
# tool_host_cross_arch_tests @bkonyi @flutter/tool
# tool_integration_tests @bkonyi @flutter/tool
# tool_tests @bkonyi @flutter/tool
# verify_binaries_codesigned @cbracken @flutter/releases
# verify_binaries_pre_codesigned @vashworth @flutter/releases
# web_canvaskit_tests @yjbanov @flutter/web
# web_integration_tests @yjbanov @flutter/web
# web_long_running_tests @yjbanov @flutter/web
# web_skwasm_tests @eyebrowsoffire @flutter/web
# web_tool_tests @yjbanov @flutter/tool

View file

@ -0,0 +1,270 @@
# Specify analysis options.
#
# For a list of lints, see: https://dart.dev/tools/linter-rules
# For guidelines on configuring static analysis, see:
# https://dart.dev/tools/analysis
#
# There are other similar analysis options files in the flutter repos,
# which should be kept in sync with this file:
#
# - analysis_options.yaml (this file)
# - https://github.com/flutter/packages/blob/main/analysis_options.yaml
#
# This file contains the analysis options used for code in the flutter/flutter
# repository.
analyzer:
language:
strict-casts: true
strict-inference: true
strict-raw-types: true
errors:
# allow deprecated members (we do this because otherwise we have to annotate
# every member in every test, assert, etc, when we or the Dart SDK deprecates
# something (https://github.com/flutter/flutter/issues/143312)
deprecated_member_use: ignore
deprecated_member_use_from_same_package: ignore
exclude:
- "bin/cache/**"
# Ignore protoc generated files
- "dev/conductor/lib/proto/*"
- "engine/**"
formatter:
page_width: 100
linter:
rules:
# This list is derived from the list of all available lints located at
# https://github.com/dart-lang/sdk/blob/main/pkg/linter/example/all.yaml
- always_declare_return_types
- always_put_control_body_on_new_line
# - always_put_required_named_parameters_first # we prefer having parameters in the same order as fields https://github.com/flutter/flutter/issues/10219
# - always_specify_types # conflicts with omit_obvious_local_variable_types
# - always_use_package_imports # we do this commonly
- annotate_overrides
- annotate_redeclares
# - avoid_annotating_with_dynamic # conflicts with type_annotate_public_apis
- avoid_bool_literals_in_conditional_expressions
# - avoid_catches_without_on_clauses # blocked on https://github.com/dart-lang/linter/issues/3023
# - avoid_catching_errors # blocked on https://github.com/dart-lang/linter/issues/4998
# - avoid_classes_with_only_static_members # we do this commonly for `abstract final class`es
- avoid_double_and_int_checks
- avoid_dynamic_calls
- avoid_empty_else
- avoid_equals_and_hash_code_on_mutable_classes
- avoid_escaping_inner_quotes
- avoid_field_initializers_in_const_classes
# - avoid_final_parameters # incompatible with prefer_final_parameters
- avoid_function_literals_in_foreach_calls
# - avoid_futureor_void # not yet tested
# - 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
- avoid_null_checks_in_equality_operators
# - avoid_positional_boolean_parameters # would have been nice to enable this but by now there's too many places that break it
- avoid_print
# - avoid_private_typedef_functions # we prefer having typedef (discussion in https://github.com/flutter/flutter/pull/16356)
- avoid_redundant_argument_values
- avoid_relative_lib_imports
- avoid_renaming_method_parameters
- avoid_return_types_on_setters
- avoid_returning_null_for_void
# - avoid_returning_this # there are enough valid reasons to return `this` that this lint ends up with too many false positives
- avoid_setters_without_getters
- avoid_shadowing_type_parameters
- avoid_single_cascade_in_expression_statements
- avoid_slow_async_io
- avoid_type_to_string
- avoid_types_as_parameter_names
# - avoid_types_on_closure_parameters # not yet tested
- avoid_unnecessary_containers
- avoid_unused_constructor_parameters
- avoid_void_async
# - avoid_web_libraries_in_flutter # we use web libraries in web-specific code, and our tests prevent us from using them elsewhere
- await_only_futures
- camel_case_extensions
- camel_case_types
- cancel_subscriptions
# - cascade_invocations # doesn't match the typical style of this repo
- cast_nullable_to_non_nullable
# - close_sinks # not reliable enough
- collection_methods_unrelated_type
- combinators_ordering
# - comment_references # blocked on https://github.com/dart-lang/linter/issues/1142
- conditional_uri_does_not_exist
# - constant_identifier_names # needs an opt-out https://github.com/dart-lang/linter/issues/204
- control_flow_in_finally
- curly_braces_in_flow_control_structures
- dangling_library_doc_comments
- depend_on_referenced_packages
- deprecated_consistency
# - deprecated_member_use_from_same_package # we allow self-references to deprecated members
# - diagnostic_describe_all_properties # enabled only at the framework level (packages/flutter/lib)
- directives_ordering
# - discarded_futures # too many false positives, similar to unawaited_futures
# - do_not_use_environment # there are appropriate times to use the environment, especially in our tests and build logic
# - document_ignores # not yet tested
- empty_catches
- empty_constructor_bodies
- empty_statements
- eol_at_end_of_file
- exhaustive_cases
- file_names
- flutter_style_todos
- hash_and_equals
- implementation_imports
- implicit_call_tearoffs
- implicit_reopen
- invalid_case_patterns
- invalid_runtime_check_with_js_interop_types
# - join_return_with_assignment # not required by flutter style
- leading_newlines_in_multiline_strings
- library_annotations
- library_names
- library_prefixes
- library_private_types_in_public_api
# - lines_longer_than_80_chars # not required by flutter style
- literal_only_boolean_expressions
# - matching_super_parameters # blocked on https://github.com/dart-lang/language/issues/2509
- missing_code_block_language_in_doc_comment
- missing_whitespace_between_adjacent_strings
- no_adjacent_strings_in_list
- no_default_cases
- no_duplicate_case_values
- no_leading_underscores_for_library_prefixes
- no_leading_underscores_for_local_identifiers
- no_literal_bool_comparisons
- no_logic_in_create_state
# - no_runtimeType_toString # ok in tests; we enable this only in packages/
- no_self_assignments
- no_wildcard_variable_uses
- non_constant_identifier_names
- noop_primitive_operations
- null_check_on_nullable_type_parameter
- null_closures
# - omit_local_variable_types # superset of omit_obvious_local_variable_types
- omit_obvious_local_variable_types # not yet tested
# - omit_obvious_property_types # conflicts with type_annotate_public_apis
# - one_member_abstracts # too many false positives
- only_throw_errors # this does get disabled in a few places where we have legacy code that uses strings et al
- overridden_fields
- package_names
- package_prefixed_library_names
# - parameter_assignments # we do this commonly
- prefer_adjacent_string_concatenation
- prefer_asserts_in_initializer_lists
# - prefer_asserts_with_message # not required by flutter style
- prefer_collection_literals
- prefer_conditional_assignment
- prefer_const_constructors
- prefer_const_constructors_in_immutables
- prefer_const_declarations
- prefer_const_literals_to_create_immutables
# - prefer_constructors_over_static_methods # far too many false positives
- prefer_contains
# - prefer_double_quotes # opposite of prefer_single_quotes
# - prefer_expression_function_bodies # conflicts with ./docs/contributing/Style-guide-for-Flutter-repo.md#consider-using--for-short-functions-and-methods
- prefer_final_fields
- prefer_final_in_for_each
- prefer_final_locals
# - prefer_final_parameters # adds too much verbosity
- prefer_for_elements_to_map_fromIterable
- prefer_foreach
- prefer_function_declarations_over_variables
- prefer_generic_function_type_aliases
- prefer_if_elements_to_conditional_expressions
- prefer_if_null_operators
- prefer_initializing_formals
- prefer_inlined_adds
# - prefer_int_literals # conflicts with ./docs/contributing/Style-guide-for-Flutter-repo.md#use-double-literals-for-double-constants
- prefer_interpolation_to_compose_strings
- prefer_is_empty
- prefer_is_not_empty
- prefer_is_not_operator
- prefer_iterable_whereType
- prefer_mixin
# - prefer_null_aware_method_calls # "call()" is confusing to people new to the language since it's not documented anywhere
- prefer_null_aware_operators
- prefer_relative_imports
- prefer_single_quotes
- prefer_spread_collections
- prefer_typing_uninitialized_variables
- prefer_void_to_null
- provide_deprecation_message
# - public_member_api_docs # enabled on a case-by-case basis; see e.g. packages/analysis_options.yaml
- recursive_getters
# - require_trailing_commas # would be nice, but requires a lot of manual work: 10,000+ code locations would need to be reformatted by hand after bulk fix is applied
- secure_pubspec_urls
- sized_box_for_whitespace
- sized_box_shrink_expand
- slash_for_doc_comments
- sort_child_properties_last
- sort_constructors_first
# - sort_pub_dependencies # prevents separating pinned transitive dependencies
- sort_unnamed_constructors_first
- specify_nonobvious_local_variable_types
- specify_nonobvious_property_types
- strict_top_level_inference
- test_types_in_equals
- throw_in_finally
- tighten_type_of_initializing_formals
- type_annotate_public_apis
- type_init_formals
- type_literal_in_constant_pattern
# - unawaited_futures # too many false positives, especially with the way AnimationController works
# - unintended_html_in_doc_comment # blocked on https://github.com/dart-lang/linter/issues/5065
# - unnecessary_async # not yet tested
- unnecessary_await_in_return
- unnecessary_brace_in_string_interps
- unnecessary_breaks
- unnecessary_const
- unnecessary_constructor_name
# - unnecessary_final # conflicts with prefer_final_locals
- unnecessary_getters_setters
# - unnecessary_ignore # Disabled by default to simplify migrations; should be periodically enabled locally to clean up offenders
# - unnecessary_lambdas # has false positives: https://github.com/dart-lang/linter/issues/498
- unnecessary_late
- unnecessary_library_directive
# - unnecessary_library_name # blocked on https://github.com/dart-lang/dartdoc/issues/3882
- unnecessary_new
- unnecessary_null_aware_assignments
- unnecessary_null_aware_operator_on_extension_on_nullable
- unnecessary_null_checks
- unnecessary_null_in_if_null_operators
- unnecessary_nullable_for_final_variable_declarations
- unnecessary_overrides
- unnecessary_parenthesis
# - unnecessary_raw_strings # what's "necessary" is a matter of opinion; consistency across strings can help readability more than this lint
- unnecessary_statements
- unnecessary_string_escapes
- unnecessary_string_interpolations
- unnecessary_this
- unnecessary_to_list_in_spreads
- unnecessary_underscores
- unreachable_from_main
- unrelated_type_equality_checks
# - unsafe_variance # not yet tested
- use_build_context_synchronously
- use_colored_box
# - use_decorated_box # leads to bugs: DecoratedBox and Container are not equivalent (Container inserts extra padding)
- use_enums
- use_full_hex_values_for_flutter_colors
- use_function_type_syntax_for_parameters
- use_if_null_to_convert_nulls_to_bools
- use_is_even_rather_than_modulo
- use_key_in_widget_constructors
- use_late_for_private_fields_and_variables
- use_named_constants
- use_raw_strings
- use_rethrow_when_possible
- use_setters_to_change_properties
# - use_string_buffers # has false positives: https://github.com/dart-lang/sdk/issues/34182
- use_string_in_part_of_directives
- use_super_parameters
- use_test_throws_matchers
# - use_to_and_as_if_applicable # has false positives, so we prefer to catch this by code-review
- use_truncating_division
- valid_regexps
- void_checks

59
.flutter/bin/dart Executable file
View file

@ -0,0 +1,59 @@
#!/usr/bin/env bash
# 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.
# ---------------------------------- NOTE ---------------------------------- #
#
# Please keep the logic in this file consistent with the logic in the
# `dart.bat` script in the same directory to ensure that Flutter & Dart continue
# to work across all platforms!
#
# -------------------------------------------------------------------------- #
set -e
# Needed because if it is set, cd may print the path it changed to.
unset CDPATH
# On Mac OS, readlink -f doesn't work, so follow_links traverses the path one
# link at a time, and then cds into the link destination and find out where it
# ends up.
#
# The returned filesystem path must be a format usable by Dart's URI parser,
# since the Dart command line tool treats its argument as a file URI, not a
# filename. For instance, multiple consecutive slashes should be reduced to a
# single slash, since double-slashes indicate a URI "authority", and these are
# supposed to be filenames. There is an edge case where this will return
# multiple slashes: when the input resolves to the root directory. However, if
# that were the case, we wouldn't be running this shell, so we don't do anything
# about it.
#
# The function is enclosed in a subshell to avoid changing the working directory
# of the caller.
function follow_links() (
cd -P "$(dirname -- "$1")"
file="$PWD/$(basename -- "$1")"
while [[ -h "$file" ]]; do
cd -P "$(dirname -- "$file")"
file="$(readlink -- "$file")"
cd -P "$(dirname -- "$file")"
file="$PWD/$(basename -- "$file")"
done
echo "$file"
)
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.
if [[ $OS =~ MINGW.* || $OS =~ CYGWIN.* || $OS =~ MSYS.* ]]; then
exec "${BIN_DIR}/dart.bat" "$@"
fi
# To define `shared::execute()` function
source "$SHARED_NAME"
shared::execute "$@"

49
.flutter/bin/dart.bat Normal file
View file

@ -0,0 +1,49 @@
@ECHO off
REM Copyright 2014 The Flutter Authors. All rights reserved.
REM Use of this source code is governed by a BSD-style license that can be
REM found in the LICENSE file.
REM ---------------------------------- NOTE ----------------------------------
REM
REM Please keep the logic in this file consistent with the logic in the
REM `dart` script in the same directory to ensure that Flutter & Dart continue to
REM work across all platforms!
REM
REM --------------------------------------------------------------------------
SETLOCAL
FOR %%i IN ("%~dp0..") DO SET FLUTTER_ROOT=%%~fi
REM Detect which PowerShell executable is available on the host
REM PowerShell version <= 5: PowerShell.exe
REM PowerShell version >= 6: pwsh.exe
WHERE /Q pwsh && (
SET "powershell_executable=call pwsh"
) || WHERE /Q PowerShell.exe && (
SET powershell_executable=PowerShell.exe
) || (
ECHO Error: PowerShell executable not found. 1>&2
ECHO Either pwsh.exe or PowerShell.exe must be in your PATH. 1>&2
EXIT /B 1
)
REM Include shared scripts in shared.bat
SET shared_bin=%FLUTTER_ROOT%/bin/internal/shared.bat
CALL "%shared_bin%"
SET cache_dir=%FLUTTER_ROOT%\bin\cache
SET dart_sdk_path=%cache_dir%\dart-sdk
SET dart=%dart_sdk_path%\bin\dart.exe
SET exit_with_errorlevel=%FLUTTER_ROOT%/bin/internal/exit_with_errorlevel.bat
REM Chaining the call to 'dart' and 'exit' with an ampersand ensures that
REM Windows reads both commands into memory once before executing them. This
REM avoids nasty errors that may otherwise occur when the dart command (e.g. as
REM part of 'flutter upgrade') modifies this batch script while it is executing.
REM
REM Do not use the CALL command in the next line to execute Dart. CALL causes
REM Windows to re-read the line from disk after the CALL command has finished
REM regardless of the ampersand chain.
"%dart%" %* & "%exit_with_errorlevel%"

64
.flutter/bin/flutter Executable file
View file

@ -0,0 +1,64 @@
#!/usr/bin/env bash
# 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.
# ---------------------------------- NOTE ---------------------------------- #
#
# Please keep the logic in this file consistent with the logic in the
# `flutter.bat` script in the same directory to ensure that Flutter
# continues to work across all platforms!
#
# -------------------------------------------------------------------------- #
set -e
# To debug the tool, you can uncomment the following lines to enable debug
# mode and set a VM service port:
# FLUTTER_TOOL_ARGS="--enable-asserts $FLUTTER_TOOL_ARGS"
# FLUTTER_TOOL_ARGS="$FLUTTER_TOOL_ARGS --observe=65432"
# Needed because if it is set, cd may print the path it changed to.
unset CDPATH
# On Mac OS, readlink -f doesn't work, so follow_links traverses the path one
# link at a time, and then cds into the link destination and find out where it
# ends up.
#
# The returned filesystem path must be a format usable by Dart's URI parser,
# since the Dart command line tool treats its argument as a file URI, not a
# filename. For instance, multiple consecutive slashes should be reduced to a
# single slash, since double-slashes indicate a URI "authority", and these are
# supposed to be filenames. There is an edge case where this will return
# multiple slashes: when the input resolves to the root directory. However, if
# that were the case, we wouldn't be running this shell, so we don't do anything
# about it.
#
# The function is enclosed in a subshell to avoid changing the working directory
# of the caller.
function follow_links() (
cd -P "$(dirname -- "$1")"
file="$PWD/$(basename -- "$1")"
while [[ -h "$file" ]]; do
cd -P "$(dirname -- "$file")"
file="$(readlink -- "$file")"
cd -P "$(dirname -- "$file")"
file="$PWD/$(basename -- "$file")"
done
echo "$file"
)
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.
if [[ $OS =~ MINGW.* || $OS =~ CYGWIN.* || $OS =~ MSYS.* ]]; then
exec "${BIN_DIR}/flutter.bat" "$@"
fi
# To define `shared::execute()` function
source "$SHARED_NAME"
shared::execute "$@"

72
.flutter/bin/flutter-dev Executable file
View file

@ -0,0 +1,72 @@
#!/usr/bin/env bash
# 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.
# ---------------------------------- NOTE ---------------------------------- #
#
# Please keep the logic in this file consistent with the logic in the
# `flutter-dev.bat` script in the same directory to ensure that Flutter
# continues to work across all platforms!
#
# -------------------------------------------------------------------------- #
set -e
# This is a helper script for development purposes. It runs the Flutter tool
# from source code directly, without using the prebuilt snapshot. This is
# useful for development, as it allows you to make changes to the tool and see
# the effects immediately, but is much slower than using the prebuilt snapshot.
# To debug the tool, you can uncomment the following lines to enable debug
# mode and set a VM service port:
# FLUTTER_TOOL_ARGS="--enable-asserts $FLUTTER_TOOL_ARGS"
# FLUTTER_TOOL_ARGS="$FLUTTER_TOOL_ARGS --observe=65432"
# Needed because if it is set, cd may print the path it changed to.
unset CDPATH
# On Mac OS, readlink -f doesn't work, so follow_links traverses the path one
# link at a time, and then cds into the link destination and find out where it
# ends up.
#
# The returned filesystem path must be a format usable by Dart's URI parser,
# since the Dart command line tool treats its argument as a file URI, not a
# filename. For instance, multiple consecutive slashes should be reduced to a
# single slash, since double-slashes indicate a URI "authority", and these are
# supposed to be filenames. There is an edge case where this will return
# multiple slashes: when the input resolves to the root directory. However, if
# that were the case, we wouldn't be running this shell, so we don't do anything
# about it.
#
# The function is enclosed in a subshell to avoid changing the working directory
# of the caller.
function follow_links() (
cd -P "$(dirname -- "$1")"
file="$PWD/$(basename -- "$1")"
while [[ -h "$file" ]]; do
cd -P "$(dirname -- "$file")"
file="$(readlink -- "$file")"
cd -P "$(dirname -- "$file")"
file="$PWD/$(basename -- "$file")"
done
echo "$file"
)
# Lookup the parent directory of the script (../), the Flutter SDK root.
PROG_NAME="$(follow_links "${BASH_SOURCE[0]}")"
BIN_DIR="$(cd "${PROG_NAME%/*}" ; pwd -P)"
SHARED_NAME="$BIN_DIR/internal/shared.sh"
FLUTTER_ROOT="$(cd "$BIN_DIR/.." ; pwd -P)"
OS="$(uname -s)"
# If we're on Windows, invoke the batch script instead to get proper locking.
if [[ $OS =~ MINGW.* || $OS =~ CYGWIN.* || $OS =~ MSYS.* ]]; then
exec "${BIN_DIR}/flutter-dev.bat" "$@"
fi
# To define `shared::execute()` function
source "$SHARED_NAME"
# Run the Flutter tool directly without using the cached snapshot.
shared::execute "$@"

View file

@ -0,0 +1,79 @@
@ECHO off
REM Copyright 2014 The Flutter Authors. All rights reserved.
REM Use of this source code is governed by a BSD-style license that can be
REM found in the LICENSE file.
REM ---------------------------------- NOTE ----------------------------------
REM
REM Please keep the logic in this file consistent with the logic in the
REM `flutter-dev` script in the same directory to ensure that Flutter & Dart
REM continue to work across all platforms!
REM
REM --------------------------------------------------------------------------
SETLOCAL
REM This is a helper script for development purposes. It runs the Flutter tool
REM from source code directly, without using the prebuilt snapshot. This is
REM useful for development, as it allows you to make changes to the tool and see
REM the effects immediately, but is much slower than using the prebuilt snapshot.
REM To debug the tool, you can uncomment the following line to enable debug mode:
REM SET FLUTTER_TOOL_ARGS="--enable-asserts %FLUTTER_TOOL_ARGS%"
FOR %%i IN ("%~dp0..") DO SET FLUTTER_ROOT=%%~fi
REM If available, add location of bundled mingit to PATH
SET mingit_path=%FLUTTER_ROOT%\bin\mingit\cmd
IF EXIST "%mingit_path%" SET PATH=%PATH%;%mingit_path%
REM Test if Git is available on the host
WHERE /Q git
IF "%ERRORLEVEL%" NEQ "0" (
ECHO Error: Unable to find git in your PATH.
EXIT /B 1
)
REM Detect which PowerShell executable is available on the host
REM PowerShell version <= 5: PowerShell.exe
REM PowerShell version >= 6: pwsh.exe
WHERE /Q pwsh && (
SET "powershell_executable=call pwsh"
) || WHERE /Q PowerShell.exe && (
SET powershell_executable=PowerShell.exe
) || (
ECHO Error: PowerShell executable not found. 1>&2
ECHO Either pwsh.exe or PowerShell.exe must be in your PATH. 1>&2
EXIT /B 1
)
REM Test if the flutter directory is a git clone, otherwise git rev-parse HEAD would fail
IF NOT EXIST "%flutter_root%\.git" (
ECHO Error: The Flutter directory is not a clone of the GitHub project.
ECHO The flutter tool requires Git in order to operate properly;
ECHO to set up Flutter, run the following command:
ECHO git clone -b stable https://github.com/flutter/flutter.git
EXIT 1
)
REM Include shared scripts in shared.bat
SET shared_bin=%FLUTTER_ROOT%\bin\internal\shared.bat
CALL "%shared_bin%"
SET flutter_tools_dir=%FLUTTER_ROOT%\packages\flutter_tools
SET cache_dir=%FLUTTER_ROOT%\bin\cache
SET script_path=%flutter_tools_dir%\bin\flutter_tools.dart
SET dart_sdk_path=%cache_dir%\dart-sdk
SET dart=%dart_sdk_path%\bin\dart.exe
SET exit_with_errorlevel=%FLUTTER_ROOT%/bin/internal/exit_with_errorlevel.bat
REM Chaining the call to 'dart' and 'exit' with an ampersand ensures that
REM Windows reads both commands into memory once before executing them. This
REM avoids nasty errors that may otherwise occur when the dart command (e.g. as
REM part of 'flutter upgrade') modifies this batch script while it is executing.
REM
REM Do not use the CALL command in the next line to execute Dart. CALL causes
REM Windows to re-read the line from disk after the CALL command has finished
REM regardless of the ampersand chain.
"%dart%" run --resident --packages="%flutter_tools_dir%\.dart_tool\package_config.json" %FLUTTER_TOOL_ARGS% "%script_path%" %* & "%exit_with_errorlevel%"

74
.flutter/bin/flutter.bat Normal file
View file

@ -0,0 +1,74 @@
@ECHO off
REM Copyright 2014 The Flutter Authors. All rights reserved.
REM Use of this source code is governed by a BSD-style license that can be
REM found in the LICENSE file.
REM ---------------------------------- NOTE ----------------------------------
REM
REM Please keep the logic in this file consistent with the logic in the
REM `flutter` script in the same directory to ensure that Flutter & Dart
REM continue to work across all platforms!
REM
REM --------------------------------------------------------------------------
SETLOCAL
REM To debug the tool, you can uncomment the following line to enable debug mode:
REM SET FLUTTER_TOOL_ARGS="--enable-asserts %FLUTTER_TOOL_ARGS%"
FOR %%i IN ("%~dp0..") DO SET FLUTTER_ROOT=%%~fi
REM If available, add location of bundled mingit to PATH
SET mingit_path=%FLUTTER_ROOT%\bin\mingit\cmd
IF EXIST "%mingit_path%" SET PATH=%PATH%;%mingit_path%
REM Test if Git is available on the host
WHERE /Q git
IF "%ERRORLEVEL%" NEQ "0" (
ECHO Error: Unable to find git in your PATH.
EXIT /B 1
)
REM Detect which PowerShell executable is available on the host
REM PowerShell version <= 5: PowerShell.exe
REM PowerShell version >= 6: pwsh.exe
WHERE /Q pwsh && (
SET "powershell_executable=call pwsh"
) || WHERE /Q PowerShell.exe && (
SET powershell_executable=PowerShell.exe
) || (
ECHO Error: PowerShell executable not found. 1>&2
ECHO Either pwsh.exe or PowerShell.exe must be in your PATH. 1>&2
EXIT /B 1
)
REM Test if the flutter directory is a git clone, otherwise git rev-parse HEAD would fail
IF NOT EXIST "%flutter_root%\.git" (
ECHO Error: The Flutter directory is not a clone of the GitHub project.
ECHO The flutter tool requires Git in order to operate properly;
ECHO to set up Flutter, run the following command:
ECHO git clone -b stable https://github.com/flutter/flutter.git
EXIT 1
)
REM Include shared scripts in shared.bat
SET shared_bin=%FLUTTER_ROOT%\bin\internal\shared.bat
CALL "%shared_bin%"
SET flutter_tools_dir=%FLUTTER_ROOT%\packages\flutter_tools
SET cache_dir=%FLUTTER_ROOT%\bin\cache
SET snapshot_path=%cache_dir%\flutter_tools.snapshot
SET dart_sdk_path=%cache_dir%\dart-sdk
SET dart=%dart_sdk_path%\bin\dart.exe
SET exit_with_errorlevel=%FLUTTER_ROOT%/bin/internal/exit_with_errorlevel.bat
REM Chaining the call to 'dart' and 'exit' with an ampersand ensures that
REM Windows reads both commands into memory once before executing them. This
REM avoids nasty errors that may otherwise occur when the dart command (e.g. as
REM part of 'flutter upgrade') modifies this batch script while it is executing.
REM
REM Do not use the CALL command in the next line to execute Dart. CALL causes
REM Windows to re-read the line from disk after the CALL command has finished
REM regardless of the ampersand chain.
"%dart%" --packages="%flutter_tools_dir%\.dart_tool\package_config.json" %FLUTTER_TOOL_ARGS% "%snapshot_path%" %* & "%exit_with_errorlevel%"

View file

@ -0,0 +1,15 @@
# Flutter SDK dependency versions
The files in this directory specifies pinned versions of various
dependencies of the flutter SDK.
The `bin/internal/engine.version` file controls where to find compiled artifacts
of the engine. These artifacts are compiled in the Merge Queue for every commit
in the flutter repository.
The `bin/internal/flutter_packages.version` file specifies the version
of the `flutter/packages` repository to be used for testing. The
`flutter/packages` repository isn't an upstream dependency of
`flutter/flutter`; it is only used as part of the test suite for
verification, and the pinned version here makes sure that tests are
deterministic at each `flutter/flutter` commit.

View file

@ -0,0 +1 @@
61aeJQ9laGfEFF_Vlc_u0MCkqB6xb2hAYHRBxKH-Uw4C

View file

@ -0,0 +1,84 @@
# 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.
# ---------------------------------- NOTE ---------------------------------- #
#
# Please keep the logic in this file consistent with the logic in the
# `content_aware_hash.sh` script in the same directory to ensure that Flutter
# continues to work across all platforms!
#
# -------------------------------------------------------------------------- #
$ErrorActionPreference = "Stop"
# When called from a submodule hook; these will override `git -C dir`
$env:GIT_DIR = $null
$env:GIT_INDEX_FILE = $null
$env:GIT_WORK_TREE = $null
$progName = Split-Path -parent $MyInvocation.MyCommand.Definition
$flutterRoot = (Get-Item $progName).parent.parent.FullName
# Cannot use '*' for files in this command
# DEPS: tracks third party dependencies related to building the engine
# engine: all the code in the engine folder
# bin/internal/release-candidate-branch.version: release marker
$trackedFiles = "DEPS", "engine", "bin/internal/release-candidate-branch.version"
$baseRef = "HEAD"
$currentBranch = (git -C "$flutterRoot" rev-parse --abbrev-ref HEAD).Trim()
# By default, the content hash is based on HEAD.
# For local development branches, we want to base the hash on the merge-base
# with the remote tracking branch, so that we don't rebuild the world every
# time we make a change to the engine.
#
# The following conditions are exceptions where we want to use HEAD.
# 1. The current branch is a release branch (main, master, stable, beta).
# 2. The current branch is a GitHub temporary merge branch.
# 3. The current branch is a release candidate branch.
# 4. The current checkout is a shallow clone.
# 5. There is no current branch. E.g. running on CI/CD.
$isShallow = Test-Path -Path (Join-Path "$flutterRoot" ".git/shallow")
if (($currentBranch -ne "main") -and
($currentBranch -ne "master") -and
($currentBranch -ne "stable") -and
($currentBranch -ne "beta") -and
(-not (($currentBranch -eq "HEAD") -and (-not [string]::IsNullOrEmpty($env:LUCI_CONTEXT)))) -and
(-not $currentBranch.StartsWith("gh-readonly-queue/master/pr-")) -and
(-not ($currentBranch -like "flutter-*-candidate.*")) -and
(-not $isShallow)) {
# This is a development branch. Find the merge-base.
# We will fallback to origin if upstream is not detected.
$remote = "origin"
$ErrorActionPreference = 'SilentlyContinue'
git -C "$flutterRoot" remote get-url upstream *> $null
if ($LASTEXITCODE -eq 0) {
$remote = "upstream"
}
# Try to find the merge-base with master, then main.
$mergeBase = (git -C "$flutterRoot" merge-base HEAD "$remote/master" 2>$null).Trim()
if ([string]::IsNullOrEmpty($mergeBase)) {
$mergeBase = (git -C "$flutterRoot" merge-base HEAD "$remote/main" 2>$null).Trim()
}
$ErrorActionPreference = "Stop"
if ($mergeBase) {
$baseRef = "$mergeBase"
}
}
# Removing the "cmd" requirement enables powershell usage on other hosts
# 1. git ls-tree | Out-String - combines output of pipeline into a single string
# rather than an array for each line.
# "-NoNewline" not available on PS5.1 and also removes all newlines.
# 2. -replace "`r`n", "`n" - removes line endings
# NOTE: Out-String adds a new line; so Out-File -NoNewline strips that.
# 3. Out-File -NoNewline -Encoding ascii outputs 8bit ascii
# 4. git hash-object with stdin from a pipeline consumes UTF-16, so consume
#. the contents of hash.txt
(git -C "$flutterRoot" ls-tree "$baseRef" -- $trackedFiles | Out-String) -replace "`r`n", "`n" | Out-File -NoNewline -Encoding ascii hash.txt
git hash-object hash.txt
Remove-Item hash.txt

View file

@ -0,0 +1,71 @@
#!/usr/bin/env bash
# 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.
# ---------------------------------- NOTE ---------------------------------- #
#
# Please keep the logic in this file consistent with the logic in the
# `content_aware_hash.ps1` script in the same directory to ensure that Flutter
# continues to work across all platforms!
#
# -------------------------------------------------------------------------- #
set -e
FLUTTER_ROOT="$(dirname "$(dirname "$(dirname "${BASH_SOURCE[0]}")")")"
unset GIT_DIR
unset GIT_INDEX_FILE
unset GIT_WORK_TREE
# Cannot use '*' for files in this command
# DEPS: tracks third party dependencies related to building the engine
# engine: all the code in the engine folder
# bin/internal/release-candidate-branch.version: release marker
TRACKEDFILES=(DEPS engine bin/internal/release-candidate-branch.version)
BASEREF="HEAD"
CURRENT_BRANCH="$(git -C "$FLUTTER_ROOT" rev-parse --abbrev-ref HEAD)"
# By default, the content hash is based on HEAD.
# For local development branches, we want to base the hash on the merge-base
# with the remote tracking branch, so that we don't rebuild the world every
# time we make a change to the engine.
#
# The following conditions are exceptions where we want to use HEAD.
# 1. The current branch is a release branch (main, master, stable, beta).
# 2. The current branch is a GitHub temporary merge branch.
# 3. The current branch is a release candidate branch.
# 4. The current checkout is a shallow clone.
# 5. There is no current branch. E.g. running on CI/CD.
if [[ "$CURRENT_BRANCH" != "main" && \
"$CURRENT_BRANCH" != "master" && \
"$CURRENT_BRANCH" != "stable" && \
"$CURRENT_BRANCH" != "beta" && \
"$CURRENT_BRANCH" != "gh-readonly-queue/master/pr-"* && \
"$CURRENT_BRANCH" != "flutter-"*"-candidate."* && \
! ( "$CURRENT_BRANCH" == "HEAD" && -n "$LUCI_CONTEXT" ) && \
! -f "$FLUTTER_ROOT/.git/shallow" ]]; then
# This is a development branch. Find the merge-base.
# We will fallback to origin if upstream is not detected.
REMOTE="origin"
set +e
git -C "$FLUTTER_ROOT" remote get-url upstream >/dev/null 2>&1
if [[ $? -eq 0 ]]; then
REMOTE="upstream"
fi
# Try to find the merge-base with master, then main.
MERGEBASE=$(git -C "$FLUTTER_ROOT" merge-base HEAD "$REMOTE/master" 2>/dev/null)
if [[ -z "$MERGEBASE" ]]; then
MERGEBASE=$(git -C "$FLUTTER_ROOT" merge-base HEAD "$REMOTE/main" 2>/dev/null)
fi
set -e
if [[ -n "$MERGEBASE" ]]; then
BASEREF="$MERGEBASE"
fi
fi
git -C "$FLUTTER_ROOT" ls-tree "$BASEREF" -- "${TRACKEDFILES[@]}" | git hash-object --stdin

View file

@ -0,0 +1,13 @@
@ECHO off
REM Copyright 2014 The Flutter Authors. All rights reserved.
REM Use of this source code is governed by a BSD-style license that can be
REM found in the LICENSE file.
REM A script to exit caller script with the last status code.
REM This can be used with ampersand without `SETLOCAL ENABLEDELAYEDEXPANSION`.
REM
REM To use this script like `exit`, do not use with the CALL command.
REM Without CALL, this script can exit caller script, but with CALL,
REM this script returns back to caller and does not exit caller.
exit /B %ERRORLEVEL%

View file

@ -0,0 +1 @@
039a026124269e6e42d4940af5757f4c397cc9ce

View file

@ -0,0 +1 @@
zvsXvTuk-Z1Mgtn34lhXHPbQAAPOVrHYuEZZJqa6N9oC

View file

@ -0,0 +1 @@
flutter_infra_release/gradle-wrapper/fd5c1f2c013565a3bea56ada6df9d2b8e96d56aa/gradle-wrapper.tgz

View file

@ -0,0 +1 @@
7a29ab0b6d611f2bf5de4b6f929a82a091866307

View file

@ -0,0 +1,66 @@
# 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.
# Based on the current repository state, writes on stdout the last commit in the
# git tree that edited either `DEPS` or any file in the `engine/` sub-folder,
# which is used to ensure `bin/internal/engine.version` is set correctly.
#
# ---------------------------------- NOTE ---------------------------------- #
#
# Please keep the logic in this file consistent with the logic in the
# `last_engine_commit.sh` script in the same directory to ensure that Flutter
# continues to work across all platforms!
#
# https://github.com/flutter/flutter/blob/main/docs/tool/Engine-artifacts.md.
#
# Want to test this script?
# $ cd dev/tools
# $ dart test test/last_engine_commit_test.dart
#
# -------------------------------------------------------------------------- #
$ErrorActionPreference = "Stop" # Equivalent to 'set -e' in bash
$progName = Split-Path -parent $MyInvocation.MyCommand.Definition
$flutterRoot = (Get-Item $progName).parent.parent.FullName
$Path1 = Join-Path $flutterRoot "bin"
$Path2 = Join-Path $Path1 "internal"
$RELEASE_CANDIDATE_VERSION_PATH = Join-Path $Path2 "release-candidate-branch.version"
# 1. Determine the reference commit: the last commit that changed
# 'bin/internal/release-candidate-branch.version'.
# This serves as the starting point for evaluating changes on the current branch.
$REFERENCE_COMMIT = ""
try {
$REFERENCE_COMMIT = (git log -1 --pretty=format:%H -- "$RELEASE_CANDIDATE_VERSION_PATH" -ErrorAction Stop).Trim()
}
catch {
# If git log fails (e.g., file not found or no history), $REFERENCE_COMMIT will remain empty.
}
# If we did not find this reference commit, fail.
if ([string]::IsNullOrEmpty($REFERENCE_COMMIT)) {
Write-Error "Error: Could not determine a suitable engine commit." -ErrorAction Stop
Write-Error "Current branch: $((git rev-parse --abbrev-ref HEAD).Trim())" -ErrorAction Stop
Write-Error "No file $RELEASE_CANDIDATE_VERSION_PATH found, or it has no history." -ErrorAction Stop
exit 1
}
# 2. Define the history range to search within: commits reachable from HEAD
# but not from the REFERENCE_COMMIT. This focuses the search on commits
# *unique to the current branch* since that file was last changed.
$HISTORY_RANGE = "$REFERENCE_COMMIT..HEAD"
$DEPS_PATH = Join-Path $flutterRoot "DEPS"
$ENGINE_PATH = Join-Path $flutterRoot "engine"
$ENGINE_COMMIT = (git log -1 --pretty=format:%H --ancestry-path $HISTORY_RANGE -- "$DEPS_PATH" "$ENGINE_PATH")
# 3. If no engine-related commit was found within the current branch's history,
# fallback to the REFERENCE_COMMIT itself.
if ([string]::IsNullOrEmpty($ENGINE_COMMIT)) {
$ENGINE_COMMIT = $REFERENCE_COMMIT
}
Write-Output $ENGINE_COMMIT

View file

@ -0,0 +1,52 @@
#!/usr/bin/env bash
# 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.
# Based on the current repository state, writes on stdout the last commit in the
# git tree that edited either `DEPS` or any file in the `engine/` sub-folder,
# which is used to ensure `bin/internal/engine.version` is set correctly.
#
#
# ---------------------------------- NOTE ---------------------------------- #
#
# Please keep the logic in this file consistent with the logic in the
# `last_engine_commit.ps1` script in the same directory to ensure that Flutter
# continues to work across all platforms!
#
# https://github.com/flutter/flutter/blob/main/docs/tool/Engine-artifacts.md.
#
# Want to test this script?
# $ cd dev/tools
# $ dart test test/last_engine_commit_test.dart
#
# -------------------------------------------------------------------------- #
set -e
FLUTTER_ROOT="$(dirname "$(dirname "$(dirname "${BASH_SOURCE[0]}")")")"
# 1. Determine when the release branch was started, and prevent set -e from exiting.
RELEASE_CANDIDATE_VERSION_PATH="$(git rev-parse --show-toplevel)/bin/internal/release-candidate-branch.version"
REFERENCE_COMMIT="$(git log -1 --pretty=format:%H -- "$RELEASE_CANDIDATE_VERSION_PATH")"
# If we did not find a merge-base, fail
if [[ -z "$REFERENCE_COMMIT" ]]; then
echo >&2 "Error: Could not determine a suitable engine commit."
echo >&2 "Current branch: $(git rev-parse --abbrev-ref HEAD)"
echo >&2 "No file $RELEASE_CANDIDATE_VERSION_PATH found"
exit 1
fi
# 2. Define and search history range to searhc within (unique to changes on this branch).
HISTORY_RANGE="$REFERENCE_COMMIT..HEAD"
ENGINE_COMMIT="$(git log -1 --pretty=format:%H --ancestry-path "$HISTORY_RANGE" -- "$(git rev-parse --show-toplevel)/DEPS" "$(git rev-parse --show-toplevel)/engine")"
# 3. If no engine-related commit was found within the current branch's history, fallback to the first commit on this branch.
if [[ -z "$ENGINE_COMMIT" ]]; then
# Find the oldest commit on HEAD that is *not* reachable from MERGE_BASE_COMMIT.
# This is the first commit *on this branch* after it diverged from 'master'.
ENGINE_COMMIT="$REFERENCE_COMMIT"
fi
echo "$ENGINE_COMMIT"

View file

@ -0,0 +1 @@
0bf0f9e941c85d06ce4b5909d7a61b3a4f2a6a05

View file

@ -0,0 +1 @@
050ff3bf8fdab6ce53a2ddc6ae49b11b1c02a168

View file

@ -0,0 +1 @@
cf5897a71ea412ea2aeb1e2f6b5ea74d4fabfd8c

View file

@ -0,0 +1 @@
19d6bec393c9f9b31ccb090059f59268da32e281

View file

@ -0,0 +1 @@
8fb14f99a8854d4e2b16559c0eb48e7c297065ce

View file

@ -0,0 +1 @@
flutter_infra_release/flutter/fonts/3012db47f3130e62f7cc0beabff968a33cbec8d8/fonts.zip

View file

@ -0,0 +1 @@
22dbb176deef7d9a80f5c94f57a4b518ea935f50

View file

@ -0,0 +1 @@
flutter-3.41-candidate.0

View file

@ -0,0 +1,240 @@
@ECHO off
REM Copyright 2014 The Flutter Authors. All rights reserved.
REM Use of this source code is governed by a BSD-style license that can be
REM found in the LICENSE file.
REM ---------------------------------- NOTE ----------------------------------
REM
REM Please keep the logic in this file consistent with the logic in the
REM `shared.sh` script in the same directory to ensure that Flutter & Dart continue to
REM work across all platforms!
REM
REM --------------------------------------------------------------------------
SETLOCAL
REM Ensure we are running on 64-bit Windows (32-bit is not supported).
REM If this is a 32-bit process emulated by WOW64,
REM PROCESSOR_ARCHITECTURE is the process architecture and
REM PROCESSOR_ARCHITEW6432 is the processor architecture.
IF "%PROCESSOR_ARCHITECTURE%"=="x86" (
IF "%PROCESSOR_ARCHITEW6432%"=="" (
ECHO Flutter requires 64-bit versions of Windows
EXIT 1
)
)
SET flutter_tools_dir=%FLUTTER_ROOT%\packages\flutter_tools
SET cache_dir=%FLUTTER_ROOT%\bin\cache
SET snapshot_path=%cache_dir%\flutter_tools.snapshot
SET snapshot_path_old=%cache_dir%\flutter_tools.snapshot.old
SET stamp_path=%cache_dir%\flutter_tools.stamp
SET script_path=%flutter_tools_dir%\bin\flutter_tools.dart
SET dart_sdk_path=%cache_dir%\dart-sdk
SET engine_stamp=%cache_dir%\engine-dart-sdk.stamp
SET engine_version_path=%cache_dir%\engine.stamp
SET dart=%dart_sdk_path%\bin\dart.exe
REM Ensure that bin/cache exists.
IF NOT EXIST "%cache_dir%" MKDIR "%cache_dir%"
REM If the cache still doesn't exist, fail with an error that we probably don't have permissions.
IF NOT EXIST "%cache_dir%" (
ECHO Error: Unable to create cache directory at 1>&2
ECHO %cache_dir% 1>&2
ECHO. 1>&2
ECHO This may be because flutter doesn't have write permissions for 1>&2
ECHO this path. Try moving the flutter directory to a writable location, 1>&2
ECHO such as within your home directory. 1>&2
EXIT 1
)
:acquire_lock
2>NUL (
REM "3" is now stderr because of "2>NUL".
CALL :subroutine %* 2>&3 9> "%cache_dir%\flutter.bat.lock" || GOTO acquire_lock
)
GOTO :after_subroutine
:subroutine
REM If present, run the bootstrap script first
SET bootstrap_path=%FLUTTER_ROOT%\bin\internal\bootstrap.bat
IF EXIST "%bootstrap_path%" (
CALL "%bootstrap_path%"
)
REM Get the Git revision.
2>NUL (
REM 'FOR /f' spawns a new terminal instance to run the command. If an
REM 'AutoRun' command is defined in the user's registry, that command could
REM change the working directory, and then we wouldn't be in the directory
REM we expect to be in. To prevent this, we need to 'PUSHD %FLUTTER_ROOT%'
REM before getting the git revision.
REM
REM See https://github.com/flutter/flutter/issues/159018
FOR /f %%r IN ('PUSHD %FLUTTER_ROOT% ^& $git rev-parse HEAD') DO (
SET revision=%%r
)
)
SET compilekey="%revision%:%FLUTTER_TOOL_ARGS%"
REM Invalidate cache if:
REM * SNAPSHOT_PATH is not a file, or
REM * STAMP_PATH is not a file, or
REM * STAMP_PATH is an empty file, or
REM * Contents of STAMP_PATH is not what we are going to compile, or
REM * pubspec.yaml last modified after pubspec.lock
REM The following IF conditions are all linked with a logical OR. However,
REM there is no OR operator in batch and a GOTO construct is used as replacement.
CALL :do_ensure_engine_version
IF NOT EXIST "%engine_stamp%" GOTO do_sdk_update_and_snapshot
SET /P dart_required_version=<"%engine_version_path%"
SET /P dart_installed_version=<"%engine_stamp%"
IF %dart_required_version% NEQ %dart_installed_version% GOTO do_sdk_update_and_snapshot
IF NOT EXIST "%snapshot_path%" GOTO do_snapshot
IF NOT EXIST "%stamp_path%" GOTO do_snapshot
SET /P stamp_value=<"%stamp_path%"
IF %stamp_value% NEQ %compilekey% GOTO do_snapshot
SET pubspec_yaml_path=%flutter_tools_dir%\pubspec.yaml
SET pubspec_lock_path=%flutter_tools_dir%\pubspec.lock
FOR /F %%i IN ('DIR /B /O:D "%pubspec_yaml_path%" "%pubspec_lock_path%"') DO SET newer_file=%%i
FOR %%i IN (%pubspec_yaml_path%) DO SET pubspec_yaml_timestamp=%%~ti
FOR %%i IN (%pubspec_lock_path%) DO SET pubspec_lock_timestamp=%%~ti
IF "%pubspec_yaml_timestamp%" == "%pubspec_lock_timestamp%" SET newer_file=""
IF "%newer_file%" EQU "pubspec.yaml" GOTO do_snapshot
REM Everything is up-to-date - exit subroutine
EXIT /B
:do_ensure_engine_version
SET update_engine_bin=%FLUTTER_ROOT%\bin\internal\update_engine_version.ps1
REM Escape apostrophes from the executable path
SET "update_engine_bin=%update_engine_bin:'=''%"
REM PowerShell command must have exit code set in order to prevent all non-zero exit codes from being translated
REM into 1. The exit code 2 is used to detect the case where the major version is incorrect and there should be
REM no subsequent retries.
%powershell_executable% -ExecutionPolicy Bypass -NoProfile -Command "Unblock-File -Path '%update_engine_bin%'; & '%update_engine_bin%'; exit $LASTEXITCODE;"
IF "%ERRORLEVEL%" EQU "2" (
EXIT 1
)
IF "%ERRORLEVEL%" NEQ "0" (
ECHO Error: Unable to determine engine version... 1>&2
EXIT 1
)
REM Do not fall through - return from subroutine
EXIT /B
:do_sdk_update_and_snapshot
SET /A dart_sdk_retries+=1
ECHO Checking Dart SDK version... 1>&2
SET update_dart_bin=%FLUTTER_ROOT%\bin\internal\update_dart_sdk.ps1
REM Escape apostrophes from the executable path
SET "update_dart_bin=%update_dart_bin:'=''%"
REM PowerShell command must have exit code set in order to prevent all non-zero exit codes from being translated
REM into 1. The exit code 2 is used to detect the case where the major version is incorrect and there should be
REM no subsequent retries.
ECHO Downloading Dart SDK from Flutter engine %dart_required_version%... 1>&2
%powershell_executable% -ExecutionPolicy Bypass -NoProfile -Command "Unblock-File -Path '%update_dart_bin%'; & '%update_dart_bin%'; exit $LASTEXITCODE;"
IF "%ERRORLEVEL%" EQU "2" (
EXIT 1
)
SET max_dart_sdk_retries=3
IF "%ERRORLEVEL%" NEQ "0" (
IF "%dart_sdk_retries%" EQU "%max_dart_sdk_retries%" (
ECHO Error: Unable to update Dart SDK after %max_dart_sdk_retries% retries. 1>&2
DEL "%engine_stamp%"
EXIT 1
)
ECHO Error: Unable to update Dart SDK. Retrying... 1>&2
timeout /t 5 /nobreak
GOTO :do_sdk_update_and_snapshot
)
:do_snapshot
IF EXIST "%FLUTTER_ROOT%\version" DEL "%FLUTTER_ROOT%\version"
IF EXIST "%FLUTTER_ROOT%\bin\cache\flutter.version.json" DEL "%FLUTTER_ROOT%\bin\cache\flutter.version.json"
ECHO: > "%cache_dir%\.dartignore"
ECHO Building flutter tool... 1>&2
PUSHD "%flutter_tools_dir%"
REM Makes changes to PUB_ENVIRONMENT only visible to commands within SETLOCAL/ENDLOCAL
SETLOCAL
IF "%CI%" == "true" GOTO on_bot
IF "%BOT%" == "true" GOTO on_bot
IF "%CONTINUOUS_INTEGRATION%" == "true" GOTO on_bot
IF "%CHROME_HEADLESS%" == "1" GOTO on_bot
GOTO not_on_bot
:on_bot
SET PUB_ENVIRONMENT=%PUB_ENVIRONMENT%:flutter_bot
:not_on_bot
SET PUB_SUMMARY_ONLY=1
SET PUB_ENVIRONMENT=%PUB_ENVIRONMENT%:flutter_install
IF "%PUB_CACHE%" == "" (
IF EXIST "%pub_cache_path%" SET PUB_CACHE=%pub_cache_path%
)
SET /A total_tries=10
SET /A remaining_tries=%total_tries%-1
:retry_pub_upgrade
ECHO Running pub upgrade... 1>&2
"%dart%" pub upgrade --suppress-analytics
IF "%ERRORLEVEL%" EQU "0" goto :upgrade_succeeded
ECHO Error (%ERRORLEVEL%): Unable to 'pub upgrade' flutter tool. Retrying in five seconds... (%remaining_tries% tries left) 1>&2
timeout /t 5 /nobreak 2>NUL
SET /A remaining_tries-=1
IF "%remaining_tries%" EQU "0" GOTO upgrade_retries_exhausted
GOTO :retry_pub_upgrade
:upgrade_retries_exhausted
SET exit_code=%ERRORLEVEL%
ECHO Error: 'pub upgrade' still failing after %total_tries% tries. 1>&2
GOTO final_exit
:upgrade_succeeded
REM Ensure that pubspec.lock has a >= MTIME to pubspec.yaml at this point
REM https://github.com/flutter/flutter/issues/171024
SET "PUBSPEC_LOCK_FILE=%FLUTTER_TOOLS_DIR%\pubspec.lock"
COPY /B "%PUBSPEC_LOCK_FILE%"+,, "%PUBSPEC_LOCK_FILE%" >NUL
ENDLOCAL
POPD
REM Move the old snapshot - we can't just overwrite it as the VM might currently have it
REM memory mapped (e.g. on flutter upgrade), and deleting it might not work if the file
REM is in use. For downloading a new dart sdk the folder is moved, so we take the same
REM approach of moving the file here.
SET /A snapshot_path_suffix=1
:move_old_snapshot
IF EXIST "%snapshot_path_old%%snapshot_path_suffix%" (
SET /A snapshot_path_suffix+=1
GOTO move_old_snapshot
) ELSE (
IF EXIST "%snapshot_path%" (
MOVE "%snapshot_path%" "%snapshot_path_old%%snapshot_path_suffix%" 2> NUL > NUL
)
)
IF "%FLUTTER_TOOL_ARGS%" == "" (
"%dart%" --verbosity=error --snapshot="%snapshot_path%" --snapshot-kind="app-jit" --packages="%flutter_tools_dir%\.dart_tool\package_config.json" --no-enable-mirrors "%script_path%" > NUL
) else (
"%dart%" "%FLUTTER_TOOL_ARGS%" --verbosity=error --snapshot="%snapshot_path%" --snapshot-kind="app-jit" --packages="%flutter_tools_dir%\.dart_tool\package_config.json" "%script_path%" > NUL
)
IF "%ERRORLEVEL%" NEQ "0" (
ECHO Error: Unable to create dart snapshot for flutter tool. 1>&2
SET exit_code=%ERRORLEVEL%
GOTO :final_exit
)
>"%stamp_path%" ECHO %compilekey%
REM Try to delete any old snapshots now. Swallow any errors though.
DEL "%snapshot_path%.old*" 2> NUL > NUL
REM Exit Subroutine
EXIT /B
:after_subroutine
:final_exit
EXIT /B %exit_code%

View file

@ -0,0 +1,283 @@
#!/usr/bin/env bash
# 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.
# ---------------------------------- NOTE ---------------------------------- #
#
# Please keep the logic in this file consistent with the logic in the
# `shared.bat` script in the same directory to ensure that Flutter & Dart continue
# to work across all platforms!
#
# -------------------------------------------------------------------------- #
set -e
# Needed because if it is set, cd may print the path it changed to.
unset CDPATH
function pub_upgrade_with_retry {
local total_tries="10"
local remaining_tries=$((total_tries - 1))
while [[ "$remaining_tries" -gt 0 ]]; do
(cd "$FLUTTER_TOOLS_DIR" && "$DART" pub upgrade --suppress-analytics >&2) && break
>&2 echo "Error: Unable to 'pub upgrade' flutter tool. Retrying in five seconds... ($remaining_tries tries left)"
remaining_tries=$((remaining_tries - 1))
sleep 5
done
if [[ "$remaining_tries" == 0 ]]; then
>&2 echo "Command 'pub upgrade' still failed after $total_tries tries, giving up."
return 1
fi
# Touch the pubspec.lock to ensure, even if this was a NOP, it is newer than pubspec.yaml.
# See https://github.com/flutter/flutter/issues/171024.
touch "$FLUTTER_TOOLS_DIR/pubspec.lock" >&2
return 0
}
# Trap function for removing any remaining lock file at exit.
function _rmlock () {
[ -n "$FLUTTER_UPGRADE_LOCK" ] && rm -rf "$FLUTTER_UPGRADE_LOCK"
}
# Determines which lock method to use, based on what is available on the system.
# Returns a non-zero value if the lock was not acquired, zero if acquired.
function _lock () {
if hash flock 2>/dev/null; then
flock --nonblock --exclusive 7 2>/dev/null
elif hash shlock 2>/dev/null; then
shlock -f "$1" -p $$
else
mkdir "$1" 2>/dev/null
fi
}
# Waits for an update lock to be acquired.
#
# To ensure that we don't simultaneously update Dart in multiple parallel
# instances, we try to obtain an exclusive lock on this file descriptor (and
# thus this script's source file) while we are updating Dart and compiling the
# script. To do this, we try to use the command line program "flock", which is
# available on many Unix-like platforms, in particular on most Linux
# distributions. You give it a file descriptor, and it locks the corresponding
# file, having inherited the file descriptor from the shell.
#
# Complicating matters, there are two major scenarios where this will not
# work.
#
# The first is if the platform doesn't have "flock", for example on macOS. There
# is not a direct equivalent, so on platforms that don't have flock, we fall
# back to using trying to use the shlock command, and if that doesn't exist,
# then we use mkdir as an atomic operation to create a lock directory. If mkdir
# is able to create the directory, then the lock is acquired. To determine if we
# have "flock" or "shlock" available, we use the "hash" shell built-in.
#
# The second complication is on network file shares. On NFS, to obtain an
# exclusive lock you need a file descriptor that is open for writing. Thus, we
# ignore errors from flock by redirecting all output to /dev/null, since users
# will typically not care about errors from flock and are more likely to be
# confused by them than helped. The "shlock" method doesn't work for network
# shares, since it is PID-based. The "mkdir" method does work over NFS
# implementations that support atomic directory creation (which is most of
# them). The "schlock" and "flock" commands are more reliable than the mkdir
# method, however, or we would use mkdir in all cases.
#
# The upgrade_flutter function calling _wait_for_lock is executed in a subshell
# with a redirect that pipes the source of this script into file descriptor 7.
# A flock lock is released when this subshell exits and file descriptor 7 is
# closed. The mkdir lock is released via an exit trap from the subshell that
# deletes the lock directory.
function _wait_for_lock () {
FLUTTER_UPGRADE_LOCK="$FLUTTER_ROOT/bin/cache/.upgrade_lock"
local waiting_message_displayed
while ! _lock "$FLUTTER_UPGRADE_LOCK"; do
if [[ -z $waiting_message_displayed ]]; then
# Print with a return so that if the Dart code also prints this message
# when it does its own lock, the message won't appear twice. Be sure that
# the clearing printf below has the same number of space characters.
printf "Waiting for another flutter command to release the startup lock...\r" >&2;
waiting_message_displayed="true"
fi
sleep .1;
done
if [[ $waiting_message_displayed == "true" ]]; then
# Clear the waiting message so it doesn't overlap any following text.
printf " \r" >&2;
fi
unset waiting_message_displayed
# If the lock file is acquired, make sure that it is removed on exit.
trap _rmlock INT TERM EXIT
}
# This function is always run in a subshell. Running the function in a subshell
# is required to make sure any lock directory is cleaned up by the exit trap in
# _wait_for_lock.
function upgrade_flutter () (
mkdir -p "$FLUTTER_ROOT/bin/cache"
# Ensure the engine.version is populated
"$FLUTTER_ROOT/bin/internal/update_engine_version.sh"
local revision="$(cd "$FLUTTER_ROOT"; git rev-parse HEAD)"
local compilekey="$revision:$FLUTTER_TOOL_ARGS"
# Invalidate cache if:
# * SNAPSHOT_PATH is not a file, or
# * STAMP_PATH is not a file, or
# * STAMP_PATH is an empty file, or
# * Contents of STAMP_PATH is not what we are going to compile, or
# * pubspec.yaml last modified after pubspec.lock
if [[ ! -f "$SNAPSHOT_PATH" || \
! -s "$STAMP_PATH" || \
"$(cat "$STAMP_PATH")" != "$compilekey" || \
"$FLUTTER_TOOLS_DIR/pubspec.yaml" -nt "$FLUTTER_TOOLS_DIR/pubspec.lock" ]]; then
# Waits for the update lock to be acquired. Placing this check inside the
# conditional allows the majority of flutter/dart installations to bypass
# the lock entirely, but as a result this required a second verification that
# the SDK is up to date.
_wait_for_lock
# A different shell process might have updated the tool/SDK.
if [[ -f "$SNAPSHOT_PATH" && -s "$STAMP_PATH" && "$(cat "$STAMP_PATH")" == "$compilekey" && "$FLUTTER_TOOLS_DIR/pubspec.yaml" -ot "$FLUTTER_TOOLS_DIR/pubspec.lock" ]]; then
exit $?
fi
# Fetch Dart...
rm -f "$FLUTTER_ROOT/version"
rm -f "$FLUTTER_ROOT/bin/cache/flutter.version.json"
touch "$FLUTTER_ROOT/bin/cache/.dartignore"
"$FLUTTER_ROOT/bin/internal/update_dart_sdk.sh"
if [[ "$BIN_NAME" == 'dart' || "$BIN_NAME" == 'flutter-dev' ]]; then
# Don't try to build tool
return
fi
>&2 echo Building flutter tool...
# Prepare packages...
if [[ "$CI" == "true" || "$BOT" == "true" || "$CONTINUOUS_INTEGRATION" == "true" || "$CHROME_HEADLESS" == "1" ]]; then
PUB_ENVIRONMENT="$PUB_ENVIRONMENT:flutter_bot"
else
export PUB_SUMMARY_ONLY=1
fi
export PUB_ENVIRONMENT="$PUB_ENVIRONMENT:flutter_install"
pub_upgrade_with_retry
# Move the old snapshot - we can't just overwrite it as the VM might currently have it
# memory mapped (e.g. on flutter upgrade). For downloading a new dart sdk the folder is moved,
# so we take the same approach of moving the file here.
SNAPSHOT_PATH_OLD="$SNAPSHOT_PATH.old"
if [ -f "$SNAPSHOT_PATH" ]; then
mv "$SNAPSHOT_PATH" "$SNAPSHOT_PATH_OLD"
fi
# Compile...
"$DART" --verbosity=error $FLUTTER_TOOL_ARGS --snapshot="$SNAPSHOT_PATH" --snapshot-kind="app-jit" --packages="$FLUTTER_TOOLS_DIR/.dart_tool/package_config.json" --no-enable-mirrors "$SCRIPT_PATH" > /dev/null
echo "$compilekey" > "$STAMP_PATH"
# Delete any temporary snapshot path.
if [ -f "$SNAPSHOT_PATH_OLD" ]; then
rm -f "$SNAPSHOT_PATH_OLD"
fi
fi
# The exit here is extraneous since the function is run in a subshell, but
# this serves as documentation that running the function in a subshell is
# required to make sure any lock directory created by mkdir is cleaned up.
exit $?
)
# This function is intended to be executed by entrypoints (e.g. `//bin/flutter`
# and `//bin/dart`). PROG_NAME and BIN_DIR should already be set by those
# entrypoints.
function shared::execute() {
export FLUTTER_ROOT="$(cd "${BIN_DIR}/.." ; pwd -P)"
# If present, run the bootstrap script first
BOOTSTRAP_PATH="$FLUTTER_ROOT/bin/internal/bootstrap.sh"
if [ -f "$BOOTSTRAP_PATH" ]; then
source "$BOOTSTRAP_PATH"
fi
FLUTTER_TOOLS_DIR="$FLUTTER_ROOT/packages/flutter_tools"
SNAPSHOT_PATH="$FLUTTER_ROOT/bin/cache/flutter_tools.snapshot"
STAMP_PATH="$FLUTTER_ROOT/bin/cache/flutter_tools.stamp"
SCRIPT_PATH="$FLUTTER_TOOLS_DIR/bin/flutter_tools.dart"
DART_SDK_PATH="$FLUTTER_ROOT/bin/cache/dart-sdk"
DART="$DART_SDK_PATH/bin/dart"
# If running over git-bash, overrides the default UNIX executables with win32
# executables
case "$(uname -s)" in
MINGW* | MSYS* )
DART="$DART.exe"
;;
esac
# Test if running as superuser but don't warn if running within Docker or CI.
if [[ "$EUID" == "0" && ! -f /.dockerenv && "$CI" != "true" && "$BOT" != "true" && "$CONTINUOUS_INTEGRATION" != "true" ]]; then
>&2 echo " Woah! You appear to be trying to run flutter as root."
>&2 echo " We strongly recommend running the flutter tool without superuser privileges."
>&2 echo " /"
>&2 echo "📎"
fi
# Test if Git is available on the Host
if ! hash git 2>/dev/null; then
>&2 echo "Error: Unable to find git in your PATH."
exit 1
fi
# Test if the flutter directory is a git clone (otherwise git rev-parse HEAD
# would fail)
if [[ ! -e "$FLUTTER_ROOT/.git" ]]; then
>&2 echo "Error: The Flutter directory is not a clone of the GitHub project."
>&2 echo " The flutter tool requires Git in order to operate properly;"
>&2 echo " to install Flutter, see the instructions at:"
>&2 echo " https://docs.flutter.dev/get-started"
exit 1
fi
BIN_NAME="$(basename "$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"
case "$BIN_NAME" in
flutter-dev)
# FLUTTER_TOOL_ARGS aren't quoted below, because it is meant to be
# considered as separate space-separated args.
exec "$DART" run --resident --packages="$FLUTTER_TOOLS_DIR/.dart_tool/package_config.json" $FLUTTER_TOOL_ARGS "$SCRIPT_PATH" "$@"
;;
flutter*)
# FLUTTER_TOOL_ARGS aren't quoted below, because it is meant to be
# considered as separate space-separated args.
exec "$DART" --packages="$FLUTTER_TOOLS_DIR/.dart_tool/package_config.json" $FLUTTER_TOOL_ARGS "$SNAPSHOT_PATH" "$@"
;;
dart*)
exec "$DART" "$@"
;;
*)
>&2 echo "Error! Executable name $BIN_NAME not recognized!"
exit 1
;;
esac
}

View file

@ -0,0 +1,127 @@
# 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.
# ---------------------------------- NOTE ---------------------------------- #
#
# Please keep the logic in this file consistent with the logic in the
# `update_dart_sdk.sh` script in the same directory to ensure that Flutter
# continues to work across all platforms!
#
# -------------------------------------------------------------------------- #
$ErrorActionPreference = "Stop"
$progName = Split-Path -parent $MyInvocation.MyCommand.Definition
$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\cache\engine.stamp")
$engineRealm = (Get-Content "$flutterRoot\bin\cache\engine.realm")
$oldDartSdkPrefix = "dart-sdk.old"
# Make sure that PowerShell has expected version.
$psMajorVersionRequired = 5
$psMajorVersionLocal = $PSVersionTable.PSVersion.Major
if ($psMajorVersionLocal -lt $psMajorVersionRequired) {
Write-Host "Flutter requires PowerShell $psMajorVersionRequired.0 or newer."
Write-Host "Current version is $psMajorVersionLocal."
# Use exit code 2 to signal that shared.bat should exit immediately instead of retrying.
exit 2
}
if ((Test-Path $engineStamp) -and ($engineVersion -eq (Get-Content $engineStamp))) {
return
}
$dartSdkBaseUrl = $Env:FLUTTER_STORAGE_BASE_URL
if (-not $dartSdkBaseUrl) {
$dartSdkBaseUrl = "https://storage.googleapis.com"
}
if ($engineRealm) {
$dartSdkBaseUrl = "$dartSdkBaseUrl/$engineRealm"
}
# It's important to use the native Dart SDK as the default target architecture
# for Flutter Windows builds depend on the Dart executable's architecture.
$dartZipNameX64 = "dart-sdk-windows-x64.zip"
$dartZipNameArm64 = "dart-sdk-windows-arm64.zip"
$dartZipName = $dartZipNameX64
if ($env:PROCESSOR_ARCHITECTURE -eq "ARM64") {
$dartSdkArm64Url = "$dartSdkBaseUrl/flutter_infra_release/flutter/$engineVersion/$dartZipNameArm64"
Try {
Invoke-WebRequest -Uri $dartSdkArm64Url -UseBasicParsing -Method Head | Out-Null
$dartZipName = $dartZipNameArm64
}
Catch {
Write-Host "The current channel's Dart SDK does not support Windows Arm64, falling back to Windows x64..."
}
}
$dartSdkUrl = "$dartSdkBaseUrl/flutter_infra_release/flutter/$engineVersion/$dartZipName"
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++ }
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"
Try {
Import-Module BitsTransfer
$ProgressPreference = 'SilentlyContinue'
Start-BitsTransfer -Source $dartSdkUrl -Destination $dartSdkZip -ErrorAction Stop
}
Catch {
Write-Host "Downloading the Dart SDK using the BITS service failed, retrying with WebRequest..."
# Invoke-WebRequest is very slow when the progress bar is visible - a 28
# second download can become a 33 minute download. Disable it with
# $ProgressPreference and then restore the original value afterwards.
# https://github.com/flutter/flutter/issues/37789
$OriginalProgressPreference = $ProgressPreference
$ProgressPreference = 'SilentlyContinue'
Invoke-WebRequest -Uri $dartSdkUrl -OutFile $dartSdkZip
$ProgressPreference = $OriginalProgressPreference
}
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)
foreach($item in $zip.items()) {
$shell.Namespace($cachePath).copyhere($item)
}
}
Remove-Item $dartSdkZip
$engineVersion | Out-File $engineStamp -Encoding ASCII
# Try to delete all old SDKs and license files.
Get-ChildItem -Path $cachePath | Where {$_.BaseName.StartsWith($oldDartSdkPrefix)} | Remove-Item -Recurse -ErrorAction SilentlyContinue

View file

@ -0,0 +1,188 @@
#!/usr/bin/env bash
# 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.
# ---------------------------------- NOTE ---------------------------------- #
#
# Please keep the logic in this file consistent with the logic in the
# `update_dart_sdk.ps1` script in the same directory to ensure that Flutter
# continues to work across all platforms!
#
# -------------------------------------------------------------------------- #
set -e
FLUTTER_ROOT="$(dirname "$(dirname "$(dirname "${BASH_SOURCE[0]}")")")"
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"
OS="$(uname -s)"
ENGINE_VERSION=$(cat "$FLUTTER_ROOT/bin/cache/engine.stamp")
ENGINE_REALM=$(cat "$FLUTTER_ROOT/bin/cache/engine.realm" | tr -d '[:space:]')
if [ ! -f "$ENGINE_STAMP" ] || [ "$ENGINE_VERSION" != `cat "$ENGINE_STAMP"` ]; then
command -v curl > /dev/null 2>&1 || {
>&2 echo
>&2 echo 'Missing "curl" tool. Unable to download Dart SDK.'
case "$OS" in
Darwin)
>&2 echo 'Consider running "brew install curl".'
;;
Linux)
>&2 echo 'Consider running "sudo apt-get install curl".'
;;
*)
>&2 echo "Please install curl."
;;
esac
echo
exit 1
}
command -v unzip > /dev/null 2>&1 || {
>&2 echo
>&2 echo 'Missing "unzip" tool. Unable to extract Dart SDK.'
case "$OS" in
Darwin)
echo 'Consider running "brew install unzip".'
;;
Linux)
echo 'Consider running "sudo apt-get install unzip".'
;;
*)
echo "Please install unzip."
;;
esac
echo
exit 1
}
# `uname -m` may be running in Rosetta mode, instead query sysctl
if [ "$OS" = 'Darwin' ]; then
# Allow non-zero exit so we can do control flow
set +e
# -n means only print value, not key
QUERY="sysctl -n hw.optional.arm64"
# Do not wrap $QUERY in double quotes, otherwise the args will be treated as
# part of the command
QUERY_RESULT=$($QUERY 2>/dev/null)
if [ $? -eq 1 ]; then
# If this command fails, we're certainly not on ARM
ARCH='x64'
elif [ "$QUERY_RESULT" = '0' ]; then
# If this returns 0, we are also not on ARM
ARCH='x64'
elif [ "$QUERY_RESULT" = '1' ]; then
ARCH='arm64'
else
>&2 echo "'$QUERY' returned unexpected output: '$QUERY_RESULT'"
exit 1
fi
set -e
else
# On x64 stdout is "uname -m: x86_64"
# On arm64 stdout is "uname -m: aarch64, arm64_v8a"
case "$(uname -m)" in
x86_64)
ARCH="x64"
;;
*)
ARCH="arm64"
;;
esac
fi
case "$OS" in
Darwin)
DART_ZIP_NAME="dart-sdk-darwin-${ARCH}.zip"
IS_USER_EXECUTABLE="-perm +100"
;;
Linux)
DART_ZIP_NAME="dart-sdk-linux-${ARCH}.zip"
IS_USER_EXECUTABLE="-perm /u+x"
;;
MINGW* | MSYS* )
DART_ZIP_NAME="dart-sdk-windows-x64.zip"
IS_USER_EXECUTABLE="-perm /u+x"
;;
*)
echo "Unknown operating system. Cannot install Dart SDK."
exit 1
;;
esac
>&2 echo "Downloading $OS $ARCH Dart SDK from Flutter engine $ENGINE_VERSION..."
# Use the default find if possible.
if [ -e /usr/bin/find ]; then
FIND=/usr/bin/find
else
FIND=find
fi
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
if [ -d "$DART_SDK_PATH" ]; then
rm -rf "$DART_SDK_PATH_OLD"
mv "$DART_SDK_PATH" "$DART_SDK_PATH_OLD"
fi
# install the new sdk
rm -rf -- "$DART_SDK_PATH"
mkdir -m 755 -p -- "$DART_SDK_PATH"
DART_SDK_ZIP="$FLUTTER_ROOT/bin/cache/$DART_ZIP_NAME"
# Conditionally set verbose flag for LUCI
verbose_curl=""
if [[ -n "$LUCI_CI" ]]; then
verbose_curl="--verbose"
fi
curl ${verbose_curl} --retry 3 --continue-at - --location --output "$DART_SDK_ZIP" "$DART_SDK_URL" 2>&1 || {
curlExitCode=$?
# Handle range errors specially: retry again with disabled ranges (`--continue-at -` argument)
# When this could happen:
# - missing support of ranges in proxy servers
# - curl with broken handling of completed downloads
# This is not a proper fix, but doesn't require any user input
# - mirror of flutter storage without support of ranges
#
# 33 HTTP range error. The range "command" didn't work.
# https://man7.org/linux/man-pages/man1/curl.1.html#EXIT_CODES
if [ $curlExitCode != 33 ]; then
return $curlExitCode
fi
curl ${verbose_curl} --retry 3 --location --output "$DART_SDK_ZIP" "$DART_SDK_URL" 2>&1
} || {
>&2 echo
>&2 echo "Failed to retrieve the Dart SDK from: $DART_SDK_URL"
>&2 echo "If you're located in China, please see this page:"
>&2 echo " https://flutter.dev/community/china"
>&2 echo
rm -f -- "$DART_SDK_ZIP"
exit 1
}
unzip -o -q "$DART_SDK_ZIP" -d "$FLUTTER_ROOT/bin/cache" || {
>&2 echo
>&2 echo "It appears that the downloaded file is corrupt; please try again."
>&2 echo "If this problem persists, please report the problem at:"
>&2 echo " https://github.com/flutter/flutter/issues/new?template=01_activation.yml"
>&2 echo
rm -f -- "$DART_SDK_ZIP"
exit 1
}
rm -f -- "$DART_SDK_ZIP"
$FIND "$DART_SDK_PATH" -type d -exec chmod 755 {} \;
$FIND "$DART_SDK_PATH" -type f $IS_USER_EXECUTABLE -exec chmod a+x,a+r {} \;
echo "$ENGINE_VERSION" > "$ENGINE_STAMP"
# delete any temporary sdk path
if [ -d "$DART_SDK_PATH_OLD" ]; then
rm -rf "$DART_SDK_PATH_OLD"
fi
fi

View file

@ -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.
# Based on the current repository state, writes the following two files to disk:
#
# bin/cache/engine.stamp <-- SHA of the commit that engine artifacts were built
# bin/cache/engine.realm <-- optional; ; whether the SHA is from presubmit builds or staging (bringup: true).
# ---------------------------------- NOTE ---------------------------------- #
#
# Please keep the logic in this file consistent with the logic in the
# `update_engine_version.sh` script in the same directory to ensure that Flutter
# continues to work across all platforms!
#
# https://github.com/flutter/flutter/blob/main/docs/tool/Engine-artifacts.md.
#
# Want to test this script?
# $ cd dev/tools
# $ dart test test/update_engine_version_test.dart
#
# -------------------------------------------------------------------------- #
$ErrorActionPreference = "Stop"
# When called from a submodule hook; these will override `git -C dir`
$env:GIT_DIR = $null
$env:GIT_INDEX_FILE = $null
$env:GIT_WORK_TREE = $null
$progName = Split-Path -parent $MyInvocation.MyCommand.Definition
$flutterRoot = (Get-Item $progName).parent.parent.FullName
# Generate a bin/cache directory, which won't initially exist for a fresh checkout.
New-Item -Path "$flutterRoot/bin/cache" -ItemType Directory -Force | Out-Null
# Check if FLUTTER_PREBUILT_ENGINE_VERSION is set
#
# This is intended for systems where we intentionally want to (ephemerally) use
# a specific engine artifacts version (which includes the Flutter engine and
# the Dart SDK), such as on CI.
#
# If set, it takes precedence over any other source of engine version.
if (![string]::IsNullOrEmpty($env:FLUTTER_PREBUILT_ENGINE_VERSION)) {
$engineVersion = $env:FLUTTER_PREBUILT_ENGINE_VERSION
# Check if bin/internal/engine.version exists and is a tracked file in git.
#
# This is intended for a user-shipped stable or beta release, where the release
# has a specific (pinned) engine artifacts version.
#
# If set, it takes precedence over the git hash.
} elseif (git -C "$flutterRoot" ls-files bin/internal/engine.version) {
$engineVersion = Get-Content -Path "$flutterRoot/bin/internal/engine.version"
# Fallback to using git to triangulate which upstream/master (or origin/master)
# the current branch is forked from, which would be the last version of the
# engine artifacts built from CI.
} else {
$engineVersion = Invoke-Expression "& '$flutterRoot/bin/internal/content_aware_hash.ps1'"
}
# Write the engine version out so downstream tools know what to look for.
Set-Content -Path $flutterRoot/bin/cache/engine.stamp -Value $engineVersion -Encoding Ascii
# The realm on CI is passed in.
if ($env:FLUTTER_REALM) {
Set-Content -Path $flutterRoot/bin/cache/engine.realm -Value $env:FLUTTER_REALM -Encoding Ascii
} else {
Set-Content -Path $flutterRoot/bin/cache/engine.realm -Value "" -Encoding Ascii
}

View file

@ -0,0 +1,71 @@
#!/usr/bin/env bash
# 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.
# Based on the current repository state, writes the following two files to disk:
#
# bin/cache/engine.stamp <-- SHA of the commit that engine artifacts were built
# bin/cache/engine.realm <-- optional; whether the SHA is from presubmit builds or staging (bringup: true).
# ---------------------------------- NOTE ---------------------------------- #
#
# Please keep the logic in this file consistent with the logic in the
# `update_engine_version.ps1` script in the same directory to ensure that Flutter
# continues to work across all platforms!
#
# https://github.com/flutter/flutter/blob/main/docs/tool/Engine-artifacts.md.
#
# Want to test this script?
# $ cd dev/tools
# $ dart test test/update_engine_version_test.dart
#
# -------------------------------------------------------------------------- #
set -e
# When called from a submodule hook; these will override `git -C dir`
unset GIT_DIR
unset GIT_INDEX_FILE
unset GIT_WORK_TREE
FLUTTER_ROOT="$(dirname "$(dirname "$(dirname "${BASH_SOURCE[0]}")")")"
# Generate a bin/cache directory, which won't initially exist for a fresh checkout.
mkdir -p "$FLUTTER_ROOT/bin/cache"
# Check if FLUTTER_PREBUILT_ENGINE_VERSION is set
#
# This is intended for systems where we intentionally want to (ephemerally) use
# a specific engine artifacts version (which includes the Flutter engine and
# the Dart SDK), such as on CI.
#
# If set, it takes precedence over any other source of engine version.
if [ -n "${FLUTTER_PREBUILT_ENGINE_VERSION}" ]; then
ENGINE_VERSION="${FLUTTER_PREBUILT_ENGINE_VERSION}"
# Check if bin/internal/engine.version exists and is a tracked file in git.
#
# This is intended for a user-shipped stable or beta release, where the release
# has a specific (pinned) engine artifacts version.
#
# If set, it takes precedence over the git hash.
elif [ -n "$(git -C "$FLUTTER_ROOT" ls-files bin/internal/engine.version)" ]; then
ENGINE_VERSION="$(cat "$FLUTTER_ROOT/bin/internal/engine.version")"
# Fallback to using git to triangulate which upstream/master (or origin/master)
# the current branch is forked from, which would be the last version of the
# engine artifacts built from CI.
else
ENGINE_VERSION=$("$FLUTTER_ROOT/bin/internal/content_aware_hash.sh")
fi
# Write the engine version out so downstream tools know what to look for.
echo $ENGINE_VERSION >"$FLUTTER_ROOT/bin/cache/engine.stamp"
# The realm on CI is passed in.
if [ -n "${FLUTTER_REALM}" ]; then
echo $FLUTTER_REALM >"$FLUTTER_ROOT/bin/cache/engine.realm"
else
echo "" >"$FLUTTER_ROOT/bin/cache/engine.realm"
fi

View file

@ -0,0 +1 @@
This directory is a placeholder intended to make Flutter's source tree match the expectations of [depot_tools](https://www.chromium.org/developers/how-tos/depottools/), which is used to build the Flutter engine.

View file

@ -0,0 +1,42 @@
# This file is used by dartdoc when generating API documentation for Flutter.
dartdoc:
# Before you can run dartdoc, the snippets tool needs to be
# activated with "pub global activate snippets <version>"
# The dev/bots/docs.sh script does this automatically.
tools:
snippet:
command: ["bin/cache/artifacts/snippets/snippets", "--output-directory=doc/snippets", "--type=snippet"]
description: "Creates sample code documentation output from embedded documentation samples."
sample:
command: ["bin/cache/artifacts/snippets/snippets", "--output-directory=doc/snippets", "--type=sample"]
description: "Creates full application sample code documentation output from embedded documentation samples."
dartpad:
command: ["bin/cache/artifacts/snippets/snippets", "--output-directory=doc/snippets", "--type=dartpad"]
description: "Creates full application sample code documentation output from embedded documentation samples and displays it in an embedded DartPad."
errors:
## Default errors of dartdoc:
- duplicate-file
- invalid-parameter
- tool-error
- unresolved-export
## Warnings that are elevated to errors:
- ambiguous-doc-reference
- ambiguous-reexport
- broken-link
- category-order-gives-missing-package-name
- deprecated
- ignored-canonical-for
- missing-example-file
- missing-from-search-index
- no-canonical-found
- no-documentable-libraries
- no-library-level-docs
- orphaned-file
- reexported-private-api-across-packages
- unknown-file
- unknown-html-fragment
- unknown-macro
- unresolved-doc-reference
## Ignores that are elevated to errors:
# - type-as-html # broken, https://github.com/dart-lang/dartdoc/issues/3545
- missing-constant-constructor

7
.flutter/dev/README.md Normal file
View file

@ -0,0 +1,7 @@
This directory contains tools and resources that the Flutter team uses
during the development of the framework. The tools in this directory
should not be necessary for developing Flutter applications, though of
course, they may be interesting if you are curious.
The tests in this directory are run in the `framework_tests_misc-*`
shards.

View file

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

View file

@ -0,0 +1,9 @@
This directory contains the source code for a test app used to test widget accessibility.
The directory structure is as follows:
* lib/use_cases contains widgets implementing specific use-cases that the team
has decided to be important to test.
* lib/use_cases/use_cases.dart provides a basic framework for use-cases, and a
list of use-cases included in the app.
* lib/common contains code shared by multiple use-cases.

View file

@ -0,0 +1,33 @@
# a11y_assessments
This app is used for internal testing.
## Release a new version for Android
pre-requisite: This can and should only be done by a googler and you must also
be in the flutter.dev play console account.
1. Follow https://docs.flutter.dev/deployment/android to create a keystore file if you don't already
have one.
2. Bump the pubspec.yaml version
3. Create a key.properties file in `android/` directory following this format.
```
storePassword=<password>
keyPassword=<password>
keyAlias=upload
storeFile=<keystore path>
```
4. Run `flutter build appbundle` and upload the artifact to play console
## Release a new version for iOS
pre-requisite: This can and should only be done by a googler and you must also
be in the FLUTTER.IO LLC developer account with iOS distribution permission.
1. Bump the pubspec.yaml version
2. Run `flutter build ipa` and upload the artifact to app store using transporter or other tools.
For more information, see https://docs.flutter.dev/deployment/ios.
3. Once the app is in TestFlight, add appropriate testers to the app so they can start testing.

View file

@ -0,0 +1 @@
include: ../../analysis_options.yaml

View file

@ -0,0 +1,14 @@
gradle-wrapper.jar
/.gradle
/captures/
/gradlew
/gradlew.bat
/local.properties
GeneratedPluginRegistrant.java
.cxx/
# Remember to never publicly share your keystore.
# See https://flutter.dev/to/reference-keystore
key.properties
**/*.keystore
**/*.jks

View file

@ -0,0 +1,85 @@
// 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'
}
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
android {
namespace = "com.example.a11y_assessments"
compileSdk = flutter.compileSdkVersion
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_17.toString()
}
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.
minSdk = flutter.minSdkVersion
targetSdk = flutter.targetSdkVersion
versionCode = flutterVersionCode.toInteger()
versionName = flutterVersionName
}
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
storePassword keystoreProperties['storePassword']
}
}
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.release
}
}
}
flutter {
source = '../..'
}
dependencies {}

View file

@ -0,0 +1,11 @@
<!-- 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. -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- The INTERNET permission is required for development. Specifically,
the Flutter tool needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>

View file

@ -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. -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application
android:label="a11y_assessments"
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher">
<activity
android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<!-- Specifies an Android theme to apply to this Activity as soon as
the Android process has started. This theme is visible to the user
while the Flutter UI initializes. After that, this theme continues
to determine the Window background behind the Flutter UI. -->
<meta-data
android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/NormalTheme"
/>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<!-- Don't delete the meta-data below.
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
<meta-data
android:name="flutterEmbedding"
android:value="2" />
</application>
</manifest>

View file

@ -0,0 +1,5 @@
package com.example.a11y_assessments
import io.flutter.embedding.android.FlutterActivity
class MainActivity : FlutterActivity()

View file

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 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. -->
<!-- Modify this file to customize your launch splash screen -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="?android:colorBackground" />
<!-- You can insert your own image assets here -->
<!-- <item>
<bitmap
android:gravity="center"
android:src="@mipmap/launch_image" />
</item> -->
</layer-list>

View file

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 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. -->
<!-- Modify this file to customize your launch splash screen -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@android:color/white" />
<!-- You can insert your own image assets here -->
<!-- <item>
<bitmap
android:gravity="center"
android:src="@mipmap/launch_image" />
</item> -->
</layer-list>

Binary file not shown.

After

Width:  |  Height:  |  Size: 544 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 442 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 721 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 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. -->
<resources>
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
<!-- Show a splash screen on the activity. Automatically removed when
the Flutter engine draws its first frame -->
<item name="android:windowBackground">@drawable/launch_background</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
Flutter UI initializes, as well as behind your Flutter UI while its
running.
This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
<item name="android:windowBackground">?android:colorBackground</item>
</style>
</resources>

View file

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 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. -->
<resources>
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
<style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
<!-- Show a splash screen on the activity. Automatically removed when
the Flutter engine draws its first frame -->
<item name="android:windowBackground">@drawable/launch_background</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
Flutter UI initializes, as well as behind your Flutter UI while its
running.
This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
<item name="android:windowBackground">?android:colorBackground</item>
</style>
</resources>

View file

@ -0,0 +1,11 @@
<!-- 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. -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- The INTERNET permission is required for development. Specifically,
the Flutter tool needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>

View file

@ -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.
// This file is auto generated.
// To update all the build.gradle files in the Flutter repo,
// See dev/tools/bin/generate_gradle_lockfiles.dart.
allprojects {
repositories {
google()
mavenCentral()
}
}
rootProject.layout.buildDirectory.value(rootProject.layout.buildDirectory.dir("../../build").get())
subprojects {
project.layout.buildDirectory.value(rootProject.layout.buildDirectory.dir(project.name).get())
}
subprojects {
project.evaluationDependsOn(':app')
dependencyLocking {
ignoredDependencies.add('io.flutter:*')
lockFile = file("${rootProject.projectDir}/project-${project.name}.lockfile")
def ignoreFile = file("${rootProject.projectDir}/.ignore-locking.md")
if (!ignoreFile.exists() && !project.hasProperty('local-engine-repo')) {
lockAllConfigurations()
}
}
}
tasks.register("clean", Delete) {
delete rootProject.layout.buildDirectory
}

View file

@ -0,0 +1,155 @@
# This is a Gradle generated file for dependency locking.
# Manual edits can break the build and are not advised.
# This file is expected to be part of source control.
androidx.databinding:databinding-common:8.11.1=classpath
androidx.databinding:databinding-compiler-common:8.11.1=classpath
com.android.application:com.android.application.gradle.plugin:8.11.1=classpath
com.android.databinding:baseLibrary:8.11.1=classpath
com.android.tools.analytics-library:crash:31.11.1=classpath
com.android.tools.analytics-library:protos:31.11.1=classpath
com.android.tools.analytics-library:shared:31.11.1=classpath
com.android.tools.analytics-library:tracker:31.11.1=classpath
com.android.tools.build.jetifier:jetifier-core:1.0.0-beta10=classpath
com.android.tools.build.jetifier:jetifier-processor:1.0.0-beta10=classpath
com.android.tools.build:aapt2-proto:8.11.1-12782657=classpath
com.android.tools.build:aaptcompiler:8.11.1=classpath
com.android.tools.build:apksig:8.11.1=classpath
com.android.tools.build:apkzlib:8.11.1=classpath
com.android.tools.build:builder-model:8.11.1=classpath
com.android.tools.build:builder-test-api:8.11.1=classpath
com.android.tools.build:builder:8.11.1=classpath
com.android.tools.build:bundletool:1.18.1=classpath
com.android.tools.build:gradle-api:8.11.1=classpath
com.android.tools.build:gradle-settings-api:8.11.1=classpath
com.android.tools.build:gradle:8.11.1=classpath
com.android.tools.build:manifest-merger:31.11.1=classpath
com.android.tools.build:transform-api:2.0.0-deprecated-use-gradle-api=classpath
com.android.tools.ddms:ddmlib:31.11.1=classpath
com.android.tools.layoutlib:layoutlib-api:31.11.1=classpath
com.android.tools.lint:lint-model:31.11.1=classpath
com.android.tools.lint:lint-typedef-remover:31.11.1=classpath
com.android.tools.utp:android-device-provider-ddmlib-proto:31.11.1=classpath
com.android.tools.utp:android-device-provider-gradle-proto:31.11.1=classpath
com.android.tools.utp:android-device-provider-profile-proto:31.11.1=classpath
com.android.tools.utp:android-test-plugin-host-additional-test-output-proto:31.11.1=classpath
com.android.tools.utp:android-test-plugin-host-apk-installer-proto:31.11.1=classpath
com.android.tools.utp:android-test-plugin-host-coverage-proto:31.11.1=classpath
com.android.tools.utp:android-test-plugin-host-emulator-control-proto:31.11.1=classpath
com.android.tools.utp:android-test-plugin-host-logcat-proto:31.11.1=classpath
com.android.tools.utp:android-test-plugin-result-listener-gradle-proto:31.11.1=classpath
com.android.tools:annotations:31.11.1=classpath
com.android.tools:common:31.11.1=classpath
com.android.tools:dvlib:31.11.1=classpath
com.android.tools:repository:31.11.1=classpath
com.android.tools:sdk-common:31.11.1=classpath
com.android.tools:sdklib:31.11.1=classpath
com.android:signflinger:8.11.1=classpath
com.android:zipflinger:8.11.1=classpath
com.google.android:annotations:4.1.1.4=classpath
com.google.api.grpc:proto-google-common-protos:2.48.0=classpath
com.google.auto.value:auto-value-annotations:1.6.2=classpath
com.google.code.findbugs:jsr305:3.0.2=classpath
com.google.code.gson:gson:2.11.0=classpath
com.google.crypto.tink:tink:1.7.0=classpath
com.google.dagger:dagger:2.28.3=classpath
com.google.errorprone:error_prone_annotations:2.30.0=classpath
com.google.flatbuffers:flatbuffers-java:1.12.0=classpath
com.google.guava:failureaccess:1.0.2=classpath
com.google.guava:guava:33.3.1-jre=classpath
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=classpath
com.google.j2objc:j2objc-annotations:3.0.0=classpath
com.google.jimfs:jimfs:1.1=classpath
com.google.protobuf:protobuf-java-util:3.25.5=classpath
com.google.protobuf:protobuf-java:3.25.5=classpath
com.google.testing.platform:core-proto:0.0.9-alpha03=classpath
com.googlecode.juniversalchardet:juniversalchardet:1.0.3=classpath
com.squareup:javapoet:1.10.0=classpath
com.squareup:javawriter:2.5.0=classpath
com.sun.activation:javax.activation:1.2.0=classpath
com.sun.istack:istack-commons-runtime:3.0.8=classpath
com.sun.xml.fastinfoset:FastInfoset:1.2.16=classpath
commons-codec:commons-codec:1.11=classpath
commons-io:commons-io:2.16.1=classpath
commons-logging:commons-logging:1.2=classpath
io.grpc:grpc-api:1.69.1=classpath
io.grpc:grpc-context:1.69.1=classpath
io.grpc:grpc-core:1.69.1=classpath
io.grpc:grpc-inprocess:1.69.1=classpath
io.grpc:grpc-netty:1.69.1=classpath
io.grpc:grpc-protobuf-lite:1.69.1=classpath
io.grpc:grpc-protobuf:1.69.1=classpath
io.grpc:grpc-stub:1.69.1=classpath
io.grpc:grpc-util:1.69.1=classpath
io.netty:netty-buffer:4.1.110.Final=classpath
io.netty:netty-codec-http2:4.1.110.Final=classpath
io.netty:netty-codec-http:4.1.110.Final=classpath
io.netty:netty-codec-socks:4.1.110.Final=classpath
io.netty:netty-codec:4.1.110.Final=classpath
io.netty:netty-common:4.1.110.Final=classpath
io.netty:netty-handler-proxy:4.1.110.Final=classpath
io.netty:netty-handler:4.1.110.Final=classpath
io.netty:netty-resolver:4.1.110.Final=classpath
io.netty:netty-transport-native-unix-common:4.1.110.Final=classpath
io.netty:netty-transport:4.1.110.Final=classpath
io.perfmark:perfmark-api:0.27.0=classpath
jakarta.activation:jakarta.activation-api:1.2.1=classpath
jakarta.xml.bind:jakarta.xml.bind-api:2.3.2=classpath
javax.annotation:javax.annotation-api:1.3.2=classpath
javax.inject:javax.inject:1=classpath
net.java.dev.jna:jna-platform:5.6.0=classpath
net.java.dev.jna:jna:5.6.0=classpath
net.sf.jopt-simple:jopt-simple:4.9=classpath
net.sf.kxml:kxml2:2.3.0=classpath
org.apache.commons:commons-compress:1.21=classpath
org.apache.httpcomponents:httpclient:4.5.14=classpath
org.apache.httpcomponents:httpcore:4.4.16=classpath
org.apache.httpcomponents:httpmime:4.5.6=classpath
org.bitbucket.b_c:jose4j:0.9.5=classpath
org.bouncycastle:bcpkix-jdk18on:1.79=classpath
org.bouncycastle:bcprov-jdk18on:1.79=classpath
org.bouncycastle:bcutil-jdk18on:1.79=classpath
org.checkerframework:checker-qual:3.43.0=classpath
org.codehaus.mojo:animal-sniffer-annotations:1.24=classpath
org.glassfish.jaxb:jaxb-runtime:2.3.2=classpath
org.glassfish.jaxb:txw2:2.3.2=classpath
org.jdom:jdom2:2.0.6=classpath
org.jetbrains.kotlin.android:org.jetbrains.kotlin.android.gradle.plugin:2.2.20=classpath
org.jetbrains.kotlin:abi-tools-api:2.2.20=classpath
org.jetbrains.kotlin:fus-statistics-gradle-plugin:2.2.20=classpath
org.jetbrains.kotlin:kotlin-build-statistics:2.2.20=classpath
org.jetbrains.kotlin:kotlin-build-tools-api:2.2.20=classpath
org.jetbrains.kotlin:kotlin-compiler-runner:2.2.20=classpath
org.jetbrains.kotlin:kotlin-daemon-client:2.2.20=classpath
org.jetbrains.kotlin:kotlin-gradle-plugin-annotations:2.2.20=classpath
org.jetbrains.kotlin:kotlin-gradle-plugin-api:2.2.20=classpath
org.jetbrains.kotlin:kotlin-gradle-plugin-idea-proto:2.2.20=classpath
org.jetbrains.kotlin:kotlin-gradle-plugin-idea:2.2.20=classpath
org.jetbrains.kotlin:kotlin-gradle-plugin-model:2.2.20=classpath
org.jetbrains.kotlin:kotlin-gradle-plugin:2.2.20=classpath
org.jetbrains.kotlin:kotlin-gradle-plugins-bom:2.2.20=classpath
org.jetbrains.kotlin:kotlin-klib-commonizer-api:2.2.20=classpath
org.jetbrains.kotlin:kotlin-native-utils:2.2.20=classpath
org.jetbrains.kotlin:kotlin-reflect:2.1.20=classpath
org.jetbrains.kotlin:kotlin-stdlib-common:2.1.20=classpath
org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.1.20=classpath
org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.1.20=classpath
org.jetbrains.kotlin:kotlin-stdlib:2.1.20=classpath
org.jetbrains.kotlin:kotlin-tooling-core:2.2.20=classpath
org.jetbrains.kotlin:kotlin-util-io:2.2.20=classpath
org.jetbrains.kotlin:kotlin-util-klib-metadata:2.2.20=classpath
org.jetbrains.kotlin:kotlin-util-klib:2.2.20=classpath
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.0=classpath
org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.4.0=classpath
org.jetbrains.kotlinx:kotlinx-serialization-core:1.4.0=classpath
org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.4.0=classpath
org.jetbrains.kotlinx:kotlinx-serialization-json:1.4.0=classpath
org.jetbrains:annotations:23.0.0=classpath
org.jvnet.staxex:stax-ex:1.8.1=classpath
org.ow2.asm:asm-analysis:9.7.1=classpath
org.ow2.asm:asm-commons:9.7.1=classpath
org.ow2.asm:asm-tree:9.7.1=classpath
org.ow2.asm:asm-util:9.7.1=classpath
org.ow2.asm:asm:9.7.1=classpath
org.slf4j:slf4j-api:1.7.30=classpath
org.tensorflow:tensorflow-lite-metadata:0.2.0=classpath
empty=

View file

@ -0,0 +1,2 @@
org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError
android.useAndroidX=true

Some files were not shown because too many files have changed in this diff Show more