mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-09-13 07:55:18 +00:00
Merge pull request #1 from Rahul-Sahani04/enhance-media-controls
Enhance media controls and add social sharing features
This commit is contained in:
commit
80d5f870bb
7027
flutter/.ci.yaml
Normal file
7027
flutter/.ci.yaml
Normal file
File diff suppressed because it is too large
Load Diff
34
flutter/.gitattributes
vendored
Normal file
34
flutter/.gitattributes
vendored
Normal file
@ -0,0 +1,34 @@
|
||||
# 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
|
||||
|
||||
# Never perform LF normalization on these files
|
||||
*.ico binary
|
||||
*.jar binary
|
||||
*.png binary
|
||||
*.zip binary
|
37
flutter/.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
37
flutter/.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
@ -0,0 +1,37 @@
|
||||
<!--
|
||||
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].
|
||||
|
||||
<!-- 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
|
22
flutter/.github/dependabot.yml
vendored
Normal file
22
flutter/.github/dependabot.yml
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
# 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"
|
||||
- "team-infra"
|
||||
- "autosubmit"
|
||||
ignore:
|
||||
- dependency-name: "codecov/codecov-action"
|
||||
update-types: ["version-update:semver-patch"]
|
252
flutter/.github/labeler.yml
vendored
Normal file
252
flutter/.github/labeler.yml
vendored
Normal file
@ -0,0 +1,252 @@
|
||||
# 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*'
|
||||
|
||||
team:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- docs/about/**/*
|
||||
- docs/contributing/**/*
|
||||
- docs/postmortems/**/*
|
||||
|
||||
team-android:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- docs/platform/android/**/*
|
||||
|
||||
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/**/*
|
||||
|
||||
team-release:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- docs/releases/**/*
|
||||
|
||||
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/**/*
|
69
flutter/.github/release.yml
vendored
Normal file
69
flutter/.github/release.yml
vendored
Normal file
@ -0,0 +1,69 @@
|
||||
changelog:
|
||||
exclude:
|
||||
authors:
|
||||
- engine-flutter-autoroll
|
||||
- fluttergithubbot
|
||||
labels:
|
||||
- passed first triage
|
||||
- passed secondary triage
|
||||
- team-release
|
||||
- "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:
|
||||
- '*'
|
152
flutter/.gitignore
vendored
Normal file
152
flutter/.gitignore
vendored
Normal file
@ -0,0 +1,152 @@
|
||||
# Do not remove or rename entries in this file, only add new ones
|
||||
# See https://github.com/flutter/flutter/issues/128635 for more context.
|
||||
|
||||
# This is dynamic in a monorepo
|
||||
bin/internal/engine.version
|
||||
|
||||
# Miscellaneous
|
||||
*.class
|
||||
*.lock
|
||||
*.log
|
||||
*.pyc
|
||||
*.swp
|
||||
.DS_Store
|
||||
.atom/
|
||||
.buildlog/
|
||||
.history
|
||||
.svn/
|
||||
|
||||
# IntelliJ related
|
||||
*.iml
|
||||
*.ipr
|
||||
*.iws
|
||||
.idea/
|
||||
|
||||
# Visual Studio Code related
|
||||
.classpath
|
||||
.project
|
||||
.settings/
|
||||
.vscode/*
|
||||
.ccls-cache
|
||||
|
||||
# Flutter repo-specific
|
||||
/bin/cache/
|
||||
/bin/internal/bootstrap.bat
|
||||
/bin/internal/bootstrap.sh
|
||||
/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
|
||||
.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/local.properties
|
||||
**/android/**/GeneratedPluginRegistrant.java
|
||||
**/android/key.properties
|
||||
*.jks
|
||||
|
||||
# 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
|
134
flutter/AUTHORS
Normal file
134
flutter/AUTHORS
Normal file
@ -0,0 +1,134 @@
|
||||
# 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>
|
839
flutter/CHANGELOG.md
Normal file
839
flutter/CHANGELOG.md
Normal file
@ -0,0 +1,839 @@
|
||||
In general, our philosophy is to update the `stable` channel on a quarterly basis with feature updates. In the intervening period, occasionally we may decide a bug or regression warrants a hotfix. We tend to be extremely conservative with these hotfixes, since there's always a risk that fixing one bug introduces a new one, and we want the `stable` channel to always represent our most tested builds.
|
||||
|
||||
We intend to announce hotfixes to the [flutter-announce](https://groups.google.com/forum/#!forum/flutter-announce) group, and we recommend that you subscribe to that list if you publish an application using Flutter.
|
||||
|
||||
Note that we only hotfix the latest version -- if you see bugs on older versions of the `stable` channel, please consider moving to the latest `stable` channel version.
|
||||
|
||||
To ensure that you have the latest stable version with the hotfixes listed below, use the flutter tool at the command line as follows:
|
||||
|
||||
```
|
||||
$ flutter channel stable
|
||||
$ flutter upgrade
|
||||
```
|
||||
|
||||
<!--
|
||||
INTERNAL NOTE: PLEASE DON'T JUST PASTE ISSUE TITLES!
|
||||
|
||||
Make sure that the text here helps customers understand
|
||||
whether they are likely to be affected by the issue,
|
||||
without them needing to read each issue individually.
|
||||
Our goal is to make the list easy for them to scan.
|
||||
|
||||
More information and tips:
|
||||
docs/releases/Hotfix-Documentation-Best-Practices.md
|
||||
|
||||
INTERNAL NOTE
|
||||
-->
|
||||
|
||||
## Flutter 3.29.1 Changes
|
||||
|
||||
### [3.29.1](https://github.com/flutter/flutter/releases/tag/3.29.1)
|
||||
|
||||
- [flutter/163830](https://github.com/flutter/flutter/pull/163830) - Fix Tab linear and elastic animation blink.
|
||||
- [flutter/164119](https://github.com/flutter/flutter/pull/164119) - Configuration changes to run test on macOS 14 for Flutter's CI.
|
||||
- [flutter/164155](https://github.com/flutter/flutter/pull/164155) - Roll .ci.yaml changes into the LUCI configuration only when the master branch is updated.
|
||||
- [flutter/164191](https://github.com/flutter/flutter/pull/164191) - Improve safaridriver launch process in Flutter's CI testing.
|
||||
- [flutter/164193](https://github.com/flutter/flutter/pull/164193) - Provide guided error message when app crashes due to JIT restriction on iPhones.
|
||||
- [flutter/164050](https://github.com/flutter/flutter/pull/164050) - Fixes test reorderable_list_test.dart failing for certain ordering seeds, such as 20250221.
|
||||
- [flutter/163316](https://github.com/flutter/flutter/pull/163316) - Configuration changes to run test on macOS 14 for Flutter's CI.
|
||||
- [flutter/163581](https://github.com/flutter/flutter/pull/163581) - Fix crash when using BackdropFilters in certain GLES drivers.
|
||||
- [flutter/163616](https://github.com/flutter/flutter/pull/163616) - Disable Vulkan on known bad Xclipse GPU drivers.
|
||||
- [flutter/163666](https://github.com/flutter/flutter/pull/163666) - always post new task during gesture dispatch.
|
||||
- [flutter/163667](https://github.com/flutter/flutter/pull/163667) - ensure that OpenGL "flipped" textures do not leak via texture readback.
|
||||
- [flutter/163741](https://github.com/flutter/flutter/pull/163741) - Flutter tool respects tracked engine.version.
|
||||
- [flutter/163754](https://github.com/flutter/flutter/pull/163754) - Fix text glitch when returning to foreground.
|
||||
- [flutter/163058](https://github.com/flutter/flutter/pull/163058) - Fixes jittery
|
||||
glyphs.
|
||||
- [flutter/163201](https://github.com/flutter/flutter/pull/163201) - Fixes buttons with icons ignore foregroundColor.
|
||||
- [flutter/163265](https://github.com/flutter/flutter/pull/163265) - disable Vulkan on known bad exynos SoCs.
|
||||
- [flutter/163261](https://github.com/flutter/flutter/pull/163261) - Fixes for Impeller DrawVertices issues involving snapshots with empty sizes
|
||||
- [flutter/163672](https://github.com/flutter/flutter/pull/163672) - Check for tracked engine.version before overriding
|
||||
|
||||
## Flutter 3.29 Changes
|
||||
|
||||
### [3.29.0](https://github.com/flutter/flutter/releases/tag/3.29.0)
|
||||
Initial stable release.
|
||||
|
||||
## Flutter 3.27 Changes
|
||||
|
||||
### [3.27.2](https://github.com/flutter/flutter/releases/tag/3.27.2)
|
||||
|
||||
- [flutter/159729](https://github.com/flutter/flutter/issues/159729) Flutter module template triggers a warning when built for Android.
|
||||
- [flutter/161176](https://github.com/flutter/flutter/issues/161176) Dropdown Menu can create an infinite loop.
|
||||
- [flutter/161330](https://github.com/flutter/flutter/issues/161330) Using ScrollViewKeyboardDismissBehavior.onDrag in a SingleChildScrollView causes text fields to immediately unfocus if the keyboard opening scrolls the text field to keep it visible.
|
||||
- [flutter/160127](https://github.com/flutter/flutter/issues/160127) Some Flutter web plugins do not add the `crossOrigin` property to <img> tags.
|
||||
- [flutter/160155](https://github.com/flutter/flutter/issues/160155) Failed assertion in web engine: "The targeted input element must be the active input element".
|
||||
- [flutter/160199](https://github.com/flutter/flutter/issues/160199) Some images on the web render blank.
|
||||
- [flutter/160459](https://github.com/flutter/flutter/issues/160459) Incorrect Z order rendering in drawPoints may cause lines to overlap when one should be drawn in front of the other.
|
||||
- [flutter/160409](https://github.com/flutter/flutter/issues/160409) App may crashes because of obsolete engine assertion.
|
||||
- [flutter/158192](https://github.com/flutter/flutter/issues/158192) Positions of display cutouts on Android may not update - as returned by MediaQuery and used by SafeArea - upon screen orientation change.
|
||||
|
||||
### [3.27.1](https://github.com/flutter/flutter/releases/tag/3.27.1)
|
||||
|
||||
- [flutter/160041](https://github.com/flutter/flutter/issues/160041) - [Impeller][Android] Disables Impeller on older Android devices.
|
||||
- [flutter/160206](https://github.com/flutter/flutter/issues/160206) - [Impeller][Android] Disables Android HardwareBuffer based swapchains on all devices.
|
||||
- [flutter/160208](https://github.com/flutter/flutter/issues/160208) - [iOS] Fixes an issue on iOS preventing the ability to tap web view links in some plugins.
|
||||
|
||||
### [3.27.0](https://github.com/flutter/flutter/releases/tag/3.27.0)
|
||||
Initial stable release.
|
||||
|
||||
## Flutter 3.24 Changes
|
||||
|
||||
### [3.24.5](https://github.com/flutter/flutter/releases/tag/3.24.5)
|
||||
- [flutter/158125](https://github.com/flutter/flutter/pull/158125) - [iOS] Fixed a tool issue causing failures when `flutter build ios-framework --xcframework` copies Flutter debug symbols.
|
||||
- [flutter/56301](https://github.com/flutter/engine/pull/56301) - [Android] Fixes a crash on Android devices when the surface is released unexpectedly when using PlatformView's.
|
||||
|
||||
### [3.24.4](https://github.com/flutter/flutter/releases/tag/3.24.4)
|
||||
- [dart 3.5.4 changelog](https://github.com/dart-lang/sdk/blob/stable/CHANGELOG.md#354---2024-10-17)
|
||||
- [flutter/154915](https://github.com/flutter/engine/pull/55366) - [macOS] Comply with the new Apple privacy manifest policy for the macOS Flutter engine framework and prevent the "Missing privacy manifest" warning when submitting a macOS app to the App Store.
|
||||
- [flutter/153471](https://github.com/flutter/flutter/issues/153471) - [Tool] Fixes RPCError crash when setting up log filtering for Android devices.
|
||||
|
||||
### [3.24.3](https://github.com/flutter/flutter/releases/tag/3.24.3)
|
||||
- [dart 3.5.3 changelog](https://github.com/dart-lang/sdk/blob/stable/CHANGELOG.md#353---2024-09-11)
|
||||
- [flutter/154275](https://github.com/flutter/flutter/issues/154275) - [Android] Fixes performance issues on Android caused by engine threads not matching the core count.
|
||||
- [flutter/154276](https://github.com/flutter/flutter/issues/154276) - [Impeller] Fixes an issue on iOS preventing mesh gradients from rendering correctly.
|
||||
- [flutter/154349](https://github.com/flutter/flutter/issues/154349) - [Wasm] Fixes an issue on web causing Platform Views to break when compiled to Wasm.
|
||||
- [flutter/154564](https://github.com/flutter/flutter/issues/154564) - [Impeller][iOS] Fixes an issue when using Impeller on iOS when using backdrop filters on older iPads, causing the GPU to hang.
|
||||
- [flutter/154712](https://github.com/flutter/flutter/issues/154712) - [iOS] Fixes an issue on iOS causing video playback to flicker.
|
||||
- [flutter/154892](https://github.com/flutter/flutter/issues/154892) - [Impeller][iOS] Fixes an issue when using Impeller on iOS causing a memory leak when using Platform Views.
|
||||
- [flutter/154536](https://github.com/flutter/flutter/issues/154536) - [Tool] Fixes a CLI crash that occurs when shutting down after running a Flutter app on a browser.
|
||||
- [flutter/154720](https://github.com/flutter/flutter/pull/154720) - Fixes an issue with the `Drawer` widget, causing it to open or close incorrectly.
|
||||
- [flutter/154944](https://github.com/flutter/flutter/pull/154944) - [Tool] Fixes a Flutter tool crash that occurs when building Flutter modules for Android when using AGP 8.0+.
|
||||
|
||||
### [3.24.2](https://github.com/flutter/flutter/releases/tag/3.24.2)
|
||||
- [Dart 3.5.2 Changelog](https://github.com/dart-lang/sdk/blob/stable/CHANGELOG.md#352---2024-08-28)
|
||||
- [flutter/153949](https://github.com/flutter/flutter/issues/153949) - Fixes a crash on Android when deleting `EditableText` inside `CupertinoPageRoute`, with a CJK (chinese, japanese, korean) keyboard.
|
||||
- [flutter/153939](https://github.com/flutter/flutter/issues/153939) - Fixes an issue on iOS where Flutter `TextField`s may stop accepting input.
|
||||
- [flutter/152420](https://github.com/flutter/flutter/issues/152420) - Fixes scrolling jank on Android and iOS when a `SelectionArea`/`SelectableRegion` is used as a child of a Scrollable like `ListView` or `PageView`.
|
||||
- [flutter/154199](https://github.com/flutter/flutter/pull/154199) - Removes excessive logging when building a freshly created template app for Android.
|
||||
- [flutter/153967](https://github.com/flutter/flutter/pull/153967) - Fixes a host build failure on macOS when the `native assets` experiment is enabled, and there are no native asset frameworks to codesign.
|
||||
- [flutter/153769](https://github.com/flutter/flutter/pull/153769) - When running a Flutter app, display a concise error message when connection to the device is lost.
|
||||
- [flutter/154270](https://github.com/flutter/flutter/pull/154270) - Prevent preemptive gradle crash for android builds that would fail to build anyway but with a confusing error message.
|
||||
- [flutter/54735](https://github.com/flutter/engine/pull/54735) - Fixes an error on Flutter Web where `onTap` is called twice on various widgets (`GestureDetector`, `InkWell`) when semantics are enabled.
|
||||
|
||||
### [3.24.1](https://github.com/flutter/flutter/releases/tag/3.24.1)
|
||||
|
||||
- [dart/56464](https://github.com/dart-lang/sdk/issues/56464) - Fixes resolving `include:` in `analysis_options.yaml` file in a nested folder in the workspace.
|
||||
- [dart/56423](https://github.com/dart-lang/sdk/issues/56423) - Fixes source maps generated by `dart compile wasm` when optimizations are enabled.
|
||||
- [dart/56374](https://github.com/dart-lang/sdk/issues/56374) - Fixes a bug in the `dart2wasm` compiler in unsound `-O3` / `-O4` modes where a implicit setter for a field of generic type will store null instead of the field value.
|
||||
- [dart/56440](https://github.com/dart-lang/sdk/issues/56440) - Fixes a bug in the `dart2wasm` compiler that can trigger in certain situations when using partial instantiations of generic tear-offs (constructors or static methods) in constant expressions.
|
||||
- [dart/56457](https://github.com/dart-lang/sdk/issues/56457) - The algorithm for computing the standard upper bound of two types, also known as UP, is provided the missing implementation for `StructuralParameterType` objects. In some corner cases the lacking implementation resulted in a crash of the compiler.
|
||||
- [flutter/152047](https://github.com/flutter/flutter/issues/152047) - [Web] Fixes an issue in Flutter Web apps where when semantics are enabled, tapping on the label of a checkbox in a mobile browser won't togle the checkbox.
|
||||
- [flutter/153308](https://github.com/flutter/flutter/issues/153308) - [Web] Adds source map support in `flutter run` / `flutter build` for `dart2wasm` for debugging in Chrome DevTools.
|
||||
- [flutter/54446](https://github.com/flutter/engine/pull/54446) - [Web] Fixes an issue in Flutter Web apps where the app may crash if CanvasKit is loaded from the network instead of a cache.
|
||||
- [flutter/152955](https://github.com/flutter/flutter/issues/152955) - [Impeller] Fixes an issue where when using unbound `saveLayers` rendering issues would occur.
|
||||
- [flutter/153037](https://github.com/flutter/flutter/issues/153037) - [Impeller] Fixes an issue where RTL glyphs would render incorrectly.
|
||||
- [flutter/153038](https://github.com/flutter/flutter/issues/153038) - [Impeller] Fixes an issue where padding would be applied incorrectly in `Canvas.drawVerticies` when using texture coordinates.
|
||||
- [flutter/153041](https://github.com/flutter/flutter/issues/153041) - [Impeller] Fixes an rare issue causing applications to crash when using platform views on older iPhones.
|
||||
- [flutter/153188](https://github.com/flutter/flutter/issues/153188) - [Impeller] Fixes a rendering issue on iOS devices using Impeller where clips do not appear around entities drawn with certain advanced blend modes.
|
||||
- [flutter/54513](https://github.com/flutter/engine/pull/54513) - [iOS/MacOS] Fixes an issue preventing iOS Apps Store validation from failing for Flutter apps using Xcode versions before Xcode 16.
|
||||
- [flutter/54518](https://github.com/flutter/engine/pull/54518) - Fixes an issue on OpenGL ES devices where a black screen would appear instead of the Flutter app output.
|
||||
- [flutter/153117](https://github.com/flutter/flutter/pull/153117) [iOS/MacOS] Fixes an issue where compilation errors are not displayed in the output of `flutter run` when using Xcode 16.
|
||||
- [flutter/153321](https://github.com/flutter/flutter/issues/153321) - [Desktop] Fixes an issue where older Windows devices could not run Flutter apps built using Flutter 3.21 or later.
|
||||
- [flutter/153294](https://github.com/flutter/flutter/pull/153294) [Tool] Fixes an issue in the Flutter tool streamlining the crash message that occurs when running `flutter run -d chrome` and Chrome is closed before Flutter tries to close it.
|
||||
- [flutter/153579](https://github.com/flutter/flutter/pull/153579) [Tool] Fixes an issue where users would experience large crash messages when `flutter run` or `flutter debug-adapter` are unable to connect to the Flutter web app.
|
||||
|
||||
### [3.24.0](https://github.com/flutter/flutter/releases/tag/3.24.0)
|
||||
Initial stable release.
|
||||
|
||||
## Flutter 3.22 Changes
|
||||
|
||||
### [3.22.3](https://github.com/flutter/flutter/releases/tag/3.22.3) (July 17, 2024)
|
||||
|
||||
- [dart/55979](https://github.com/dart-lang/sdk/issues/55979) - Fixes an issue where `const bool.fromEnvironment('dart.library.ffi')` is true and conditional import condition `dart.library.ffi` is true in dart2wasm.
|
||||
- [dart/55943](https://github.com/dart-lang/sdk/issues/55943) - Fixes an issue where FFI calls with variadic arguments on MacOS Arm64 would mangle the arguments.
|
||||
- [flutter/149700](https://github.com/flutter/flutter/issues/149700) - [Impeller] Fixes rendering corruption when running on Intel mac simulators.
|
||||
- [flutter/149701](https://github.com/flutter/flutter/issues/149701) - [Impeller] Fixes an issue on iOS that causese paths to render incorrectly.
|
||||
- [flutter/149702](https://github.com/flutter/flutter/issues/149702) - [Impeller] Corrects and issue on iOs where coverage computation results in distored pixels in Impeller targets.
|
||||
- [flutter/149704](https://github.com/flutter/flutter/issues/149704) - [Impeller] Fixes and issue on iOS where flickering may be occur when translating a blurred rounded rectangle.
|
||||
- [flutter/149745](https://github.com/flutter/flutter/issues/149745) - [Impeller] Fixes a segfault on iOS when tessellating empty convex polygons.
|
||||
- [flutter/149771](https://github.com/flutter/flutter/issues/149771) - [Impeller] Fixes a rendering error on iOS when advanced blend is double scaled.
|
||||
- [flutter/53183](https://github.com/flutter/engine/pull/53183) - Fixes an issue where Linux apps show visual corruption on some frames.
|
||||
- [flutter/149856](https://github.com/flutter/flutter/issues/149856) - Clarifies Flutter Fix log on how to update Kotlin Gradle Plugin that was introduced in Flutter 3.19.
|
||||
- [flutter/150617](https://github.com/flutter/flutter/pull/150617) - Fixes a bug in `flutter test` where `--flavor` wasn't considered when validating cached assets, causing the flavor-conditional asset bundling feature to not work as expected.
|
||||
- [flutter/150724](https://github.com/flutter/flutter/issues/150724) - Fixes an issue on Web+Linux that prevents users from inputting data using the numpad.
|
||||
- [flutter/150787](https://github.com/flutter/flutter/pull/150787) - Fixes and issue on Windows when running certain commands, such as `flutter run` or `flutter build`, users get a lengthy crash message including the full contents of a FileSystemException.
|
||||
|
||||
### [3.22.2](https://github.com/flutter/flutter/releases/tag/3.22.2) (June 06, 2024)
|
||||
* [dart/55818](https://github.com/dart-lang/sdk/issues/55818) - Fixes an issue where `DART_VM_OPTIONS` were not correctly parsed for standalone Dart executables created with `dart compile exe`.
|
||||
* [dart/55873](https://github.com/dart-lang/sdk/issues/55873) - Fixes a bug in dart2wasm that can result in a runtime error that says `array.new_fixed()` has a constant larger than 10000.
|
||||
* [dart/55894](https://github.com/dart-lang/sdk/issues/55894) - Adds support for `--enable-experiment` flag to `dart compile` wasm.
|
||||
* [dart/55895](https://github.com/dart-lang/sdk/issues/55895) - Fixes an issue in dart2wasm compiler that can result in incorrect nullability of type parameter.
|
||||
* [dart/55890](https://github.com/dart-lang/sdk/issues/55890) - Disallows `dart:ffi` imports in user code in dart2wasm as dart2wasm's currently only supports a small subset of `dart:ffi`.
|
||||
* [flutter/148885](https://github.com/flutter/flutter/issues/148885) - Fixes a platform view issue on android 14 when multiple activities are used and `onMemoryTrim` is called.
|
||||
* [flutter/149178](https://github.com/flutter/flutter/issues/149178) - Fixes an issue on iOS where users are unable to focus on a `TextField` or open the keyboard again after side pop from another screen.
|
||||
* [flutter/149210](https://github.com/flutter/flutter/issues/149210) - Fixes an `EditableText` crash that occurs when a custom `TextEditingController` only implements the `TextEditingController` interface.
|
||||
* [flutter/149588](https://github.com/flutter/flutter/issues/149588) - Fixes a crash that occurs when rendering children in `TwoDimentionalViewport` using keep alive widgets (e.g InkWell).
|
||||
* [flutter/148916](https://github.com/flutter/flutter/pull/148916) - Fixes an issue in the `ColorScheme.fromSeed` method to respect the seed color even if the seed color is very bright.
|
||||
* [flutter/149345](https://github.com/flutter/flutter/pull/149345) - Adds a service extension that DevTools uses to support a "Track widget build counts" feature in DevTools 2.36.0.
|
||||
* [flutter/149378](https://github.com/flutter/flutter/pull/149378) - Fixes a focus issue on iOS and MacOS that causes `TextFields` to not function after cupertino back swipes.
|
||||
* [flutter/52987](https://github.com/flutter/engine/pull/52987) - Fixes an issue on Android where platform view inputs are mapped to the wrong location.
|
||||
|
||||
### [3.22.1](https://github.com/flutter/flutter/releases/tag/3.22.1) (May 22, 2024)
|
||||
* [dart/55714](https://github.com/dart-lang/sdk/issues/55714) - Fixes a bug in the CFE which could manifest as compilation errors of Flutter
|
||||
web apps when compiled with dart2wasm.
|
||||
* [dart/55758](https://github.com/dart-lang/sdk/issues/55758) - Fixes a bug in the pub client, such that `dart run` will not interfere with
|
||||
Flutter l10n (at least for most cases).
|
||||
* [flutter/147142](https://github.com/flutter/flutter/issues/147142) - Fixes a read/write permission issue when building Flutter apps for MacOS.
|
||||
|
||||
### [3.22.0](https://github.com/flutter/flutter/releases/tag/3.22.0) (May 14, 2024)
|
||||
Initial stable release.
|
||||
|
||||
## Flutter 3.19 Changes
|
||||
|
||||
### [3.19.6](https://github.com/flutter/flutter/releases/tag/3.19.6) (April 17, 2024)
|
||||
* [dart/55430](https://github.com/dart-lang/sdk/issues/55430) - Fixes an issue with JS interop in dart2wasm where JS interop methods that used the enclosing library‘s @JS annotation were actually using the invocation’s enclosing library's @JS annotation.
|
||||
* [flutter/145563](https://github.com/flutter/flutter/issues/145563) - Fixes severe performance regression on Firefox in v. 3.19.
|
||||
* [flutter/144439](https://github.com/flutter/flutter/issues/144439) - Removes the --enable-impeller run flag and FLTEnableImpeller plist key on iOS.
|
||||
|
||||
### [3.19.5](https://github.com/flutter/flutter/releases/tag/3.19.5) (March 28, 2024)
|
||||
* [dart/55211](https://github.com/dart-lang/sdk/issues/55211) - Fixes an issue where dart vm crashed when running on pre-SSE41 older CPUs on Windows.
|
||||
|
||||
### [3.19.4](https://github.com/flutter/flutter/releases/tag/3.19.4) (March 21, 2024)
|
||||
* [flutter/144211](https://github.com/flutter/flutter/issues/144211) - Reverts a clipping optimization that is broken when multiple clips are applied with a backdrop filter.
|
||||
* [flutter/144213](https://github.com/flutter/flutter/issues/144213) - Fix flickering of gaussian blurs in scrolling containers.
|
||||
* [dart/55158](https://github.com/dart-lang/sdk/issues/55158) - Fixes an exception when executing hot reload after making compilation-successful changes.
|
||||
* [dart/55194](https://github.com/dart-lang/sdk/issues/55194) - Fix crashes on web platforms that contains an extension type declaration where the extension type constructor invokes a redirecting factory in its initializer.
|
||||
* [dart/55184](https://github.com/dart-lang/sdk/issues/55184) - Fix issues where it is unable to run commit queue and post-submit testing on beta and stable when Goma is shut down.
|
||||
* [dart/55240](https://github.com/dart-lang/sdk/issues/55240) - Fix DateTime.timeZoneName on Windows.
|
||||
|
||||
### [3.19.3](https://github.com/flutter/flutter/releases/tag/3.16.3) (March 07, 2024)
|
||||
* [flutter/144565](https://github.com/flutter/flutter/issues/144565) - Fixes a tool crash when attempting to render a frame with raster stats on an application with the Impeller backend.
|
||||
* [dart/55057](https://github.com/dart-lang/sdk/issues/55057) - Fixes an issue in dart2js where object literal constructors in interop extension types would fail to compile without an `@JS` annotation on the library.
|
||||
* [dart/55095](https://github.com/dart-lang/sdk/issues/55095) - Disallows certain types involving extension types from being used as the operand of an `await` expression, unless the extension type itself implements`Future`.
|
||||
|
||||
### [3.19.2](https://github.com/flutter/flutter/releases/tag/3.19.2) (February 28, 2024)
|
||||
* [flutter/143886](https://github.com/flutter/flutter/issues/143886) - Fixes a parsing issue that caused the Flutter tool to crash in some circumstances.
|
||||
|
||||
### [3.19.1](https://github.com/flutter/flutter/releases/tag/3.19.1) (February 21, 2024)
|
||||
* [flutter/143574](https://github.com/flutter/flutter/issues/143574) - Fixes an issue in Flutter web builds that disallowed the use of`--flavor` while launching.
|
||||
|
||||
## Flutter 3.16 Changes
|
||||
|
||||
### [3.16.9](https://github.com/flutter/flutter/releases/tag/3.16.9) (January 25, 2024)
|
||||
* [dart/54699](https://github.com/dart-lang/sdk/issues/54699) - Fix an issue that causes Flutter apps to freeze when breakpoints are added to multiple isolates at the same time and an issue that causes Flutter apps to crash during hot reload.
|
||||
|
||||
### [3.16.8](https://github.com/flutter/flutter/releases/tag/3.16.8) (January 17, 2024)
|
||||
* [dart/54494](https://github.com/dart-lang/sdk/issues/54494) - Fix Dart2js stack overflow in value range analysis.
|
||||
|
||||
### [3.16.7](https://github.com/flutter/flutter/releases/tag/3.16.7) (January 11, 2024)
|
||||
* [dart/54427](https://github.com/dart-lang/sdk/issues/54427) - Upgrades Dart DevTools to version 2.28.5.
|
||||
* [dart/54428](https://github.com/dart-lang/sdk/issues/54428) - Fixes an issue with serving static DevTools assets.
|
||||
|
||||
### [3.16.6](https://github.com/flutter/flutter/releases/tag/3.16.6) (January 10, 2024)
|
||||
* [flutter/141017](https://github.com/flutter/flutter/issues/141017) - Migrates event sent with every command for analytics.
|
||||
* [flutter/136060](https://github.com/flutter/flutter/issues/136060) - Fixes Xcode 15 crashes EXC_BAD_ACCESS when using the Networking framework.
|
||||
* [flutter/140416](https://github.com/flutter/flutter/issues/140416) - Fixes PathNotFoundException deleting temp dir in IOSCoreDeviceControl._listCoreDevices.
|
||||
* [dartlang/webdev/2297](https://github.com/dart-lang/webdev/issues/2297) - Fixes DWDS error when debugging on web.
|
||||
|
||||
### [3.16.5](https://github.com/flutter/flutter/releases/tag/3.16.5) (December 20, 2023)
|
||||
* [flutter/138711](https://github.com/flutter/flutter/issues/138711) - Fixes AvailabilityVersionCheck failure on iOS
|
||||
* [flutter/139571](https://github.com/flutter/flutter/issues/139571) - Fixes AnimatedOpacity affecting blended color overlay render
|
||||
* [flutter/139294](https://github.com/flutter/flutter/issues/139294) - Fixes ImageFiltered flickers when widget is rendered on top
|
||||
* [flutter/138193](https://github.com/flutter/flutter/issues/138193) - Fixes testMultiplePlatformViewsWithOverlays test on MacOS
|
||||
|
||||
### [3.16.4](https://github.com/flutter/flutter/releases/tag/3.16.4) (December 13, 2023)
|
||||
* [flutter/139180](https://github.com/flutter/flutter/issues/139180) - Fix tool crash on flutter create when unable to run Java.
|
||||
* [flutter/138434](https://github.com/flutter/flutter/issues/138434) - Fix tool crash on deleting directories that do not exist
|
||||
* [flutter/135277](https://github.com/flutter/flutter/issues/135277) - Eliminates an excessive amount of Xcode error/warning output to the console when building or running macOS Flutter apps.
|
||||
|
||||
### [3.16.3](https://github.com/flutter/flutter/releases/tag/3.16.3) (December 5, 2023)
|
||||
* [CVE-2023-6345](https://nvd.nist.gov/vuln/detail/CVE-2023-6345) - Skia fix for possible integer overflow on Canvas calls with user generated data
|
||||
* [flutter/138550](https://github.com/flutter/flutter/issues/138550) - Fixes crash on iPad when selection "Share..." from selection controls.
|
||||
* [flutter/138842](https://github.com/flutter/flutter/issues/138842) - Fix rendering bug with elevation 0 material components.
|
||||
* [flutter/138850](https://github.com/flutter/flutter/issues/138850) - Add ability to customize NavigationBar indicator overlay and fixes a bug with the indicator shape.
|
||||
* [dart/53086](https://github.com/dart-lang/sdk/issues/53086) - DDS fix to ensure threadID integers are serialized correctly by Debug Adapter Protocol (DAP) clients.
|
||||
* [dart/53999](https://github.com/dart-lang/sdk/issues/53999) - Adjusts the nullablity computations in the implementation of the upper bound algorithm in the CFE
|
||||
* [dart/54112](https://github.com/dart-lang/sdk/issues/54112) - Fixes missing closure code completion entries for function parameters for LSP-based editors like VS Code.
|
||||
|
||||
### [3.16.2](https://github.com/flutter/flutter/releases/tag/3.16.2) (November 30, 2023)
|
||||
* [flutter/138535](https://github.com/flutter/flutter/issues/138535) - Fixes android execution failed for task ':app:mergeDebugNativeLibs'.
|
||||
* [flutter/138598](https://github.com/flutter/flutter/issues/138598) - Fixes SVG rendering issue on IOS.
|
||||
|
||||
### [3.16.1](https://github.com/flutter/flutter/releases/tag/3.16.1) (November 27, 2023)
|
||||
* [flutter/138030](https://github.com/flutter/flutter/issues/138030) - Fixes file deletion crash which can occur during iOS archive.
|
||||
* [flutter/134716](https://github.com/flutter/flutter/issues/134716) - Fix iOS 17 keyboard freeze when switching languages
|
||||
* [flutter/138180](https://github.com/flutter/flutter/issues/138180) - Prevents a crash in flutter doctor for macOS users who have an IntelliJ or Android Studio installation with a missing CFBundleIdentifier in its plist.
|
||||
* [flutter/138040](https://github.com/flutter/flutter/issues/138040) - Ignore exceptions in Flutter tool when trying to set the echo mode of the terminal when the STDIN pipe has been broken.
|
||||
* [flutter/124145](https://github.com/flutter/flutter/issues/124145) - Fixes a JSON array parsing bug that causes seg fault when --coverage is used
|
||||
|
||||
### [3.16.0](https://github.com/flutter/flutter/releases/tag/3.16.0) (Nov 15, 2023)
|
||||
Initial stable release.
|
||||
|
||||
## Flutter 3.13 Changes
|
||||
|
||||
### [3.13.9](https://github.com/flutter/flutter/releases/tag/3.13.9) (October 25, 2023)
|
||||
* [dart/53784](https://github.com/dart-lang/sdk/issues/53784) - [dart2js] Fixes compatibility with Node.js 21
|
||||
|
||||
### [3.13.8](https://github.com/flutter/flutter/releases/tag/3.13.8) (October 18, 2023)
|
||||
* [dart/53747](https://github.com/dart-lang/sdk/issues/53747) - Fixes a visual issue in the Dart VM preventing users from seeing variable values when debugging.
|
||||
* [flutter/136552](https://github.com/flutter/flutter/issues/136552) - [iOS] Fixes issues with voice over when visiting a PlatformView in iOS applications.
|
||||
* [flutter/136654](https://github.com/flutter/flutter/issues/136654) - [Android] Fixes rendering issues when using PlatformViews in Android applications on high refresh rate phones.
|
||||
|
||||
### [3.13.7](https://github.com/flutter/flutter/releases/tag/3.13.7) (October 11, 2023)
|
||||
* [flutter/135442](https://github.com/flutter/flutter/issues/135442) - Fix Xcode 15 launch failure with iOS 17
|
||||
|
||||
### [3.13.6](https://github.com/flutter/flutter/releases/tag/3.13.6) (September 27, 2023)
|
||||
* [flutter/133013](https://github.com/flutter/flutter/issues/133013) - [Impeller] Fix issues with PNG decompression
|
||||
* [flutter/132838](https://github.com/flutter/flutter/issues/132838) - Fix clip Imagefilter.blur on iOS
|
||||
* [dart/53579](https://github.com/dart-lang/sdk/issues/53579) - Fixes a compiler crash when using @staticInterop or @anonymous factory constructors with type parameters.
|
||||
* [dart/53503](https://github.com/dart-lang/sdk/issues/53503) - Fixes segmentation faults that terminate processes when encountering handled exceptions in the FFI library.
|
||||
* [dart/53541](https://github.com/dart-lang/sdk/issues/53541) - Fixes slow variable access while debugging Flutter applications.
|
||||
|
||||
### [3.13.5](https://github.com/flutter/flutter/releases/tag/3.13.5) (September 20, 2023)
|
||||
* [flutter/134825](https://github.com/flutter/flutter/issues/134825) - Fixes an issue where apps built in profile mode would not install or run on physical iOS 17 devices.
|
||||
* [flutter/45598](https://github.com/flutter/engine/pull/45598) - Fix permissions on macos artifacts making mac framework readable and executable by all
|
||||
|
||||
### [3.13.4](https://github.com/flutter/flutter/releases/tag/3.13.4) (September 13, 2023)
|
||||
* [dart/53449](https://github.com/dart-lang/sdk/issues/53449) - Fixes a dart2js issue causing a compiler crash when using a typed record pattern outside of the scope of a function body.
|
||||
* [dart/53450](https://github.com/dart-lang/sdk/issues/53450) - Fixes a pause in the debugger when reaching an unhandled exception.
|
||||
* [flutter/133658](https://github.com/flutter/flutter/issues/133658) - Fixes crash when using the --analyze-size argument.
|
||||
* [flutter/133890](https://github.com/flutter/flutter/issues/133890) - Fixes incorrect autocorrect highlights in text fields in iOS 17.
|
||||
* [flutter/134468](https://github.com/flutter/flutter/issues/134468) - Fixes an issue where users are not able to input text for IME language in iOS 17.
|
||||
* [flutter/45742](https://github.com/flutter/engine/pull/45742) - Fixes CVE-2023-4863 - Security vulnerability in WebP.
|
||||
|
||||
### [3.13.3](https://github.com/flutter/flutter/releases/tag/3.13.3) (September 7, 2023)
|
||||
|
||||
* [flutter/133147](https://github.com/flutter/flutter/issues/133147) - fixes image-picker crashes on iOS
|
||||
* [flutter/133069](https://github.com/flutter/flutter/issues/133069) - fixes issue where console prints dart:ui_web warnings in new flutter project
|
||||
* [flutter/133441](https://github.com/flutter/flutter/issues/133441) - fixes issue where `flutter upgrade` crashes and reports "unknown flutter tag".
|
||||
* [flutter/133055](https://github.com/flutter/flutter/issues/133055) - fixes issue where running `flutter doctor` crashes on FileSystemException
|
||||
* [flutter/132788](https://github.com/flutter/flutter/issues/132788) - fixes a visual overflow caused by SliverMainAxisGroup where clip behavior isn’t applied
|
||||
|
||||
### [3.13.2](https://github.com/flutter/flutter/releases/tag/3.13.2) (August 30, 2023)
|
||||
|
||||
* [flutter/132764](https://github.com/flutter/flutter/pull/132764) - Fixes lower bound of children from TwoDimensionalChildBuilderDelegate.
|
||||
|
||||
### [3.13.1](https://github.com/flutter/flutter/releases/tag/3.13.1) (August 23, 2023)
|
||||
|
||||
* [flutter/132883](https://github.com/flutter/flutter/issues/132883) - Fixes an issue where Flutter apps would not compile when using custom icon fonts that contain spaces.
|
||||
* [flutter/132959](https://github.com/flutter/flutter/issues/132959) - Fixes an issue where macOS applications using plugins with Xcode 15 would not compile.
|
||||
* [flutter/132763](https://github.com/flutter/flutter/issues/132763) - Fixes auto-correction position in iOS 17.
|
||||
* [flutter/132982](https://github.com/flutter/flutter/issues/132982) - [Impeller] Fixes an issue where applications would freeze if the app was minimized while an animation was occurring.
|
||||
|
||||
## Flutter 3.10 Changes
|
||||
|
||||
### [3.10.6](https://github.com/flutter/flutter/releases/tag/3.10.6) (July 12, 2023)
|
||||
|
||||
* [flutter/129161](https://github.com/flutter/flutter/issues/129161) - Fix regression in the GestureRecognizers used by the TextField where it would not fire the onTapDown or onTapUp callbacks which made selection not work
|
||||
* [flutter/130084](https://github.com/flutter/flutter/issues/130084) - Using canvas.drawPicture where the nested picture fails to restore clips established in the child picture and makes content disappear.
|
||||
* [dart/52767](https://github.com/dart-lang/sdk/issues/52767) - Fixes a flow in flow analysis that causes it to sometimes ignore destructuring assignments.
|
||||
* [dart/52869](https://github.com/dart-lang/sdk/issues/52869) - Fixes an infinite loop in some web development compiles that include `is` or `as` expressions involving record types with named fields.
|
||||
* [dart/52791](https://github.com/dart-lang/sdk/issues/52791) - Fixes a memory leak in Dart analyzer's file-watching.
|
||||
* [dart/52793](https://github.com/dart-lang/sdk/issues/52793) - Fixes a memory leak of file system watcher related data structures.
|
||||
|
||||
### [3.10.5](https://github.com/flutter/flutter/releases/tag/3.10.5) (June 14, 2023)
|
||||
|
||||
* [flutter/127628](https://github.com/flutter/flutter/pull/127628) - Fixes an issue preventing the use of `integration_test` when using AGP 8.0.
|
||||
* [flutter/126043](https://github.com/flutter/flutter/issues/126403) - Fixes an error encountered when attempting to use `add-to-app` on Android when generating Flutter modules.
|
||||
* [flutter/127090](https://github.com/flutter/flutter/issues/127090) - Fixes an issue preventing assets from being displayed properly on low pixel density devices.
|
||||
* [flutter/128320](https://github.com/flutter/flutter/issues/128230) - Fixes an issue where image assets are not displayed when serving with Microsoft IIS.
|
||||
* [dart/52403](https://github.com/dart-lang/sdk/issues/52403) - Fixes a bad cast in the frontend which can manifest as a crash in the dart2js
|
||||
`ListFactorySpecializer` during Flutter web builds.
|
||||
* [dart/1224](https://github.com/dart-lang/dart_style/issues/1224) - Handles formatting nullable record types with no fields.
|
||||
* [dart/52480](https://github.com/dart-lang/sdk/issues/52480) - Fixes error when using records when targeting the web in development mode.
|
||||
|
||||
### [3.10.4](https://github.com/flutter/flutter/releases/tag/3.10.4) (June 07, 2023)
|
||||
|
||||
* [flutter/127836](https://github.com/flutter/flutter/issues/127836) - Fixes SliverAppBar's FlexibleSpaceBar overlaps
|
||||
|
||||
|
||||
### [3.10.3](https://github.com/flutter/flutter/releases/tag/3.10.3) (June 02, 2023)
|
||||
|
||||
* [flutter/126435](https://github.com/flutter/flutter/issues/126435) - Fixes the position of `SearchAnchor` when used in a nested navigator.
|
||||
* [flutter/127486](https://github.com/flutter/flutter/issues/127486) - [Impeller] Fixes an issue causing noise when using combinations of UV mapping and color blending.
|
||||
* [flutter/126878](https://github.com/flutter/flutter/issues/126878) - [Impeller] Fixes an issue where images do not appear on iOS devices.
|
||||
* [flutter/1127587](https://github.com/flutter/flutter/issues/124612) - [Impeller] Fixes a crash when applying backdrop blurs to platform views.
|
||||
* [flutter/127103](https://github.com/flutter/flutter/issues/127103) - [Impeller] Fixes an issue where text is not rendered correctly when a transform is applied.
|
||||
* [flutter/126487](https://github.com/flutter/flutter/issues/126487) - [Impeller] Fixes an issue where blur is not respected at certain value.
|
||||
* [dart/52449](https://github.com/dart-lang/sdk/issues/52449) - Fixes an AOT compiler crash when generating an implicit getter returning an unboxed record.
|
||||
* [dart/52373](https://github.com/dart-lang/sdk/issues/52373) - Fixes a situation in which variables appearing in multiple branches of an or-pattern might be erroneously reported as being mismatched.
|
||||
* [dart/52334](https://github.com/dart-lang/sdk/issues/52334) - Adds missing `interface` modifiers on the purely abstract classes `MultiStreamController`, `StreamConsumer`, `StreamIterator` and `StreamTransformer`.
|
||||
* [dart/52373](https://github.com/dart-lang/sdk/issues/52373) - Fixes an error during debugging when `InternetAddress.tryParse` is used.
|
||||
* [dart/126884](https://github.com/flutter/flutter/issues/126884) - Fixes a VM issue causing crashes on hot reload.
|
||||
* [dart/4195](https://github.com/dart-lang/linter/issues/4195) - Improves linter support.
|
||||
* [dart/52439](https://github.com/dart-lang/sdk/issues/52439) - Fixes an issue in variable patterns preventing users from expressing a pattern match using a variable or wildcard pattern with a nullable record type.
|
||||
* [dart/52386](https://github.com/dart-lang/sdk/issues/52386) - Updates warnings and provide instructions for updating the Dart pub cache on Windows.
|
||||
|
||||
### [3.10.2](https://github.com/flutter/flutter/releases/tag/3.10.2) (May 24, 2023)
|
||||
This hotfix release addresses the following issues:
|
||||
* [flutter/126532](https://github.com/flutter/flutter/issues/126532) - [Impeller] Fixes saveLayer ignores opacity of paint with blend mode lighten.
|
||||
* [flutter/126739](https://github.com/flutter/flutter/issues/126739) - [Impeller] Fixes ImageShader alignment is different for different PaintingStyle.
|
||||
* [flutter/126701](https://github.com/flutter/flutter/issues/126701) - [Impeller] Fixes InkSparkle splash not clipping on iOS.
|
||||
* [flutter/126661](https://github.com/flutter/flutter/issues/126661) - Fixes PointerInterceptor reverses transformHitTests in a scaled context.
|
||||
* [flutter/127183](https://github.com/flutter/flutter/issues/127183) - [Impeller] Fixes drawing path with image shader is not correct.
|
||||
* [dart/52438](https://github.com/dart-lang/sdk/issues/52438) - Fixes a dart2js crash when using a switch case expression on a record where the fields don't match the cases.
|
||||
* [dart/3392](https://github.com/dart-lang/dartdoc/issues/3392) - Add chips for class and mixin pages on dartdoc generated pages.
|
||||
* [dart/52352](https://github.com/dart-lang/sdk/issues/52352) - Fixes a situation causing the parser to fail resulting in an infinite loop leading to higher memory usage.
|
||||
* [dart/52078](https://github.com/dart-lang/sdk/issues/52078) - Add clear errors when mixing inheritance in pre and post Dart 3 libraries.
|
||||
|
||||
|
||||
### [3.10.1](https://github.com/flutter/flutter/releases/tag/3.10.1) (May 17, 2023)
|
||||
|
||||
This hotfix release addresses the following issues:
|
||||
* [flutter/126510](https://github.com/flutter/flutter/issues/125276) - [Impeller] Fixes errors in text transformation when using impeller.
|
||||
* [flutter/126854](https://github.com/flutter/flutter/issues/126854) - [Impeller] Fixes visual glitches and crashes when using wide gamut color support on iOS.
|
||||
* [flutter/124883](https://github.com/flutter/flutter/issues/124883) - Fixes an issue where images do not render on Flutter web apps when the host machine has Internet Download Manager installed.
|
||||
* [flutter/126491](https://github.com/flutter/flutter/issues/126491) - Fixes an issue where `CupertinoPicker` and `ListWheelViewport` crash with certain configurations on development builds.
|
||||
* [flutter/124529](https://github.com/flutter/flutter/issues/124529) - Fixes an issue where iOS and macOS apps will not build when using Xcode 14.3 and adding dependencies with low iOS target versions.
|
||||
* [flutter/122376](https://github.com/flutter/flutter/issues/122376) - Adds a migrator to update the Gradle version when it conflicts with the Android Studio version of Java is detected.
|
||||
* [dart/124369](https://github.com/flutter/flutter/issues/124369) - Fixes a compiler crash involving redirecting factories and FFI.
|
||||
* [dart/51899](https://github.com/dart-lang/sdk/issues/51899) - Fixes a dart2js crash when using a combination of local functions, generics, and records.
|
||||
* [dart/52191](https://github.com/dart-lang/sdk/issues/52191) - Fixes incorrect error using a void in a switch case expression.
|
||||
* [dart/52041](https://github.com/dart-lang/sdk/issues/52041) - Fixes a false error when using in switch case expressions when the switch refers to a private getter.
|
||||
* [dart/52260](https://github.com/dart-lang/sdk/issues/52260) - Prevent the use of when and as as variable names in patterns.
|
||||
* [dart/52241](https://github.com/dart-lang/sdk/issues/52241) - Fixes an inconsistency in type promotion between the analyzer and VM.
|
||||
* [dart/1212](https://github.com/dart-lang/dart_style/issues/1212) - Improve performance on functions with many parameters.
|
||||
|
||||
### [3.10.0](https://github.com/flutter/flutter/releases/tag/3.10.0) (May 10, 2023)
|
||||
Initial stable release.
|
||||
|
||||
## Flutter 3.7 Changes
|
||||
|
||||
### [3.7.12](https://github.com/flutter/flutter/releases/tag/3.7.12) (Apr 19, 2023)
|
||||
|
||||
This hotfix release addresses the following issues:
|
||||
|
||||
* [flutter/124838](https://github.com/flutter/flutter/issues/124838) - Support Gradle 8
|
||||
|
||||
### [3.7.11](https://github.com/flutter/flutter/releases/tag/3.7.11) (Apr 12, 2023)
|
||||
|
||||
This hotfix release addresses the following issues:
|
||||
|
||||
* [flutter/124529](https://github.com/flutter/flutter/issues/124529) - Fix Xcode 14.3 will not build when plugin transitive dependencies have a low deployment target
|
||||
* [flutter/124340](https://github.com/flutter/flutter/issues/124340) - Fixes an issue where iOS and MacOS fail to build when targeting low deployment targets when using xCode 14.3.
|
||||
* [flutter/124208](https://github.com/flutter/flutter/issues/124208) - Fix orientation preferences on iOS 16+
|
||||
* [flutter/116711](https://github.com/flutter/flutter/issues/116711) - Fixes an issue where orientation preferences are not respected on iOS 16 and above.
|
||||
* [flutter/124403](https://github.com/flutter/flutter/issues/124403) - Clarify errors around Java/Gradle incompatibility
|
||||
* [flutter/122376](https://github.com/flutter/flutter/issues/122376) - Clarify errors around Java/Gradle incompatibility.
|
||||
|
||||
### [3.7.10](https://github.com/flutter/flutter/releases/tag/3.7.10) (Apr 05, 2023)
|
||||
This hotfix release addresses the following issues:
|
||||
* [flutter/123890](https://github.com/flutter/flutter/issues/123890) - Fixes an issue where upgrading to Xcode 14.3 breaks the ability to publish iOS and macOS applications.
|
||||
|
||||
### [3.7.9](https://github.com/flutter/flutter/releases/tag/3.7.9) (Mar 30, 2023)
|
||||
This hotfix release addresses the following issues:
|
||||
* [dart/51798](https://github.com/dart-lang/sdk/issues/51798) - Fixes a false `Out of Memory` exception causing slowdowns.
|
||||
|
||||
### [3.7.8](https://github.com/flutter/flutter/releases/tag/3.7.8) (Mar 22, 2023)
|
||||
This hotfix release addresses the following issues:
|
||||
* [flutter/119441](https://github.com/flutter/flutter/issues/119441) - Fixes an issue where the `Toolbar` widget is incorrectly positioned when inside of a textfield in the Appbar.
|
||||
|
||||
### [3.7.7](https://github.com/flutter/flutter/releases/tag/3.7.7) (Mar 08, 2023)
|
||||
This hotfix release addresses the following issues:
|
||||
* [flutter/121256](https://github.com/flutter/flutter/issues/121256) - Fixes an issue where Android users can not use add2app because it can not locate build/host/apk/app-debug.apk.
|
||||
* [engine/120455](https://github.com/flutter/flutter/issues/120455)
|
||||
Cached DisplayList opacity inheritance fix.
|
||||
* [dart/121270](https://github.com/flutter/flutter/issues/121270) - Fixes mobile device VM crashes caused by particular use of RegExp on mobile devices.
|
||||
|
||||
### [3.7.6](https://github.com/flutter/flutter/releases/tag/3.7.6) (Mar 01, 2023)
|
||||
This hotfix release addresses the following issues:
|
||||
* [dart/50981](https://github.com/dart-lang/sdk/issues/50981) - Improve performance of Dart Analysis Server by limiting the analysis context to 1.
|
||||
* [dart/51481](https://github.com/dart-lang/sdk/issues/51481) - Update DDC test and builder configuration
|
||||
* [flutter/114031](https://github.com/flutter/flutter/issues/114031) - Fixes a crash when using `flutter doctor --android-licenses` on macOS.
|
||||
* [flutter/106674](https://github.com/flutter/flutter/issues/106674) - Fixes an issue where Flutter is unable to find the current JDK in specific versions of Android Studio.
|
||||
|
||||
### [3.7.5](https://github.com/flutter/flutter/releases/tag/3.7.5) (Feb 22, 2023)
|
||||
This hotfix release addresses the following issues:
|
||||
* [flutter/119180](https://github.com/flutter/flutter/issues/119180) - Apple Pencil writes on Flutter apps instead of scrolling when outside of a text field.
|
||||
* [flutter/120220](https://github.com/flutter/flutter/issues/120220) - [Impeller] Flutter apps may crash when some clip operations are used.
|
||||
|
||||
### [3.7.4](https://github.com/flutter/flutter/releases/tag/3.7.4) (Feb 21, 2023)
|
||||
This hotfix release addresses the following issues:
|
||||
* [flutter/116360](https://github.com/flutter/flutter/issues/116360) - Flutter web apps will not load if accessed through any other path than `/`.
|
||||
* [flutter/119557](https://github.com/flutter/flutter/issues/119557) - Localization files incorrectly overridden stopping Flutter applications from running.
|
||||
* [flutter/116459](https://github.com/flutter/flutter/issues/116459) - Localization files do not parse when using numbers as select cases.
|
||||
|
||||
### [3.7.3](https://github.com/flutter/flutter/releases/tag/3.7.3) (Feb 9, 2023)
|
||||
This hotfix release addresses the following issues:
|
||||
* [flutter/119507](https://github.com/flutter/flutter/issues/119507) - Asset inclusion regression can cause unexpected app bundle size increase
|
||||
* [flutter/119289](https://github.com/flutter/flutter/issues/119289) - [Impeller] ImageFilter.blur Edge sampling issue.
|
||||
* [flutter/119950](https://github.com/flutter/flutter/issues/119950) - [Impeller] Improve blur performance for Android and iPad Pro.
|
||||
* [flutter/119190](https://github.com/flutter/flutter/pull/119190) - Fix lexer issue where select/plural/other/underscores cannot be in identifier names.
|
||||
|
||||
### [3.7.2](https://github.com/flutter/flutter/releases/tag/3.7.2) (Feb 8, 2023)
|
||||
This hotfix release addresses the following issues:
|
||||
* [flutter/119881](https://github.com/flutter/flutter/issues/119881) - [Impeller] App performance decreases when using emulated dashed lines.
|
||||
* [flutter/119245](https://github.com/flutter/flutter/issues/119245) - [Impeller] App crashes due to invalid textures when using impeller.
|
||||
* [flutter/119489](https://github.com/flutter/flutter/issues/119489) - [Impeller] Text glyphs render incorrectly on different font weights
|
||||
* [flutter/103847](https://github.com/flutter/flutter/issues/103847) - Fix animation jank on some iPhone models.
|
||||
* [flutter/119593](https://github.com/flutter/flutter/issues/119593) - Localization files fail to generate when `FLUTTER_STORAGE_BASE_URL` is overridden.
|
||||
* [flutter/119084](https://github.com/flutter/flutter/issues/119084) - When requesting to evaluate multiple expressions while debugging Flutter web apps, tooling fails before finishing operations.
|
||||
* [flutter/119261](https://github.com/flutter/flutter/issues/119261) - Flutter tool crashes when attempting to update the artifact cache.
|
||||
* [flutter/117420](https://github.com/flutter/flutter/issues/117420) - Ink ripple is rendered incorrectly inside of the `NavigationBar` widget when using Material 3.
|
||||
* [dart/50622](https://github.com/dart-lang/sdk/issues/50622) - VM crashes when mixing the use of double and float calculations in debug/JIT configuration.
|
||||
* [flutter/119220](https://github.com/flutter/flutter/issues/119220) - Compiler may crash when attempting to inline a method with lots of optional parameters with distinct default values.
|
||||
* [dart/51087](https://github.com/dart-lang/sdk/issues/51087) - `part_of_different_library` error may be encountered when using `PackageBuildWorkspace`.
|
||||
|
||||
### [3.7.1](https://github.com/flutter/flutter/releases/tag/3.7.1) (Feb 1, 2023)
|
||||
This hotfix release addresses the following issues:
|
||||
* [flutter/116782](https://github.com/flutter/flutter/issues/116782) - Material 3 Navigation Drawer does not support scrolling or safe areas
|
||||
* [flutter/119414](https://github.com/flutter/flutter/issues/119414) - ImageFilter in ListView causes wrong offset on Android and iOS
|
||||
* [flutter/119181](https://github.com/flutter/flutter/issues/119181) - CastError when running `flutter pub get`
|
||||
* [flutter/118613](https://github.com/flutter/flutter/issues/118613) - [Impeller] Fonts are blurry when rendering on iOS
|
||||
* [flutter/118945](https://github.com/flutter/flutter/issues/118945) - [Impeller] Objects with large stroke width not drawn correctly on iOS
|
||||
* [flutter/117428](https://github.com/flutter/flutter/issues/117428) - [Impeller] Text is transformed incorrectly on iOS
|
||||
* [flutter/119072](https://github.com/flutter/flutter/issues/119072) - [Impeller] Draw calls could be improperly culled
|
||||
* [flutter/118847](https://github.com/flutter/flutter/issues/118847) - [Impeller] Float samplers can get re-ordered compared to SkSL
|
||||
* [flutter/119014](https://github.com/flutter/flutter/issues/119014) - Replace iPhone 6s with iPhone 11 as flutter test devices
|
||||
|
||||
### [3.7.0](https://github.com/flutter/flutter/releases/tag/3.7.0) (Jan 24, 2023)
|
||||
Initial stable release.
|
||||
|
||||
## Flutter 3.3 Changes
|
||||
|
||||
### [3.3.10](https://github.com/flutter/flutter/releases/tag/3.3.10) (Dec 16, 2022)
|
||||
This hotfix release addresses the following issues:
|
||||
* [flutter/113314](https://github.com/flutter/flutter/issues/113314) - Glitches appear when scrolling on Android TV devices.
|
||||
* [flutter/80401](https://github.com/flutter/flutter/issues/80401) - Some widgets are not visible when nested inside of `ClipRRect` in CanvasKit mode when using Flutter web on Safari.
|
||||
|
||||
### [3.3.9](https://github.com/flutter/flutter/releases/tag/3.3.9) (Nov 23, 2022)
|
||||
This hotfix release addresses the following issues:
|
||||
* [dart/50199](https://github.com/dart-lang/sdk/issues/50119) - fix error when using private variable setters in mixins on dart web.
|
||||
* [dart/50392](https://github.com/dart-lang/sdk/issues/50392) - Type parameter nullability performs incorrectly in factory constructors.
|
||||
|
||||
### [3.3.8](https://github.com/flutter/flutter/releases/tag/3.3.8) (Nov 09, 2022)
|
||||
This hotfix release addresses the following issues:
|
||||
* [flutter/113973](https://github.com/flutter/flutter/issues/113973) - Fix null safety issue in TextFormField when Android devices pass no data
|
||||
* [flutter/109632](https://github.com/flutter/flutter/issues/109632) - Fix type conversion in TextInput that didn’t allow num types
|
||||
|
||||
### [3.3.7](https://github.com/flutter/flutter/releases/tag/3.3.6) (Nov 2, 2022)
|
||||
This hotfix release addresses the following issues:
|
||||
* [flutter/113550](https://github.com/flutter/flutter/issues/113550) - Fix unnecessary null safe exceptions in input decorators on Android
|
||||
* [flutter/100522](https://github.com/flutter/flutter/issues/100522) - Speculative fix for iOS screen flickering
|
||||
|
||||
### [3.3.6](https://github.com/flutter/flutter/releases/tag/3.3.6) (Oct 26, 2022)
|
||||
This hotfix release addresses the following issues:
|
||||
* [flutter/111255](https://github.com/flutter/flutter/issues/111255) - Using WebView leads to size error in platform_views since Flutter 3.3.0
|
||||
|
||||
### [3.3.5](https://github.com/flutter/flutter/releases/tag/3.3.5) (Oct 19, 2022)
|
||||
This hotfix release addresses the following issues:
|
||||
* [flutter/113035](https://github.com/flutter/flutter/pull/113035) - Apps crash when `FadeInImage` switches from cached to uncached images.
|
||||
* [flutter/112228](https://github.com/flutter/flutter/pull/112228) - Move documentation build and deployment to post-submit.
|
||||
* [flutter/36807](https://github.com/flutter/engine/pull/36807) - Apps crash when combining emojis and Korean text.
|
||||
* [flutter/112887](https://github.com/flutter/flutter/pull/112887) - When debugging web apps, erroneous errors are displayed.
|
||||
|
||||
### [3.3.4](https://github.com/flutter/flutter/releases/tag/3.3.4) (Oct 05, 2022)
|
||||
This hotfix release addresses the following issues:
|
||||
* [Flutter/36181](https://github.com/flutter/engine/pull/36181) - On Flutter desktop apps, pixel snapping performs incorrectly when using opacity layers at certain DPRs and screen sizes.
|
||||
* [flutter/36491](https://github.com/flutter/engine/pull/36491) - On android devices with a refresh rate greater than 60hz, frames jump when scrolling.
|
||||
|
||||
### [3.3.3](https://github.com/flutter/flutter/releases/tag/3.3.3) (Sept 28, 2022)
|
||||
This hotfix release addresses the following issues:
|
||||
* [flutter/111475](https://github.com/flutter/flutter/issues/111475) - Signing errors on iOS pod bundle resources on Xcode 14 "Signing for "x" requires a development team."
|
||||
* [flutter/110671](https://github.com/flutter/flutter/issues/110671) - App crashes on latest versions when AnimatedContainer / Container height is set to 0 and throws uncaught exception
|
||||
* [flutter/107590](https://github.com/flutter/flutter/issues/107590) - Flutter tools ShaderCompilerException with exit code -1073740791.
|
||||
* [flutter/110640](https://github.com/flutter/flutter/issues/110640) - Fatal crash with java.lang.AssertionError when selecting text in TextField.
|
||||
* [dart/50075](https://github.com/dart-lang/sdk/issues/50075) - Security vulnerability: There is a auth bypass vulnerability in Dart SDK, specifically dart:uri core library, used to parse and validate URLs.
|
||||
* [dart/50052](https://github.com/dart-lang/sdk/issues/50052) - Avoid CFE crash when input contains invalid super parameters usage.
|
||||
|
||||
### [3.3.2](https://github.com/flutter/flutter/releases/tag/3.3.2) (Sept 14, 2022)
|
||||
This hotfix release addresses the following issues:
|
||||
* [flutter/111411](https://github.com/flutter/flutter/issues/111411) - Package assets fail to load.
|
||||
* [flutter/111296](https://github.com/flutter/flutter/issues/111296) - Custom embedders fail to build for 32 bit targets.
|
||||
* [flutter/111274](https://github.com/flutter/flutter/issues/111274) - Android plugins crash when using platform view's Virtual Display fallback.
|
||||
* [flutter/111231](https://github.com/flutter/flutter/issues/111231) - Text rendering is handled incorrectly.
|
||||
* [dart/49923](https://github.com/dart-lang/sdk/issues/49923) - Incorrect type propagation when using `late` variables in catch blocks.
|
||||
|
||||
### [3.3.1](https://github.com/flutter/flutter/releases/tag/3.3.1) (Sept 7, 2022)
|
||||
This hotfix release addresses the following issues:
|
||||
* [flutter/110820](https://github.com/flutter/flutter/issues/110820) - Windows apps crash when accessibility is enabled on apps that use widgets with custom semantic actions.
|
||||
|
||||
### [3.3.0](https://github.com/flutter/flutter/releases/tag/3.3.0) (Aug 30, 2022)
|
||||
Initial stable release.
|
||||
## Flutter 3.0 Changes
|
||||
### [3.0.5](https://github.com/flutter/flutter/releases/tag/3.0.5) (July 13, 2022)
|
||||
This hotfix release addresses the following issues:
|
||||
* [flutter/106601](https://github.com/flutter/flutter/issues/106601) - Flutter tool fails on visual studio on certain locales on Windows.
|
||||
* [flutter/106510](https://github.com/flutter/flutter/issues/106510) - Flutter crashes on launch on ARM devices.
|
||||
* [dart/49054](https://github.com/dart-lang/sdk/issues/49054) - Improves code completion for Flutter.
|
||||
* [dart/49402](https://github.com/dart-lang/sdk/issues/49402) - Compiler crashes when using Finalizable parameters.
|
||||
### [3.0.4](https://github.com/flutter/flutter/releases/tag/3.0.4) (July 1, 2022)
|
||||
This hotfix release addresses the following issues:
|
||||
* [flutter/105183](https://github.com/flutter/flutter/issues/105183) - Pointer compression on iOS causes OOM
|
||||
* [flutter/103870](https://github.com/flutter/flutter/issues/103870) - Application crashes on system low memory events
|
||||
* [flutter/105674](https://github.com/flutter/flutter/issues/105674) - Rendering artifacts from ImagedFiltered/ColorFiltered in animated views
|
||||
### [3.0.3](https://github.com/flutter/flutter/releases/tag/3.0.3) (June 22, 2022)
|
||||
This hotfix release addresses the following issues:
|
||||
* [dart/49188](https://github.com/dart-lang/sdk/issues/49188) - Improve analysis of enums and switch.
|
||||
* [dart/49075](https://github.com/dart-lang/sdk/issues/49075) - Fix compiler crash when initializing Finalizable objects.
|
||||
### [3.0.2](https://github.com/flutter/flutter/releases/tag/3.0.2) (June 10, 2022)
|
||||
This hotfix release addresses the following issues:
|
||||
* [flutter/104785](https://github.com/flutter/flutter/issues/104785) - Flutter web apps show a black screen on Safari 13.
|
||||
* [flutter/102451](https://github.com/flutter/flutter/issues/102451) - `flutter doctor` crashes for Windows users using Visual Studio 2022.
|
||||
* [flutter/103846](https://github.com/flutter/flutter/issues/103846) - Unexpected line breaks occur when using new text renderer.
|
||||
* [flutter/104569](https://github.com/flutter/flutter/pull/104569) - Ink Sparkle slows down applications using Material 3.
|
||||
* [flutter/103404](https://github.com/flutter/flutter/issues/103404) - SliverReorderableList does not drag on Android devices.
|
||||
* [flutter/103556](https://github.com/flutter/flutter/issues/103566) - Nested horizontal sliders in widgets with horizontal drag gestures do not work in Android applications.
|
||||
* [flutter/100375](https://github.com/flutter/flutter/issues/100375) - Build process fails when building Windows applications.
|
||||
* [dart/49027](https://github.com/dart-lang/sdk/issues/49027) - Code suggestion for initState/dispose/setState no longer work on intellij.
|
||||
* [dart/3424](https://github.com/dart-lang/pub/issues/3424) - `dart pub login` fails when attempting to publish a package.
|
||||
* [dart/49097](https://github.com/dart-lang/sdk/issues/49097) - `dart analyze` throws errors when using enhance Enums feature.
|
||||
### [3.0.1](https://github.com/flutter/flutter/releases/tag/3.0.1) (May 19, 2022)
|
||||
This hotfix release addresses the following issues:
|
||||
* [flutter/102947](https://github.com/flutter/flutter/issues/102947) - Radial gradients behave incorrectly when painting text.
|
||||
### [3.0.0](https://github.com/flutter/flutter/releases/tag/3.0.0) (May 11, 2022)
|
||||
Initial stable release.
|
||||
## Flutter 2.10 Changes
|
||||
### [2.10.5](https://github.com/flutter/flutter/releases/tag/2.10.5) (April 18, 2022)
|
||||
This hotfix release addresses the following issues:
|
||||
* [flutter/101224](https://github.com/flutter/flutter/issues/101224) - Flutter web debugger fails when using chrome 100 or greater.
|
||||
### [2.10.4](https://github.com/flutter/flutter/releases/tag/2.10.4) (March 28, 2022)
|
||||
This hotfix release addresses the following issues:
|
||||
* [flutter/93871](https://github.com/flutter/flutter/issues/93871) - Custom embedders fail to build when using default sysroot (GCC 11).
|
||||
* [dart/48559](https://github.com/dart-lang/sdk/issues/48559) - Flutter web apps crash when using package:freezed.
|
||||
### [2.10.3](https://github.com/flutter/flutter/releases/tag/2.10.3) (March 02, 2022)
|
||||
This hotfix release addresses the following issues:
|
||||
* [flutter/98973](https://github.com/flutter/flutter/issues/98973) - Deadlock in application startup in profile/release mode.
|
||||
* [flutter/98739](https://github.com/flutter/flutter/issues/98739) - ios: Visual glitch when scrolling a list in a Scaffold that has a Material and Container as bottomNavigationBar.
|
||||
* [flutter/97086](https://github.com/flutter/flutter/issues/97086) - Windows: Fail to launch app in debug mode.
|
||||
### [2.10.2](https://github.com/flutter/flutter/releases/tag/2.10.2) (February 18, 2022)
|
||||
This hotfix release addresses the following issues:
|
||||
* [flutter/95211](https://github.com/flutter/flutter/issues/95211) - Transform animation with BackdropFilter is causing a crash.
|
||||
* [flutter/98155](https://github.com/flutter/flutter/issues/98155) - App crashes after upgrading to 2.10.x using webview + video_player plugin.
|
||||
* [flutter/98361](https://github.com/flutter/flutter/issues/98361) - Error in DL bounds calculations causes incorrect SVG rendering.
|
||||
* [flutter/97767](https://github.com/flutter/flutter/issues/97767) - New material icons are not properly rendered.
|
||||
* [flutter/95711](https://github.com/flutter/flutter/issues/95711) - Linux builds default to building GLFW.
|
||||
### [2.10.1](https://github.com/flutter/flutter/releases/tag/2.10.1) (February 9, 2022)
|
||||
This hotfix release addresses the following issues:
|
||||
* [flutter/94043](https://github.com/flutter/flutter/issues/94043) - Autofill does not work in `TextField`.
|
||||
* [flutter/96411](https://github.com/flutter/flutter/issues/96411) - Safari: Unable to enter text into `TextField`.
|
||||
* [flutter/96661](https://github.com/flutter/flutter/issues/96661) - Platform views throw fatal exception: Methods marked with @UiThread must be executed on the main thread.
|
||||
* [flutter/97103](https://github.com/flutter/flutter/issues/97103) - Images become corrupted when using CanvasKit.
|
||||
* [flutter/97679](https://github.com/flutter/flutter/issues/97679) - Don't remove overlay views when the rasterizer is being torn down.
|
||||
* [dart/48301](https://github.com/dart-lang/sdk/issues/48301) - Avoid speculative conversion in ffi Pointer.asTypedList.
|
||||
### [2.10.0](https://github.com/flutter/flutter/releases/tag/2.10.0) (February 3, 2022)
|
||||
Initial stable release.
|
||||
## Flutter 2.8 Changes
|
||||
### [2.8.1](https://github.com/flutter/flutter/releases/tag/2.8.1) (December 16, 2021)
|
||||
This hotfix release addresses the following issues:
|
||||
* [flutter/94914](https://github.com/flutter/flutter/issues/94914) - Apps using `google_sign_in` or `google_maps` don't build in iOS Simulator on ARM macOS
|
||||
* [flutter/90783](https://github.com/flutter/flutter/issues/90783) - In rare circumstances, engine may crash during app termination on iOS and macOS
|
||||
* [dart/47914](https://github.com/dart-lang/sdk/issues/47914) - AOT compilation fails with error "Invalid argument(s): Missing canonical name for Reference"
|
||||
* [dart/47815](https://github.com/dart-lang/sdk/issues/47815) - Running `dart pub publish` with custom pub package server that has URL containing a path may fail.
|
||||
|
||||
### [2.8.0](https://github.com/flutter/flutter/releases/tag/2.8.0) (December 8, 2021)
|
||||
Initial stable release.
|
||||
|
||||
## Flutter 2.5 Changes
|
||||
### [2.5.3](https://github.com/flutter/flutter/releases/tag/2.5.3) (October 15, 2021)
|
||||
This hotfix release addresses the following issues:
|
||||
* [dart/47321](https://github.com/dart-lang/sdk/issues/47321) - Fix a potential out-of-memory condition with analysis server plugins
|
||||
* [dart/47432](https://github.com/dart-lang/sdk/issues/47432) - Fix certificate loading on Windows when there are expired certificates
|
||||
* [flutter/83792](https://github.com/flutter/flutter/issues/83792) - Fix HTTPS issue related to: "HttpClient throws Invalid argument(s): Invalid internet address"
|
||||
|
||||
### [2.5.2]((https://github.com/flutter/flutter/releases/tag/2.5.2)) (September 30, 2021)
|
||||
This hotfix release addresses the following issues:
|
||||
* [dart/47285](https://github.com/dart-lang/sdk/issues/47285) - Fix a regression to the performance of code completions
|
||||
* [dart/47316](https://github.com/dart-lang/sdk/issues/47316) - Dynamic tables in ELF files have invalid relocated addresses
|
||||
* [flutter/89912](https://github.com/flutter/flutter/issues/89912) - Building iOS app generates unnecessary Flutter.build folder
|
||||
|
||||
### [2.5.1]((https://github.com/flutter/flutter/releases/tag/2.5.1)) (September 17, 2021)
|
||||
This hotfix release addresses the following issues:
|
||||
* [flutter/88767](https://github.com/flutter/flutter/issues/88767) - java.lang.SecurityException: Permission denial crash at launch
|
||||
* [flutter/88236](https://github.com/flutter/flutter/issues/88236) - null check exception during keyboard keypress
|
||||
* [flutter/88221](https://github.com/flutter/flutter/issues/88221) - Material routes delayed on push and pop
|
||||
* [flutter/84113](https://github.com/flutter/flutter/issues/84113) - HTTP exceptions talking to VM Service
|
||||
* [flutter/83632](https://github.com/flutter/flutter/issues/83632) - Scroll view velocity too high
|
||||
|
||||
### 2.5.0 (September 8, 2021)
|
||||
Initial stable release.
|
||||
|
||||
## Flutter 2.2 Changes
|
||||
### [2.2.3](https://github.com/flutter/flutter/pull/85719) (July 2, 2021)
|
||||
This hotfix release addresses the following issues:
|
||||
* [flutter/84212](https://github.com/flutter/flutter/issues/84212) - Upgrading to 2.2.1 cause main.dart to crash
|
||||
* [flutter/83213](https://github.com/flutter/flutter/issues/83213) - TextFormField not responding to inputs on Android when typing on Microsoft SwiftKey
|
||||
* [flutter/82838](https://github.com/flutter/flutter/issues/82838) - Flutter Web failing to compile with "Undetermined Nullability"
|
||||
* [flutter/82874](https://github.com/flutter/flutter/issues/82874) - PopupMenuButton is broken after upgrade to Flutter 2.2.
|
||||
|
||||
### [2.2.2](https://github.com/flutter/flutter/pull/84364) (June 11, 2021)
|
||||
This hotfix release addresses the following issues:
|
||||
* [dart/46249](https://github.com/dart-lang/sdk/issues/46249) - Ensure start/stop file watching requests are run on the dart thread.
|
||||
* [dart/46210](https://github.com/dart-lang/sdk/issues/46210) - Fix an analyze crash when analyzing against package:meta v1.4.0
|
||||
* [dart/46173](https://github.com/dart-lang/sdk/issues/46173) - Merge a3767f7db86a85fcd6201e9357ad47b884002b66 to stable channel (2.13)
|
||||
* [dart/46300](https://github.com/dart-lang/sdk/issues/46300) - Fix OOM VM test (`transferable_throws_oom_test` crashing after upgrade from Ubuntu 16)
|
||||
* [dart/46298](https://github.com/dart-lang/sdk/issues/46298) - Ensure start/stop file watching requests are run on the Dart thread
|
||||
* [flutter/83799](https://github.com/flutter/flutter/issues/83799) - Tool may crash if pub is missing from the artifact cache
|
||||
* [flutter/83102](https://github.com/flutter/flutter/issues/83102) - Generated l10n file is missing ‘intl’ import with Flutter 2.2.0
|
||||
* [flutter/83094](https://github.com/flutter/flutter/issues/83094) - Flutter AOT precompiler crash
|
||||
* [flutter/82874](https://github.com/flutter/flutter/issues/82874) - PopupMenuButton is broken after upgrade to Flutter 2.2.
|
||||
|
||||
### [2.2.1](https://github.com/flutter/flutter/pull/83372) (May 27, 2021)
|
||||
This hotfix release addresses the following issues:
|
||||
- [flutter/80978](https://github.com/flutter/flutter/issues/80978) - Error "Command PhaseScriptExecution failed with a nonzero exit code" when building on macOS
|
||||
- [dart/45990](https://github.com/dart-lang/sdk/issues/45990) - CastMap performs an invalid cast on 'remove', breaking shared_preferences plugin
|
||||
- [dart/45907](https://github.com/dart-lang/sdk/issues/45907) - DDC missing nullability information from recursive type hierarchies
|
||||
- [flutter/52106](https://github.com/flutter/flutter/issues/52106) - [Web] Accessibility focus border doesn’t follow when navigating through interactive elements with tab key
|
||||
- [flutter/82768](https://github.com/flutter/flutter/issues/82768) - [Web] svgClip memory leak in Canvaskit renderer
|
||||
|
||||
### 2.2.0 (May 18, 2021)
|
||||
Initial stable release.
|
||||
|
||||
## Flutter 2.0 Changes
|
||||
### [2.0.6](https://github.com/flutter/flutter/pull/81508) (April 29, 2021)
|
||||
This hotfix release addresses the following issue:
|
||||
- [flutter/81326](https://github.com/flutter/flutter/issues/81326) - macOS binaries not codesigned
|
||||
|
||||
### [2.0.5](https://github.com/flutter/flutter/pull/80570) (April 16, 2021)
|
||||
This hotfix release addresses the following issue:
|
||||
- [dart/45306](https://github.com/dart-lang/sdk/issues/45306) - Segmentation fault on specific code
|
||||
|
||||
### [2.0.4](https://github.com/flutter/flutter/pull/79486) (April 2, 2021)
|
||||
This hotfix release addresses the following issues:
|
||||
- [flutter/78589](https://github.com/flutter/flutter/issues/78589) - Cocoapod transitive dependencies with bitcode fail to link against debug Flutter framework
|
||||
- [flutter/76122](https://github.com/flutter/flutter/issues/76122) - Adding a WidgetSpan widget causes web HTML renderer painting issue
|
||||
- [flutter/75280](https://github.com/flutter/flutter/issues/75280) - Dragging the "draggable" widget causes widget to freeze in the overlay layer on Web
|
||||
|
||||
### [2.0.3](https://github.com/flutter/flutter/pull/78489) (March 19, 2021)
|
||||
This hotfix release addresses the following issues:
|
||||
- [flutter/75261](https://github.com/flutter/flutter/issues/75261) - Unable to deep link into Android app
|
||||
- [flutter/78167](https://github.com/flutter/flutter/issues/78167) - Flutter crash after going to version 2
|
||||
- [flutter/75677](https://github.com/flutter/flutter/issues/75677) - NoSuchMethodError: The method 'cancel' was called on null at AnsiSpinner.finish
|
||||
- [flutter/77419](https://github.com/flutter/flutter/pull/77419) - Fix Autovalidate enum references in fix data
|
||||
|
||||
### [2.0.2](https://github.com/flutter/flutter/pull/77850) (March 12, 2021)
|
||||
This hotfix release addresses the following issues:
|
||||
- [flutter/77251](https://github.com/flutter/flutter/issues/77251) - Flutter may show multiple snackbars when Scaffold is nested
|
||||
- [flutter/75473](https://github.com/flutter/flutter/issues/75473) - CanvasKit throws error when using Path.from
|
||||
- [flutter/76597](https://github.com/flutter/flutter/issues/76597) - When multiple Flutter engines are active, destroying one engine causes crash
|
||||
- [flutter/75061](https://github.com/flutter/flutter/issues/75061) - '_initialButtons == kPrimaryButton': is not true
|
||||
- [flutter/77419](https://github.com/flutter/flutter/pull/77419) - Fix Autovalidate enum references in fix data
|
||||
- [dart/45214](https://github.com/dart-lang/sdk/issues/45214) - Bad state exception can occur when HTTPS connection attempt errors or is aborted
|
||||
- [dart/45140](https://github.com/dart-lang/sdk/issues/45140) - Uint8List reports type exception while using + operator in null safety mode
|
||||
|
||||
### [2.0.1](https://github.com/flutter/flutter/pull/77194) (March 5, 2021)
|
||||
This hotfix release addresses the following issue:
|
||||
- [flutter/77173](https://github.com/flutter/flutter/issues/77173) - Building for macOS target fails when Flutter is installed from website
|
||||
|
||||
### 2.0.0 (March 3, 2021)
|
||||
Initial stable release.
|
||||
|
||||
## Flutter 1.22 Changes
|
||||
### [1.22.6](https://github.com/flutter/flutter/pull/74355) (Jan 25, 2021)
|
||||
This hotfix release addresses the following issue:
|
||||
- [flutter/70895](https://github.com/flutter/flutter/issues/70895) - Build error when switching between dev/beta and stable branches.
|
||||
|
||||
### [1.22.5](https://github.com/flutter/flutter/pull/72079) (Dec 10, 2020)
|
||||
This hotfix release addresses the following issue:
|
||||
- [flutter/70577](https://github.com/flutter/flutter/issues/70577) - Reliability regression in the camera plugin on iOS
|
||||
|
||||
### [1.22.4](https://github.com/flutter/flutter/pull/70327) (Nov 13, 2020)
|
||||
This hotfix release addresses the following issues:
|
||||
- [flutter/43620](https://github.com/flutter/flutter/issues/43620) - Dart analyzer terminates during development
|
||||
- [flutter/58200](https://github.com/flutter/flutter/issues/58200) - Apple AppStore submission fails with error: “The bundle Runner.app/Frameworks/App.framework does not sue Infpport the minimum OS Version specified in the Info.plist”
|
||||
- [flutter/69722](https://github.com/flutter/flutter/issues/69722) - Setting a custom observatory port for debugging does not take effect
|
||||
- [flutter/66144](https://github.com/flutter/flutter/issues/66144) - Setting autoFillHint to text form field may cause focus issues
|
||||
- [flutter/69449](https://github.com/flutter/flutter/issues/69449) - Potential race condition in FlutterPlatformViewsController
|
||||
- [flutter/65133](https://github.com/flutter/flutter/issues/65133) - Support targeting physical iOS devices on Apple Silicon
|
||||
|
||||
### [1.22.3](https://github.com/flutter/flutter/pull/69234) (October 30, 2020)
|
||||
This hotfix release addresses the following issues:
|
||||
- [flutter/67828](https://github.com/flutter/flutter/issues/67828) - Multiple taps required to delete text in some input fields.
|
||||
- [flutter/66108](https://github.com/flutter/flutter/issues/66108) - Reading Android clipboard may throw a security exception if it contains media
|
||||
|
||||
### [1.22.2](https://github.com/flutter/flutter/pull/68135) (October 16, 2020)
|
||||
This hotfix release addresses the following issues:
|
||||
- [flutter/67869](https://github.com/flutter/flutter/issues/67869) - Stylus tap gesture is improperly registered.
|
||||
- [flutter/67986](https://github.com/flutter/flutter/issues/67986) - Android Studio 4.1 not properly supported.
|
||||
- [flutter/67213](https://github.com/flutter/flutter/issues/67213) - Webviews in hybrid composition can cause a crash.
|
||||
- [flutter/67345](https://github.com/flutter/flutter/issues/67345) - VoiceOver accessibility issue with some pages.
|
||||
- [flutter/66764](https://github.com/flutter/flutter/issues/66764) - Native webviews may not be properly disposed of in hybrid composition.
|
||||
|
||||
### [1.22.1](https://github.com/flutter/flutter/pull/67552) (October 8, 2020)
|
||||
This hotfix release addresses the following issues:
|
||||
- [flutter/66940](https://github.com/flutter/flutter/issues/66940) - autovalidate property inadvertently removed.
|
||||
- [flutter/66962](https://github.com/flutter/flutter/issues/66962) - The new --analyze-size flag crashes when used with --split-debug-info
|
||||
- [flutter/66908](https://github.com/flutter/flutter/issues/66908) - Flutter Activity causing exceptions in some Android versions.
|
||||
- [flutter/66647](https://github.com/flutter/flutter/issues/66647) - Layout modifications performed by background threads causes exceptions on IOS14.
|
||||
|
||||
### 1.22.0 (October 1, 2020)
|
||||
Initial stable release.
|
||||
|
||||
## Flutter 1.20 Changes
|
||||
### [1.20.4](https://github.com/flutter/flutter/pull/65787) (September 15, 2020)
|
||||
This hotfix release addresses the following issues:
|
||||
- [flutter/64045](https://github.com/flutter/flutter/issues/64045) - Cannot deploy to physical device running iOS 14
|
||||
|
||||
### [1.20.3](https://github.com/flutter/flutter/pull/64984) (September 2, 2020)
|
||||
This hotfix release addresses the following issues:
|
||||
- [flutter/63876](https://github.com/flutter/flutter/issues/63876) - Performance regression for Image animation.
|
||||
- [flutter/64228](https://github.com/flutter/flutter/issues/64228) - WebView may freeze in release mode on iOS.
|
||||
- [flutter/64414](https://github.com/flutter/flutter/issues/64414) - Task switching may freeze on some Android versions.
|
||||
- [flutter/63560](https://github.com/flutter/flutter/issues/63560) - Building AARs may cause a stack overflow.
|
||||
- [flutter/57210](https://github.com/flutter/flutter/issues/57210) - Certain assets may cause issues with iOS builds.
|
||||
- [flutter/63590](https://github.com/flutter/flutter/issues/63590) - Passing null values from functions run via Isolates throws an exception.
|
||||
- [flutter/63427](https://github.com/flutter/flutter/issues/63427) - Wrong hour/minute order in timePicker in RTL mode.
|
||||
|
||||
### [1.20.2](https://github.com/flutter/flutter/pull/63591) (August 13, 2020)
|
||||
This hotfix release addresses the following issues:
|
||||
- [flutter/63038](https://github.com/flutter/flutter/issues/63038) - Crash due to serialization of generic DartType (UnknownType)
|
||||
- [flutter/46167](https://github.com/flutter/flutter/issues/46167) - iOS platform view cancels gesture while a new clip layer is added during the gesture
|
||||
- [flutter/62198](https://github.com/flutter/flutter/issues/62198) - SliverList throws Exception when first item is SizedBox.shrink()
|
||||
- [flutter/59029](https://github.com/flutter/flutter/issues/59029) - build ios --release can crash with ArgumentError: Invalid argument(s)
|
||||
- [flutter/62775](https://github.com/flutter/flutter/issues/62775) - TimePicker is not correct in RTL (right-to-left) languages
|
||||
- [flutter/55535](https://github.com/flutter/flutter/issues/55535) - New DatePicker widget is not fully localized
|
||||
- [flutter/63373](https://github.com/flutter/flutter/issues/63373) - Double date separators appearing in DatePicker, preventing date selection
|
||||
- [flutter/63176](https://github.com/flutter/flutter/issues/63176) - App.framework path in Podfile incorrect
|
||||
|
||||
### [1.20.1](https://github.com/flutter/flutter/pull/62990) (August 6, 2020)
|
||||
This hotfix release addresses the following issues:
|
||||
- [flutter/60215](https://github.com/flutter/flutter/issues/60215) - Creating an Android-only plug-in creates a no-op iOS folder.
|
||||
|
||||
### 1.20.0 (August 5, 2020)
|
||||
Initial stable release.
|
||||
|
||||
## Flutter 1.17 Changes
|
||||
### [1.17.5](https://github.com/flutter/flutter/pull/60611) (June 30, 2020)
|
||||
This hotfix release addresses the following issues:
|
||||
- [flutter-intellij/4642]https://github.com/flutter/flutter-intellij/issues/4642 - Intellij/Android Studio plugins fail to show connected Android devices.
|
||||
|
||||
### [1.17.4](https://github.com/flutter/flutter/pull/59695) (June 18, 2020)
|
||||
This hotfix release addresses the following issues:
|
||||
- [flutter/56826](https://github.com/flutter/flutter/issues/56826) - xcdevice polling may use all free hard drive space
|
||||
|
||||
### [1.17.3](https://github.com/flutter/flutter/pull/58646) (June 4, 2020)
|
||||
This hotfix release addresses the following issues:
|
||||
- [flutter/54420](https://github.com/flutter/flutter/issues/54420) - Exhausted heap space can cause machine to freeze
|
||||
|
||||
### [1.17.2](https://github.com/flutter/flutter/pull/58050) (May 28, 2020)
|
||||
This hotfix release addresses the following issues:
|
||||
- [flutter/57326](https://github.com/flutter/flutter/issues/57326) - CupertinoSegmentedControl does not always respond to selections
|
||||
- [flutter/56898](https://github.com/flutter/flutter/issues/56898) - DropdownButtonFormField is not re-rendered after value is changed programmatically
|
||||
- [flutter/56853](https://github.com/flutter/flutter/issues/56853) - Incorrect git error may be presented when flutter upgrade fails
|
||||
- [flutter/55552](https://github.com/flutter/flutter/issues/55552) - Hot reload may fail after a hot restart
|
||||
- [flutter/56507](https://github.com/flutter/flutter/issues/56507) - iOS builds may fail with “The path does not exist” error message
|
||||
|
||||
### [1.17.1](https://github.com/flutter/flutter/pull/57052) (May 13, 2020)
|
||||
This hotfix release addresses the following issues:
|
||||
- [flutter/26345](https://github.com/flutter/flutter/issues/26345) - Updating `AndroidView` layer tree causes crash on Xiaomi and Moto devices
|
||||
- [flutter/56567](https://github.com/flutter/flutter/issues/56567) - Xcode legacy build system causes build failures on iOS
|
||||
- [flutter/56473](https://github.com/flutter/flutter/issues/56473) - Build `--tree-shake-icons` build option crashes computer
|
||||
- [flutter/56688](https://github.com/flutter/flutter/issues/56688) - Regression in `Navigator.pushAndRemoveUntil`
|
||||
- [flutter/56479](https://github.com/flutter/flutter/issues/56479) - Crash while getting static type context for signature shaking
|
||||
|
||||
### 1.17.0 (May 5, 2020)
|
||||
Initial stable release.
|
||||
|
||||
## Flutter 1.12 Changes
|
||||
### Hotfix.9 (April 1, 2020)
|
||||
This hotfix release addresses the following issues:
|
||||
- [flutter/47819](https://github.com/flutter/flutter/issues/47819) - Crashes on ARMv8 Android devices
|
||||
- [flutter/49185](https://github.com/flutter/flutter/issues/49185) - Issues using Flutter 1.12 with Linux 5.5
|
||||
- [flutter/51712](https://github.com/flutter/flutter/issues/51712) - fixes for licensing from Android sdkmanager tool not being found
|
||||
|
||||
### [Hotfix.8](https://github.com/flutter/flutter/pull/50591) (February 11, 2020)
|
||||
This hotfix release addresses the following issues:
|
||||
- [flutter/50066](https://github.com/flutter/flutter/issues/50066) - binaries unsigned in last hotfix
|
||||
- [flutter/49787](https://github.com/flutter/flutter/issues/49787) - in a previous hotfix, we inadvertently broke Xcode 10 support. Reverting this change would have caused other problems (and users would still have to upgrade their Xcode with the next stable release), we decided to increase our minimum supported Xcode version. Please see the linked issue for more context on this decision.
|
||||
- [flutter/45732](https://github.com/flutter/flutter/issues/45732) - Android log reader fix
|
||||
- [flutter/47609](https://github.com/flutter/flutter/issues/47609) - Android log reader fix
|
||||
|
||||
### [Hotfix.7](https://github.com/flutter/flutter/pull/49437) (January 26, 2020)
|
||||
This hotfix release addresses the following issues:
|
||||
- [flutter/47164](https://github.com/flutter/flutter/issues/47164) - blackscreen / crash on certain Huawei devices
|
||||
- [flutter/47804](https://github.com/flutter/flutter/issues/47804) - Flutter engine crashes on some Android devices due to "Failed to setup Skia Gr context"
|
||||
- [flutter/46172](https://github.com/flutter/flutter/issues/46172) - reportFullyDrawn causes crash on Android KitKat
|
||||
|
||||
### Hotfix.5 (December 11, 2019)
|
||||
Initial stable release.
|
14
flutter/CODEOWNERS
Normal file
14
flutter/CODEOWNERS
Normal file
@ -0,0 +1,14 @@
|
||||
# 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.
|
||||
|
||||
/packages/flutter_tools/templates/module/ios/ @jmagman
|
||||
/packages/flutter_tools/templates/**/Podfile* @jmagman
|
||||
|
||||
# Working on flutter_driver improvements.
|
||||
# See https://github.com/flutter/flutter/issues/148028.
|
||||
/packages/flutter_driver/** @matanlurey
|
52
flutter/CODE_OF_CONDUCT.md
Normal file
52
flutter/CODE_OF_CONDUCT.md
Normal 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.
|
||||
|
||||

|
||||
|
||||
Source: _[xkcd, May 2012](https://xkcd.com/1053/)_
|
211
flutter/CONTRIBUTING.md
Normal file
211
flutter/CONTRIBUTING.md
Normal 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](./engine/src/flutter/docs/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).
|
||||
|
||||
[](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!
|
1022
flutter/DEPS
Normal file
1022
flutter/DEPS
Normal file
File diff suppressed because it is too large
Load Diff
25
flutter/LICENSE
Normal file
25
flutter/LICENSE
Normal 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
17
flutter/PATENT_GRANT
Normal 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.
|
124
flutter/README.md
Normal file
124
flutter/README.md
Normal file
@ -0,0 +1,124 @@
|
||||
<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>
|
||||
|
||||
[](https://flutter-dashboard.appspot.com/#/build?repo=flutter)
|
||||
[![Discord badge][]][Discord instructions]
|
||||
[![Twitter handle][]][Twitter badge]
|
||||
[](https://codecov.io/gh/flutter/flutter)
|
||||
[](https://bestpractices.coreinfrastructure.org/projects/5631)
|
||||
[](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://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 announcements about new releases, follow the
|
||||
[flutter-announce@googlegroups.com](https://groups.google.com/forum/#!forum/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/src/content/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 platform], 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/src/content/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
|
||||
[layered architecture]: https://docs.flutter.dev/resources/inside-flutter
|
||||
[architectural overview]: https://docs.flutter.dev/resources/architectural-overview
|
||||
[widget catalog]: https://flutter.dev/widgets/
|
||||
[Cupertino]: https://docs.flutter.dev/development/ui/widgets/cupertino
|
||||
[Material]: https://docs.flutter.dev/development/ui/widgets/material
|
||||
[Skia]: https://skia.org/
|
||||
[Dart platform]: https://dart.dev/
|
||||
[Hot reload animation]: https://github.com/flutter/website/blob/main/src/content/assets/images/docs/tools/android-studio/hot-reload.gif?raw=true
|
||||
[Hot reload]: https://docs.flutter.dev/development/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/development/platform-integration/android/c-interop
|
||||
[iOS FFI]: https://docs.flutter.dev/development/platform-integration/ios/c-interop
|
||||
[macOS FFI]: https://docs.flutter.dev/development/platform-integration/macos/c-interop
|
||||
[Windows FFI]: https://docs.flutter.dev/development/platform-integration/windows/building#integrating-with-windows
|
||||
[platform channels]: https://docs.flutter.dev/development/platform-integration/platform-channels
|
||||
[interop example]: https://github.com/flutter/flutter/tree/main/examples/platform_channel
|
||||
[Impeller]: https://docs.flutter.dev/perf/impeller
|
350
flutter/TESTOWNERS
Normal file
350
flutter/TESTOWNERS
Normal file
@ -0,0 +1,350 @@
|
||||
# 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 @andrewkolos @flutter/tool
|
||||
/dev/devicelab/bin/tasks/android_choreographer_do_frame_test.dart @reidbaker @flutter/engine
|
||||
/dev/devicelab/bin/tasks/android_defines_test.dart @andrewkolos @flutter/tool
|
||||
/dev/devicelab/bin/tasks/android_java11_dependency_smoke_tests.dart @gmackall @flutter/android
|
||||
/dev/devicelab/bin/tasks/android_java17_dependency_smoke_tests.dart @gmackall @flutter/android
|
||||
/dev/devicelab/bin/tasks/android_lifecycles_test.dart @reidbaker @flutter/engine
|
||||
/dev/devicelab/bin/tasks/android_obfuscate_test.dart @andrewkolos @flutter/tool
|
||||
/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 @andrewkolos @flutter/tool
|
||||
/dev/devicelab/bin/tasks/android_view_scroll_perf__timeline_summary.dart @jtmcdole @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 @andrewkolos @flutter/tool
|
||||
/dev/devicelab/bin/tasks/clipper_cache_perf__e2e_summary.dart @flar @flutter/engine
|
||||
/dev/devicelab/bin/tasks/codegen_integration.dart @andrewkolos @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 @andrewkolos @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_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 @andrewkolos @flutter/tool
|
||||
/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 @andrewkolos @flutter/tool
|
||||
/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/frame_policy_delay_test_android.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 @reidbaker @flutter/tool
|
||||
/dev/devicelab/bin/tasks/hot_mode_dev_cycle_linux__benchmark.dart @bkonyi @flutter/tool
|
||||
/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 @andrewkolos @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_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 @flutter/tool
|
||||
/dev/devicelab/bin/tasks/routing_test.dart @andrewkolos @flutter/tool
|
||||
/dev/devicelab/bin/tasks/shader_mask_cache_perf__e2e_summary.dart @flar @flutter/engine
|
||||
/dev/devicelab/bin/tasks/spell_check_test_ios.dart @camsim99 @flutter/android
|
||||
/dev/devicelab/bin/tasks/spell_check_test.dart @camsim99 @flutter/android
|
||||
/dev/devicelab/bin/tasks/textfield_perf__e2e_summary.dart @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
|
||||
/dev/devicelab/bin/tasks/animated_advanced_blend_perf__timeline_summary.dart @gaaclarke @flutter/engine
|
||||
/dev/devicelab/bin/tasks/animated_advanced_blend_perf_ios__timeline_summary.dart @gaaclarke @flutter/engine
|
||||
/dev/devicelab/bin/tasks/animated_advanced_blend_perf_opengles__timeline_summary.dart @gaaclarke @flutter/engine
|
||||
/dev/devicelab/bin/tasks/animated_blur_backdrop_filter_perf__timeline_summary.dart @jonahwilliams @flutter/engine
|
||||
/dev/devicelab/bin/tasks/animated_blur_backdrop_filter_perf_opengles__timeline_summary.dart @gaaclarke @flutter/engine
|
||||
/dev/devicelab/bin/tasks/slider_perf_android.dart @tahatesser @flutter/framework
|
||||
/dev/devicelab/bin/tasks/draw_vertices_perf_opengles__timeline_summary.dart @jonahwilliams @flutter/engine
|
||||
/dev/devicelab/bin/tasks/draw_atlas_perf_opengles__timeline_summary.dart @jonahwilliams @flutter/engine
|
||||
/dev/devicelab/bin/tasks/draw_vertices_perf__timeline_summary.dart @jonahwilliams @flutter/engine
|
||||
/dev/devicelab/bin/tasks/draw_atlas_perf__timeline_summary.dart @jonahwilliams @flutter/engine
|
||||
/dev/devicelab/bin/tasks/static_path_tessellation_perf__timeline_summary.dart @jonahwilliams @flutter/engine
|
||||
/dev/devicelab/bin/tasks/dynamic_path_tessellation_perf__timeline_summary.dart @jonahwilliams @flutter/engine
|
||||
/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/rrect_blur_perf__timeline_summary.dart @gaaclarke @flutter/engine
|
||||
|
||||
## Windows Android DeviceLab tests
|
||||
/dev/devicelab/bin/tasks/basic_material_app_win__compile.dart @andrewkolos @flutter/tool
|
||||
/dev/devicelab/bin/tasks/channels_integration_test_win.dart @jtmcdole @flutter/engine
|
||||
/dev/devicelab/bin/tasks/complex_layout_win__compile.dart @andrewkolos @flutter/tool
|
||||
/dev/devicelab/bin/tasks/flavors_test_win.dart @andrewkolos @flutter/tool
|
||||
/dev/devicelab/bin/tasks/flutter_gallery_win__compile.dart @andrewkolos @flutter/tool
|
||||
/dev/devicelab/bin/tasks/hot_mode_dev_cycle_win__benchmark.dart @andrewkolos @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/embedded_android_views_integration_test.dart @stuartmorgan @flutter/plugin
|
||||
/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 @andrewkolos @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 @andrewkolos @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/hybrid_android_views_integration_test.dart @stuartmorgan @flutter/plugin
|
||||
/dev/devicelab/bin/tasks/imagefiltered_transform_animation_perf__timeline_summary.dart @jtmcdole @flutter/engine
|
||||
/dev/devicelab/bin/tasks/integration_test_test.dart @andrewkolos @flutter/tool
|
||||
/dev/devicelab/bin/tasks/integration_ui_driver.dart @andrewkolos @flutter/tool
|
||||
/dev/devicelab/bin/tasks/integration_ui_frame_number.dart @jtmcdole @flutter/engine
|
||||
/dev/devicelab/bin/tasks/integration_ui_keyboard_resize.dart @andrewkolos @flutter/tool
|
||||
/dev/devicelab/bin/tasks/integration_ui_screenshot.dart @andrewkolos @flutter/tool
|
||||
/dev/devicelab/bin/tasks/integration_ui_textfield.dart @andrewkolos @flutter/tool
|
||||
/dev/devicelab/bin/tasks/microbenchmarks.dart @jtmcdole @flutter/engine
|
||||
/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 @flutter/plugin
|
||||
/dev/devicelab/bin/tasks/platform_view__start_up.dart @jtmcdole @flutter/engine
|
||||
/dev/devicelab/bin/tasks/run_release_test.dart @andrewkolos @flutter/tool
|
||||
/dev/devicelab/bin/tasks/service_extensions_test.dart @andrewkolos @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_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 @hellohuanlin @flutter/engine
|
||||
/dev/devicelab/bin/tasks/basic_material_app_ios__compile.dart @jmagman @flutter/tool
|
||||
/dev/devicelab/bin/tasks/channels_integration_test_ios.dart @jmagman @flutter/engine
|
||||
/dev/devicelab/bin/tasks/codegen_integration_mac.dart @andrewkolos @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 @louisehsu @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 @hellohuanlin @flutter/engine
|
||||
/dev/devicelab/bin/tasks/cubic_bezier_perf_ios_sksl_warmup__timeline_summary.dart @jtmcdole @flutter/engine
|
||||
/dev/devicelab/bin/tasks/external_textures_integration_test_ios.dart @jtmcdole @flutter/engine
|
||||
/dev/devicelab/bin/tasks/flavors_test_ios.dart @jmagman @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 @jmagman @flutter/engine
|
||||
/dev/devicelab/bin/tasks/flutter_gallery_ios__start_up.dart @louisehsu @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 @louisehsu @flutter/engine
|
||||
/dev/devicelab/bin/tasks/hello_world_ios__compile.dart @jmagman @flutter/engine
|
||||
/dev/devicelab/bin/tasks/hot_mode_dev_cycle_ios__benchmark.dart @louisehsu @flutter/tool
|
||||
# TODO(vashworth): Remove once https://github.com/flutter/flutter/issues/142305 is fixed.
|
||||
/dev/devicelab/bin/tasks/hot_mode_dev_cycle_ios__benchmark_no_dds.dart @louisehsu @flutter/tool
|
||||
/dev/devicelab/bin/tasks/imagefiltered_transform_animation_perf_ios__timeline_summary.dart @hellohuanlin @flutter/engine
|
||||
/dev/devicelab/bin/tasks/integration_test_test_ios.dart @jmagman @flutter/engine
|
||||
/dev/devicelab/bin/tasks/integration_ui_ios_driver.dart @louisehsu @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 @louisehsu @flutter/engine
|
||||
/dev/devicelab/bin/tasks/integration_ui_ios_screenshot.dart @louisehsu @flutter/tool
|
||||
/dev/devicelab/bin/tasks/integration_ui_ios_textfield.dart @louisehsu @flutter/tool
|
||||
/dev/devicelab/bin/tasks/ios_app_with_extensions_test.dart @jmagman @flutter/tool
|
||||
/dev/devicelab/bin/tasks/ios_defines_test.dart @jmagman @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 @flutter/plugin
|
||||
/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_android.dart @dcharkes @flutter/android
|
||||
/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 @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 @hellohuanlin @flutter/engine
|
||||
/dev/devicelab/bin/tasks/route_test_ios.dart @jmagman @flutter/tool
|
||||
/dev/devicelab/bin/tasks/simple_animation_perf_ios.dart @hellohuanlin @flutter/engine
|
||||
/dev/devicelab/bin/tasks/tiles_scroll_perf_ios__timeline_summary.dart @hellohuanlin @flutter/engine
|
||||
/dev/devicelab/bin/tasks/very_long_picture_scrolling_perf_ios__e2e_summary.dart @flar @flutter/engine
|
||||
/dev/devicelab/bin/tasks/animated_blur_backdrop_filter_perf_ios__timeline_summary.dart @jonahwilliams @flutter/engine
|
||||
/dev/devicelab/bin/tasks/draw_points_perf_ios__timeline_summary.dart @jonahwilliams @flutter/engine
|
||||
/dev/devicelab/bin/tasks/draw_vertices_perf_ios__timeline_summary.dart @jonahwilliams @flutter/engine
|
||||
/dev/devicelab/bin/tasks/draw_atlas_perf_ios__timeline_summary.dart @jonahwilliams @flutter/engine
|
||||
/dev/devicelab/bin/tasks/static_path_tessellation_perf_ios__timeline_summary.dart @jonahwilliams @flutter/engine
|
||||
/dev/devicelab/bin/tasks/dynamic_path_tessellation_perf_ios__timeline_summary.dart @jonahwilliams @flutter/engine
|
||||
/dev/devicelab/bin/tasks/rrect_blur_perf_ios__timeline_summary.dart @gaaclarke @flutter/engine
|
||||
|
||||
## Host only DeviceLab tests
|
||||
/dev/devicelab/bin/tasks/animated_complex_opacity_perf_macos__e2e_summary.dart @cbracken @flutter/desktop
|
||||
/dev/devicelab/bin/tasks/android_release_builds_exclude_dev_dependencies_test.dart @camsim99 @flutter/android
|
||||
/dev/devicelab/bin/tasks/basic_material_app_macos__compile.dart @cbracken @flutter/desktop
|
||||
/dev/devicelab/bin/tasks/build_aar_module_test.dart @andrewkolos @flutter/tool
|
||||
/dev/devicelab/bin/tasks/build_ios_framework_module_test.dart @jmagman @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 @flutter/plugin
|
||||
/dev/devicelab/bin/tasks/entrypoint_dart_registrant.dart @aaclarke @flutter/plugin
|
||||
/dev/devicelab/bin/tasks/flavors_test_macos.dart @cbracken @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 @andrewkolos @flutter/tool
|
||||
/dev/devicelab/bin/tasks/gradle_plugin_bundle_test.dart @stuartmorgan @flutter/plugin
|
||||
/dev/devicelab/bin/tasks/gradle_plugin_fat_apk_test.dart @stuartmorgan @flutter/plugin
|
||||
/dev/devicelab/bin/tasks/gradle_plugin_light_apk_test.dart @stuartmorgan @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/macos_chrome_dev_mode.dart @andrewkolos @flutter/tool
|
||||
/dev/devicelab/bin/tasks/module_custom_host_app_name_test.dart @andrewkolos @flutter/tool
|
||||
/dev/devicelab/bin/tasks/module_host_with_custom_build_test.dart @andrewkolos @flutter/tool
|
||||
/dev/devicelab/bin/tasks/build_android_host_app_with_module_aar.dart @andrewkolos @flutter/tool
|
||||
/dev/devicelab/bin/tasks/build_android_host_app_with_module_source.dart @gmackall @flutter/android
|
||||
/dev/devicelab/bin/tasks/module_test_ios.dart @jmagman @flutter/tool
|
||||
/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 @flutter/plugin
|
||||
/dev/devicelab/bin/tasks/plugin_test.dart @stuartmorgan @flutter/plugin
|
||||
/dev/devicelab/bin/tasks/plugin_test_ios.dart @stuartmorgan @flutter/ios
|
||||
/dev/devicelab/bin/tasks/plugin_test_linux.dart @stuartmorgan @flutter/desktop
|
||||
/dev/devicelab/bin/tasks/plugin_test_macos.dart @cbracken @flutter/desktop
|
||||
/dev/devicelab/bin/tasks/plugin_test_windows.dart @loic-sharma @flutter/desktop
|
||||
/dev/devicelab/bin/tasks/run_debug_test_android.dart @andrewkolos @flutter/tool
|
||||
/dev/devicelab/bin/tasks/run_debug_test_android.dart @andrewkolos @flutter/tool
|
||||
/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_skwasm.dart @eyebrowsoffire @flutter/web
|
||||
/dev/devicelab/bin/tasks/web_benchmarks_skwasm_st.dart @eyebrowsoffire @flutter/web
|
||||
/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
|
||||
/dev/devicelab/bin/tasks/windows_desktop_impeller.dart @jonahwilliams @flutter/engine
|
||||
/dev/devicelab/bin/tasks/mac_desktop_impeller.dart @jonahwilliams @flutter/engine
|
||||
/dev/devicelab/bin/tasks/linux_desktop_impeller.dart @jonahwilliams @flutter/engine
|
||||
|
||||
## Host only framework tests
|
||||
# Linux docs_deploy_beta
|
||||
# Linux docs_deploy_stable
|
||||
# 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 @gmackall @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
|
||||
# build_tests @andrewkolos @flutter/tool
|
||||
# ci_yaml flutter roller @keyonghan @flutter/infra
|
||||
# coverage @goderbauer @flutter/infra
|
||||
# customer_testing @Piinks @flutter/framework
|
||||
# docs @Piinks @flutter/framework
|
||||
# flutter_driver_android_test @matanlurey @johnmccutchan
|
||||
# flutter_packaging @christopherfujino @flutter/infra
|
||||
# flutter_plugins @stuartmorgan @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 @andrewkolos @flutter/tool
|
||||
# tool_integration_tests @bkonyi @flutter/tool
|
||||
# android_preview_tool_integration_tests @gmackall @flutter/android
|
||||
# android_java11_tool_integration_tests @gmackall @flutter/android
|
||||
# tool_tests @andrewkolos @flutter/tool
|
||||
# verify_binaries_codesigned @cbracken @flutter/releases
|
||||
# web_canvaskit_tests @yjbanov @flutter/web
|
||||
# web_integration_tests @yjbanov @flutter/web
|
||||
# web_long_running_tests @yjbanov @flutter/web
|
||||
# web_tests @yjbanov @flutter/web
|
||||
# web_skwasm_tests @eyebrowsoffire @flutter/web
|
||||
# web_tool_tests @yjbanov @flutter/tool
|
269
flutter/analysis_options.yaml
Normal file
269
flutter/analysis_options.yaml
Normal file
@ -0,0 +1,269 @@
|
||||
# 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
|
||||
# - always_use_package_imports # we do this commonly
|
||||
- annotate_overrides
|
||||
- annotate_redeclares
|
||||
# - avoid_annotating_with_dynamic # conflicts with always_specify_types
|
||||
- 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 # conflicts with always_specify_types
|
||||
- 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 # opposite of always_specify_types
|
||||
# - omit_obvious_local_variable_types # not yet tested
|
||||
# - omit_obvious_property_types # not yet tested
|
||||
# - 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 # not yet tested
|
||||
# - specify_nonobvious_property_types # not yet tested
|
||||
- strict_top_level_inference
|
||||
- test_types_in_equals
|
||||
- throw_in_finally
|
||||
- tighten_type_of_initializing_formals
|
||||
# - type_annotate_public_apis # subset of always_specify_types
|
||||
- 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_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
|
42
flutter/dartdoc_options.yaml
Normal file
42
flutter/dartdoc_options.yaml
Normal 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
7
flutter/dev/README.md
Normal 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.
|
33
flutter/dev/a11y_assessments/README.md
Normal file
33
flutter/dev/a11y_assessments/README.md
Normal 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.
|
1
flutter/dev/a11y_assessments/analysis_options.yaml
Normal file
1
flutter/dev/a11y_assessments/analysis_options.yaml
Normal file
@ -0,0 +1 @@
|
||||
include: ../../analysis_options.yaml
|
93
flutter/dev/a11y_assessments/android/app/build.gradle
Normal file
93
flutter/dev/a11y_assessments/android/app/build.gradle
Normal file
@ -0,0 +1,93 @@
|
||||
// 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
|
||||
|
||||
// Flutter's CI installs the NDK at a non-standard path.
|
||||
// This non-standard structure is initially created by
|
||||
// https://github.com/flutter/engine/blob/3.27.0/tools/android_sdk/create_cipd_packages.sh.
|
||||
String systemNdkPath = System.getenv("ANDROID_NDK_PATH")
|
||||
if (systemNdkPath != null) {
|
||||
ndkVersion = flutter.ndkVersion
|
||||
ndkPath = systemNdkPath
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_1_8
|
||||
targetCompatibility JavaVersion.VERSION_1_8
|
||||
}
|
||||
|
||||
kotlinOptions {
|
||||
jvmTarget = '1.8'
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
main.java.srcDirs += 'src/main/kotlin'
|
||||
}
|
||||
|
||||
defaultConfig {
|
||||
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
|
||||
applicationId "dev.flutter.a11yassessments"
|
||||
// You can update the following values to match your application needs.
|
||||
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
|
||||
minSdkVersion flutter.minSdkVersion
|
||||
targetSdkVersion flutter.targetSdkVersion
|
||||
versionCode flutterVersionCode.toInteger()
|
||||
versionName flutterVersionName
|
||||
}
|
||||
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 {}
|
@ -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>
|
@ -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>
|
34
flutter/dev/a11y_assessments/android/build.gradle
Normal file
34
flutter/dev/a11y_assessments/android/build.gradle
Normal file
@ -0,0 +1,34 @@
|
||||
// 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.buildDir = '../build'
|
||||
|
||||
subprojects {
|
||||
project.buildDir = "${rootProject.buildDir}/${project.name}"
|
||||
}
|
||||
subprojects {
|
||||
project.evaluationDependsOn(':app')
|
||||
dependencyLocking {
|
||||
ignoredDependencies.add('io.flutter:*')
|
||||
lockFile = file("${rootProject.projectDir}/project-${project.name}.lockfile")
|
||||
if (!project.hasProperty('local-engine-repo')) {
|
||||
lockAllConfigurations()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tasks.register("clean", Delete) {
|
||||
delete rootProject.buildDir
|
||||
}
|
153
flutter/dev/a11y_assessments/android/buildscript-gradle.lockfile
Normal file
153
flutter/dev/a11y_assessments/android/buildscript-gradle.lockfile
Normal file
@ -0,0 +1,153 @@
|
||||
# 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.7.0=classpath
|
||||
androidx.databinding:databinding-compiler-common:8.7.0=classpath
|
||||
com.android.application:com.android.application.gradle.plugin:8.7.0=classpath
|
||||
com.android.databinding:baseLibrary:8.7.0=classpath
|
||||
com.android.tools.analytics-library:crash:31.7.0=classpath
|
||||
com.android.tools.analytics-library:protos:31.7.0=classpath
|
||||
com.android.tools.analytics-library:shared:31.7.0=classpath
|
||||
com.android.tools.analytics-library:tracker:31.7.0=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.7.0-12006047=classpath
|
||||
com.android.tools.build:aaptcompiler:8.7.0=classpath
|
||||
com.android.tools.build:apksig:8.7.0=classpath
|
||||
com.android.tools.build:apkzlib:8.7.0=classpath
|
||||
com.android.tools.build:builder-model:8.7.0=classpath
|
||||
com.android.tools.build:builder-test-api:8.7.0=classpath
|
||||
com.android.tools.build:builder:8.7.0=classpath
|
||||
com.android.tools.build:bundletool:1.17.1=classpath
|
||||
com.android.tools.build:gradle-api:8.7.0=classpath
|
||||
com.android.tools.build:gradle-settings-api:8.7.0=classpath
|
||||
com.android.tools.build:gradle:8.7.0=classpath
|
||||
com.android.tools.build:manifest-merger:31.7.0=classpath
|
||||
com.android.tools.build:transform-api:2.0.0-deprecated-use-gradle-api=classpath
|
||||
com.android.tools.ddms:ddmlib:31.7.0=classpath
|
||||
com.android.tools.layoutlib:layoutlib-api:31.7.0=classpath
|
||||
com.android.tools.lint:lint-model:31.7.0=classpath
|
||||
com.android.tools.lint:lint-typedef-remover:31.7.0=classpath
|
||||
com.android.tools.utp:android-device-provider-ddmlib-proto:31.7.0=classpath
|
||||
com.android.tools.utp:android-device-provider-gradle-proto:31.7.0=classpath
|
||||
com.android.tools.utp:android-device-provider-profile-proto:31.7.0=classpath
|
||||
com.android.tools.utp:android-test-plugin-host-additional-test-output-proto:31.7.0=classpath
|
||||
com.android.tools.utp:android-test-plugin-host-apk-installer-proto:31.7.0=classpath
|
||||
com.android.tools.utp:android-test-plugin-host-coverage-proto:31.7.0=classpath
|
||||
com.android.tools.utp:android-test-plugin-host-emulator-control-proto:31.7.0=classpath
|
||||
com.android.tools.utp:android-test-plugin-host-logcat-proto:31.7.0=classpath
|
||||
com.android.tools.utp:android-test-plugin-host-retention-proto:31.7.0=classpath
|
||||
com.android.tools.utp:android-test-plugin-result-listener-gradle-proto:31.7.0=classpath
|
||||
com.android.tools:annotations:31.7.0=classpath
|
||||
com.android.tools:common:31.7.0=classpath
|
||||
com.android.tools:dvlib:31.7.0=classpath
|
||||
com.android.tools:repository:31.7.0=classpath
|
||||
com.android.tools:sdk-common:31.7.0=classpath
|
||||
com.android.tools:sdklib:31.7.0=classpath
|
||||
com.android:signflinger:8.7.0=classpath
|
||||
com.android:zipflinger:8.7.0=classpath
|
||||
com.google.android:annotations:4.1.1.4=classpath
|
||||
com.google.api.grpc:proto-google-common-protos:2.17.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.10.1=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.18.0=classpath
|
||||
com.google.flatbuffers:flatbuffers-java:1.12.0=classpath
|
||||
com.google.guava:failureaccess:1.0.1=classpath
|
||||
com.google.guava:guava:32.0.1-jre=classpath
|
||||
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=classpath
|
||||
com.google.j2objc:j2objc-annotations:2.8=classpath
|
||||
com.google.jimfs:jimfs:1.1=classpath
|
||||
com.google.protobuf:protobuf-java-util:3.22.3=classpath
|
||||
com.google.protobuf:protobuf-java:3.22.3=classpath
|
||||
com.google.testing.platform:core-proto:0.0.9-alpha02=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.13.0=classpath
|
||||
commons-logging:commons-logging:1.2=classpath
|
||||
io.grpc:grpc-api:1.57.0=classpath
|
||||
io.grpc:grpc-context:1.57.0=classpath
|
||||
io.grpc:grpc-core:1.57.0=classpath
|
||||
io.grpc:grpc-netty:1.57.0=classpath
|
||||
io.grpc:grpc-protobuf-lite:1.57.0=classpath
|
||||
io.grpc:grpc-protobuf:1.57.0=classpath
|
||||
io.grpc:grpc-stub:1.57.0=classpath
|
||||
io.netty:netty-buffer:4.1.93.Final=classpath
|
||||
io.netty:netty-codec-http2:4.1.93.Final=classpath
|
||||
io.netty:netty-codec-http:4.1.93.Final=classpath
|
||||
io.netty:netty-codec-socks:4.1.93.Final=classpath
|
||||
io.netty:netty-codec:4.1.93.Final=classpath
|
||||
io.netty:netty-common:4.1.93.Final=classpath
|
||||
io.netty:netty-handler-proxy:4.1.93.Final=classpath
|
||||
io.netty:netty-handler:4.1.93.Final=classpath
|
||||
io.netty:netty-resolver:4.1.93.Final=classpath
|
||||
io.netty:netty-transport-native-unix-common:4.1.93.Final=classpath
|
||||
io.netty:netty-transport:4.1.93.Final=classpath
|
||||
io.perfmark:perfmark-api:0.26.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.77=classpath
|
||||
org.bouncycastle:bcprov-jdk18on:1.77=classpath
|
||||
org.bouncycastle:bcutil-jdk18on:1.77=classpath
|
||||
org.checkerframework:checker-qual:3.33.0=classpath
|
||||
org.codehaus.mojo:animal-sniffer-annotations:1.23=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.intellij.deps:trove4j:1.0.20200330=classpath
|
||||
org.jetbrains.kotlin.android:org.jetbrains.kotlin.android.gradle.plugin:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-android-extensions:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-annotation-processing-gradle:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-build-common:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-compiler-runner:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-daemon-client:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-daemon-embeddable:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-api:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-idea-proto:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-idea:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-model:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-klib-commonizer-api:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-native-utils:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-project-model:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-reflect:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-scripting-common:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-scripting-jvm:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-tooling-core:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-util-io:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-util-klib:1.8.10=classpath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.5.0=classpath
|
||||
org.jetbrains:annotations:23.0.0=classpath
|
||||
org.jvnet.staxex:stax-ex:1.8.1=classpath
|
||||
org.ow2.asm:asm-analysis:9.6=classpath
|
||||
org.ow2.asm:asm-commons:9.6=classpath
|
||||
org.ow2.asm:asm-tree:9.6=classpath
|
||||
org.ow2.asm:asm-util:9.6=classpath
|
||||
org.ow2.asm:asm:9.6=classpath
|
||||
org.slf4j:slf4j-api:1.7.30=classpath
|
||||
org.tensorflow:tensorflow-lite-metadata:0.1.0-rc2=classpath
|
||||
empty=
|
3
flutter/dev/a11y_assessments/android/gradle.properties
Normal file
3
flutter/dev/a11y_assessments/android/gradle.properties
Normal file
@ -0,0 +1,3 @@
|
||||
org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError
|
||||
android.useAndroidX=true
|
||||
android.enableJetifier=true
|
145
flutter/dev/a11y_assessments/android/project-app.lockfile
Normal file
145
flutter/dev/a11y_assessments/android/project-app.lockfile
Normal file
@ -0,0 +1,145 @@
|
||||
# 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.activity:activity:1.8.1=debugAndroidTestCompileClasspath,debugApiDependenciesMetadata,debugCompileClasspath,debugImplementationDependenciesMetadata,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,profileApiDependenciesMetadata,profileCompileClasspath,profileImplementationDependenciesMetadata,profileRuntimeClasspath,profileUnitTestCompileClasspath,profileUnitTestRuntimeClasspath,releaseApiDependenciesMetadata,releaseCompileClasspath,releaseImplementationDependenciesMetadata,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
|
||||
androidx.annotation:annotation-experimental:1.4.0=debugAndroidTestCompileClasspath,debugApiDependenciesMetadata,debugCompileClasspath,debugImplementationDependenciesMetadata,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,profileApiDependenciesMetadata,profileCompileClasspath,profileImplementationDependenciesMetadata,profileRuntimeClasspath,profileUnitTestCompileClasspath,profileUnitTestRuntimeClasspath,releaseApiDependenciesMetadata,releaseCompileClasspath,releaseImplementationDependenciesMetadata,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
|
||||
androidx.annotation:annotation-jvm:1.8.0=debugAndroidTestCompileClasspath,debugCompileClasspath,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,profileCompileClasspath,profileRuntimeClasspath,profileUnitTestCompileClasspath,profileUnitTestRuntimeClasspath,releaseCompileClasspath,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
|
||||
androidx.annotation:annotation:1.8.0=debugAndroidTestCompileClasspath,debugApiDependenciesMetadata,debugCompileClasspath,debugImplementationDependenciesMetadata,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,profileApiDependenciesMetadata,profileCompileClasspath,profileImplementationDependenciesMetadata,profileRuntimeClasspath,profileUnitTestCompileClasspath,profileUnitTestRuntimeClasspath,releaseApiDependenciesMetadata,releaseCompileClasspath,releaseImplementationDependenciesMetadata,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
|
||||
androidx.arch.core:core-common:2.2.0=debugAndroidTestCompileClasspath,debugApiDependenciesMetadata,debugCompileClasspath,debugImplementationDependenciesMetadata,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,profileApiDependenciesMetadata,profileCompileClasspath,profileImplementationDependenciesMetadata,profileRuntimeClasspath,profileUnitTestCompileClasspath,profileUnitTestRuntimeClasspath,releaseApiDependenciesMetadata,releaseCompileClasspath,releaseImplementationDependenciesMetadata,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
|
||||
androidx.arch.core:core-runtime:2.2.0=debugAndroidTestCompileClasspath,debugApiDependenciesMetadata,debugCompileClasspath,debugImplementationDependenciesMetadata,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,profileApiDependenciesMetadata,profileCompileClasspath,profileImplementationDependenciesMetadata,profileRuntimeClasspath,profileUnitTestCompileClasspath,profileUnitTestRuntimeClasspath,releaseApiDependenciesMetadata,releaseCompileClasspath,releaseImplementationDependenciesMetadata,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
|
||||
androidx.collection:collection:1.1.0=debugAndroidTestCompileClasspath,debugApiDependenciesMetadata,debugCompileClasspath,debugImplementationDependenciesMetadata,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,profileApiDependenciesMetadata,profileCompileClasspath,profileImplementationDependenciesMetadata,profileRuntimeClasspath,profileUnitTestCompileClasspath,profileUnitTestRuntimeClasspath,releaseApiDependenciesMetadata,releaseCompileClasspath,releaseImplementationDependenciesMetadata,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
|
||||
androidx.concurrent:concurrent-futures:1.1.0=debugRuntimeClasspath,debugUnitTestRuntimeClasspath,profileRuntimeClasspath,profileUnitTestRuntimeClasspath,releaseRuntimeClasspath,releaseUnitTestRuntimeClasspath
|
||||
androidx.core:core-ktx:1.13.1=debugCompileClasspath,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,profileCompileClasspath,profileRuntimeClasspath,profileUnitTestCompileClasspath,profileUnitTestRuntimeClasspath,releaseCompileClasspath,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
|
||||
androidx.core:core-ktx:1.2.0=debugAndroidTestCompileClasspath,debugApiDependenciesMetadata,debugImplementationDependenciesMetadata,profileApiDependenciesMetadata,profileImplementationDependenciesMetadata,releaseApiDependenciesMetadata,releaseImplementationDependenciesMetadata
|
||||
androidx.core:core:1.13.1=debugAndroidTestCompileClasspath,debugApiDependenciesMetadata,debugCompileClasspath,debugImplementationDependenciesMetadata,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,profileApiDependenciesMetadata,profileCompileClasspath,profileImplementationDependenciesMetadata,profileRuntimeClasspath,profileUnitTestCompileClasspath,profileUnitTestRuntimeClasspath,releaseApiDependenciesMetadata,releaseCompileClasspath,releaseImplementationDependenciesMetadata,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
|
||||
androidx.customview:customview:1.0.0=debugAndroidTestCompileClasspath,debugApiDependenciesMetadata,debugCompileClasspath,debugImplementationDependenciesMetadata,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,profileApiDependenciesMetadata,profileCompileClasspath,profileImplementationDependenciesMetadata,profileRuntimeClasspath,profileUnitTestCompileClasspath,profileUnitTestRuntimeClasspath,releaseApiDependenciesMetadata,releaseCompileClasspath,releaseImplementationDependenciesMetadata,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
|
||||
androidx.fragment:fragment:1.7.1=debugAndroidTestCompileClasspath,debugApiDependenciesMetadata,debugCompileClasspath,debugImplementationDependenciesMetadata,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,profileApiDependenciesMetadata,profileCompileClasspath,profileImplementationDependenciesMetadata,profileRuntimeClasspath,profileUnitTestCompileClasspath,profileUnitTestRuntimeClasspath,releaseApiDependenciesMetadata,releaseCompileClasspath,releaseImplementationDependenciesMetadata,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
|
||||
androidx.interpolator:interpolator:1.0.0=debugRuntimeClasspath,debugUnitTestRuntimeClasspath,profileRuntimeClasspath,profileUnitTestRuntimeClasspath,releaseRuntimeClasspath,releaseUnitTestRuntimeClasspath
|
||||
androidx.lifecycle:lifecycle-common-java8:2.7.0=debugAndroidTestCompileClasspath,debugApiDependenciesMetadata,debugCompileClasspath,debugImplementationDependenciesMetadata,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,profileApiDependenciesMetadata,profileCompileClasspath,profileImplementationDependenciesMetadata,profileRuntimeClasspath,profileUnitTestCompileClasspath,profileUnitTestRuntimeClasspath,releaseApiDependenciesMetadata,releaseCompileClasspath,releaseImplementationDependenciesMetadata,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
|
||||
androidx.lifecycle:lifecycle-common:2.7.0=debugAndroidTestCompileClasspath,debugApiDependenciesMetadata,debugCompileClasspath,debugImplementationDependenciesMetadata,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,profileApiDependenciesMetadata,profileCompileClasspath,profileImplementationDependenciesMetadata,profileRuntimeClasspath,profileUnitTestCompileClasspath,profileUnitTestRuntimeClasspath,releaseApiDependenciesMetadata,releaseCompileClasspath,releaseImplementationDependenciesMetadata,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
|
||||
androidx.lifecycle:lifecycle-livedata-core-ktx:2.7.0=debugAndroidTestCompileClasspath,debugApiDependenciesMetadata,debugCompileClasspath,debugImplementationDependenciesMetadata,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,profileApiDependenciesMetadata,profileCompileClasspath,profileImplementationDependenciesMetadata,profileRuntimeClasspath,profileUnitTestCompileClasspath,profileUnitTestRuntimeClasspath,releaseApiDependenciesMetadata,releaseCompileClasspath,releaseImplementationDependenciesMetadata,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
|
||||
androidx.lifecycle:lifecycle-livedata-core:2.7.0=debugAndroidTestCompileClasspath,debugApiDependenciesMetadata,debugCompileClasspath,debugImplementationDependenciesMetadata,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,profileApiDependenciesMetadata,profileCompileClasspath,profileImplementationDependenciesMetadata,profileRuntimeClasspath,profileUnitTestCompileClasspath,profileUnitTestRuntimeClasspath,releaseApiDependenciesMetadata,releaseCompileClasspath,releaseImplementationDependenciesMetadata,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
|
||||
androidx.lifecycle:lifecycle-livedata:2.7.0=debugAndroidTestCompileClasspath,debugApiDependenciesMetadata,debugCompileClasspath,debugImplementationDependenciesMetadata,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,profileApiDependenciesMetadata,profileCompileClasspath,profileImplementationDependenciesMetadata,profileRuntimeClasspath,profileUnitTestCompileClasspath,profileUnitTestRuntimeClasspath,releaseApiDependenciesMetadata,releaseCompileClasspath,releaseImplementationDependenciesMetadata,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
|
||||
androidx.lifecycle:lifecycle-process:2.7.0=debugAndroidTestCompileClasspath,debugApiDependenciesMetadata,debugCompileClasspath,debugImplementationDependenciesMetadata,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,profileApiDependenciesMetadata,profileCompileClasspath,profileImplementationDependenciesMetadata,profileRuntimeClasspath,profileUnitTestCompileClasspath,profileUnitTestRuntimeClasspath,releaseApiDependenciesMetadata,releaseCompileClasspath,releaseImplementationDependenciesMetadata,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
|
||||
androidx.lifecycle:lifecycle-runtime:2.7.0=debugAndroidTestCompileClasspath,debugApiDependenciesMetadata,debugCompileClasspath,debugImplementationDependenciesMetadata,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,profileApiDependenciesMetadata,profileCompileClasspath,profileImplementationDependenciesMetadata,profileRuntimeClasspath,profileUnitTestCompileClasspath,profileUnitTestRuntimeClasspath,releaseApiDependenciesMetadata,releaseCompileClasspath,releaseImplementationDependenciesMetadata,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
|
||||
androidx.lifecycle:lifecycle-viewmodel-savedstate:2.7.0=debugAndroidTestCompileClasspath,debugApiDependenciesMetadata,debugCompileClasspath,debugImplementationDependenciesMetadata,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,profileApiDependenciesMetadata,profileCompileClasspath,profileImplementationDependenciesMetadata,profileRuntimeClasspath,profileUnitTestCompileClasspath,profileUnitTestRuntimeClasspath,releaseApiDependenciesMetadata,releaseCompileClasspath,releaseImplementationDependenciesMetadata,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
|
||||
androidx.lifecycle:lifecycle-viewmodel:2.7.0=debugAndroidTestCompileClasspath,debugApiDependenciesMetadata,debugCompileClasspath,debugImplementationDependenciesMetadata,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,profileApiDependenciesMetadata,profileCompileClasspath,profileImplementationDependenciesMetadata,profileRuntimeClasspath,profileUnitTestCompileClasspath,profileUnitTestRuntimeClasspath,releaseApiDependenciesMetadata,releaseCompileClasspath,releaseImplementationDependenciesMetadata,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
|
||||
androidx.loader:loader:1.0.0=debugAndroidTestCompileClasspath,debugApiDependenciesMetadata,debugCompileClasspath,debugImplementationDependenciesMetadata,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,profileApiDependenciesMetadata,profileCompileClasspath,profileImplementationDependenciesMetadata,profileRuntimeClasspath,profileUnitTestCompileClasspath,profileUnitTestRuntimeClasspath,releaseApiDependenciesMetadata,releaseCompileClasspath,releaseImplementationDependenciesMetadata,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
|
||||
androidx.profileinstaller:profileinstaller:1.3.1=debugRuntimeClasspath,debugUnitTestRuntimeClasspath,profileRuntimeClasspath,profileUnitTestRuntimeClasspath,releaseRuntimeClasspath,releaseUnitTestRuntimeClasspath
|
||||
androidx.savedstate:savedstate:1.2.1=debugAndroidTestCompileClasspath,debugApiDependenciesMetadata,debugCompileClasspath,debugImplementationDependenciesMetadata,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,profileApiDependenciesMetadata,profileCompileClasspath,profileImplementationDependenciesMetadata,profileRuntimeClasspath,profileUnitTestCompileClasspath,profileUnitTestRuntimeClasspath,releaseApiDependenciesMetadata,releaseCompileClasspath,releaseImplementationDependenciesMetadata,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
|
||||
androidx.startup:startup-runtime:1.1.1=debugAndroidTestCompileClasspath,debugApiDependenciesMetadata,debugCompileClasspath,debugImplementationDependenciesMetadata,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,profileApiDependenciesMetadata,profileCompileClasspath,profileImplementationDependenciesMetadata,profileRuntimeClasspath,profileUnitTestCompileClasspath,profileUnitTestRuntimeClasspath,releaseApiDependenciesMetadata,releaseCompileClasspath,releaseImplementationDependenciesMetadata,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
|
||||
androidx.tracing:tracing:1.2.0=debugAndroidTestCompileClasspath,debugApiDependenciesMetadata,debugCompileClasspath,debugImplementationDependenciesMetadata,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,profileApiDependenciesMetadata,profileCompileClasspath,profileImplementationDependenciesMetadata,profileRuntimeClasspath,profileUnitTestCompileClasspath,profileUnitTestRuntimeClasspath,releaseApiDependenciesMetadata,releaseCompileClasspath,releaseImplementationDependenciesMetadata,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
|
||||
androidx.versionedparcelable:versionedparcelable:1.1.1=debugAndroidTestCompileClasspath,debugApiDependenciesMetadata,debugCompileClasspath,debugImplementationDependenciesMetadata,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,profileApiDependenciesMetadata,profileCompileClasspath,profileImplementationDependenciesMetadata,profileRuntimeClasspath,profileUnitTestCompileClasspath,profileUnitTestRuntimeClasspath,releaseApiDependenciesMetadata,releaseCompileClasspath,releaseImplementationDependenciesMetadata,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
|
||||
androidx.viewpager:viewpager:1.0.0=debugAndroidTestCompileClasspath,debugApiDependenciesMetadata,debugCompileClasspath,debugImplementationDependenciesMetadata,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,profileApiDependenciesMetadata,profileCompileClasspath,profileImplementationDependenciesMetadata,profileRuntimeClasspath,profileUnitTestCompileClasspath,profileUnitTestRuntimeClasspath,releaseApiDependenciesMetadata,releaseCompileClasspath,releaseImplementationDependenciesMetadata,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
|
||||
androidx.window.extensions.core:core:1.0.0=debugRuntimeClasspath,debugUnitTestRuntimeClasspath,profileRuntimeClasspath,profileUnitTestRuntimeClasspath,releaseRuntimeClasspath,releaseUnitTestRuntimeClasspath
|
||||
androidx.window:window-java:1.2.0=debugAndroidTestCompileClasspath,debugApiDependenciesMetadata,debugCompileClasspath,debugImplementationDependenciesMetadata,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,profileApiDependenciesMetadata,profileCompileClasspath,profileImplementationDependenciesMetadata,profileRuntimeClasspath,profileUnitTestCompileClasspath,profileUnitTestRuntimeClasspath,releaseApiDependenciesMetadata,releaseCompileClasspath,releaseImplementationDependenciesMetadata,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
|
||||
androidx.window:window:1.2.0=debugAndroidTestCompileClasspath,debugApiDependenciesMetadata,debugCompileClasspath,debugImplementationDependenciesMetadata,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,profileApiDependenciesMetadata,profileCompileClasspath,profileImplementationDependenciesMetadata,profileRuntimeClasspath,profileUnitTestCompileClasspath,profileUnitTestRuntimeClasspath,releaseApiDependenciesMetadata,releaseCompileClasspath,releaseImplementationDependenciesMetadata,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
|
||||
com.android.tools.ddms:ddmlib:31.7.0=_internal-unified-test-platform-android-device-provider-ddmlib
|
||||
com.android.tools.emulator:proto:31.7.0=_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention
|
||||
com.android.tools.utp:android-device-provider-ddmlib-proto:31.7.0=_internal-unified-test-platform-android-device-provider-ddmlib
|
||||
com.android.tools.utp:android-device-provider-ddmlib:31.7.0=_internal-unified-test-platform-android-device-provider-ddmlib
|
||||
com.android.tools.utp:android-device-provider-gradle-proto:31.7.0=_internal-unified-test-platform-android-device-provider-gradle
|
||||
com.android.tools.utp:android-device-provider-gradle:31.7.0=_internal-unified-test-platform-android-device-provider-gradle
|
||||
com.android.tools.utp:android-device-provider-profile-proto:31.7.0=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle
|
||||
com.android.tools.utp:android-device-provider-profile:31.7.0=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle
|
||||
com.android.tools.utp:android-test-plugin-host-additional-test-output-proto:31.7.0=_internal-unified-test-platform-android-test-plugin-host-additional-test-output
|
||||
com.android.tools.utp:android-test-plugin-host-additional-test-output:31.7.0=_internal-unified-test-platform-android-test-plugin-host-additional-test-output
|
||||
com.android.tools.utp:android-test-plugin-host-apk-installer-proto:31.7.0=_internal-unified-test-platform-android-test-plugin-host-apk-installer
|
||||
com.android.tools.utp:android-test-plugin-host-apk-installer:31.7.0=_internal-unified-test-platform-android-test-plugin-host-apk-installer
|
||||
com.android.tools.utp:android-test-plugin-host-coverage-proto:31.7.0=_internal-unified-test-platform-android-test-plugin-host-coverage
|
||||
com.android.tools.utp:android-test-plugin-host-coverage:31.7.0=_internal-unified-test-platform-android-test-plugin-host-coverage
|
||||
com.android.tools.utp:android-test-plugin-host-device-info-proto:31.7.0=_internal-unified-test-platform-android-test-plugin-host-device-info
|
||||
com.android.tools.utp:android-test-plugin-host-device-info:31.7.0=_internal-unified-test-platform-android-test-plugin-host-device-info
|
||||
com.android.tools.utp:android-test-plugin-host-emulator-control-proto:31.7.0=_internal-unified-test-platform-android-test-plugin-host-emulator-control
|
||||
com.android.tools.utp:android-test-plugin-host-emulator-control:31.7.0=_internal-unified-test-platform-android-test-plugin-host-emulator-control
|
||||
com.android.tools.utp:android-test-plugin-host-logcat-proto:31.7.0=_internal-unified-test-platform-android-test-plugin-host-logcat
|
||||
com.android.tools.utp:android-test-plugin-host-logcat:31.7.0=_internal-unified-test-platform-android-test-plugin-host-logcat
|
||||
com.android.tools.utp:android-test-plugin-host-retention-proto:31.7.0=_internal-unified-test-platform-android-test-plugin-host-retention
|
||||
com.android.tools.utp:android-test-plugin-host-retention:31.7.0=_internal-unified-test-platform-android-test-plugin-host-retention
|
||||
com.android.tools.utp:android-test-plugin-result-listener-gradle-proto:31.7.0=_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
com.android.tools.utp:android-test-plugin-result-listener-gradle:31.7.0=_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
com.android.tools.utp:utp-common:31.7.0=_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-device-info,_internal-unified-test-platform-android-test-plugin-host-logcat,_internal-unified-test-platform-android-test-plugin-host-retention
|
||||
com.android.tools:annotations:31.7.0=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_internal-unified-test-platform-android-test-plugin-host-device-info,_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-logcat,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
com.android.tools:common:31.7.0=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_internal-unified-test-platform-android-test-plugin-host-device-info,_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-logcat,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
com.getkeepsafe.relinker:relinker:1.4.5=debugAndroidTestCompileClasspath,debugApiDependenciesMetadata,debugCompileClasspath,debugImplementationDependenciesMetadata,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,profileApiDependenciesMetadata,profileCompileClasspath,profileImplementationDependenciesMetadata,profileRuntimeClasspath,profileUnitTestCompileClasspath,profileUnitTestRuntimeClasspath,releaseApiDependenciesMetadata,releaseCompileClasspath,releaseImplementationDependenciesMetadata,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
|
||||
com.google.android:annotations:4.1.1.4=_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
com.google.api.grpc:proto-google-common-protos:2.17.0=_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
com.google.code.findbugs:jsr305:3.0.2=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_internal-unified-test-platform-android-test-plugin-host-device-info,_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-logcat,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
com.google.code.gson:gson:2.10.1=_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
com.google.crypto.tink:tink:1.7.0=_internal-unified-test-platform-android-test-plugin-host-emulator-control
|
||||
com.google.errorprone:error_prone_annotations:2.18.0=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_internal-unified-test-platform-android-test-plugin-host-device-info,_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-logcat,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
com.google.guava:failureaccess:1.0.1=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_internal-unified-test-platform-android-test-plugin-host-device-info,_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-logcat,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
com.google.guava:guava:32.0.1-jre=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_internal-unified-test-platform-android-test-plugin-host-device-info,_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-logcat,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
com.google.guava:listenablefuture:1.0=debugRuntimeClasspath,debugUnitTestRuntimeClasspath,profileRuntimeClasspath,profileUnitTestRuntimeClasspath,releaseRuntimeClasspath,releaseUnitTestRuntimeClasspath
|
||||
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_internal-unified-test-platform-android-test-plugin-host-device-info,_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-logcat,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
com.google.j2objc:j2objc-annotations:2.8=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_internal-unified-test-platform-android-test-plugin-host-device-info,_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-logcat,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
com.google.protobuf:protobuf-java:3.22.3=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_internal-unified-test-platform-android-test-plugin-host-device-info,_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-logcat,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
com.google.testing.platform:android-device-provider-local:0.0.9-alpha02=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_internal-unified-test-platform-android-test-plugin-host-device-info,_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-logcat,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
com.google.testing.platform:android-driver-instrumentation:0.0.9-alpha02=_internal-unified-test-platform-android-driver-instrumentation,_internal-unified-test-platform-android-test-plugin-host-emulator-control
|
||||
com.google.testing.platform:android-test-plugin:0.0.9-alpha02=_internal-unified-test-platform-android-test-plugin
|
||||
com.google.testing.platform:core-proto:0.0.9-alpha02=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
com.google.testing.platform:core:0.0.9-alpha02=_internal-unified-test-platform-core
|
||||
com.google.testing.platform:launcher:0.0.9-alpha02=_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-device-info,_internal-unified-test-platform-android-test-plugin-host-logcat,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-launcher
|
||||
commons-io:commons-io:2.13.0=_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention
|
||||
io.grpc:grpc-api:1.57.0=_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
io.grpc:grpc-context:1.57.0=_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
io.grpc:grpc-core:1.57.0=_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
io.grpc:grpc-netty:1.57.0=_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
io.grpc:grpc-protobuf-lite:1.57.0=_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
io.grpc:grpc-protobuf:1.57.0=_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
io.grpc:grpc-stub:1.57.0=_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
io.netty:netty-buffer:4.1.93.Final=_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
io.netty:netty-codec-http2:4.1.93.Final=_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
io.netty:netty-codec-http:4.1.93.Final=_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
io.netty:netty-codec-socks:4.1.93.Final=_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
io.netty:netty-codec:4.1.93.Final=_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
io.netty:netty-common:4.1.93.Final=_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
io.netty:netty-handler-proxy:4.1.93.Final=_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
io.netty:netty-handler:4.1.93.Final=_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
io.netty:netty-resolver:4.1.93.Final=_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
io.netty:netty-transport-native-unix-common:4.1.93.Final=_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
io.netty:netty-transport:4.1.93.Final=_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
io.perfmark:perfmark-api:0.26.0=_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
javax.annotation:javax.annotation-api:1.3.2=_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
net.java.dev.jna:jna-platform:5.6.0=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_internal-unified-test-platform-android-test-plugin-host-device-info,_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-logcat,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
net.java.dev.jna:jna:5.6.0=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_internal-unified-test-platform-android-test-plugin-host-device-info,_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-logcat,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
net.sf.kxml:kxml2:2.3.0=_internal-unified-test-platform-android-device-provider-ddmlib
|
||||
org.checkerframework:checker-qual:3.33.0=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_internal-unified-test-platform-android-test-plugin-host-device-info,_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-logcat,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
org.codehaus.mojo:animal-sniffer-annotations:1.23=_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
org.jacoco:org.jacoco.agent:0.8.7=androidJacocoAnt
|
||||
org.jacoco:org.jacoco.ant:0.8.7=androidJacocoAnt
|
||||
org.jacoco:org.jacoco.core:0.8.7=androidJacocoAnt
|
||||
org.jacoco:org.jacoco.report:0.8.7=androidJacocoAnt
|
||||
org.jetbrains.intellij.deps:trove4j:1.0.20200330=kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.8.10=kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-daemon-embeddable:1.8.10=kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:1.8.10=kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-reflect:1.6.10=kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-script-runtime:1.8.10=kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10=apiDependenciesMetadata,implementationDependenciesMetadata,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22=debugAndroidTestCompileClasspath,debugApiDependenciesMetadata,debugCompileClasspath,debugImplementationDependenciesMetadata,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,profileApiDependenciesMetadata,profileCompileClasspath,profileImplementationDependenciesMetadata,profileRuntimeClasspath,profileUnitTestCompileClasspath,profileUnitTestRuntimeClasspath,releaseApiDependenciesMetadata,releaseCompileClasspath,releaseImplementationDependenciesMetadata,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.9.20=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10=apiDependenciesMetadata,implementationDependenciesMetadata
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.20=debugAndroidTestCompileClasspath,debugApiDependenciesMetadata,debugCompileClasspath,debugImplementationDependenciesMetadata,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,profileApiDependenciesMetadata,profileCompileClasspath,profileImplementationDependenciesMetadata,profileRuntimeClasspath,profileUnitTestCompileClasspath,profileUnitTestRuntimeClasspath,releaseApiDependenciesMetadata,releaseCompileClasspath,releaseImplementationDependenciesMetadata,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.20=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_internal-unified-test-platform-android-test-plugin-host-device-info,_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-logcat,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10=apiDependenciesMetadata,implementationDependenciesMetadata
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.20=debugAndroidTestCompileClasspath,debugApiDependenciesMetadata,debugCompileClasspath,debugImplementationDependenciesMetadata,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,profileApiDependenciesMetadata,profileCompileClasspath,profileImplementationDependenciesMetadata,profileRuntimeClasspath,profileUnitTestCompileClasspath,profileUnitTestRuntimeClasspath,releaseApiDependenciesMetadata,releaseCompileClasspath,releaseImplementationDependenciesMetadata,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.20=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_internal-unified-test-platform-android-test-plugin-host-device-info,_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-logcat,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.8.10=apiDependenciesMetadata,implementationDependenciesMetadata,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.8.22=debugAndroidTestCompileClasspath,debugApiDependenciesMetadata,debugCompileClasspath,debugImplementationDependenciesMetadata,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,profileApiDependenciesMetadata,profileCompileClasspath,profileImplementationDependenciesMetadata,profileRuntimeClasspath,profileUnitTestCompileClasspath,profileUnitTestRuntimeClasspath,releaseApiDependenciesMetadata,releaseCompileClasspath,releaseImplementationDependenciesMetadata,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.9.20=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_internal-unified-test-platform-android-test-plugin-host-device-info,_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-logcat,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
org.jetbrains.kotlinx:atomicfu:0.20.2=debugApiDependenciesMetadata,debugImplementationDependenciesMetadata,profileApiDependenciesMetadata,profileImplementationDependenciesMetadata,releaseApiDependenciesMetadata,releaseImplementationDependenciesMetadata
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1=debugAndroidTestCompileClasspath,debugApiDependenciesMetadata,debugCompileClasspath,debugImplementationDependenciesMetadata,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,profileApiDependenciesMetadata,profileCompileClasspath,profileImplementationDependenciesMetadata,profileRuntimeClasspath,profileUnitTestCompileClasspath,profileUnitTestRuntimeClasspath,releaseApiDependenciesMetadata,releaseCompileClasspath,releaseImplementationDependenciesMetadata,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.6.4=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.7.1=debugAndroidTestCompileClasspath,debugApiDependenciesMetadata,debugCompileClasspath,debugImplementationDependenciesMetadata,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,profileApiDependenciesMetadata,profileCompileClasspath,profileImplementationDependenciesMetadata,profileRuntimeClasspath,profileUnitTestCompileClasspath,profileUnitTestRuntimeClasspath,releaseApiDependenciesMetadata,releaseCompileClasspath,releaseImplementationDependenciesMetadata,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.1=debugAndroidTestCompileClasspath,debugCompileClasspath,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,profileCompileClasspath,profileRuntimeClasspath,profileUnitTestCompileClasspath,profileUnitTestRuntimeClasspath,releaseCompileClasspath,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1=debugAndroidTestCompileClasspath,debugApiDependenciesMetadata,debugCompileClasspath,debugImplementationDependenciesMetadata,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,profileApiDependenciesMetadata,profileCompileClasspath,profileImplementationDependenciesMetadata,profileRuntimeClasspath,profileUnitTestCompileClasspath,profileUnitTestRuntimeClasspath,releaseApiDependenciesMetadata,releaseCompileClasspath,releaseImplementationDependenciesMetadata,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
|
||||
org.jetbrains:annotations:13.0=_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_internal-unified-test-platform-android-test-plugin-host-device-info,_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-logcat,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle,apiDependenciesMetadata,debugApiDependenciesMetadata,debugImplementationDependenciesMetadata,implementationDependenciesMetadata,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath,profileApiDependenciesMetadata,profileImplementationDependenciesMetadata,releaseApiDependenciesMetadata,releaseImplementationDependenciesMetadata
|
||||
org.jetbrains:annotations:23.0.0=_internal-unified-test-platform-android-device-provider-ddmlib,debugAndroidTestCompileClasspath,debugCompileClasspath,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,profileCompileClasspath,profileRuntimeClasspath,profileUnitTestCompileClasspath,profileUnitTestRuntimeClasspath,releaseCompileClasspath,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
|
||||
org.ow2.asm:asm-analysis:9.1=androidJacocoAnt
|
||||
org.ow2.asm:asm-commons:9.1=androidJacocoAnt
|
||||
org.ow2.asm:asm-tree:9.1=androidJacocoAnt
|
||||
org.ow2.asm:asm:9.1=androidJacocoAnt
|
||||
empty=androidApis,androidJdkImage,androidTestApiDependenciesMetadata,androidTestCompileOnlyDependenciesMetadata,androidTestDebugApiDependenciesMetadata,androidTestDebugCompileOnlyDependenciesMetadata,androidTestDebugImplementationDependenciesMetadata,androidTestDebugIntransitiveDependenciesMetadata,androidTestDebugRuntimeOnlyDependenciesMetadata,androidTestImplementationDependenciesMetadata,androidTestIntransitiveDependenciesMetadata,androidTestProfileApiDependenciesMetadata,androidTestProfileCompileOnlyDependenciesMetadata,androidTestProfileImplementationDependenciesMetadata,androidTestProfileIntransitiveDependenciesMetadata,androidTestProfileRuntimeOnlyDependenciesMetadata,androidTestReleaseApiDependenciesMetadata,androidTestReleaseCompileOnlyDependenciesMetadata,androidTestReleaseImplementationDependenciesMetadata,androidTestReleaseIntransitiveDependenciesMetadata,androidTestReleaseRuntimeOnlyDependenciesMetadata,androidTestRuntimeOnlyDependenciesMetadata,androidTestUtil,compileOnlyDependenciesMetadata,coreLibraryDesugaring,debugAndroidTestAnnotationProcessorClasspath,debugAndroidTestApiDependenciesMetadata,debugAndroidTestCompileOnlyDependenciesMetadata,debugAndroidTestImplementationDependenciesMetadata,debugAndroidTestIntransitiveDependenciesMetadata,debugAndroidTestRuntimeClasspath,debugAndroidTestRuntimeOnlyDependenciesMetadata,debugAnnotationProcessorClasspath,debugCompileOnlyDependenciesMetadata,debugIntransitiveDependenciesMetadata,debugReverseMetadataValues,debugRuntimeOnlyDependenciesMetadata,debugUnitTestAnnotationProcessorClasspath,debugUnitTestApiDependenciesMetadata,debugUnitTestCompileOnlyDependenciesMetadata,debugUnitTestImplementationDependenciesMetadata,debugUnitTestIntransitiveDependenciesMetadata,debugUnitTestRuntimeOnlyDependenciesMetadata,debugWearBundling,intransitiveDependenciesMetadata,kotlinCompilerPluginClasspath,kotlinCompilerPluginClasspathDebug,kotlinCompilerPluginClasspathDebugAndroidTest,kotlinCompilerPluginClasspathDebugUnitTest,kotlinCompilerPluginClasspathProfile,kotlinCompilerPluginClasspathProfileUnitTest,kotlinCompilerPluginClasspathRelease,kotlinCompilerPluginClasspathReleaseUnitTest,kotlinNativeCompilerPluginClasspath,lintChecks,lintPublish,profileAnnotationProcessorClasspath,profileCompileOnlyDependenciesMetadata,profileIntransitiveDependenciesMetadata,profileReverseMetadataValues,profileRuntimeOnlyDependenciesMetadata,profileUnitTestAnnotationProcessorClasspath,profileUnitTestApiDependenciesMetadata,profileUnitTestCompileOnlyDependenciesMetadata,profileUnitTestImplementationDependenciesMetadata,profileUnitTestIntransitiveDependenciesMetadata,profileUnitTestRuntimeOnlyDependenciesMetadata,profileWearBundling,releaseAnnotationProcessorClasspath,releaseCompileOnlyDependenciesMetadata,releaseIntransitiveDependenciesMetadata,releaseReverseMetadataValues,releaseRuntimeOnlyDependenciesMetadata,releaseUnitTestAnnotationProcessorClasspath,releaseUnitTestApiDependenciesMetadata,releaseUnitTestCompileOnlyDependenciesMetadata,releaseUnitTestImplementationDependenciesMetadata,releaseUnitTestIntransitiveDependenciesMetadata,releaseUnitTestRuntimeOnlyDependenciesMetadata,releaseWearBundling,runtimeOnlyDependenciesMetadata,testApiDependenciesMetadata,testCompileOnlyDependenciesMetadata,testDebugApiDependenciesMetadata,testDebugCompileOnlyDependenciesMetadata,testDebugImplementationDependenciesMetadata,testDebugIntransitiveDependenciesMetadata,testDebugRuntimeOnlyDependenciesMetadata,testFixturesApiDependenciesMetadata,testFixturesCompileOnlyDependenciesMetadata,testFixturesDebugApiDependenciesMetadata,testFixturesDebugCompileOnlyDependenciesMetadata,testFixturesDebugImplementationDependenciesMetadata,testFixturesDebugIntransitiveDependenciesMetadata,testFixturesDebugRuntimeOnlyDependenciesMetadata,testFixturesImplementationDependenciesMetadata,testFixturesIntransitiveDependenciesMetadata,testFixturesProfileApiDependenciesMetadata,testFixturesProfileCompileOnlyDependenciesMetadata,testFixturesProfileImplementationDependenciesMetadata,testFixturesProfileIntransitiveDependenciesMetadata,testFixturesProfileRuntimeOnlyDependenciesMetadata,testFixturesReleaseApiDependenciesMetadata,testFixturesReleaseCompileOnlyDependenciesMetadata,testFixturesReleaseImplementationDependenciesMetadata,testFixturesReleaseIntransitiveDependenciesMetadata,testFixturesReleaseRuntimeOnlyDependenciesMetadata,testFixturesRuntimeOnlyDependenciesMetadata,testImplementationDependenciesMetadata,testIntransitiveDependenciesMetadata,testProfileApiDependenciesMetadata,testProfileCompileOnlyDependenciesMetadata,testProfileImplementationDependenciesMetadata,testProfileIntransitiveDependenciesMetadata,testProfileRuntimeOnlyDependenciesMetadata,testReleaseApiDependenciesMetadata,testReleaseCompileOnlyDependenciesMetadata,testReleaseImplementationDependenciesMetadata,testReleaseIntransitiveDependenciesMetadata,testReleaseRuntimeOnlyDependenciesMetadata,testRuntimeOnlyDependenciesMetadata
|
41
flutter/dev/a11y_assessments/android/settings.gradle
Normal file
41
flutter/dev/a11y_assessments/android/settings.gradle
Normal file
@ -0,0 +1,41 @@
|
||||
// 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 settings.gradle files in the Flutter repo,
|
||||
// See dev/tools/bin/generate_gradle_lockfiles.dart.
|
||||
|
||||
pluginManagement {
|
||||
def flutterSdkPath = {
|
||||
def properties = new Properties()
|
||||
file("local.properties").withInputStream { properties.load(it) }
|
||||
def flutterSdkPath = properties.getProperty("flutter.sdk")
|
||||
assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
|
||||
return flutterSdkPath
|
||||
}
|
||||
settings.ext.flutterSdkPath = flutterSdkPath()
|
||||
|
||||
includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle")
|
||||
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
gradlePluginPortal()
|
||||
}
|
||||
}
|
||||
|
||||
buildscript {
|
||||
dependencyLocking {
|
||||
lockFile = file("${rootProject.projectDir}/buildscript-gradle.lockfile")
|
||||
lockAllConfigurations()
|
||||
}
|
||||
}
|
||||
|
||||
plugins {
|
||||
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
|
||||
id "com.android.application" version "8.7.0" apply false
|
||||
id "org.jetbrains.kotlin.android" version "1.8.10" apply false
|
||||
}
|
||||
|
||||
include ":app"
|
23
flutter/dev/a11y_assessments/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
vendored
Normal file
23
flutter/dev/a11y_assessments/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "LaunchImage.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "LaunchImage@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "LaunchImage@3x.png",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
5
flutter/dev/a11y_assessments/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
vendored
Normal file
5
flutter/dev/a11y_assessments/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
# Launch Screen Assets
|
||||
|
||||
You can customize the launch screen with your own desired assets by replacing the image files in this directory.
|
||||
|
||||
You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
|
49
flutter/dev/a11y_assessments/ios/Runner/Info.plist
Normal file
49
flutter/dev/a11y_assessments/ios/Runner/Info.plist
Normal file
@ -0,0 +1,49 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>A11y Assessments</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>a11y_assessments</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>$(FLUTTER_BUILD_NAME)</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>$(FLUTTER_BUILD_NUMBER)</string>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
<true/>
|
||||
<key>UILaunchStoryboardName</key>
|
||||
<string>LaunchScreen</string>
|
||||
<key>UIMainStoryboardFile</key>
|
||||
<string>Main</string>
|
||||
<key>UISupportedInterfaceOrientations</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
<key>UISupportedInterfaceOrientations~ipad</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
<key>CADisableMinimumFrameDurationOnPhone</key>
|
||||
<true/>
|
||||
<key>UIApplicationSupportsIndirectInputEvents</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
@ -0,0 +1,5 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#import "GeneratedPluginRegistrant.h"
|
@ -0,0 +1,16 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import Flutter
|
||||
import UIKit
|
||||
import XCTest
|
||||
|
||||
class RunnerTests: XCTestCase {
|
||||
|
||||
func testExample() {
|
||||
// If you add code to the Runner application, consider adding tests here.
|
||||
// See https://developer.apple.com/documentation/xctest for more information about using XCTest.
|
||||
}
|
||||
|
||||
}
|
17
flutter/dev/a11y_assessments/lib/common/dynamic_title.dart
Normal file
17
flutter/dev/a11y_assessments/lib/common/dynamic_title.dart
Normal file
@ -0,0 +1,17 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class DynamicTitle extends StatelessWidget {
|
||||
const DynamicTitle({super.key, required this.title, required this.child});
|
||||
|
||||
final String title;
|
||||
final Widget child;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Title(title: title, color: Theme.of(context).colorScheme.primary, child: child);
|
||||
}
|
||||
}
|
104
flutter/dev/a11y_assessments/lib/main.dart
Normal file
104
flutter/dev/a11y_assessments/lib/main.dart
Normal file
@ -0,0 +1,104 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/rendering.dart';
|
||||
|
||||
import 'use_cases/use_cases.dart';
|
||||
|
||||
void main() {
|
||||
runApp(const App());
|
||||
if (kIsWeb) {
|
||||
SemanticsBinding.instance.ensureSemantics();
|
||||
}
|
||||
}
|
||||
|
||||
class App extends StatelessWidget {
|
||||
const App({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final ThemeData lightTheme = ThemeData(
|
||||
colorScheme: ColorScheme.fromSeed(
|
||||
seedColor: const Color(0xff6750a4),
|
||||
contrastLevel: MediaQuery.highContrastOf(context) ? 1.0 : 0.0,
|
||||
),
|
||||
);
|
||||
final ThemeData darkTheme = ThemeData(
|
||||
colorScheme: ColorScheme.fromSeed(
|
||||
brightness: Brightness.dark,
|
||||
seedColor: const Color(0xff6750a4),
|
||||
contrastLevel: MediaQuery.highContrastOf(context) ? 1.0 : 0.0,
|
||||
),
|
||||
);
|
||||
|
||||
final Map<String, WidgetBuilder> routes = Map<String, WidgetBuilder>.fromEntries(
|
||||
useCases.map(
|
||||
(UseCase useCase) => MapEntry<String, WidgetBuilder>(
|
||||
useCase.route,
|
||||
(BuildContext context) => useCase.buildWithTitle(context),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
return MaterialApp(
|
||||
title: 'Accessibility Assessments Home Page',
|
||||
theme: lightTheme,
|
||||
darkTheme: darkTheme,
|
||||
routes: <String, WidgetBuilder>{'/': (_) => const HomePage(), ...routes},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class HomePage extends StatefulWidget {
|
||||
const HomePage({super.key});
|
||||
|
||||
@override
|
||||
State<HomePage> createState() => HomePageState();
|
||||
}
|
||||
|
||||
class HomePageState extends State<HomePage> {
|
||||
final ScrollController scrollController = ScrollController();
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
scrollController.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
Widget _buildUseCaseItem(int index, UseCase useCase) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.all(10),
|
||||
child: Builder(
|
||||
builder: (BuildContext context) {
|
||||
return TextButton(
|
||||
key: Key(useCase.name),
|
||||
onPressed:
|
||||
() => Navigator.of(context).pushNamed(useCase.route, arguments: useCase.name),
|
||||
child: Text(useCase.name),
|
||||
);
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: Semantics(headingLevel: 1, child: const Text('Accessibility Assessments')),
|
||||
),
|
||||
body: Center(
|
||||
child: ListView(
|
||||
controller: scrollController,
|
||||
children: List<Widget>.generate(
|
||||
useCases.length,
|
||||
(int index) => _buildUseCaseItem(index, useCases[index]),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
54
flutter/dev/a11y_assessments/lib/use_cases/action_chip.dart
Normal file
54
flutter/dev/a11y_assessments/lib/use_cases/action_chip.dart
Normal file
@ -0,0 +1,54 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import '../utils.dart';
|
||||
import 'use_cases.dart';
|
||||
|
||||
class ActionChipUseCase extends UseCase {
|
||||
@override
|
||||
String get name => 'ActionChip';
|
||||
|
||||
@override
|
||||
String get route => '/action-chip';
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => const MainWidget();
|
||||
}
|
||||
|
||||
class MainWidget extends StatefulWidget {
|
||||
const MainWidget({super.key});
|
||||
|
||||
@override
|
||||
State<MainWidget> createState() => MainWidgetState();
|
||||
}
|
||||
|
||||
class MainWidgetState extends State<MainWidget> {
|
||||
bool favorite = false;
|
||||
|
||||
String pageTitle = getUseCaseName(ActionChipUseCase());
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
|
||||
title: Semantics(headingLevel: 1, child: Text('$pageTitle Demo')),
|
||||
),
|
||||
body: Center(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
ActionChip(
|
||||
avatar: const Icon(Icons.favorite),
|
||||
label: const Text('Action'),
|
||||
onPressed: () {},
|
||||
),
|
||||
const ActionChip(avatar: Icon(Icons.favorite), label: Text('Action')),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
115
flutter/dev/a11y_assessments/lib/use_cases/app_bar.dart
Normal file
115
flutter/dev/a11y_assessments/lib/use_cases/app_bar.dart
Normal file
@ -0,0 +1,115 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'use_cases.dart';
|
||||
|
||||
class AppBarUseCase extends UseCase {
|
||||
@override
|
||||
String get name => 'AppBar';
|
||||
|
||||
@override
|
||||
String get route => '/app-bar';
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => const MainWidget();
|
||||
}
|
||||
|
||||
class MainWidget extends StatefulWidget {
|
||||
const MainWidget({super.key});
|
||||
|
||||
@override
|
||||
State<MainWidget> createState() => MainWidgetState();
|
||||
}
|
||||
|
||||
class MainWidgetState extends State<MainWidget> {
|
||||
int currentIndex = 0;
|
||||
|
||||
void _onChanged(int? value) {
|
||||
setState(() {
|
||||
currentIndex = value!;
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar:
|
||||
<PreferredSizeWidget>[
|
||||
AppBar(
|
||||
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
|
||||
title: Semantics(headingLevel: 1, child: const Text('AppBar')),
|
||||
),
|
||||
AppBar(
|
||||
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
|
||||
title: Semantics(headingLevel: 1, child: const Text('AppBar')),
|
||||
actions: <Widget>[
|
||||
IconButton(
|
||||
icon: const Icon(Icons.add_alert),
|
||||
tooltip: 'Show Snackbar',
|
||||
onPressed: () {
|
||||
ScaffoldMessenger.of(
|
||||
context,
|
||||
).showSnackBar(const SnackBar(content: Text('This is a snackbar')));
|
||||
},
|
||||
),
|
||||
IconButton(
|
||||
icon: const Icon(Icons.navigate_next),
|
||||
tooltip: 'Go to the next page',
|
||||
onPressed: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute<void>(
|
||||
builder: (BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
|
||||
title: Semantics(headingLevel: 1, child: const Text('Next Page')),
|
||||
),
|
||||
body: const Center(
|
||||
child: Text('This is the next page', style: TextStyle(fontSize: 24)),
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
AppBar(
|
||||
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
|
||||
title: Semantics(headingLevel: 1, child: const Text('AppBar')),
|
||||
actions: <Widget>[
|
||||
TextButton(onPressed: () {}, child: const Text('Action 1')),
|
||||
TextButton(onPressed: () {}, child: const Text('Action 2')),
|
||||
],
|
||||
),
|
||||
][currentIndex],
|
||||
body: ListView(
|
||||
children: <Widget>[
|
||||
RadioListTile<int>(
|
||||
title: const Text('1. Simple app bar'),
|
||||
value: 0,
|
||||
groupValue: currentIndex,
|
||||
onChanged: _onChanged,
|
||||
),
|
||||
RadioListTile<int>(
|
||||
title: const Text('2. App bar with actions'),
|
||||
value: 1,
|
||||
groupValue: currentIndex,
|
||||
onChanged: _onChanged,
|
||||
),
|
||||
RadioListTile<int>(
|
||||
title: const Text('3. App bar with text buttons'),
|
||||
value: 2,
|
||||
groupValue: currentIndex,
|
||||
onChanged: _onChanged,
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -0,0 +1,75 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import '../utils.dart';
|
||||
import 'use_cases.dart';
|
||||
|
||||
class AutoCompleteUseCase extends UseCase {
|
||||
@override
|
||||
String get name => 'AutoComplete';
|
||||
|
||||
@override
|
||||
String get route => '/auto-complete';
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => const _MainWidget();
|
||||
}
|
||||
|
||||
class _MainWidget extends StatefulWidget {
|
||||
const _MainWidget();
|
||||
|
||||
@override
|
||||
State<_MainWidget> createState() => _MainWidgetState();
|
||||
}
|
||||
|
||||
class _MainWidgetState extends State<_MainWidget> {
|
||||
static const List<String> _kOptions = <String>['apple', 'banana', 'lemon'];
|
||||
|
||||
static Widget _fieldViewBuilder(
|
||||
BuildContext context,
|
||||
TextEditingController textEditingController,
|
||||
FocusNode focusNode,
|
||||
VoidCallback onFieldSubmitted,
|
||||
) {
|
||||
return TextFormField(
|
||||
focusNode: focusNode,
|
||||
controller: textEditingController,
|
||||
onFieldSubmitted: (String value) {
|
||||
onFieldSubmitted();
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
String pageTitle = getUseCaseName(AutoCompleteUseCase());
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
|
||||
title: Semantics(headingLevel: 1, child: Text('$pageTitle Demo')),
|
||||
),
|
||||
body: Center(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
Text('Type below to autocomplete the following possible results: $_kOptions.'),
|
||||
Autocomplete<String>(
|
||||
optionsBuilder: (TextEditingValue textEditingValue) {
|
||||
if (textEditingValue.text == '') {
|
||||
return const Iterable<String>.empty();
|
||||
}
|
||||
return _kOptions.where((String option) {
|
||||
return option.contains(textEditingValue.text.toLowerCase());
|
||||
});
|
||||
},
|
||||
fieldViewBuilder: _fieldViewBuilder,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
46
flutter/dev/a11y_assessments/lib/use_cases/badge.dart
Normal file
46
flutter/dev/a11y_assessments/lib/use_cases/badge.dart
Normal file
@ -0,0 +1,46 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import '../utils.dart';
|
||||
import 'use_cases.dart';
|
||||
|
||||
class BadgeUseCase extends UseCase {
|
||||
@override
|
||||
String get name => 'Badge';
|
||||
|
||||
@override
|
||||
String get route => '/badge';
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => const MainWidget();
|
||||
}
|
||||
|
||||
class MainWidget extends StatefulWidget {
|
||||
const MainWidget({super.key});
|
||||
|
||||
@override
|
||||
State<MainWidget> createState() => MainWidgetState();
|
||||
}
|
||||
|
||||
class MainWidgetState extends State<MainWidget> {
|
||||
String pageTitle = getUseCaseName(BadgeUseCase());
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
|
||||
title: Semantics(headingLevel: 1, child: Text('$pageTitle Demo')),
|
||||
),
|
||||
body: const Center(
|
||||
child: Badge(
|
||||
label: Text('5', semanticsLabel: '5 new messages', style: TextStyle(color: Colors.white)),
|
||||
backgroundColor: Colors.green,
|
||||
child: Icon(Icons.mail, semanticLabel: 'Messages'),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
49
flutter/dev/a11y_assessments/lib/use_cases/card.dart
Normal file
49
flutter/dev/a11y_assessments/lib/use_cases/card.dart
Normal file
@ -0,0 +1,49 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import '../utils.dart';
|
||||
import 'use_cases.dart';
|
||||
|
||||
class CardUseCase extends UseCase {
|
||||
@override
|
||||
String get name => 'Card';
|
||||
|
||||
@override
|
||||
String get route => '/card';
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => const MainWidget();
|
||||
}
|
||||
|
||||
class MainWidget extends StatefulWidget {
|
||||
const MainWidget({super.key});
|
||||
|
||||
@override
|
||||
State<MainWidget> createState() => MainWidgetState();
|
||||
}
|
||||
|
||||
class MainWidgetState extends State<MainWidget> {
|
||||
bool favorite = false;
|
||||
|
||||
String pageTitle = getUseCaseName(CardUseCase());
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
|
||||
title: Semantics(headingLevel: 1, child: Text('$pageTitle Demo')),
|
||||
),
|
||||
body: const Center(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
Card(child: Padding(padding: EdgeInsets.all(16), child: Text('Card'))),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -0,0 +1,59 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import '../utils.dart';
|
||||
import 'use_cases.dart';
|
||||
|
||||
class CheckBoxListTile extends UseCase {
|
||||
@override
|
||||
String get name => 'CheckBoxListTile';
|
||||
|
||||
@override
|
||||
String get route => '/check-box-list-tile';
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => _MainWidget();
|
||||
}
|
||||
|
||||
class _MainWidget extends StatefulWidget {
|
||||
@override
|
||||
State<_MainWidget> createState() => _MainWidgetState();
|
||||
}
|
||||
|
||||
class _MainWidgetState extends State<_MainWidget> {
|
||||
bool _checked = false;
|
||||
|
||||
String pageTitle = getUseCaseName(CheckBoxListTile());
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(title: Semantics(headingLevel: 1, child: Text('$pageTitle Demo'))),
|
||||
body: ListView(
|
||||
children: <Widget>[
|
||||
CheckboxListTile(
|
||||
value: _checked,
|
||||
onChanged: (bool? value) {
|
||||
setState(() {
|
||||
_checked = value!;
|
||||
});
|
||||
},
|
||||
title: const Text('a check box list title'),
|
||||
),
|
||||
CheckboxListTile(
|
||||
value: _checked,
|
||||
onChanged: (bool? value) {
|
||||
setState(() {
|
||||
_checked = value!;
|
||||
});
|
||||
},
|
||||
title: const Text('a disabled check box list title'),
|
||||
enabled: false,
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
52
flutter/dev/a11y_assessments/lib/use_cases/date_picker.dart
Normal file
52
flutter/dev/a11y_assessments/lib/use_cases/date_picker.dart
Normal file
@ -0,0 +1,52 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import '../utils.dart';
|
||||
import 'use_cases.dart';
|
||||
|
||||
class DatePickerUseCase extends UseCase {
|
||||
@override
|
||||
String get name => 'DatePicker';
|
||||
|
||||
@override
|
||||
String get route => '/date-picker';
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => const _MainWidget();
|
||||
}
|
||||
|
||||
class _MainWidget extends StatefulWidget {
|
||||
const _MainWidget();
|
||||
|
||||
@override
|
||||
State<_MainWidget> createState() => _MainWidgetState();
|
||||
}
|
||||
|
||||
class _MainWidgetState extends State<_MainWidget> {
|
||||
String pageTitle = getUseCaseName(DatePickerUseCase());
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
|
||||
title: Semantics(headingLevel: 1, child: Text('$pageTitle Demo')),
|
||||
),
|
||||
body: Center(
|
||||
child: TextButton(
|
||||
onPressed:
|
||||
() => showDatePicker(
|
||||
context: context,
|
||||
initialEntryMode: DatePickerEntryMode.calendarOnly,
|
||||
initialDate: DateTime.now(),
|
||||
firstDate: DateTime.now().subtract(const Duration(days: 365)),
|
||||
lastDate: DateTime.now().add(const Duration(days: 365)),
|
||||
),
|
||||
child: const Text('Show Date Picker'),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
75
flutter/dev/a11y_assessments/lib/use_cases/dialog.dart
Normal file
75
flutter/dev/a11y_assessments/lib/use_cases/dialog.dart
Normal file
@ -0,0 +1,75 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import '../utils.dart';
|
||||
import 'use_cases.dart';
|
||||
|
||||
class DialogUseCase extends UseCase {
|
||||
@override
|
||||
String get name => 'Dialog';
|
||||
|
||||
@override
|
||||
String get route => '/dialog';
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => _MainWidget();
|
||||
}
|
||||
|
||||
class _MainWidget extends StatelessWidget {
|
||||
_MainWidget();
|
||||
|
||||
final String pageTitle = getUseCaseName(DialogUseCase());
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
|
||||
title: Semantics(headingLevel: 1, child: Text('$pageTitle Demo')),
|
||||
),
|
||||
body: Center(
|
||||
child: TextButton(
|
||||
onPressed:
|
||||
() => showDialog<String>(
|
||||
context: context,
|
||||
builder:
|
||||
(BuildContext context) => Dialog(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
const Text('This is a typical dialog.'),
|
||||
const SizedBox(height: 15),
|
||||
Row(
|
||||
children: <Widget>[
|
||||
TextButton(
|
||||
key: const Key('OK Button'),
|
||||
autofocus: true,
|
||||
onPressed: () {
|
||||
Navigator.pop(context);
|
||||
},
|
||||
child: const Text('OK'),
|
||||
),
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
Navigator.pop(context);
|
||||
},
|
||||
child: const Text('Cancel'),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
child: const Text('Show Dialog'),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
80
flutter/dev/a11y_assessments/lib/use_cases/drawer.dart
Normal file
80
flutter/dev/a11y_assessments/lib/use_cases/drawer.dart
Normal file
@ -0,0 +1,80 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import '../utils.dart';
|
||||
import 'use_cases.dart';
|
||||
|
||||
class DrawerUseCase extends UseCase {
|
||||
@override
|
||||
String get name => 'drawer';
|
||||
|
||||
@override
|
||||
String get route => '/drawer';
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => const DrawerExample();
|
||||
}
|
||||
|
||||
class DrawerExample extends StatefulWidget {
|
||||
const DrawerExample({super.key});
|
||||
|
||||
@override
|
||||
State<DrawerExample> createState() => _DrawerExampleState();
|
||||
}
|
||||
|
||||
class _DrawerExampleState extends State<DrawerExample> {
|
||||
String selectedPage = '';
|
||||
|
||||
String pageTitle = getUseCaseName(DrawerUseCase());
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
|
||||
title: Semantics(headingLevel: 1, child: Text('$pageTitle Demo')),
|
||||
),
|
||||
endDrawer: Drawer(
|
||||
child: ListView(
|
||||
padding: EdgeInsets.zero,
|
||||
children: <Widget>[
|
||||
const DrawerHeader(
|
||||
decoration: BoxDecoration(color: Colors.blue),
|
||||
child: Text('Drawer Header', style: TextStyle(color: Colors.white, fontSize: 24)),
|
||||
),
|
||||
ListTile(
|
||||
leading: const Icon(Icons.message),
|
||||
title: const Text('Messages'),
|
||||
onTap: () {
|
||||
setState(() {
|
||||
selectedPage = 'Messages';
|
||||
});
|
||||
},
|
||||
),
|
||||
ListTile(
|
||||
leading: const Icon(Icons.account_circle),
|
||||
title: const Text('Profile'),
|
||||
onTap: () {
|
||||
setState(() {
|
||||
selectedPage = 'Profile';
|
||||
});
|
||||
},
|
||||
),
|
||||
ListTile(
|
||||
leading: const Icon(Icons.settings),
|
||||
title: const Text('Settings'),
|
||||
onTap: () {
|
||||
setState(() {
|
||||
selectedPage = 'Settings';
|
||||
});
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
body: Center(child: Text('Page: $selectedPage')),
|
||||
);
|
||||
}
|
||||
}
|
@ -0,0 +1,69 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import '../utils.dart';
|
||||
import 'use_cases.dart';
|
||||
|
||||
class ExpansionTileUseCase extends UseCase {
|
||||
@override
|
||||
String get name => 'ExpansionTile';
|
||||
|
||||
@override
|
||||
String get route => '/expansion-tile';
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => const ExpansionTileExample();
|
||||
}
|
||||
|
||||
class ExpansionTileExample extends StatefulWidget {
|
||||
const ExpansionTileExample({super.key});
|
||||
|
||||
@override
|
||||
State<ExpansionTileExample> createState() => _ExpansionTileExampleState();
|
||||
}
|
||||
|
||||
class _ExpansionTileExampleState extends State<ExpansionTileExample> {
|
||||
bool _customTileExpanded = false;
|
||||
|
||||
String pageTitle = getUseCaseName(ExpansionTileUseCase());
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
|
||||
title: Semantics(headingLevel: 1, child: Text('$pageTitle Demo')),
|
||||
),
|
||||
body: Column(
|
||||
children: <Widget>[
|
||||
const ExpansionTile(
|
||||
title: Text('ExpansionTile 1'),
|
||||
subtitle: Text('Trailing expansion arrow icon'),
|
||||
children: <Widget>[ListTile(title: Text('This is tile number 1'))],
|
||||
),
|
||||
ExpansionTile(
|
||||
title: const Text('ExpansionTile 2'),
|
||||
subtitle: const Text('Custom expansion arrow icon'),
|
||||
trailing: Icon(
|
||||
_customTileExpanded ? Icons.arrow_drop_down_circle : Icons.arrow_drop_down,
|
||||
),
|
||||
children: const <Widget>[ListTile(title: Text('This is tile number 2'))],
|
||||
onExpansionChanged: (bool expanded) {
|
||||
setState(() {
|
||||
_customTileExpanded = expanded;
|
||||
});
|
||||
},
|
||||
),
|
||||
const ExpansionTile(
|
||||
title: Text('ExpansionTile 3'),
|
||||
subtitle: Text('Leading expansion arrow icon'),
|
||||
controlAffinity: ListTileControlAffinity.leading,
|
||||
children: <Widget>[ListTile(title: Text('This is tile number 3'))],
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -0,0 +1,80 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import '../utils.dart';
|
||||
import 'use_cases.dart';
|
||||
|
||||
class MaterialBannerUseCase extends UseCase {
|
||||
@override
|
||||
String get name => 'MaterialBanner';
|
||||
|
||||
@override
|
||||
String get route => '/material_banner';
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => const MainWidget();
|
||||
}
|
||||
|
||||
class MainWidget extends StatefulWidget {
|
||||
const MainWidget({super.key});
|
||||
|
||||
@override
|
||||
State<MainWidget> createState() => MainWidgetState();
|
||||
}
|
||||
|
||||
class MainWidgetState extends State<MainWidget> {
|
||||
final FocusNode dismissButtonFocusNode = FocusNode();
|
||||
final FocusNode showButtonFocusNode = FocusNode();
|
||||
|
||||
String pageTitle = getUseCaseName(MaterialBannerUseCase());
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
dismissButtonFocusNode.dispose();
|
||||
showButtonFocusNode.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
void hideBanner() {
|
||||
ScaffoldMessenger.of(context).hideCurrentMaterialBanner();
|
||||
showButtonFocusNode.requestFocus();
|
||||
}
|
||||
|
||||
void showBanner() {
|
||||
ScaffoldMessenger.of(context).showMaterialBanner(
|
||||
MaterialBanner(
|
||||
padding: const EdgeInsets.all(20),
|
||||
content: const Text('Hello, I am a Material Banner'),
|
||||
leading: const Icon(Icons.agriculture_outlined),
|
||||
backgroundColor: Colors.yellowAccent,
|
||||
actions: <Widget>[
|
||||
TextButton(
|
||||
focusNode: dismissButtonFocusNode,
|
||||
onPressed: hideBanner,
|
||||
child: const Text('DISMISS'),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
dismissButtonFocusNode.requestFocus();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
|
||||
title: Semantics(headingLevel: 1, child: Text('$pageTitle Demo')),
|
||||
),
|
||||
body: Center(
|
||||
child: ElevatedButton(
|
||||
focusNode: showButtonFocusNode,
|
||||
onPressed: showBanner,
|
||||
child: const Text('Show a MaterialBanner'),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -0,0 +1,69 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import '../utils.dart';
|
||||
import 'use_cases.dart';
|
||||
|
||||
class NavigationBarUseCase extends UseCase {
|
||||
@override
|
||||
String get name => 'NavigationBar';
|
||||
|
||||
@override
|
||||
String get route => '/navigation-bar';
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => const MainWidget();
|
||||
}
|
||||
|
||||
class MainWidget extends StatefulWidget {
|
||||
const MainWidget({super.key});
|
||||
|
||||
@override
|
||||
State<MainWidget> createState() => MainWidgetState();
|
||||
}
|
||||
|
||||
class MainWidgetState extends State<MainWidget> {
|
||||
int currentPageIndex = 0;
|
||||
|
||||
String pageTitle = getUseCaseName(NavigationBarUseCase());
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
|
||||
title: Semantics(headingLevel: 1, child: Text('$pageTitle Demo')),
|
||||
),
|
||||
bottomNavigationBar: NavigationBar(
|
||||
onDestinationSelected: (int index) {
|
||||
setState(() {
|
||||
currentPageIndex = index;
|
||||
});
|
||||
},
|
||||
indicatorColor: Colors.amber[800],
|
||||
selectedIndex: currentPageIndex,
|
||||
destinations: const <Widget>[
|
||||
NavigationDestination(
|
||||
selectedIcon: Icon(Icons.home),
|
||||
icon: Icon(Icons.home_outlined),
|
||||
label: 'Home',
|
||||
),
|
||||
NavigationDestination(icon: Icon(Icons.business), label: 'Business'),
|
||||
NavigationDestination(
|
||||
selectedIcon: Icon(Icons.school),
|
||||
icon: Icon(Icons.school_outlined),
|
||||
label: 'School',
|
||||
),
|
||||
],
|
||||
),
|
||||
body:
|
||||
<Widget>[
|
||||
Container(alignment: Alignment.center, child: const Text('Page 1')),
|
||||
Container(alignment: Alignment.center, child: const Text('Page 2')),
|
||||
Container(alignment: Alignment.center, child: const Text('Page 3')),
|
||||
][currentPageIndex],
|
||||
);
|
||||
}
|
||||
}
|
@ -0,0 +1,104 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import '../utils.dart';
|
||||
import 'use_cases.dart';
|
||||
|
||||
class ExampleDestination {
|
||||
const ExampleDestination(this.label, this.icon, this.selectedIcon);
|
||||
|
||||
final String label;
|
||||
final Widget icon;
|
||||
final Widget selectedIcon;
|
||||
}
|
||||
|
||||
const List<ExampleDestination> destinations = <ExampleDestination>[
|
||||
ExampleDestination('Messages', Icon(Icons.widgets_outlined), Icon(Icons.widgets)),
|
||||
ExampleDestination('Profile', Icon(Icons.format_paint_outlined), Icon(Icons.format_paint)),
|
||||
ExampleDestination('Settings', Icon(Icons.settings_outlined), Icon(Icons.settings)),
|
||||
];
|
||||
|
||||
class NavigationDrawerUseCase extends UseCase {
|
||||
@override
|
||||
String get name => 'NavigationDrawer';
|
||||
|
||||
@override
|
||||
String get route => '/navigation-drawer';
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => const NavigationDrawerExample();
|
||||
}
|
||||
|
||||
class NavigationDrawerExample extends StatefulWidget {
|
||||
const NavigationDrawerExample({super.key});
|
||||
|
||||
@override
|
||||
State<NavigationDrawerExample> createState() => _NavigationDrawerExampleState();
|
||||
}
|
||||
|
||||
class _NavigationDrawerExampleState extends State<NavigationDrawerExample> {
|
||||
final GlobalKey<ScaffoldState> scaffoldKey = GlobalKey<ScaffoldState>();
|
||||
|
||||
int screenIndex = 0;
|
||||
late bool showNavigationDrawer;
|
||||
|
||||
void handleScreenChanged(int selectedScreen) {
|
||||
setState(() {
|
||||
screenIndex = selectedScreen;
|
||||
});
|
||||
}
|
||||
|
||||
void openDrawer() {
|
||||
scaffoldKey.currentState!.openEndDrawer();
|
||||
}
|
||||
|
||||
String pageTitle = getUseCaseName(NavigationDrawerUseCase());
|
||||
|
||||
Widget buildDrawerScaffold(BuildContext context) {
|
||||
return Scaffold(
|
||||
key: scaffoldKey,
|
||||
appBar: AppBar(
|
||||
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
|
||||
title: Semantics(headingLevel: 1, child: Text('$pageTitle Demo')),
|
||||
),
|
||||
body: SafeArea(
|
||||
bottom: false,
|
||||
top: false,
|
||||
child: Center(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Text('Page Index = $screenIndex'),
|
||||
ElevatedButton(onPressed: openDrawer, child: const Text('Open Drawer')),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
endDrawer: NavigationDrawer(
|
||||
onDestinationSelected: handleScreenChanged,
|
||||
selectedIndex: screenIndex,
|
||||
children: <Widget>[
|
||||
Padding(
|
||||
padding: const EdgeInsets.fromLTRB(28, 16, 16, 10),
|
||||
child: Text('Header', style: Theme.of(context).textTheme.titleSmall),
|
||||
),
|
||||
...destinations.map((ExampleDestination destination) {
|
||||
return NavigationDrawerDestination(
|
||||
label: Text(destination.label),
|
||||
icon: destination.icon,
|
||||
selectedIcon: destination.selectedIcon,
|
||||
);
|
||||
}),
|
||||
const Padding(padding: EdgeInsets.fromLTRB(28, 16, 28, 10), child: Divider()),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return buildDrawerScaffold(context);
|
||||
}
|
||||
}
|
187
flutter/dev/a11y_assessments/lib/use_cases/navigation_rail.dart
Normal file
187
flutter/dev/a11y_assessments/lib/use_cases/navigation_rail.dart
Normal file
@ -0,0 +1,187 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import '../utils.dart';
|
||||
import 'use_cases.dart';
|
||||
|
||||
class NavigationRailUseCase extends UseCase {
|
||||
@override
|
||||
String get name => 'NavigationRail';
|
||||
|
||||
@override
|
||||
String get route => '/navigation-rail';
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => const NavRailExample();
|
||||
}
|
||||
|
||||
class NavRailExample extends StatefulWidget {
|
||||
const NavRailExample({super.key});
|
||||
|
||||
@override
|
||||
State<NavRailExample> createState() => _NavRailExampleState();
|
||||
}
|
||||
|
||||
class _NavRailExampleState extends State<NavRailExample> {
|
||||
int _selectedIndex = 0;
|
||||
NavigationRailLabelType labelType = NavigationRailLabelType.all;
|
||||
bool showLeading = false;
|
||||
bool showTrailing = false;
|
||||
double groupAlignment = -1.0;
|
||||
|
||||
String pageTitle = getUseCaseName(NavigationRailUseCase());
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
body: Row(
|
||||
children: <Widget>[
|
||||
NavigationRail(
|
||||
selectedIndex: _selectedIndex,
|
||||
groupAlignment: groupAlignment,
|
||||
onDestinationSelected: (int index) {
|
||||
setState(() {
|
||||
_selectedIndex = index;
|
||||
});
|
||||
},
|
||||
labelType: labelType,
|
||||
leading:
|
||||
showLeading
|
||||
? FloatingActionButton(
|
||||
elevation: 0,
|
||||
onPressed: () {
|
||||
// Add your onPressed code here!
|
||||
},
|
||||
child: const Icon(Icons.add),
|
||||
)
|
||||
: const SizedBox(),
|
||||
trailing:
|
||||
showTrailing
|
||||
? IconButton(
|
||||
onPressed: () {
|
||||
// Add your onPressed code here!
|
||||
},
|
||||
icon: const Icon(Icons.more_horiz_rounded),
|
||||
)
|
||||
: const SizedBox(),
|
||||
destinations: const <NavigationRailDestination>[
|
||||
NavigationRailDestination(
|
||||
icon: Icon(Icons.favorite_border),
|
||||
selectedIcon: Icon(Icons.favorite),
|
||||
label: Text('First'),
|
||||
),
|
||||
NavigationRailDestination(
|
||||
icon: Icon(Icons.bookmark_border),
|
||||
selectedIcon: Icon(Icons.book),
|
||||
label: Text('Second'),
|
||||
),
|
||||
NavigationRailDestination(
|
||||
icon: Icon(Icons.star_border),
|
||||
selectedIcon: Icon(Icons.star),
|
||||
label: Text('Third'),
|
||||
),
|
||||
],
|
||||
),
|
||||
const VerticalDivider(thickness: 1, width: 1),
|
||||
// This is the main content.
|
||||
Expanded(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
Text('selectedIndex: $_selectedIndex'),
|
||||
const SizedBox(height: 20),
|
||||
Text('Label type: ${labelType.name}'),
|
||||
const SizedBox(height: 10),
|
||||
OverflowBar(
|
||||
spacing: 10.0,
|
||||
children: <Widget>[
|
||||
ElevatedButton(
|
||||
onPressed: () {
|
||||
setState(() {
|
||||
labelType = NavigationRailLabelType.none;
|
||||
});
|
||||
},
|
||||
child: const Text('None'),
|
||||
),
|
||||
ElevatedButton(
|
||||
onPressed: () {
|
||||
setState(() {
|
||||
labelType = NavigationRailLabelType.selected;
|
||||
});
|
||||
},
|
||||
child: const Text('Selected'),
|
||||
),
|
||||
ElevatedButton(
|
||||
onPressed: () {
|
||||
setState(() {
|
||||
labelType = NavigationRailLabelType.all;
|
||||
});
|
||||
},
|
||||
child: const Text('All'),
|
||||
),
|
||||
],
|
||||
),
|
||||
const SizedBox(height: 20),
|
||||
Text('Group alignment: $groupAlignment'),
|
||||
const SizedBox(height: 10),
|
||||
OverflowBar(
|
||||
spacing: 10.0,
|
||||
children: <Widget>[
|
||||
ElevatedButton(
|
||||
onPressed: () {
|
||||
setState(() {
|
||||
groupAlignment = -1.0;
|
||||
});
|
||||
},
|
||||
child: const Text('Top'),
|
||||
),
|
||||
ElevatedButton(
|
||||
onPressed: () {
|
||||
setState(() {
|
||||
groupAlignment = 0.0;
|
||||
});
|
||||
},
|
||||
child: const Text('Center'),
|
||||
),
|
||||
ElevatedButton(
|
||||
onPressed: () {
|
||||
setState(() {
|
||||
groupAlignment = 1.0;
|
||||
});
|
||||
},
|
||||
child: const Text('Bottom'),
|
||||
),
|
||||
],
|
||||
),
|
||||
const SizedBox(height: 20),
|
||||
OverflowBar(
|
||||
spacing: 10.0,
|
||||
children: <Widget>[
|
||||
ElevatedButton(
|
||||
onPressed: () {
|
||||
setState(() {
|
||||
showLeading = !showLeading;
|
||||
});
|
||||
},
|
||||
child: Text(showLeading ? 'Hide Leading' : 'Show Leading'),
|
||||
),
|
||||
ElevatedButton(
|
||||
onPressed: () {
|
||||
setState(() {
|
||||
showTrailing = !showTrailing;
|
||||
});
|
||||
},
|
||||
child: Text(showTrailing ? 'Hide Trailing' : 'Show Trailing'),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -0,0 +1,60 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import '../utils.dart';
|
||||
import 'use_cases.dart';
|
||||
|
||||
class RadioListTileUseCase extends UseCase {
|
||||
@override
|
||||
String get name => 'RadioListTile';
|
||||
|
||||
@override
|
||||
String get route => '/radio-list-tile';
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => _MainWidget();
|
||||
}
|
||||
|
||||
class _MainWidget extends StatefulWidget {
|
||||
@override
|
||||
State<_MainWidget> createState() => _MainWidgetState();
|
||||
}
|
||||
|
||||
enum SingingCharacter { lafayette, jefferson }
|
||||
|
||||
class _MainWidgetState extends State<_MainWidget> {
|
||||
SingingCharacter _value = SingingCharacter.lafayette;
|
||||
|
||||
void _onChanged(SingingCharacter? value) {
|
||||
setState(() {
|
||||
_value = value!;
|
||||
});
|
||||
}
|
||||
|
||||
String pageTitle = getUseCaseName(RadioListTileUseCase());
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(title: Semantics(headingLevel: 1, child: Text('$pageTitle Demo'))),
|
||||
body: ListView(
|
||||
children: <Widget>[
|
||||
RadioListTile<SingingCharacter>(
|
||||
title: const Text('Lafayette'),
|
||||
value: SingingCharacter.lafayette,
|
||||
groupValue: _value,
|
||||
onChanged: _onChanged,
|
||||
),
|
||||
RadioListTile<SingingCharacter>(
|
||||
title: const Text('Jefferson'),
|
||||
value: SingingCharacter.jefferson,
|
||||
groupValue: _value,
|
||||
onChanged: _onChanged,
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
58
flutter/dev/a11y_assessments/lib/use_cases/slider.dart
Normal file
58
flutter/dev/a11y_assessments/lib/use_cases/slider.dart
Normal file
@ -0,0 +1,58 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import '../utils.dart';
|
||||
import 'use_cases.dart';
|
||||
|
||||
class SliderUseCase extends UseCase {
|
||||
@override
|
||||
String get name => 'Slider';
|
||||
|
||||
@override
|
||||
String get route => '/slider';
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => const MainWidget();
|
||||
}
|
||||
|
||||
class MainWidget extends StatefulWidget {
|
||||
const MainWidget({super.key});
|
||||
|
||||
@override
|
||||
State<MainWidget> createState() => MainWidgetState();
|
||||
}
|
||||
|
||||
class MainWidgetState extends State<MainWidget> {
|
||||
double currentSliderValue = 20;
|
||||
static const String accessibilityLabel = 'Accessibility Test Slider';
|
||||
|
||||
String pageTitle = getUseCaseName(SliderUseCase());
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
|
||||
title: Semantics(headingLevel: 1, child: Text('$pageTitle demo')),
|
||||
),
|
||||
body: Center(
|
||||
child: Semantics(
|
||||
label: accessibilityLabel,
|
||||
child: Slider(
|
||||
value: currentSliderValue,
|
||||
max: 100,
|
||||
divisions: 5,
|
||||
label: currentSliderValue.round().toString(),
|
||||
onChanged: (double value) {
|
||||
setState(() {
|
||||
currentSliderValue = value;
|
||||
});
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
64
flutter/dev/a11y_assessments/lib/use_cases/snack_bar.dart
Normal file
64
flutter/dev/a11y_assessments/lib/use_cases/snack_bar.dart
Normal file
@ -0,0 +1,64 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import '../utils.dart';
|
||||
import 'use_cases.dart';
|
||||
|
||||
class SnackBarUseCase extends UseCase {
|
||||
@override
|
||||
String get name => 'SnackBar';
|
||||
|
||||
@override
|
||||
String get route => '/snack-bar';
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => const MainWidget();
|
||||
}
|
||||
|
||||
class MainWidget extends StatefulWidget {
|
||||
const MainWidget({super.key});
|
||||
|
||||
@override
|
||||
State<MainWidget> createState() => MainWidgetState();
|
||||
}
|
||||
|
||||
class MainWidgetState extends State<MainWidget> {
|
||||
String pageTitle = getUseCaseName(SnackBarUseCase());
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
|
||||
title: Semantics(headingLevel: 1, child: Text('$pageTitle Demo')),
|
||||
),
|
||||
body: Center(
|
||||
child: Column(
|
||||
children: <Widget>[
|
||||
ElevatedButton(
|
||||
child: const Text('Show Snackbar'),
|
||||
onPressed: () {
|
||||
ScaffoldMessenger.of(
|
||||
context,
|
||||
).showSnackBar(const SnackBar(content: Text('Awesome Snackbar!')));
|
||||
},
|
||||
),
|
||||
ElevatedButton(
|
||||
child: const Text('Show Snackbar with action '),
|
||||
onPressed: () {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: const Text('Awesome Snackbar!'),
|
||||
action: SnackBarAction(label: 'Action', onPressed: () {}),
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -0,0 +1,69 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import '../utils.dart';
|
||||
import 'use_cases.dart';
|
||||
|
||||
class SwitchListTileUseCase extends UseCase {
|
||||
@override
|
||||
String get name => 'SwitchListTile';
|
||||
|
||||
@override
|
||||
String get route => '/switch-list-tile';
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => const SwitchListTileExample();
|
||||
}
|
||||
|
||||
class SwitchListTileExample extends StatefulWidget {
|
||||
const SwitchListTileExample({super.key});
|
||||
|
||||
@override
|
||||
State<SwitchListTileExample> createState() => _SwitchListTileExampleState();
|
||||
}
|
||||
|
||||
class _SwitchListTileExampleState extends State<SwitchListTileExample> {
|
||||
bool _lights1 = false;
|
||||
bool _lights2 = false;
|
||||
|
||||
String pageTitle = getUseCaseName(SwitchListTileUseCase());
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
|
||||
title: Semantics(headingLevel: 1, child: Text('$pageTitle Demo')),
|
||||
),
|
||||
body: Center(
|
||||
child: Column(
|
||||
children: <Widget>[
|
||||
SwitchListTile(
|
||||
title: const Text('Lights'),
|
||||
value: _lights1,
|
||||
onChanged: (bool value) {
|
||||
setState(() {
|
||||
_lights1 = value;
|
||||
});
|
||||
},
|
||||
secondary: const Icon(Icons.lightbulb_outline),
|
||||
),
|
||||
SwitchListTile(
|
||||
title: const Text('Lights'),
|
||||
subtitle: const Text('Subtitle'),
|
||||
value: _lights2,
|
||||
onChanged: (bool value) {
|
||||
setState(() {
|
||||
_lights2 = value;
|
||||
});
|
||||
},
|
||||
secondary: const Icon(Icons.lightbulb_outline),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
49
flutter/dev/a11y_assessments/lib/use_cases/tab_bar_view.dart
Normal file
49
flutter/dev/a11y_assessments/lib/use_cases/tab_bar_view.dart
Normal file
@ -0,0 +1,49 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'use_cases.dart';
|
||||
|
||||
class TabBarViewUseCase extends UseCase {
|
||||
@override
|
||||
String get name => 'TabBarView';
|
||||
|
||||
@override
|
||||
String get route => '/tab-bar-view';
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => const TabBarViewExample();
|
||||
}
|
||||
|
||||
class TabBarViewExample extends StatelessWidget {
|
||||
const TabBarViewExample({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return DefaultTabController(
|
||||
initialIndex: 1,
|
||||
length: 3,
|
||||
child: Scaffold(
|
||||
appBar: AppBar(
|
||||
title: Semantics(headingLevel: 1, child: const Text('TabBarView Sample')),
|
||||
bottom: const TabBar(
|
||||
tabs: <Widget>[
|
||||
Tab(icon: Icon(Icons.cloud_outlined), text: 'Cloudy'),
|
||||
Tab(icon: Icon(Icons.beach_access_sharp), text: 'Rainy'),
|
||||
Tab(icon: Icon(Icons.brightness_5_sharp), text: 'Sunny'),
|
||||
],
|
||||
),
|
||||
),
|
||||
body: const TabBarView(
|
||||
children: <Widget>[
|
||||
Center(child: Text("It's cloudy here")),
|
||||
Center(child: Text("It's rainy here")),
|
||||
Center(child: Text("It's sunny here")),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
73
flutter/dev/a11y_assessments/lib/use_cases/text_button.dart
Normal file
73
flutter/dev/a11y_assessments/lib/use_cases/text_button.dart
Normal file
@ -0,0 +1,73 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import '../utils.dart';
|
||||
import 'use_cases.dart';
|
||||
|
||||
class TextButtonUseCase extends UseCase {
|
||||
@override
|
||||
String get name => 'TextButton';
|
||||
|
||||
@override
|
||||
String get route => '/text-button';
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => const MainWidget();
|
||||
}
|
||||
|
||||
class MainWidget extends StatefulWidget {
|
||||
const MainWidget({super.key});
|
||||
|
||||
@override
|
||||
State<MainWidget> createState() => MainWidgetState();
|
||||
}
|
||||
|
||||
class MainWidgetState extends State<MainWidget> {
|
||||
String pageTitle = getUseCaseName(TextButtonUseCase());
|
||||
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
|
||||
title: Semantics(headingLevel: 1, child: Text('$pageTitle Demo')),
|
||||
),
|
||||
body: Form(
|
||||
key: _formKey,
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: <Widget>[
|
||||
TextFormField(
|
||||
// The validator receives the text that the user has entered.
|
||||
validator: (String? value) {
|
||||
if (value == null || value.isEmpty) {
|
||||
return 'Please enter some text';
|
||||
}
|
||||
return null;
|
||||
},
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 16),
|
||||
child: ElevatedButton(
|
||||
onPressed: () {
|
||||
// Validate returns true if the form is valid, or false otherwise.
|
||||
if (_formKey.currentState!.validate()) {
|
||||
// If the form is valid, display a snackbar. In the real world,
|
||||
// this might also send a request to a server.
|
||||
ScaffoldMessenger.of(
|
||||
context,
|
||||
).showSnackBar(const SnackBar(content: Text('Form submitted')));
|
||||
}
|
||||
},
|
||||
child: const Text('Submit'),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
64
flutter/dev/a11y_assessments/lib/use_cases/text_field.dart
Normal file
64
flutter/dev/a11y_assessments/lib/use_cases/text_field.dart
Normal file
@ -0,0 +1,64 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import '../utils.dart';
|
||||
import 'use_cases.dart';
|
||||
|
||||
class TextFieldUseCase extends UseCase {
|
||||
@override
|
||||
String get name => 'TextField';
|
||||
|
||||
@override
|
||||
String get route => '/text-field';
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => _MainWidget();
|
||||
}
|
||||
|
||||
class _MainWidget extends StatelessWidget {
|
||||
_MainWidget();
|
||||
|
||||
final String pageTitle = getUseCaseName(TextFieldUseCase());
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
|
||||
title: Semantics(headingLevel: 1, child: Text('$pageTitle Demo')),
|
||||
),
|
||||
body: ListView(
|
||||
children: <Widget>[
|
||||
Semantics(
|
||||
label: 'Input field with suffix @gmail.com',
|
||||
child: const TextField(
|
||||
key: Key('enabled text field'),
|
||||
maxLines: null,
|
||||
decoration: InputDecoration(
|
||||
labelText: 'Email',
|
||||
suffixText: '@gmail.com',
|
||||
hintText: 'Enter your email',
|
||||
),
|
||||
),
|
||||
),
|
||||
Semantics(
|
||||
label: 'Input field with suffix @gmail.com',
|
||||
child: TextField(
|
||||
key: const Key('disabled text field'),
|
||||
maxLines: null,
|
||||
decoration: const InputDecoration(
|
||||
labelText: 'Email',
|
||||
suffixText: '@gmail.com',
|
||||
hintText: 'Enter your email',
|
||||
),
|
||||
enabled: false,
|
||||
controller: TextEditingController(text: 'xyz'),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -0,0 +1,49 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import '../utils.dart';
|
||||
import 'use_cases.dart';
|
||||
|
||||
class TextFieldPasswordUseCase extends UseCase {
|
||||
@override
|
||||
String get name => 'TextField password';
|
||||
|
||||
@override
|
||||
String get route => '/text-field-password';
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => _MainWidget();
|
||||
}
|
||||
|
||||
class _MainWidget extends StatelessWidget {
|
||||
_MainWidget();
|
||||
|
||||
final String pageTitle = getUseCaseName(TextFieldPasswordUseCase());
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
|
||||
title: Semantics(headingLevel: 1, child: Text('$pageTitle Demo')),
|
||||
),
|
||||
body: ListView(
|
||||
children: const <Widget>[
|
||||
TextField(
|
||||
key: Key('enabled password'),
|
||||
decoration: InputDecoration(labelText: 'Password'),
|
||||
obscureText: true,
|
||||
),
|
||||
TextField(
|
||||
key: Key('disabled password'),
|
||||
decoration: InputDecoration(labelText: 'Password'),
|
||||
enabled: false,
|
||||
obscureText: true,
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
65
flutter/dev/a11y_assessments/lib/use_cases/use_cases.dart
Normal file
65
flutter/dev/a11y_assessments/lib/use_cases/use_cases.dart
Normal file
@ -0,0 +1,65 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:flutter/widgets.dart';
|
||||
|
||||
import '../common/dynamic_title.dart';
|
||||
import 'action_chip.dart';
|
||||
import 'app_bar.dart';
|
||||
import 'auto_complete.dart';
|
||||
import 'badge.dart';
|
||||
import 'card.dart';
|
||||
import 'check_box_list_tile.dart';
|
||||
import 'date_picker.dart';
|
||||
import 'dialog.dart';
|
||||
import 'drawer.dart';
|
||||
import 'expansion_tile.dart';
|
||||
import 'material_banner.dart';
|
||||
import 'navigation_bar.dart';
|
||||
import 'navigation_drawer.dart';
|
||||
import 'navigation_rail.dart';
|
||||
import 'radio_list_tile.dart';
|
||||
import 'slider.dart';
|
||||
import 'snack_bar.dart';
|
||||
import 'switch_list_tile.dart';
|
||||
import 'tab_bar_view.dart';
|
||||
import 'text_button.dart';
|
||||
import 'text_field.dart';
|
||||
import 'text_field_password.dart';
|
||||
|
||||
abstract class UseCase {
|
||||
String get name;
|
||||
String get route;
|
||||
|
||||
Widget buildWithTitle(BuildContext context) {
|
||||
return DynamicTitle(title: name, child: build(context));
|
||||
}
|
||||
|
||||
Widget build(BuildContext context);
|
||||
}
|
||||
|
||||
final List<UseCase> useCases = <UseCase>[
|
||||
CheckBoxListTile(),
|
||||
DialogUseCase(),
|
||||
SliderUseCase(),
|
||||
TextFieldUseCase(),
|
||||
TextFieldPasswordUseCase(),
|
||||
DatePickerUseCase(),
|
||||
AutoCompleteUseCase(),
|
||||
BadgeUseCase(),
|
||||
MaterialBannerUseCase(),
|
||||
NavigationBarUseCase(),
|
||||
TextButtonUseCase(),
|
||||
RadioListTileUseCase(),
|
||||
ActionChipUseCase(),
|
||||
SnackBarUseCase(),
|
||||
SwitchListTileUseCase(),
|
||||
ExpansionTileUseCase(),
|
||||
CardUseCase(),
|
||||
DrawerUseCase(),
|
||||
NavigationDrawerUseCase(),
|
||||
NavigationRailUseCase(),
|
||||
AppBarUseCase(),
|
||||
TabBarViewUseCase(),
|
||||
];
|
7
flutter/dev/a11y_assessments/lib/utils.dart
Normal file
7
flutter/dev/a11y_assessments/lib/utils.dart
Normal file
@ -0,0 +1,7 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import './use_cases/use_cases.dart';
|
||||
|
||||
String getUseCaseName(UseCase useCase) => useCase.name;
|
1
flutter/dev/a11y_assessments/linux/.gitignore
vendored
Normal file
1
flutter/dev/a11y_assessments/linux/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
flutter/ephemeral
|
139
flutter/dev/a11y_assessments/linux/CMakeLists.txt
Normal file
139
flutter/dev/a11y_assessments/linux/CMakeLists.txt
Normal file
@ -0,0 +1,139 @@
|
||||
# Project-level configuration.
|
||||
cmake_minimum_required(VERSION 3.10)
|
||||
project(runner LANGUAGES CXX)
|
||||
|
||||
# The name of the executable created for the application. Change this to change
|
||||
# the on-disk name of your application.
|
||||
set(BINARY_NAME "a11y_assessments")
|
||||
# The unique GTK application identifier for this application. See:
|
||||
# https://wiki.gnome.org/HowDoI/ChooseApplicationID
|
||||
set(APPLICATION_ID "com.example.a11y_assessments")
|
||||
|
||||
# Explicitly opt in to modern CMake behaviors to avoid warnings with recent
|
||||
# versions of CMake.
|
||||
cmake_policy(SET CMP0063 NEW)
|
||||
|
||||
# Load bundled libraries from the lib/ directory relative to the binary.
|
||||
set(CMAKE_INSTALL_RPATH "$ORIGIN/lib")
|
||||
|
||||
# Root filesystem for cross-building.
|
||||
if(FLUTTER_TARGET_PLATFORM_SYSROOT)
|
||||
set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT})
|
||||
set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT})
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
||||
endif()
|
||||
|
||||
# Define build configuration options.
|
||||
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
||||
set(CMAKE_BUILD_TYPE "Debug" CACHE
|
||||
STRING "Flutter build mode" FORCE)
|
||||
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
|
||||
"Debug" "Profile" "Release")
|
||||
endif()
|
||||
|
||||
# Compilation settings that should be applied to most targets.
|
||||
#
|
||||
# Be cautious about adding new options here, as plugins use this function by
|
||||
# default. In most cases, you should add new options to specific targets instead
|
||||
# of modifying this function.
|
||||
function(APPLY_STANDARD_SETTINGS TARGET)
|
||||
target_compile_features(${TARGET} PUBLIC cxx_std_14)
|
||||
target_compile_options(${TARGET} PRIVATE -Wall -Werror)
|
||||
target_compile_options(${TARGET} PRIVATE "$<$<NOT:$<CONFIG:Debug>>:-O3>")
|
||||
target_compile_definitions(${TARGET} PRIVATE "$<$<NOT:$<CONFIG:Debug>>:NDEBUG>")
|
||||
endfunction()
|
||||
|
||||
# Flutter library and tool build rules.
|
||||
set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter")
|
||||
add_subdirectory(${FLUTTER_MANAGED_DIR})
|
||||
|
||||
# System-level dependencies.
|
||||
find_package(PkgConfig REQUIRED)
|
||||
pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0)
|
||||
|
||||
add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}")
|
||||
|
||||
# Define the application target. To change its name, change BINARY_NAME above,
|
||||
# not the value here, or `flutter run` will no longer work.
|
||||
#
|
||||
# Any new source files that you add to the application should be added here.
|
||||
add_executable(${BINARY_NAME}
|
||||
"main.cc"
|
||||
"my_application.cc"
|
||||
"${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc"
|
||||
)
|
||||
|
||||
# Apply the standard set of build settings. This can be removed for applications
|
||||
# that need different build settings.
|
||||
apply_standard_settings(${BINARY_NAME})
|
||||
|
||||
# Add dependency libraries. Add any application-specific dependencies here.
|
||||
target_link_libraries(${BINARY_NAME} PRIVATE flutter)
|
||||
target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK)
|
||||
|
||||
# Run the Flutter tool portions of the build. This must not be removed.
|
||||
add_dependencies(${BINARY_NAME} flutter_assemble)
|
||||
|
||||
# Only the install-generated bundle's copy of the executable will launch
|
||||
# correctly, since the resources must in the right relative locations. To avoid
|
||||
# people trying to run the unbundled copy, put it in a subdirectory instead of
|
||||
# the default top-level location.
|
||||
set_target_properties(${BINARY_NAME}
|
||||
PROPERTIES
|
||||
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run"
|
||||
)
|
||||
|
||||
|
||||
# Generated plugin build rules, which manage building the plugins and adding
|
||||
# them to the application.
|
||||
include(flutter/generated_plugins.cmake)
|
||||
|
||||
|
||||
# === Installation ===
|
||||
# By default, "installing" just makes a relocatable bundle in the build
|
||||
# directory.
|
||||
set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle")
|
||||
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
|
||||
set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE)
|
||||
endif()
|
||||
|
||||
# Start with a clean build bundle directory every time.
|
||||
install(CODE "
|
||||
file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\")
|
||||
" COMPONENT Runtime)
|
||||
|
||||
set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data")
|
||||
set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib")
|
||||
|
||||
install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}"
|
||||
COMPONENT Runtime)
|
||||
|
||||
install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}"
|
||||
COMPONENT Runtime)
|
||||
|
||||
install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
|
||||
COMPONENT Runtime)
|
||||
|
||||
foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES})
|
||||
install(FILES "${bundled_library}"
|
||||
DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
|
||||
COMPONENT Runtime)
|
||||
endforeach(bundled_library)
|
||||
|
||||
# Fully re-copy the assets directory on each build to avoid having stale files
|
||||
# from a previous install.
|
||||
set(FLUTTER_ASSET_DIR_NAME "flutter_assets")
|
||||
install(CODE "
|
||||
file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\")
|
||||
" COMPONENT Runtime)
|
||||
install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}"
|
||||
DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime)
|
||||
|
||||
# Install the AOT library on non-Debug builds only.
|
||||
if(NOT CMAKE_BUILD_TYPE MATCHES "Debug")
|
||||
install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
|
||||
COMPONENT Runtime)
|
||||
endif()
|
88
flutter/dev/a11y_assessments/linux/flutter/CMakeLists.txt
Normal file
88
flutter/dev/a11y_assessments/linux/flutter/CMakeLists.txt
Normal file
@ -0,0 +1,88 @@
|
||||
# This file controls Flutter-level build steps. It should not be edited.
|
||||
cmake_minimum_required(VERSION 3.10)
|
||||
|
||||
set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral")
|
||||
|
||||
# Configuration provided via flutter tool.
|
||||
include(${EPHEMERAL_DIR}/generated_config.cmake)
|
||||
|
||||
# TODO: Move the rest of this into files in ephemeral. See
|
||||
# https://github.com/flutter/flutter/issues/57146.
|
||||
|
||||
# Serves the same purpose as list(TRANSFORM ... PREPEND ...),
|
||||
# which isn't available in 3.10.
|
||||
function(list_prepend LIST_NAME PREFIX)
|
||||
set(NEW_LIST "")
|
||||
foreach(element ${${LIST_NAME}})
|
||||
list(APPEND NEW_LIST "${PREFIX}${element}")
|
||||
endforeach(element)
|
||||
set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
# === Flutter Library ===
|
||||
# System-level dependencies.
|
||||
find_package(PkgConfig REQUIRED)
|
||||
pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0)
|
||||
pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0)
|
||||
pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0)
|
||||
|
||||
set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so")
|
||||
|
||||
# Published to parent scope for install step.
|
||||
set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE)
|
||||
set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE)
|
||||
set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE)
|
||||
set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE)
|
||||
|
||||
list(APPEND FLUTTER_LIBRARY_HEADERS
|
||||
"fl_basic_message_channel.h"
|
||||
"fl_binary_codec.h"
|
||||
"fl_binary_messenger.h"
|
||||
"fl_dart_project.h"
|
||||
"fl_engine.h"
|
||||
"fl_json_message_codec.h"
|
||||
"fl_json_method_codec.h"
|
||||
"fl_message_codec.h"
|
||||
"fl_method_call.h"
|
||||
"fl_method_channel.h"
|
||||
"fl_method_codec.h"
|
||||
"fl_method_response.h"
|
||||
"fl_plugin_registrar.h"
|
||||
"fl_plugin_registry.h"
|
||||
"fl_standard_message_codec.h"
|
||||
"fl_standard_method_codec.h"
|
||||
"fl_string_codec.h"
|
||||
"fl_value.h"
|
||||
"fl_view.h"
|
||||
"flutter_linux.h"
|
||||
)
|
||||
list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/")
|
||||
add_library(flutter INTERFACE)
|
||||
target_include_directories(flutter INTERFACE
|
||||
"${EPHEMERAL_DIR}"
|
||||
)
|
||||
target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}")
|
||||
target_link_libraries(flutter INTERFACE
|
||||
PkgConfig::GTK
|
||||
PkgConfig::GLIB
|
||||
PkgConfig::GIO
|
||||
)
|
||||
add_dependencies(flutter flutter_assemble)
|
||||
|
||||
# === Flutter tool backend ===
|
||||
# _phony_ is a non-existent file to force this command to run every time,
|
||||
# since currently there's no way to get a full input/output list from the
|
||||
# flutter tool.
|
||||
add_custom_command(
|
||||
OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS}
|
||||
${CMAKE_CURRENT_BINARY_DIR}/_phony_
|
||||
COMMAND ${CMAKE_COMMAND} -E env
|
||||
${FLUTTER_TOOL_ENVIRONMENT}
|
||||
"${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh"
|
||||
${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE}
|
||||
VERBATIM
|
||||
)
|
||||
add_custom_target(flutter_assemble DEPENDS
|
||||
"${FLUTTER_LIBRARY}"
|
||||
${FLUTTER_LIBRARY_HEADERS}
|
||||
)
|
10
flutter/dev/a11y_assessments/linux/main.cc
Normal file
10
flutter/dev/a11y_assessments/linux/main.cc
Normal file
@ -0,0 +1,10 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#include "my_application.h"
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
g_autoptr(MyApplication) app = my_application_new();
|
||||
return g_application_run(G_APPLICATION(app), argc, argv);
|
||||
}
|
108
flutter/dev/a11y_assessments/linux/my_application.cc
Normal file
108
flutter/dev/a11y_assessments/linux/my_application.cc
Normal file
@ -0,0 +1,108 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#include "my_application.h"
|
||||
|
||||
#include <flutter_linux/flutter_linux.h>
|
||||
#ifdef GDK_WINDOWING_X11
|
||||
#include <gdk/gdkx.h>
|
||||
#endif
|
||||
|
||||
#include "flutter/generated_plugin_registrant.h"
|
||||
|
||||
struct _MyApplication {
|
||||
GtkApplication parent_instance;
|
||||
char** dart_entrypoint_arguments;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION)
|
||||
|
||||
// Implements GApplication::activate.
|
||||
static void my_application_activate(GApplication* application) {
|
||||
MyApplication* self = MY_APPLICATION(application);
|
||||
GtkWindow* window =
|
||||
GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application)));
|
||||
|
||||
// Use a header bar when running in GNOME as this is the common style used
|
||||
// by applications and is the setup most users will be using (e.g. Ubuntu
|
||||
// desktop).
|
||||
// If running on X and not using GNOME then just use a traditional title bar
|
||||
// in case the window manager does more exotic layout, e.g. tiling.
|
||||
// If running on Wayland assume the header bar will work (may need changing
|
||||
// if future cases occur).
|
||||
gboolean use_header_bar = TRUE;
|
||||
#ifdef GDK_WINDOWING_X11
|
||||
GdkScreen* screen = gtk_window_get_screen(window);
|
||||
if (GDK_IS_X11_SCREEN(screen)) {
|
||||
const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen);
|
||||
if (g_strcmp0(wm_name, "GNOME Shell") != 0) {
|
||||
use_header_bar = FALSE;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if (use_header_bar) {
|
||||
GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new());
|
||||
gtk_widget_show(GTK_WIDGET(header_bar));
|
||||
gtk_header_bar_set_title(header_bar, "a11y_assessments");
|
||||
gtk_header_bar_set_show_close_button(header_bar, TRUE);
|
||||
gtk_window_set_titlebar(window, GTK_WIDGET(header_bar));
|
||||
} else {
|
||||
gtk_window_set_title(window, "a11y_assessments");
|
||||
}
|
||||
|
||||
gtk_window_set_default_size(window, 1280, 720);
|
||||
gtk_widget_show(GTK_WIDGET(window));
|
||||
|
||||
g_autoptr(FlDartProject) project = fl_dart_project_new();
|
||||
fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments);
|
||||
|
||||
FlView* view = fl_view_new(project);
|
||||
gtk_widget_show(GTK_WIDGET(view));
|
||||
gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view));
|
||||
|
||||
fl_register_plugins(FL_PLUGIN_REGISTRY(view));
|
||||
|
||||
gtk_widget_grab_focus(GTK_WIDGET(view));
|
||||
}
|
||||
|
||||
// Implements GApplication::local_command_line.
|
||||
static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) {
|
||||
MyApplication* self = MY_APPLICATION(application);
|
||||
// Strip out the first argument as it is the binary name.
|
||||
self->dart_entrypoint_arguments = g_strdupv(*arguments + 1);
|
||||
|
||||
g_autoptr(GError) error = nullptr;
|
||||
if (!g_application_register(application, nullptr, &error)) {
|
||||
g_warning("Failed to register: %s", error->message);
|
||||
*exit_status = 1;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
g_application_activate(application);
|
||||
*exit_status = 0;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// Implements GObject::dispose.
|
||||
static void my_application_dispose(GObject* object) {
|
||||
MyApplication* self = MY_APPLICATION(object);
|
||||
g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev);
|
||||
G_OBJECT_CLASS(my_application_parent_class)->dispose(object);
|
||||
}
|
||||
|
||||
static void my_application_class_init(MyApplicationClass* klass) {
|
||||
G_APPLICATION_CLASS(klass)->activate = my_application_activate;
|
||||
G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line;
|
||||
G_OBJECT_CLASS(klass)->dispose = my_application_dispose;
|
||||
}
|
||||
|
||||
static void my_application_init(MyApplication* self) {}
|
||||
|
||||
MyApplication* my_application_new() {
|
||||
return MY_APPLICATION(g_object_new(my_application_get_type(),
|
||||
"application-id", APPLICATION_ID,
|
||||
"flags", G_APPLICATION_NON_UNIQUE,
|
||||
nullptr));
|
||||
}
|
22
flutter/dev/a11y_assessments/linux/my_application.h
Normal file
22
flutter/dev/a11y_assessments/linux/my_application.h
Normal file
@ -0,0 +1,22 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#ifndef FLUTTER_MY_APPLICATION_H_
|
||||
#define FLUTTER_MY_APPLICATION_H_
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION,
|
||||
GtkApplication)
|
||||
|
||||
/**
|
||||
* my_application_new:
|
||||
*
|
||||
* Creates a new Flutter-based application.
|
||||
*
|
||||
* Returns: a new #MyApplication.
|
||||
*/
|
||||
MyApplication* my_application_new();
|
||||
|
||||
#endif // FLUTTER_MY_APPLICATION_H_
|
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>com.apple.security.app-sandbox</key>
|
||||
<true/>
|
||||
<key>com.apple.security.cs.allow-jit</key>
|
||||
<true/>
|
||||
<key>com.apple.security.network.server</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
32
flutter/dev/a11y_assessments/macos/Runner/Info.plist
Normal file
32
flutter/dev/a11y_assessments/macos/Runner/Info.plist
Normal file
@ -0,0 +1,32 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string></string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>$(PRODUCT_NAME)</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>$(FLUTTER_BUILD_NAME)</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>$(FLUTTER_BUILD_NUMBER)</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>$(PRODUCT_COPYRIGHT)</string>
|
||||
<key>NSMainNibFile</key>
|
||||
<string>MainMenu</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string>NSApplication</string>
|
||||
</dict>
|
||||
</plist>
|
@ -0,0 +1,19 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import Cocoa
|
||||
import FlutterMacOS
|
||||
|
||||
class MainFlutterWindow: NSWindow {
|
||||
override func awakeFromNib() {
|
||||
let flutterViewController = FlutterViewController()
|
||||
let windowFrame = self.frame
|
||||
self.contentViewController = flutterViewController
|
||||
self.setFrame(windowFrame, display: true)
|
||||
|
||||
RegisterGeneratedPlugins(registry: flutterViewController)
|
||||
|
||||
super.awakeFromNib()
|
||||
}
|
||||
}
|
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>com.apple.security.app-sandbox</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
@ -0,0 +1,41 @@
|
||||
// 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 settings.gradle files in the Flutter repo,
|
||||
// See dev/tools/bin/generate_gradle_lockfiles.dart.
|
||||
|
||||
pluginManagement {
|
||||
def flutterSdkPath = {
|
||||
def properties = new Properties()
|
||||
file("local.properties").withInputStream { properties.load(it) }
|
||||
def flutterSdkPath = properties.getProperty("flutter.sdk")
|
||||
assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
|
||||
return flutterSdkPath
|
||||
}
|
||||
settings.ext.flutterSdkPath = flutterSdkPath()
|
||||
|
||||
includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle")
|
||||
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
gradlePluginPortal()
|
||||
}
|
||||
}
|
||||
|
||||
buildscript {
|
||||
dependencyLocking {
|
||||
lockFile = file("${rootProject.projectDir}/buildscript-gradle.lockfile")
|
||||
lockAllConfigurations()
|
||||
}
|
||||
}
|
||||
|
||||
plugins {
|
||||
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
|
||||
id "com.android.application" version "8.7.0" apply false
|
||||
id "org.jetbrains.kotlin.android" version "1.8.10" apply false
|
||||
}
|
||||
|
||||
include ":app"
|
10
flutter/dev/benchmarks/complex_layout/lib/main_bad.dart
Normal file
10
flutter/dev/benchmarks/complex_layout/lib/main_bad.dart
Normal file
@ -0,0 +1,10 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'src/app.dart';
|
||||
|
||||
void main() {
|
||||
runApp(const ComplexLayoutApp(badScroll: true));
|
||||
}
|
723
flutter/dev/benchmarks/complex_layout/lib/src/app.dart
Normal file
723
flutter/dev/benchmarks/complex_layout/lib/src/app.dart
Normal file
@ -0,0 +1,723 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/scheduler.dart' show timeDilation;
|
||||
|
||||
enum ScrollMode { complex, tile }
|
||||
|
||||
class ComplexLayoutApp extends StatefulWidget {
|
||||
const ComplexLayoutApp({super.key, this.badScroll = false});
|
||||
|
||||
final bool badScroll;
|
||||
|
||||
@override
|
||||
ComplexLayoutAppState createState() => ComplexLayoutAppState();
|
||||
|
||||
static ComplexLayoutAppState? of(BuildContext context) =>
|
||||
context.findAncestorStateOfType<ComplexLayoutAppState>();
|
||||
}
|
||||
|
||||
class ComplexLayoutAppState extends State<ComplexLayoutApp> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return MaterialApp(
|
||||
theme: lightTheme ? ThemeData.light() : ThemeData.dark(),
|
||||
title: 'Advanced Layout',
|
||||
home:
|
||||
scrollMode == ScrollMode.complex
|
||||
? ComplexLayout(badScroll: widget.badScroll)
|
||||
: const TileScrollLayout(),
|
||||
);
|
||||
}
|
||||
|
||||
bool _lightTheme = true;
|
||||
bool get lightTheme => _lightTheme;
|
||||
set lightTheme(bool value) {
|
||||
setState(() {
|
||||
_lightTheme = value;
|
||||
});
|
||||
}
|
||||
|
||||
ScrollMode _scrollMode = ScrollMode.complex;
|
||||
ScrollMode get scrollMode => _scrollMode;
|
||||
set scrollMode(ScrollMode mode) {
|
||||
setState(() {
|
||||
_scrollMode = mode;
|
||||
});
|
||||
}
|
||||
|
||||
void toggleAnimationSpeed() {
|
||||
setState(() {
|
||||
timeDilation = (timeDilation != 1.0) ? 1.0 : 5.0;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
class TileScrollLayout extends StatelessWidget {
|
||||
const TileScrollLayout({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(title: const Text('Tile Scrolling Layout')),
|
||||
body: ListView.builder(
|
||||
key: const Key('tiles-scroll'),
|
||||
itemCount: 200,
|
||||
itemBuilder: (BuildContext context, int index) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.all(5.0),
|
||||
child: Material(
|
||||
elevation: (index % 5 + 1).toDouble(),
|
||||
color: Colors.white,
|
||||
child: const IconBar(),
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
drawer: const GalleryDrawer(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class ComplexLayout extends StatefulWidget {
|
||||
const ComplexLayout({super.key, required this.badScroll});
|
||||
|
||||
final bool badScroll;
|
||||
|
||||
@override
|
||||
ComplexLayoutState createState() => ComplexLayoutState();
|
||||
|
||||
static ComplexLayoutState? of(BuildContext context) =>
|
||||
context.findAncestorStateOfType<ComplexLayoutState>();
|
||||
}
|
||||
|
||||
class ComplexLayoutState extends State<ComplexLayout> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
Widget body = ListView.builder(
|
||||
key: const Key('complex-scroll'), // this key is used by the driver test
|
||||
controller: ScrollController(), // So that the scroll offset can be tracked
|
||||
itemCount: widget.badScroll ? 500 : null,
|
||||
shrinkWrap: widget.badScroll,
|
||||
itemBuilder: (BuildContext context, int index) {
|
||||
if (index.isEven) {
|
||||
return FancyImageItem(index, key: PageStorageKey<int>(index));
|
||||
} else {
|
||||
return FancyGalleryItem(index, key: PageStorageKey<int>(index));
|
||||
}
|
||||
},
|
||||
);
|
||||
if (widget.badScroll) {
|
||||
body = ListView(key: const Key('complex-scroll-bad'), children: <Widget>[body]);
|
||||
}
|
||||
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: const Text('Advanced Layout'),
|
||||
actions: <Widget>[
|
||||
IconButton(
|
||||
icon: const Icon(Icons.create),
|
||||
tooltip: 'Search',
|
||||
onPressed: () {
|
||||
print('Pressed search');
|
||||
},
|
||||
),
|
||||
const TopBarMenu(),
|
||||
],
|
||||
),
|
||||
body: Column(children: <Widget>[Expanded(child: body), const BottomBar()]),
|
||||
drawer: const GalleryDrawer(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class TopBarMenu extends StatelessWidget {
|
||||
const TopBarMenu({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return PopupMenuButton<String>(
|
||||
onSelected: (String value) {
|
||||
print('Selected: $value');
|
||||
},
|
||||
itemBuilder:
|
||||
(BuildContext context) => <PopupMenuItem<String>>[
|
||||
const PopupMenuItem<String>(
|
||||
value: 'Friends',
|
||||
child: MenuItemWithIcon(Icons.people, 'Friends', '5 new'),
|
||||
),
|
||||
const PopupMenuItem<String>(
|
||||
value: 'Events',
|
||||
child: MenuItemWithIcon(Icons.event, 'Events', '12 upcoming'),
|
||||
),
|
||||
const PopupMenuItem<String>(
|
||||
value: 'Events',
|
||||
child: MenuItemWithIcon(Icons.group, 'Groups', '14'),
|
||||
),
|
||||
const PopupMenuItem<String>(
|
||||
value: 'Events',
|
||||
child: MenuItemWithIcon(Icons.image, 'Pictures', '12'),
|
||||
),
|
||||
const PopupMenuItem<String>(
|
||||
value: 'Events',
|
||||
child: MenuItemWithIcon(Icons.near_me, 'Nearby', '33'),
|
||||
),
|
||||
const PopupMenuItem<String>(
|
||||
value: 'Friends',
|
||||
child: MenuItemWithIcon(Icons.people, 'Friends', '5'),
|
||||
),
|
||||
const PopupMenuItem<String>(
|
||||
value: 'Events',
|
||||
child: MenuItemWithIcon(Icons.event, 'Events', '12'),
|
||||
),
|
||||
const PopupMenuItem<String>(
|
||||
value: 'Events',
|
||||
child: MenuItemWithIcon(Icons.group, 'Groups', '14'),
|
||||
),
|
||||
const PopupMenuItem<String>(
|
||||
value: 'Events',
|
||||
child: MenuItemWithIcon(Icons.image, 'Pictures', '12'),
|
||||
),
|
||||
const PopupMenuItem<String>(
|
||||
value: 'Events',
|
||||
child: MenuItemWithIcon(Icons.near_me, 'Nearby', '33'),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class MenuItemWithIcon extends StatelessWidget {
|
||||
const MenuItemWithIcon(this.icon, this.title, this.subtitle, {super.key});
|
||||
|
||||
final IconData icon;
|
||||
final String title;
|
||||
final String subtitle;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Row(
|
||||
children: <Widget>[
|
||||
Icon(icon),
|
||||
Padding(padding: const EdgeInsets.only(left: 8.0, right: 8.0), child: Text(title)),
|
||||
Text(subtitle, style: Theme.of(context).textTheme.bodySmall),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class FancyImageItem extends StatelessWidget {
|
||||
const FancyImageItem(this.index, {super.key});
|
||||
|
||||
final int index;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ListBody(
|
||||
children: <Widget>[
|
||||
UserHeader('Ali Connors $index'),
|
||||
const ItemDescription(),
|
||||
const ItemImageBox(),
|
||||
const InfoBar(),
|
||||
const Padding(padding: EdgeInsets.symmetric(horizontal: 8.0), child: Divider()),
|
||||
const IconBar(),
|
||||
const FatDivider(),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class FancyGalleryItem extends StatelessWidget {
|
||||
const FancyGalleryItem(this.index, {super.key});
|
||||
|
||||
final int index;
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ListBody(
|
||||
children: <Widget>[
|
||||
const UserHeader('Ali Connors'),
|
||||
ItemGalleryBox(index),
|
||||
const InfoBar(),
|
||||
const Padding(padding: EdgeInsets.symmetric(horizontal: 8.0), child: Divider()),
|
||||
const IconBar(),
|
||||
const FatDivider(),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class InfoBar extends StatelessWidget {
|
||||
const InfoBar({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: <Widget>[
|
||||
const MiniIconWithText(Icons.thumb_up, '42'),
|
||||
Text('3 Comments', style: Theme.of(context).textTheme.bodySmall),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class IconBar extends StatelessWidget {
|
||||
const IconBar({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return const Padding(
|
||||
padding: EdgeInsets.only(left: 16.0, right: 16.0),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: <Widget>[
|
||||
IconWithText(Icons.thumb_up, 'Like'),
|
||||
IconWithText(Icons.comment, 'Comment'),
|
||||
IconWithText(Icons.share, 'Share'),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class IconWithText extends StatelessWidget {
|
||||
const IconWithText(this.icon, this.title, {super.key});
|
||||
|
||||
final IconData icon;
|
||||
final String title;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: <Widget>[
|
||||
IconButton(
|
||||
icon: Icon(icon),
|
||||
onPressed: () {
|
||||
print('Pressed $title button');
|
||||
},
|
||||
),
|
||||
Text(title),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class MiniIconWithText extends StatelessWidget {
|
||||
const MiniIconWithText(this.icon, this.title, {super.key});
|
||||
|
||||
final IconData icon;
|
||||
final String title;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: <Widget>[
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(right: 8.0),
|
||||
child: Container(
|
||||
width: 16.0,
|
||||
height: 16.0,
|
||||
decoration: ShapeDecoration(
|
||||
color: Theme.of(context).primaryColor,
|
||||
shape: const CircleBorder(),
|
||||
),
|
||||
child: Icon(icon, color: Colors.white, size: 12.0),
|
||||
),
|
||||
),
|
||||
Text(title, style: Theme.of(context).textTheme.bodySmall),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class FatDivider extends StatelessWidget {
|
||||
const FatDivider({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(height: 8.0, color: Theme.of(context).dividerColor);
|
||||
}
|
||||
}
|
||||
|
||||
class UserHeader extends StatelessWidget {
|
||||
const UserHeader(this.userName, {super.key});
|
||||
|
||||
final String userName;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: <Widget>[
|
||||
const Padding(
|
||||
padding: EdgeInsets.only(right: 8.0),
|
||||
child: Image(
|
||||
image: AssetImage('packages/flutter_gallery_assets/people/square/ali.png'),
|
||||
width: 32.0,
|
||||
height: 32.0,
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||
children: <Widget>[
|
||||
RichText(
|
||||
text: TextSpan(
|
||||
style: Theme.of(context).textTheme.bodyMedium,
|
||||
children: <TextSpan>[
|
||||
TextSpan(text: userName, style: const TextStyle(fontWeight: FontWeight.bold)),
|
||||
const TextSpan(text: ' shared a new '),
|
||||
const TextSpan(text: 'photo', style: TextStyle(fontWeight: FontWeight.bold)),
|
||||
],
|
||||
),
|
||||
),
|
||||
Row(
|
||||
children: <Widget>[
|
||||
Text('Yesterday at 11:55 • ', style: Theme.of(context).textTheme.bodySmall),
|
||||
Icon(
|
||||
Icons.people,
|
||||
size: 16.0,
|
||||
color: Theme.of(context).textTheme.bodySmall!.color,
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
const TopBarMenu(),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class ItemDescription extends StatelessWidget {
|
||||
const ItemDescription({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return const Padding(
|
||||
padding: EdgeInsets.all(8.0),
|
||||
child: Text(
|
||||
'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class ItemImageBox extends StatelessWidget {
|
||||
const ItemImageBox({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: Card(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||
children: <Widget>[
|
||||
Stack(
|
||||
children: <Widget>[
|
||||
const SizedBox(
|
||||
height: 230.0,
|
||||
child: Image(
|
||||
image: AssetImage(
|
||||
'packages/flutter_gallery_assets/places/india_chettinad_silk_maker.png',
|
||||
),
|
||||
),
|
||||
),
|
||||
Theme(
|
||||
data: ThemeData.dark(),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: <Widget>[
|
||||
IconButton(
|
||||
icon: const Icon(Icons.edit),
|
||||
onPressed: () {
|
||||
print('Pressed edit button');
|
||||
},
|
||||
),
|
||||
IconButton(
|
||||
icon: const Icon(Icons.zoom_in),
|
||||
onPressed: () {
|
||||
print('Pressed zoom button');
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
Positioned(
|
||||
bottom: 4.0,
|
||||
left: 4.0,
|
||||
child: Container(
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.black54,
|
||||
borderRadius: BorderRadius.circular(2.0),
|
||||
),
|
||||
padding: const EdgeInsets.all(4.0),
|
||||
child: RichText(
|
||||
text: const TextSpan(
|
||||
style: TextStyle(color: Colors.white),
|
||||
children: <TextSpan>[
|
||||
TextSpan(text: 'Photo by '),
|
||||
TextSpan(
|
||||
style: TextStyle(fontWeight: FontWeight.bold),
|
||||
text: 'Chris Godley',
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||
children: <Widget>[
|
||||
Text('Artisans of Southern India', style: Theme.of(context).textTheme.bodyLarge),
|
||||
Text('Silk Spinners', style: Theme.of(context).textTheme.bodyMedium),
|
||||
Text('Sivaganga, Tamil Nadu', style: Theme.of(context).textTheme.bodySmall),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class ItemGalleryBox extends StatelessWidget {
|
||||
const ItemGalleryBox(this.index, {super.key});
|
||||
|
||||
final int index;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final List<String> tabNames = <String>['A', 'B', 'C', 'D'];
|
||||
|
||||
return SizedBox(
|
||||
height: 200.0,
|
||||
child: DefaultTabController(
|
||||
length: tabNames.length,
|
||||
child: Column(
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
child: TabBarView(
|
||||
children:
|
||||
tabNames.map<Widget>((String tabName) {
|
||||
return Container(
|
||||
key: PageStorageKey<String>(tabName),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: Card(
|
||||
child: Column(
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
child: ColoredBox(
|
||||
color: Theme.of(context).primaryColor,
|
||||
child: Center(
|
||||
child: Text(
|
||||
tabName,
|
||||
style: Theme.of(
|
||||
context,
|
||||
).textTheme.headlineSmall!.copyWith(color: Colors.white),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
Row(
|
||||
children: <Widget>[
|
||||
IconButton(
|
||||
icon: const Icon(Icons.share),
|
||||
onPressed: () {
|
||||
print('Pressed share');
|
||||
},
|
||||
),
|
||||
IconButton(
|
||||
icon: const Icon(Icons.event),
|
||||
onPressed: () {
|
||||
print('Pressed event');
|
||||
},
|
||||
),
|
||||
Expanded(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.only(left: 8.0),
|
||||
child: Text('This is item $tabName'),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}).toList(),
|
||||
),
|
||||
),
|
||||
const TabPageSelector(),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class BottomBar extends StatelessWidget {
|
||||
const BottomBar({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
decoration: BoxDecoration(
|
||||
border: Border(top: BorderSide(color: Theme.of(context).dividerColor)),
|
||||
),
|
||||
child: const Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: <Widget>[
|
||||
BottomBarButton(Icons.new_releases, 'News'),
|
||||
BottomBarButton(Icons.people, 'Requests'),
|
||||
BottomBarButton(Icons.chat, 'Messenger'),
|
||||
BottomBarButton(Icons.bookmark, 'Bookmark'),
|
||||
BottomBarButton(Icons.alarm, 'Alarm'),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class BottomBarButton extends StatelessWidget {
|
||||
const BottomBarButton(this.icon, this.title, {super.key});
|
||||
|
||||
final IconData icon;
|
||||
final String title;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: Column(
|
||||
children: <Widget>[
|
||||
IconButton(
|
||||
icon: Icon(icon),
|
||||
onPressed: () {
|
||||
print('Pressed: $title');
|
||||
},
|
||||
),
|
||||
Text(title, style: Theme.of(context).textTheme.bodySmall),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class GalleryDrawer extends StatelessWidget {
|
||||
const GalleryDrawer({super.key});
|
||||
|
||||
void _changeTheme(BuildContext context, bool value) {
|
||||
ComplexLayoutApp.of(context)?.lightTheme = value;
|
||||
}
|
||||
|
||||
void _changeScrollMode(BuildContext context, ScrollMode mode) {
|
||||
ComplexLayoutApp.of(context)?.scrollMode = mode;
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final ScrollMode currentMode = ComplexLayoutApp.of(context)!.scrollMode;
|
||||
return Drawer(
|
||||
// For real apps, see the Gallery material Drawer demo. More
|
||||
// typically, a drawer would have a fixed header with a scrolling body
|
||||
// below it.
|
||||
child: ListView(
|
||||
key: const PageStorageKey<String>('gallery-drawer'),
|
||||
padding: EdgeInsets.zero,
|
||||
children: <Widget>[
|
||||
const FancyDrawerHeader(),
|
||||
ListTile(
|
||||
key: const Key('scroll-switcher'),
|
||||
title: const Text('Scroll Mode'),
|
||||
onTap: () {
|
||||
_changeScrollMode(
|
||||
context,
|
||||
currentMode == ScrollMode.complex ? ScrollMode.tile : ScrollMode.complex,
|
||||
);
|
||||
Navigator.pop(context);
|
||||
},
|
||||
trailing: Text(currentMode == ScrollMode.complex ? 'Tile' : 'Complex'),
|
||||
),
|
||||
ListTile(
|
||||
leading: const Icon(Icons.brightness_5),
|
||||
title: const Text('Light'),
|
||||
onTap: () {
|
||||
_changeTheme(context, true);
|
||||
},
|
||||
selected: ComplexLayoutApp.of(context)!.lightTheme,
|
||||
trailing: Radio<bool>(
|
||||
value: true,
|
||||
groupValue: ComplexLayoutApp.of(context)!.lightTheme,
|
||||
onChanged: (bool? value) {
|
||||
_changeTheme(context, value!);
|
||||
},
|
||||
),
|
||||
),
|
||||
ListTile(
|
||||
leading: const Icon(Icons.brightness_7),
|
||||
title: const Text('Dark'),
|
||||
onTap: () {
|
||||
_changeTheme(context, false);
|
||||
},
|
||||
selected: !ComplexLayoutApp.of(context)!.lightTheme,
|
||||
trailing: Radio<bool>(
|
||||
value: false,
|
||||
groupValue: ComplexLayoutApp.of(context)!.lightTheme,
|
||||
onChanged: (bool? value) {
|
||||
_changeTheme(context, value!);
|
||||
},
|
||||
),
|
||||
),
|
||||
const Divider(),
|
||||
ListTile(
|
||||
leading: const Icon(Icons.hourglass_empty),
|
||||
title: const Text('Animate Slowly'),
|
||||
selected: timeDilation != 1.0,
|
||||
onTap: () {
|
||||
ComplexLayoutApp.of(context)!.toggleAnimationSpeed();
|
||||
},
|
||||
trailing: Checkbox(
|
||||
value: timeDilation != 1.0,
|
||||
onChanged: (bool? value) {
|
||||
ComplexLayoutApp.of(context)!.toggleAnimationSpeed();
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class FancyDrawerHeader extends StatelessWidget {
|
||||
const FancyDrawerHeader({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
color: Colors.purple,
|
||||
height: 200.0,
|
||||
child: const SafeArea(bottom: false, child: Placeholder()),
|
||||
);
|
||||
}
|
||||
}
|
@ -0,0 +1,2 @@
|
||||
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
|
||||
#include "ephemeral/Flutter-Generated.xcconfig"
|
39
flutter/dev/benchmarks/complex_layout/macos/Podfile
Normal file
39
flutter/dev/benchmarks/complex_layout/macos/Podfile
Normal file
@ -0,0 +1,39 @@
|
||||
platform :osx, '10.14'
|
||||
|
||||
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
|
||||
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
|
||||
|
||||
project 'Runner', {
|
||||
'Debug' => :debug,
|
||||
'Profile' => :release,
|
||||
'Release' => :release,
|
||||
}
|
||||
|
||||
def flutter_root
|
||||
generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__)
|
||||
unless File.exist?(generated_xcode_build_settings_path)
|
||||
raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first"
|
||||
end
|
||||
|
||||
File.foreach(generated_xcode_build_settings_path) do |line|
|
||||
matches = line.match(/FLUTTER_ROOT\=(.*)/)
|
||||
return matches[1].strip if matches
|
||||
end
|
||||
raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\""
|
||||
end
|
||||
|
||||
require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
|
||||
|
||||
flutter_macos_podfile_setup
|
||||
|
||||
target 'Runner' do
|
||||
use_frameworks!
|
||||
|
||||
flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__))
|
||||
end
|
||||
|
||||
post_install do |installer|
|
||||
installer.pods_project.targets.each do |target|
|
||||
flutter_additional_macos_build_settings(target)
|
||||
end
|
||||
end
|
@ -0,0 +1,343 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||
<dependencies>
|
||||
<deployment identifier="macosx"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14490.70"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<customObject id="-2" userLabel="File's Owner" customClass="NSApplication">
|
||||
<connections>
|
||||
<outlet property="delegate" destination="Voe-Tx-rLC" id="GzC-gU-4Uq"/>
|
||||
</connections>
|
||||
</customObject>
|
||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||
<customObject id="Voe-Tx-rLC" customClass="AppDelegate" customModule="Runner" customModuleProvider="target">
|
||||
<connections>
|
||||
<outlet property="applicationMenu" destination="uQy-DD-JDr" id="XBo-yE-nKs"/>
|
||||
<outlet property="mainFlutterWindow" destination="QvC-M9-y7g" id="gIp-Ho-8D9"/>
|
||||
</connections>
|
||||
</customObject>
|
||||
<customObject id="YLy-65-1bz" customClass="NSFontManager"/>
|
||||
<menu title="Main Menu" systemMenu="main" id="AYu-sK-qS6">
|
||||
<items>
|
||||
<menuItem title="APP_NAME" id="1Xt-HY-uBw">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="APP_NAME" systemMenu="apple" id="uQy-DD-JDr">
|
||||
<items>
|
||||
<menuItem title="About APP_NAME" id="5kV-Vb-QxS">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="orderFrontStandardAboutPanel:" target="-1" id="Exp-CZ-Vem"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="VOq-y0-SEH"/>
|
||||
<menuItem title="Preferences…" keyEquivalent="," id="BOF-NM-1cW"/>
|
||||
<menuItem isSeparatorItem="YES" id="wFC-TO-SCJ"/>
|
||||
<menuItem title="Services" id="NMo-om-nkz">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Services" systemMenu="services" id="hz9-B4-Xy5"/>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="4je-JR-u6R"/>
|
||||
<menuItem title="Hide APP_NAME" keyEquivalent="h" id="Olw-nP-bQN">
|
||||
<connections>
|
||||
<action selector="hide:" target="-1" id="PnN-Uc-m68"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Hide Others" keyEquivalent="h" id="Vdr-fp-XzO">
|
||||
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="hideOtherApplications:" target="-1" id="VT4-aY-XCT"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Show All" id="Kd2-mp-pUS">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="unhideAllApplications:" target="-1" id="Dhg-Le-xox"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="kCx-OE-vgT"/>
|
||||
<menuItem title="Quit APP_NAME" keyEquivalent="q" id="4sb-4s-VLi">
|
||||
<connections>
|
||||
<action selector="terminate:" target="-1" id="Te7-pn-YzF"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Edit" id="5QF-Oa-p0T">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Edit" id="W48-6f-4Dl">
|
||||
<items>
|
||||
<menuItem title="Undo" keyEquivalent="z" id="dRJ-4n-Yzg">
|
||||
<connections>
|
||||
<action selector="undo:" target="-1" id="M6e-cu-g7V"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Redo" keyEquivalent="Z" id="6dh-zS-Vam">
|
||||
<connections>
|
||||
<action selector="redo:" target="-1" id="oIA-Rs-6OD"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="WRV-NI-Exz"/>
|
||||
<menuItem title="Cut" keyEquivalent="x" id="uRl-iY-unG">
|
||||
<connections>
|
||||
<action selector="cut:" target="-1" id="YJe-68-I9s"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Copy" keyEquivalent="c" id="x3v-GG-iWU">
|
||||
<connections>
|
||||
<action selector="copy:" target="-1" id="G1f-GL-Joy"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Paste" keyEquivalent="v" id="gVA-U4-sdL">
|
||||
<connections>
|
||||
<action selector="paste:" target="-1" id="UvS-8e-Qdg"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Paste and Match Style" keyEquivalent="V" id="WeT-3V-zwk">
|
||||
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="pasteAsPlainText:" target="-1" id="cEh-KX-wJQ"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Delete" id="pa3-QI-u2k">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="delete:" target="-1" id="0Mk-Ml-PaM"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Select All" keyEquivalent="a" id="Ruw-6m-B2m">
|
||||
<connections>
|
||||
<action selector="selectAll:" target="-1" id="VNm-Mi-diN"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="uyl-h8-XO2"/>
|
||||
<menuItem title="Find" id="4EN-yA-p0u">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Find" id="1b7-l0-nxx">
|
||||
<items>
|
||||
<menuItem title="Find…" tag="1" keyEquivalent="f" id="Xz5-n4-O0W">
|
||||
<connections>
|
||||
<action selector="performFindPanelAction:" target="-1" id="cD7-Qs-BN4"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Find and Replace…" tag="12" keyEquivalent="f" id="YEy-JH-Tfz">
|
||||
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="performFindPanelAction:" target="-1" id="WD3-Gg-5AJ"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Find Next" tag="2" keyEquivalent="g" id="q09-fT-Sye">
|
||||
<connections>
|
||||
<action selector="performFindPanelAction:" target="-1" id="NDo-RZ-v9R"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Find Previous" tag="3" keyEquivalent="G" id="OwM-mh-QMV">
|
||||
<connections>
|
||||
<action selector="performFindPanelAction:" target="-1" id="HOh-sY-3ay"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Use Selection for Find" tag="7" keyEquivalent="e" id="buJ-ug-pKt">
|
||||
<connections>
|
||||
<action selector="performFindPanelAction:" target="-1" id="U76-nv-p5D"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Jump to Selection" keyEquivalent="j" id="S0p-oC-mLd">
|
||||
<connections>
|
||||
<action selector="centerSelectionInVisibleArea:" target="-1" id="IOG-6D-g5B"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Spelling and Grammar" id="Dv1-io-Yv7">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Spelling" id="3IN-sU-3Bg">
|
||||
<items>
|
||||
<menuItem title="Show Spelling and Grammar" keyEquivalent=":" id="HFo-cy-zxI">
|
||||
<connections>
|
||||
<action selector="showGuessPanel:" target="-1" id="vFj-Ks-hy3"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Check Document Now" keyEquivalent=";" id="hz2-CU-CR7">
|
||||
<connections>
|
||||
<action selector="checkSpelling:" target="-1" id="fz7-VC-reM"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="bNw-od-mp5"/>
|
||||
<menuItem title="Check Spelling While Typing" id="rbD-Rh-wIN">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="toggleContinuousSpellChecking:" target="-1" id="7w6-Qz-0kB"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Check Grammar With Spelling" id="mK6-2p-4JG">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="toggleGrammarChecking:" target="-1" id="muD-Qn-j4w"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Correct Spelling Automatically" id="78Y-hA-62v">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="toggleAutomaticSpellingCorrection:" target="-1" id="2lM-Qi-WAP"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Substitutions" id="9ic-FL-obx">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Substitutions" id="FeM-D8-WVr">
|
||||
<items>
|
||||
<menuItem title="Show Substitutions" id="z6F-FW-3nz">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="orderFrontSubstitutionsPanel:" target="-1" id="oku-mr-iSq"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="gPx-C9-uUO"/>
|
||||
<menuItem title="Smart Copy/Paste" id="9yt-4B-nSM">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="toggleSmartInsertDelete:" target="-1" id="3IJ-Se-DZD"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Smart Quotes" id="hQb-2v-fYv">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="toggleAutomaticQuoteSubstitution:" target="-1" id="ptq-xd-QOA"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Smart Dashes" id="rgM-f4-ycn">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="toggleAutomaticDashSubstitution:" target="-1" id="oCt-pO-9gS"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Smart Links" id="cwL-P1-jid">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="toggleAutomaticLinkDetection:" target="-1" id="Gip-E3-Fov"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Data Detectors" id="tRr-pd-1PS">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="toggleAutomaticDataDetection:" target="-1" id="R1I-Nq-Kbl"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Text Replacement" id="HFQ-gK-NFA">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="toggleAutomaticTextReplacement:" target="-1" id="DvP-Fe-Py6"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Transformations" id="2oI-Rn-ZJC">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Transformations" id="c8a-y6-VQd">
|
||||
<items>
|
||||
<menuItem title="Make Upper Case" id="vmV-6d-7jI">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="uppercaseWord:" target="-1" id="sPh-Tk-edu"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Make Lower Case" id="d9M-CD-aMd">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="lowercaseWord:" target="-1" id="iUZ-b5-hil"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Capitalize" id="UEZ-Bs-lqG">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="capitalizeWord:" target="-1" id="26H-TL-nsh"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Speech" id="xrE-MZ-jX0">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Speech" id="3rS-ZA-NoH">
|
||||
<items>
|
||||
<menuItem title="Start Speaking" id="Ynk-f8-cLZ">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="startSpeaking:" target="-1" id="654-Ng-kyl"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Stop Speaking" id="Oyz-dy-DGm">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="stopSpeaking:" target="-1" id="dX8-6p-jy9"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="View" id="H8h-7b-M4v">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="View" id="HyV-fh-RgO">
|
||||
<items>
|
||||
<menuItem title="Enter Full Screen" keyEquivalent="f" id="4J7-dP-txa">
|
||||
<modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="toggleFullScreen:" target="-1" id="dU3-MA-1Rq"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Window" id="aUF-d1-5bR">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Window" systemMenu="window" id="Td7-aD-5lo">
|
||||
<items>
|
||||
<menuItem title="Minimize" keyEquivalent="m" id="OY7-WF-poV">
|
||||
<connections>
|
||||
<action selector="performMiniaturize:" target="-1" id="VwT-WD-YPe"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Zoom" id="R4o-n2-Eq4">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="performZoom:" target="-1" id="DIl-cC-cCs"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="eu3-7i-yIM"/>
|
||||
<menuItem title="Bring All to Front" id="LE2-aR-0XJ">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="arrangeInFront:" target="-1" id="DRN-fu-gQh"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Help" id="EPT-qC-fAb">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Help" systemMenu="help" id="rJ0-wn-3NY"/>
|
||||
</menuItem>
|
||||
</items>
|
||||
<point key="canvasLocation" x="142" y="-258"/>
|
||||
</menu>
|
||||
<window title="APP_NAME" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="QvC-M9-y7g" customClass="MainFlutterWindow" customModule="Runner" customModuleProvider="target">
|
||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
|
||||
<rect key="contentRect" x="335" y="390" width="800" height="600"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1577"/>
|
||||
<view key="contentView" wantsLayer="YES" id="EiT-Mj-1SZ">
|
||||
<rect key="frame" x="0.0" y="0.0" width="800" height="600"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</view>
|
||||
</window>
|
||||
</objects>
|
||||
</document>
|
@ -0,0 +1,13 @@
|
||||
WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES
|
||||
CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES
|
||||
CLANG_WARN_PRAGMA_PACK = YES
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES
|
||||
CLANG_WARN_COMMA = YES
|
||||
GCC_WARN_STRICT_SELECTOR_MATCH = YES
|
||||
CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES
|
||||
GCC_WARN_SHADOW = YES
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES
|
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>com.apple.security.app-sandbox</key>
|
||||
<true/>
|
||||
<key>com.apple.security.cs.allow-jit</key>
|
||||
<true/>
|
||||
<key>com.apple.security.network.server</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
@ -0,0 +1,32 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string></string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>$(PRODUCT_NAME)</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>$(FLUTTER_BUILD_NAME)</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>$(FLUTTER_BUILD_NUMBER)</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>$(PRODUCT_COPYRIGHT)</string>
|
||||
<key>NSMainNibFile</key>
|
||||
<string>MainMenu</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string>NSApplication</string>
|
||||
</dict>
|
||||
</plist>
|
@ -0,0 +1,19 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import Cocoa
|
||||
import FlutterMacOS
|
||||
|
||||
class MainFlutterWindow: NSWindow {
|
||||
override func awakeFromNib() {
|
||||
let flutterViewController = FlutterViewController()
|
||||
let windowFrame = self.frame
|
||||
self.contentViewController = flutterViewController
|
||||
self.setFrame(windowFrame, display: true)
|
||||
|
||||
RegisterGeneratedPlugins(registry: flutterViewController)
|
||||
|
||||
super.awakeFromNib()
|
||||
}
|
||||
}
|
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>com.apple.security.app-sandbox</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
90
flutter/dev/benchmarks/complex_layout/pubspec.yaml
Normal file
90
flutter/dev/benchmarks/complex_layout/pubspec.yaml
Normal file
@ -0,0 +1,90 @@
|
||||
name: complex_layout
|
||||
description: A benchmark of a relatively complex layout.
|
||||
|
||||
environment:
|
||||
sdk: ^3.7.0-0
|
||||
|
||||
dependencies:
|
||||
flutter:
|
||||
sdk: flutter
|
||||
flutter_driver:
|
||||
sdk: flutter
|
||||
|
||||
# To change the version of the gallery assets, edit
|
||||
# //packages/flutter_tools/lib/src/commands/update_packages.dart
|
||||
# and run
|
||||
# flutter update-packages --force-upgrade
|
||||
flutter_gallery_assets: 1.0.2
|
||||
|
||||
async: 2.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
boolean_selector: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
characters: 1.4.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
collection: 1.19.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
file: 7.0.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
matcher: 0.12.17 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
material_color_utilities: 0.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
meta: 1.16.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
path: 1.9.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
source_span: 1.10.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
stack_trace: 1.12.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
stream_channel: 2.1.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
string_scanner: 1.4.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
sync_http: 0.3.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
term_glyph: 1.2.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
test_api: 0.7.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
vector_math: 2.1.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
vm_service: 14.3.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
webdriver: 3.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
sdk: flutter
|
||||
test: 1.25.14
|
||||
integration_test:
|
||||
sdk: flutter
|
||||
|
||||
_fe_analyzer_shared: 76.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
analyzer: 6.11.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
args: 2.6.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
clock: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
convert: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
crypto: 3.0.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
fake_async: 1.3.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
frontend_server_client: 4.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
glob: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
http_multi_server: 3.2.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
http_parser: 4.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
io: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
js: 0.7.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
leak_tracker: 10.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
leak_tracker_flutter_testing: 3.0.9 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
leak_tracker_testing: 3.0.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
logging: 1.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
mime: 2.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
node_preamble: 2.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
package_config: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
pool: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
pub_semver: 2.1.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
shelf: 1.4.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
shelf_packages_handler: 3.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
shelf_static: 1.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
shelf_web_socket: 2.0.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
source_map_stack_trace: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
source_maps: 0.10.13 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
test_core: 0.6.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
typed_data: 1.4.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
watcher: 1.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
web: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
web_socket: 0.1.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
web_socket_channel: 3.0.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
webkit_inspection_protocol: 1.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
yaml: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
|
||||
flutter:
|
||||
uses-material-design: true
|
||||
assets:
|
||||
- packages/flutter_gallery_assets/people/square/ali.png
|
||||
- packages/flutter_gallery_assets/places/india_chettinad_silk_maker.png
|
||||
|
||||
# PUBSPEC CHECKSUM: 79bc
|
@ -0,0 +1,57 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter_driver/flutter_driver.dart';
|
||||
import 'package:test/test.dart' hide TypeMatcher, isInstanceOf;
|
||||
|
||||
void main() {
|
||||
group('scrolling performance test', () {
|
||||
late FlutterDriver driver;
|
||||
|
||||
setUpAll(() async {
|
||||
driver = await FlutterDriver.connect();
|
||||
|
||||
await driver.waitUntilFirstFrameRasterized();
|
||||
});
|
||||
|
||||
tearDownAll(() async {
|
||||
driver.close();
|
||||
});
|
||||
|
||||
Future<void> testScrollPerf(String listKey, String summaryName) async {
|
||||
// The slight initial delay avoids starting the timing during a
|
||||
// period of increased load on the device. Without this delay, the
|
||||
// benchmark has greater noise.
|
||||
// See: https://github.com/flutter/flutter/issues/19434
|
||||
await Future<void>.delayed(const Duration(milliseconds: 250));
|
||||
|
||||
final Timeline timeline = await driver.traceAction(() async {
|
||||
// Find the scrollable stock list
|
||||
final SerializableFinder list = find.byValueKey(listKey);
|
||||
expect(list, isNotNull);
|
||||
|
||||
// Scroll down
|
||||
for (int i = 0; i < 5; i += 1) {
|
||||
await driver.scroll(list, 0.0, -300.0, const Duration(milliseconds: 300));
|
||||
await Future<void>.delayed(const Duration(milliseconds: 500));
|
||||
}
|
||||
|
||||
// Scroll up
|
||||
for (int i = 0; i < 5; i += 1) {
|
||||
await driver.scroll(list, 0.0, 300.0, const Duration(milliseconds: 300));
|
||||
await Future<void>.delayed(const Duration(milliseconds: 500));
|
||||
}
|
||||
}, retainPriorEvents: true);
|
||||
|
||||
final TimelineSummary summary = TimelineSummary.summarize(timeline);
|
||||
await summary.writeTimelineToFile(summaryName, pretty: true);
|
||||
}
|
||||
|
||||
test('complex_layout_scroll_perf', () async {
|
||||
await testScrollPerf('complex-scroll-bad', 'complex_layout_scroll_perf');
|
||||
}, timeout: Timeout.none);
|
||||
});
|
||||
}
|
@ -0,0 +1,65 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter_driver/flutter_driver.dart';
|
||||
import 'package:test/test.dart' hide TypeMatcher, isInstanceOf;
|
||||
|
||||
void main() {
|
||||
group('scrolling performance test', () {
|
||||
late FlutterDriver driver;
|
||||
|
||||
setUpAll(() async {
|
||||
driver = await FlutterDriver.connect();
|
||||
|
||||
await driver.waitUntilFirstFrameRasterized();
|
||||
});
|
||||
|
||||
tearDownAll(() async {
|
||||
driver.close();
|
||||
});
|
||||
|
||||
Future<void> testScrollPerf(String listKey, String summaryName) async {
|
||||
// The slight initial delay avoids starting the timing during a
|
||||
// period of increased load on the device. Without this delay, the
|
||||
// benchmark has greater noise.
|
||||
// See: https://github.com/flutter/flutter/issues/19434
|
||||
await Future<void>.delayed(const Duration(milliseconds: 250));
|
||||
|
||||
await driver.forceGC();
|
||||
|
||||
final Timeline timeline = await driver.traceAction(() async {
|
||||
// Find the scrollable stock list
|
||||
final SerializableFinder list = find.byValueKey(listKey);
|
||||
expect(list, isNotNull);
|
||||
|
||||
// Scroll down
|
||||
for (int i = 0; i < 5; i += 1) {
|
||||
await driver.scroll(list, 0.0, -300.0, const Duration(milliseconds: 300));
|
||||
await Future<void>.delayed(const Duration(milliseconds: 500));
|
||||
}
|
||||
|
||||
// Scroll up
|
||||
for (int i = 0; i < 5; i += 1) {
|
||||
await driver.scroll(list, 0.0, 300.0, const Duration(milliseconds: 300));
|
||||
await Future<void>.delayed(const Duration(milliseconds: 500));
|
||||
}
|
||||
}, retainPriorEvents: true);
|
||||
|
||||
final TimelineSummary summary = TimelineSummary.summarize(timeline);
|
||||
await summary.writeTimelineToFile(summaryName, pretty: true);
|
||||
}
|
||||
|
||||
test('complex_layout_scroll_perf', () async {
|
||||
await testScrollPerf('complex-scroll', 'complex_layout_scroll_perf');
|
||||
}, timeout: Timeout.none);
|
||||
|
||||
test('tiles_scroll_perf', () async {
|
||||
await driver.tap(find.byTooltip('Open navigation menu'));
|
||||
await driver.tap(find.byValueKey('scroll-switcher'));
|
||||
await testScrollPerf('tiles-scroll', 'tiles_scroll_perf');
|
||||
}, timeout: Timeout.none);
|
||||
});
|
||||
}
|
@ -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.
|
||||
|
||||
import 'package:complex_layout/main.dart' as app;
|
||||
import 'package:flutter_driver/driver_extension.dart';
|
||||
|
||||
void main() {
|
||||
enableFlutterDriverExtension();
|
||||
app.main();
|
||||
}
|
@ -0,0 +1,88 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:flutter_driver/flutter_driver.dart';
|
||||
import 'package:path/path.dart' as p;
|
||||
import 'package:test/test.dart' hide TypeMatcher, isInstanceOf;
|
||||
|
||||
void main() {
|
||||
group('semantics performance test', () {
|
||||
late FlutterDriver driver;
|
||||
|
||||
setUpAll(() async {
|
||||
// Turn off any accessibility services that may be running. The purpose of
|
||||
// the test is to measure the time it takes to create the initial
|
||||
// semantics tree in isolation. If accessibility services are on, the
|
||||
// semantics tree gets generated during the first frame and we can't
|
||||
// measure it in isolation.
|
||||
final Process run = await Process.start(_adbPath(), const <String>[
|
||||
'shell',
|
||||
'settings',
|
||||
'put',
|
||||
'secure',
|
||||
'enabled_accessibility_services',
|
||||
'null',
|
||||
]);
|
||||
await run.exitCode;
|
||||
|
||||
driver = await FlutterDriver.connect(printCommunication: true);
|
||||
});
|
||||
|
||||
tearDownAll(() async {
|
||||
driver.close();
|
||||
});
|
||||
|
||||
test('initial tree creation', () async {
|
||||
// Let app become fully idle.
|
||||
await Future<void>.delayed(const Duration(seconds: 2));
|
||||
|
||||
await driver.forceGC();
|
||||
|
||||
final Timeline timeline = await driver.traceAction(() async {
|
||||
expect(
|
||||
await driver.setSemantics(true),
|
||||
isTrue,
|
||||
reason:
|
||||
'Could not toggle semantics to on because semantics were already '
|
||||
'on, but the test needs to toggle semantics to measure the initial '
|
||||
'semantics tree generation in isolation.',
|
||||
);
|
||||
});
|
||||
|
||||
final Iterable<TimelineEvent>? semanticsEvents = timeline.events?.where(
|
||||
(TimelineEvent event) => event.name == 'SEMANTICS',
|
||||
);
|
||||
if (semanticsEvents?.length != 2) {
|
||||
fail(
|
||||
'Expected exactly two "SEMANTICS" events, got ${semanticsEvents?.length}:\n$semanticsEvents',
|
||||
);
|
||||
}
|
||||
final Duration semanticsTreeCreation = Duration(
|
||||
microseconds:
|
||||
semanticsEvents!.last.timestampMicros! - semanticsEvents.first.timestampMicros!,
|
||||
);
|
||||
|
||||
final String jsonEncoded = json.encode(<String, dynamic>{
|
||||
'initialSemanticsTreeCreation': semanticsTreeCreation.inMilliseconds,
|
||||
});
|
||||
File(
|
||||
p.join(testOutputsDirectory, 'complex_layout_semantics_perf.json'),
|
||||
).writeAsStringSync(jsonEncoded);
|
||||
}, timeout: Timeout.none);
|
||||
});
|
||||
}
|
||||
|
||||
String _adbPath() {
|
||||
final String? androidHome =
|
||||
Platform.environment['ANDROID_HOME'] ?? Platform.environment['ANDROID_SDK_ROOT'];
|
||||
if (androidHome == null) {
|
||||
return 'adb';
|
||||
} else {
|
||||
return p.join(androidHome, 'platform-tools', 'adb');
|
||||
}
|
||||
}
|
121
flutter/dev/benchmarks/complex_layout/windows/runner/Runner.rc
Normal file
121
flutter/dev/benchmarks/complex_layout/windows/runner/Runner.rc
Normal file
@ -0,0 +1,121 @@
|
||||
// Microsoft Visual C++ generated resource script.
|
||||
//
|
||||
#pragma code_page(65001)
|
||||
#include "resource.h"
|
||||
|
||||
#define APSTUDIO_READONLY_SYMBOLS
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 2 resource.
|
||||
//
|
||||
#include "winres.h"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#undef APSTUDIO_READONLY_SYMBOLS
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// English (United States) resources
|
||||
|
||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// TEXTINCLUDE
|
||||
//
|
||||
|
||||
1 TEXTINCLUDE
|
||||
BEGIN
|
||||
"resource.h\0"
|
||||
END
|
||||
|
||||
2 TEXTINCLUDE
|
||||
BEGIN
|
||||
"#include ""winres.h""\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
3 TEXTINCLUDE
|
||||
BEGIN
|
||||
"\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Icon
|
||||
//
|
||||
|
||||
// Icon with lowest ID value placed first to ensure application icon
|
||||
// remains consistent on all systems.
|
||||
// IDI_APP_ICON ICON "resources\\app_icon.ico"
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Version
|
||||
//
|
||||
|
||||
#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD)
|
||||
#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD
|
||||
#else
|
||||
#define VERSION_AS_NUMBER 1,0,0,0
|
||||
#endif
|
||||
|
||||
#if defined(FLUTTER_VERSION)
|
||||
#define VERSION_AS_STRING FLUTTER_VERSION
|
||||
#else
|
||||
#define VERSION_AS_STRING "1.0.0"
|
||||
#endif
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION VERSION_AS_NUMBER
|
||||
PRODUCTVERSION VERSION_AS_NUMBER
|
||||
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS VS_FF_DEBUG
|
||||
#else
|
||||
FILEFLAGS 0x0L
|
||||
#endif
|
||||
FILEOS VOS__WINDOWS32
|
||||
FILETYPE VFT_APP
|
||||
FILESUBTYPE 0x0L
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904e4"
|
||||
BEGIN
|
||||
VALUE "CompanyName", "com.yourcompany" "\0"
|
||||
VALUE "FileDescription", "complex_layout" "\0"
|
||||
VALUE "FileVersion", VERSION_AS_STRING "\0"
|
||||
VALUE "InternalName", "complex_layout" "\0"
|
||||
VALUE "LegalCopyright", "Copyright (C) 2022 com.yourcompany. All rights reserved." "\0"
|
||||
VALUE "OriginalFilename", "complex_layout.exe" "\0"
|
||||
VALUE "ProductName", "complex_layout" "\0"
|
||||
VALUE "ProductVersion", VERSION_AS_STRING "\0"
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x409, 1252
|
||||
END
|
||||
END
|
||||
|
||||
#endif // English (United States) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
#ifndef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 3 resource.
|
||||
//
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#endif // not APSTUDIO_INVOKED
|
@ -0,0 +1,65 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#include "flutter_window.h"
|
||||
|
||||
#include <optional>
|
||||
|
||||
#include "flutter/generated_plugin_registrant.h"
|
||||
|
||||
FlutterWindow::FlutterWindow(const flutter::DartProject& project)
|
||||
: project_(project) {}
|
||||
|
||||
FlutterWindow::~FlutterWindow() {}
|
||||
|
||||
bool FlutterWindow::OnCreate() {
|
||||
if (!Win32Window::OnCreate()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
RECT frame = GetClientArea();
|
||||
|
||||
// The size here must match the window dimensions to avoid unnecessary surface
|
||||
// creation / destruction in the startup path.
|
||||
flutter_controller_ = std::make_unique<flutter::FlutterViewController>(
|
||||
frame.right - frame.left, frame.bottom - frame.top, project_);
|
||||
// Ensure that basic setup of the controller was successful.
|
||||
if (!flutter_controller_->engine() || !flutter_controller_->view()) {
|
||||
return false;
|
||||
}
|
||||
RegisterPlugins(flutter_controller_->engine());
|
||||
SetChildContent(flutter_controller_->view()->GetNativeWindow());
|
||||
return true;
|
||||
}
|
||||
|
||||
void FlutterWindow::OnDestroy() {
|
||||
if (flutter_controller_) {
|
||||
flutter_controller_ = nullptr;
|
||||
}
|
||||
|
||||
Win32Window::OnDestroy();
|
||||
}
|
||||
|
||||
LRESULT
|
||||
FlutterWindow::MessageHandler(HWND hwnd, UINT const message,
|
||||
WPARAM const wparam,
|
||||
LPARAM const lparam) noexcept {
|
||||
// Give Flutter, including plugins, an opportunity to handle window messages.
|
||||
if (flutter_controller_) {
|
||||
std::optional<LRESULT> result =
|
||||
flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam,
|
||||
lparam);
|
||||
if (result) {
|
||||
return *result;
|
||||
}
|
||||
}
|
||||
|
||||
switch (message) {
|
||||
case WM_FONTCHANGE:
|
||||
flutter_controller_->engine()->ReloadSystemFonts();
|
||||
break;
|
||||
}
|
||||
|
||||
return Win32Window::MessageHandler(hwnd, message, wparam, lparam);
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#ifndef RUNNER_FLUTTER_WINDOW_H_
|
||||
#define RUNNER_FLUTTER_WINDOW_H_
|
||||
|
||||
#include <flutter/dart_project.h>
|
||||
#include <flutter/flutter_view_controller.h>
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include "win32_window.h"
|
||||
|
||||
// A window that does nothing but host a Flutter view.
|
||||
class FlutterWindow : public Win32Window {
|
||||
public:
|
||||
// Creates a new FlutterWindow hosting a Flutter view running |project|.
|
||||
explicit FlutterWindow(const flutter::DartProject& project);
|
||||
virtual ~FlutterWindow();
|
||||
|
||||
protected:
|
||||
// Win32Window:
|
||||
bool OnCreate() override;
|
||||
void OnDestroy() override;
|
||||
LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam,
|
||||
LPARAM const lparam) noexcept override;
|
||||
|
||||
private:
|
||||
// The project to run.
|
||||
flutter::DartProject project_;
|
||||
|
||||
// The Flutter instance hosted by this window.
|
||||
std::unique_ptr<flutter::FlutterViewController> flutter_controller_;
|
||||
};
|
||||
|
||||
#endif // RUNNER_FLUTTER_WINDOW_H_
|
@ -0,0 +1,47 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#include <flutter/dart_project.h>
|
||||
#include <flutter/flutter_view_controller.h>
|
||||
#include <windows.h>
|
||||
|
||||
#include "flutter_window.h"
|
||||
#include "utils.h"
|
||||
|
||||
int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
|
||||
_In_ wchar_t *command_line, _In_ int show_command) {
|
||||
// Attach to console when present (e.g., 'flutter run') or create a
|
||||
// new console when running with a debugger.
|
||||
if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) {
|
||||
CreateAndAttachConsole();
|
||||
}
|
||||
|
||||
// Initialize COM, so that it is available for use in the library and/or
|
||||
// plugins.
|
||||
::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED);
|
||||
|
||||
flutter::DartProject project(L"data");
|
||||
|
||||
std::vector<std::string> command_line_arguments =
|
||||
GetCommandLineArguments();
|
||||
|
||||
project.set_dart_entrypoint_arguments(std::move(command_line_arguments));
|
||||
|
||||
FlutterWindow window(project);
|
||||
Win32Window::Point origin(10, 10);
|
||||
Win32Window::Size size(1280, 720);
|
||||
if (!window.CreateAndShow(L"complex_layout", origin, size)) {
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
window.SetQuitOnClose(true);
|
||||
|
||||
::MSG msg;
|
||||
while (::GetMessage(&msg, nullptr, 0, 0)) {
|
||||
::TranslateMessage(&msg);
|
||||
::DispatchMessage(&msg);
|
||||
}
|
||||
|
||||
::CoUninitialize();
|
||||
return EXIT_SUCCESS;
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
//{{NO_DEPENDENCIES}}
|
||||
// Microsoft Visual C++ generated include file.
|
||||
// Used by Runner.rc
|
||||
//
|
||||
#define IDI_APP_ICON 101
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 102
|
||||
#define _APS_NEXT_COMMAND_VALUE 40001
|
||||
#define _APS_NEXT_CONTROL_VALUE 1001
|
||||
#define _APS_NEXT_SYMED_VALUE 101
|
||||
#endif
|
||||
#endif
|
@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
|
||||
<application xmlns="urn:schemas-microsoft-com:asm.v3">
|
||||
<windowsSettings>
|
||||
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness>
|
||||
</windowsSettings>
|
||||
</application>
|
||||
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
|
||||
<application>
|
||||
<!-- Windows 10 and Windows 11 -->
|
||||
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
|
||||
</application>
|
||||
</compatibility>
|
||||
</assembly>
|
@ -0,0 +1,68 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#include "utils.h"
|
||||
|
||||
#include <flutter_windows.h>
|
||||
#include <io.h>
|
||||
#include <stdio.h>
|
||||
#include <windows.h>
|
||||
|
||||
#include <iostream>
|
||||
|
||||
void CreateAndAttachConsole() {
|
||||
if (::AllocConsole()) {
|
||||
FILE *unused;
|
||||
if (freopen_s(&unused, "CONOUT$", "w", stdout)) {
|
||||
_dup2(_fileno(stdout), 1);
|
||||
}
|
||||
if (freopen_s(&unused, "CONOUT$", "w", stderr)) {
|
||||
_dup2(_fileno(stdout), 2);
|
||||
}
|
||||
std::ios::sync_with_stdio();
|
||||
FlutterDesktopResyncOutputStreams();
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<std::string> GetCommandLineArguments() {
|
||||
// Convert the UTF-16 command line arguments to UTF-8 for the Engine to use.
|
||||
int argc;
|
||||
wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc);
|
||||
if (argv == nullptr) {
|
||||
return std::vector<std::string>();
|
||||
}
|
||||
|
||||
std::vector<std::string> command_line_arguments;
|
||||
|
||||
// Skip the first argument as it's the binary name.
|
||||
for (int i = 1; i < argc; i++) {
|
||||
command_line_arguments.push_back(Utf8FromUtf16(argv[i]));
|
||||
}
|
||||
|
||||
::LocalFree(argv);
|
||||
|
||||
return command_line_arguments;
|
||||
}
|
||||
|
||||
std::string Utf8FromUtf16(const wchar_t* utf16_string) {
|
||||
if (utf16_string == nullptr) {
|
||||
return std::string();
|
||||
}
|
||||
unsigned int target_length = ::WideCharToMultiByte(
|
||||
CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string,
|
||||
-1, nullptr, 0, nullptr, nullptr)
|
||||
-1; // remove the trailing null character
|
||||
std::string utf8_string;
|
||||
if (target_length == 0 || target_length > utf8_string.max_size()) {
|
||||
return utf8_string;
|
||||
}
|
||||
utf8_string.resize(target_length);
|
||||
int converted_length = ::WideCharToMultiByte(
|
||||
CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string,
|
||||
-1, utf8_string.data(), target_length, nullptr, nullptr);
|
||||
if (converted_length == 0) {
|
||||
return std::string();
|
||||
}
|
||||
return utf8_string;
|
||||
}
|
23
flutter/dev/benchmarks/complex_layout/windows/runner/utils.h
Normal file
23
flutter/dev/benchmarks/complex_layout/windows/runner/utils.h
Normal file
@ -0,0 +1,23 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#ifndef RUNNER_UTILS_H_
|
||||
#define RUNNER_UTILS_H_
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
// Creates a console for the process, and redirects stdout and stderr to
|
||||
// it for both the runner and the Flutter library.
|
||||
void CreateAndAttachConsole();
|
||||
|
||||
// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string
|
||||
// encoded in UTF-8. Returns an empty std::string on failure.
|
||||
std::string Utf8FromUtf16(const wchar_t* utf16_string);
|
||||
|
||||
// Gets the command line arguments passed in as a std::vector<std::string>,
|
||||
// encoded in UTF-8. Returns an empty std::vector<std::string> on failure.
|
||||
std::vector<std::string> GetCommandLineArguments();
|
||||
|
||||
#endif // RUNNER_UTILS_H_
|
@ -0,0 +1,249 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#include "win32_window.h"
|
||||
|
||||
#include <flutter_windows.h>
|
||||
|
||||
#include "resource.h"
|
||||
|
||||
namespace {
|
||||
|
||||
constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW";
|
||||
|
||||
// The number of Win32Window objects that currently exist.
|
||||
static int g_active_window_count = 0;
|
||||
|
||||
using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd);
|
||||
|
||||
// Scale helper to convert logical scaler values to physical using passed in
|
||||
// scale factor
|
||||
int Scale(int source, double scale_factor) {
|
||||
return static_cast<int>(source * scale_factor);
|
||||
}
|
||||
|
||||
// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module.
|
||||
// This API is only needed for PerMonitor V1 awareness mode.
|
||||
void EnableFullDpiSupportIfAvailable(HWND hwnd) {
|
||||
HMODULE user32_module = LoadLibraryA("User32.dll");
|
||||
if (!user32_module) {
|
||||
return;
|
||||
}
|
||||
auto enable_non_client_dpi_scaling =
|
||||
reinterpret_cast<EnableNonClientDpiScaling*>(
|
||||
GetProcAddress(user32_module, "EnableNonClientDpiScaling"));
|
||||
if (enable_non_client_dpi_scaling != nullptr) {
|
||||
enable_non_client_dpi_scaling(hwnd);
|
||||
}
|
||||
FreeLibrary(user32_module);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
// Manages the Win32Window's window class registration.
|
||||
class WindowClassRegistrar {
|
||||
public:
|
||||
~WindowClassRegistrar() = default;
|
||||
|
||||
// Returns the singleton registrar instance.
|
||||
static WindowClassRegistrar* GetInstance() {
|
||||
if (!instance_) {
|
||||
instance_ = new WindowClassRegistrar();
|
||||
}
|
||||
return instance_;
|
||||
}
|
||||
|
||||
// Returns the name of the window class, registering the class if it hasn't
|
||||
// previously been registered.
|
||||
const wchar_t* GetWindowClass();
|
||||
|
||||
// Unregisters the window class. Should only be called if there are no
|
||||
// instances of the window.
|
||||
void UnregisterWindowClass();
|
||||
|
||||
private:
|
||||
WindowClassRegistrar() = default;
|
||||
|
||||
static WindowClassRegistrar* instance_;
|
||||
|
||||
bool class_registered_ = false;
|
||||
};
|
||||
|
||||
WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr;
|
||||
|
||||
const wchar_t* WindowClassRegistrar::GetWindowClass() {
|
||||
if (!class_registered_) {
|
||||
WNDCLASS window_class{};
|
||||
window_class.hCursor = LoadCursor(nullptr, IDC_ARROW);
|
||||
window_class.lpszClassName = kWindowClassName;
|
||||
window_class.style = CS_HREDRAW | CS_VREDRAW;
|
||||
window_class.cbClsExtra = 0;
|
||||
window_class.cbWndExtra = 0;
|
||||
window_class.hInstance = GetModuleHandle(nullptr);
|
||||
window_class.hIcon =
|
||||
LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON));
|
||||
window_class.hbrBackground = 0;
|
||||
window_class.lpszMenuName = nullptr;
|
||||
window_class.lpfnWndProc = Win32Window::WndProc;
|
||||
RegisterClass(&window_class);
|
||||
class_registered_ = true;
|
||||
}
|
||||
return kWindowClassName;
|
||||
}
|
||||
|
||||
void WindowClassRegistrar::UnregisterWindowClass() {
|
||||
UnregisterClass(kWindowClassName, nullptr);
|
||||
class_registered_ = false;
|
||||
}
|
||||
|
||||
Win32Window::Win32Window() {
|
||||
++g_active_window_count;
|
||||
}
|
||||
|
||||
Win32Window::~Win32Window() {
|
||||
--g_active_window_count;
|
||||
Destroy();
|
||||
}
|
||||
|
||||
bool Win32Window::CreateAndShow(const std::wstring& title,
|
||||
const Point& origin,
|
||||
const Size& size) {
|
||||
Destroy();
|
||||
|
||||
const wchar_t* window_class =
|
||||
WindowClassRegistrar::GetInstance()->GetWindowClass();
|
||||
|
||||
const POINT target_point = {static_cast<LONG>(origin.x),
|
||||
static_cast<LONG>(origin.y)};
|
||||
HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST);
|
||||
UINT dpi = FlutterDesktopGetDpiForMonitor(monitor);
|
||||
double scale_factor = dpi / 96.0;
|
||||
|
||||
HWND window = CreateWindow(
|
||||
window_class, title.c_str(), WS_OVERLAPPEDWINDOW | WS_VISIBLE,
|
||||
Scale(origin.x, scale_factor), Scale(origin.y, scale_factor),
|
||||
Scale(size.width, scale_factor), Scale(size.height, scale_factor),
|
||||
nullptr, nullptr, GetModuleHandle(nullptr), this);
|
||||
|
||||
if (!window) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return OnCreate();
|
||||
}
|
||||
|
||||
// static
|
||||
LRESULT CALLBACK Win32Window::WndProc(HWND const window,
|
||||
UINT const message,
|
||||
WPARAM const wparam,
|
||||
LPARAM const lparam) noexcept {
|
||||
if (message == WM_NCCREATE) {
|
||||
auto window_struct = reinterpret_cast<CREATESTRUCT*>(lparam);
|
||||
SetWindowLongPtr(window, GWLP_USERDATA,
|
||||
reinterpret_cast<LONG_PTR>(window_struct->lpCreateParams));
|
||||
|
||||
auto that = static_cast<Win32Window*>(window_struct->lpCreateParams);
|
||||
EnableFullDpiSupportIfAvailable(window);
|
||||
that->window_handle_ = window;
|
||||
} else if (Win32Window* that = GetThisFromHandle(window)) {
|
||||
return that->MessageHandler(window, message, wparam, lparam);
|
||||
}
|
||||
|
||||
return DefWindowProc(window, message, wparam, lparam);
|
||||
}
|
||||
|
||||
LRESULT
|
||||
Win32Window::MessageHandler(HWND hwnd,
|
||||
UINT const message,
|
||||
WPARAM const wparam,
|
||||
LPARAM const lparam) noexcept {
|
||||
switch (message) {
|
||||
case WM_DESTROY:
|
||||
window_handle_ = nullptr;
|
||||
Destroy();
|
||||
if (quit_on_close_) {
|
||||
PostQuitMessage(0);
|
||||
}
|
||||
return 0;
|
||||
|
||||
case WM_DPICHANGED: {
|
||||
auto newRectSize = reinterpret_cast<RECT*>(lparam);
|
||||
LONG newWidth = newRectSize->right - newRectSize->left;
|
||||
LONG newHeight = newRectSize->bottom - newRectSize->top;
|
||||
|
||||
SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth,
|
||||
newHeight, SWP_NOZORDER | SWP_NOACTIVATE);
|
||||
|
||||
return 0;
|
||||
}
|
||||
case WM_SIZE: {
|
||||
RECT rect = GetClientArea();
|
||||
if (child_content_ != nullptr) {
|
||||
// Size and position the child window.
|
||||
MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left,
|
||||
rect.bottom - rect.top, TRUE);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
case WM_ACTIVATE:
|
||||
if (child_content_ != nullptr) {
|
||||
SetFocus(child_content_);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
return DefWindowProc(window_handle_, message, wparam, lparam);
|
||||
}
|
||||
|
||||
void Win32Window::Destroy() {
|
||||
OnDestroy();
|
||||
|
||||
if (window_handle_) {
|
||||
DestroyWindow(window_handle_);
|
||||
window_handle_ = nullptr;
|
||||
}
|
||||
if (g_active_window_count == 0) {
|
||||
WindowClassRegistrar::GetInstance()->UnregisterWindowClass();
|
||||
}
|
||||
}
|
||||
|
||||
Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept {
|
||||
return reinterpret_cast<Win32Window*>(
|
||||
GetWindowLongPtr(window, GWLP_USERDATA));
|
||||
}
|
||||
|
||||
void Win32Window::SetChildContent(HWND content) {
|
||||
child_content_ = content;
|
||||
SetParent(content, window_handle_);
|
||||
RECT frame = GetClientArea();
|
||||
|
||||
MoveWindow(content, frame.left, frame.top, frame.right - frame.left,
|
||||
frame.bottom - frame.top, true);
|
||||
|
||||
SetFocus(child_content_);
|
||||
}
|
||||
|
||||
RECT Win32Window::GetClientArea() {
|
||||
RECT frame;
|
||||
GetClientRect(window_handle_, &frame);
|
||||
return frame;
|
||||
}
|
||||
|
||||
HWND Win32Window::GetHandle() {
|
||||
return window_handle_;
|
||||
}
|
||||
|
||||
void Win32Window::SetQuitOnClose(bool quit_on_close) {
|
||||
quit_on_close_ = quit_on_close;
|
||||
}
|
||||
|
||||
bool Win32Window::OnCreate() {
|
||||
// No-op; provided for subclasses.
|
||||
return true;
|
||||
}
|
||||
|
||||
void Win32Window::OnDestroy() {
|
||||
// No-op; provided for subclasses.
|
||||
}
|
@ -0,0 +1,102 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#ifndef RUNNER_WIN32_WINDOW_H_
|
||||
#define RUNNER_WIN32_WINDOW_H_
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
#include <functional>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
// A class abstraction for a high DPI-aware Win32 Window. Intended to be
|
||||
// inherited from by classes that wish to specialize with custom
|
||||
// rendering and input handling
|
||||
class Win32Window {
|
||||
public:
|
||||
struct Point {
|
||||
unsigned int x;
|
||||
unsigned int y;
|
||||
Point(unsigned int x, unsigned int y) : x(x), y(y) {}
|
||||
};
|
||||
|
||||
struct Size {
|
||||
unsigned int width;
|
||||
unsigned int height;
|
||||
Size(unsigned int width, unsigned int height)
|
||||
: width(width), height(height) {}
|
||||
};
|
||||
|
||||
Win32Window();
|
||||
virtual ~Win32Window();
|
||||
|
||||
// Creates and shows a win32 window with |title| and position and size using
|
||||
// |origin| and |size|. New windows are created on the default monitor. Window
|
||||
// sizes are specified to the OS in physical pixels, hence to ensure a
|
||||
// consistent size to will treat the width height passed in to this function
|
||||
// as logical pixels and scale to appropriate for the default monitor. Returns
|
||||
// true if the window was created successfully.
|
||||
bool CreateAndShow(const std::wstring& title,
|
||||
const Point& origin,
|
||||
const Size& size);
|
||||
|
||||
// Release OS resources associated with window.
|
||||
void Destroy();
|
||||
|
||||
// Inserts |content| into the window tree.
|
||||
void SetChildContent(HWND content);
|
||||
|
||||
// Returns the backing Window handle to enable clients to set icon and other
|
||||
// window properties. Returns nullptr if the window has been destroyed.
|
||||
HWND GetHandle();
|
||||
|
||||
// If true, closing this window will quit the application.
|
||||
void SetQuitOnClose(bool quit_on_close);
|
||||
|
||||
// Return a RECT representing the bounds of the current client area.
|
||||
RECT GetClientArea();
|
||||
|
||||
protected:
|
||||
// Processes and route salient window messages for mouse handling,
|
||||
// size change and DPI. Delegates handling of these to member overloads that
|
||||
// inheriting classes can handle.
|
||||
virtual LRESULT MessageHandler(HWND window,
|
||||
UINT const message,
|
||||
WPARAM const wparam,
|
||||
LPARAM const lparam) noexcept;
|
||||
|
||||
// Called when CreateAndShow is called, allowing subclass window-related
|
||||
// setup. Subclasses should return false if setup fails.
|
||||
virtual bool OnCreate();
|
||||
|
||||
// Called when Destroy is called.
|
||||
virtual void OnDestroy();
|
||||
|
||||
private:
|
||||
friend class WindowClassRegistrar;
|
||||
|
||||
// OS callback called by message pump. Handles the WM_NCCREATE message which
|
||||
// is passed when the non-client area is being created and enables automatic
|
||||
// non-client DPI scaling so that the non-client area automatically
|
||||
// responds to changes in DPI. All other messages are handled by
|
||||
// MessageHandler.
|
||||
static LRESULT CALLBACK WndProc(HWND const window,
|
||||
UINT const message,
|
||||
WPARAM const wparam,
|
||||
LPARAM const lparam) noexcept;
|
||||
|
||||
// Retrieves a class instance pointer for |window|
|
||||
static Win32Window* GetThisFromHandle(HWND const window) noexcept;
|
||||
|
||||
bool quit_on_close_ = false;
|
||||
|
||||
// window handle for top level window.
|
||||
HWND window_handle_ = nullptr;
|
||||
|
||||
// window handle for hosted content.
|
||||
HWND child_content_ = nullptr;
|
||||
};
|
||||
|
||||
#endif // RUNNER_WIN32_WINDOW_H_
|
36
flutter/dev/benchmarks/macrobenchmarks/android/build.gradle
Normal file
36
flutter/dev/benchmarks/macrobenchmarks/android/build.gradle
Normal file
@ -0,0 +1,36 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
// 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()
|
||||
}
|
||||
}
|
||||
|
||||
Directory newBuildDir = rootProject.layout.buildDirectory.dir("../../build").get()
|
||||
rootProject.layout.buildDirectory.value(newBuildDir)
|
||||
|
||||
subprojects {
|
||||
def newSubprojectBuildDir = newBuildDir.dir(project.name)
|
||||
project.layout.buildDirectory.value(newSubprojectBuildDir)
|
||||
}
|
||||
subprojects {
|
||||
project.evaluationDependsOn(':app')
|
||||
dependencyLocking {
|
||||
ignoredDependencies.add('io.flutter:*')
|
||||
lockFile = file("${rootProject.projectDir}/project-${project.name}.lockfile")
|
||||
if (!project.hasProperty('local-engine-repo')) {
|
||||
lockAllConfigurations()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tasks.register("clean", Delete) {
|
||||
delete rootProject.layout.buildDirectory
|
||||
}
|
@ -0,0 +1,153 @@
|
||||
# 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.7.0=classpath
|
||||
androidx.databinding:databinding-compiler-common:8.7.0=classpath
|
||||
com.android.application:com.android.application.gradle.plugin:8.7.0=classpath
|
||||
com.android.databinding:baseLibrary:8.7.0=classpath
|
||||
com.android.tools.analytics-library:crash:31.7.0=classpath
|
||||
com.android.tools.analytics-library:protos:31.7.0=classpath
|
||||
com.android.tools.analytics-library:shared:31.7.0=classpath
|
||||
com.android.tools.analytics-library:tracker:31.7.0=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.7.0-12006047=classpath
|
||||
com.android.tools.build:aaptcompiler:8.7.0=classpath
|
||||
com.android.tools.build:apksig:8.7.0=classpath
|
||||
com.android.tools.build:apkzlib:8.7.0=classpath
|
||||
com.android.tools.build:builder-model:8.7.0=classpath
|
||||
com.android.tools.build:builder-test-api:8.7.0=classpath
|
||||
com.android.tools.build:builder:8.7.0=classpath
|
||||
com.android.tools.build:bundletool:1.17.1=classpath
|
||||
com.android.tools.build:gradle-api:8.7.0=classpath
|
||||
com.android.tools.build:gradle-settings-api:8.7.0=classpath
|
||||
com.android.tools.build:gradle:8.7.0=classpath
|
||||
com.android.tools.build:manifest-merger:31.7.0=classpath
|
||||
com.android.tools.build:transform-api:2.0.0-deprecated-use-gradle-api=classpath
|
||||
com.android.tools.ddms:ddmlib:31.7.0=classpath
|
||||
com.android.tools.layoutlib:layoutlib-api:31.7.0=classpath
|
||||
com.android.tools.lint:lint-model:31.7.0=classpath
|
||||
com.android.tools.lint:lint-typedef-remover:31.7.0=classpath
|
||||
com.android.tools.utp:android-device-provider-ddmlib-proto:31.7.0=classpath
|
||||
com.android.tools.utp:android-device-provider-gradle-proto:31.7.0=classpath
|
||||
com.android.tools.utp:android-device-provider-profile-proto:31.7.0=classpath
|
||||
com.android.tools.utp:android-test-plugin-host-additional-test-output-proto:31.7.0=classpath
|
||||
com.android.tools.utp:android-test-plugin-host-apk-installer-proto:31.7.0=classpath
|
||||
com.android.tools.utp:android-test-plugin-host-coverage-proto:31.7.0=classpath
|
||||
com.android.tools.utp:android-test-plugin-host-emulator-control-proto:31.7.0=classpath
|
||||
com.android.tools.utp:android-test-plugin-host-logcat-proto:31.7.0=classpath
|
||||
com.android.tools.utp:android-test-plugin-host-retention-proto:31.7.0=classpath
|
||||
com.android.tools.utp:android-test-plugin-result-listener-gradle-proto:31.7.0=classpath
|
||||
com.android.tools:annotations:31.7.0=classpath
|
||||
com.android.tools:common:31.7.0=classpath
|
||||
com.android.tools:dvlib:31.7.0=classpath
|
||||
com.android.tools:repository:31.7.0=classpath
|
||||
com.android.tools:sdk-common:31.7.0=classpath
|
||||
com.android.tools:sdklib:31.7.0=classpath
|
||||
com.android:signflinger:8.7.0=classpath
|
||||
com.android:zipflinger:8.7.0=classpath
|
||||
com.google.android:annotations:4.1.1.4=classpath
|
||||
com.google.api.grpc:proto-google-common-protos:2.17.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.10.1=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.18.0=classpath
|
||||
com.google.flatbuffers:flatbuffers-java:1.12.0=classpath
|
||||
com.google.guava:failureaccess:1.0.1=classpath
|
||||
com.google.guava:guava:32.0.1-jre=classpath
|
||||
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=classpath
|
||||
com.google.j2objc:j2objc-annotations:2.8=classpath
|
||||
com.google.jimfs:jimfs:1.1=classpath
|
||||
com.google.protobuf:protobuf-java-util:3.22.3=classpath
|
||||
com.google.protobuf:protobuf-java:3.22.3=classpath
|
||||
com.google.testing.platform:core-proto:0.0.9-alpha02=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.13.0=classpath
|
||||
commons-logging:commons-logging:1.2=classpath
|
||||
io.grpc:grpc-api:1.57.0=classpath
|
||||
io.grpc:grpc-context:1.57.0=classpath
|
||||
io.grpc:grpc-core:1.57.0=classpath
|
||||
io.grpc:grpc-netty:1.57.0=classpath
|
||||
io.grpc:grpc-protobuf-lite:1.57.0=classpath
|
||||
io.grpc:grpc-protobuf:1.57.0=classpath
|
||||
io.grpc:grpc-stub:1.57.0=classpath
|
||||
io.netty:netty-buffer:4.1.93.Final=classpath
|
||||
io.netty:netty-codec-http2:4.1.93.Final=classpath
|
||||
io.netty:netty-codec-http:4.1.93.Final=classpath
|
||||
io.netty:netty-codec-socks:4.1.93.Final=classpath
|
||||
io.netty:netty-codec:4.1.93.Final=classpath
|
||||
io.netty:netty-common:4.1.93.Final=classpath
|
||||
io.netty:netty-handler-proxy:4.1.93.Final=classpath
|
||||
io.netty:netty-handler:4.1.93.Final=classpath
|
||||
io.netty:netty-resolver:4.1.93.Final=classpath
|
||||
io.netty:netty-transport-native-unix-common:4.1.93.Final=classpath
|
||||
io.netty:netty-transport:4.1.93.Final=classpath
|
||||
io.perfmark:perfmark-api:0.26.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.77=classpath
|
||||
org.bouncycastle:bcprov-jdk18on:1.77=classpath
|
||||
org.bouncycastle:bcutil-jdk18on:1.77=classpath
|
||||
org.checkerframework:checker-qual:3.33.0=classpath
|
||||
org.codehaus.mojo:animal-sniffer-annotations:1.23=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.intellij.deps:trove4j:1.0.20200330=classpath
|
||||
org.jetbrains.kotlin.android:org.jetbrains.kotlin.android.gradle.plugin:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-android-extensions:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-annotation-processing-gradle:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-build-common:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-compiler-runner:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-daemon-client:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-daemon-embeddable:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-api:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-idea-proto:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-idea:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-model:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-klib-commonizer-api:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-native-utils:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-project-model:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-reflect:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-scripting-common:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-scripting-jvm:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-tooling-core:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-util-io:1.8.10=classpath
|
||||
org.jetbrains.kotlin:kotlin-util-klib:1.8.10=classpath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.5.0=classpath
|
||||
org.jetbrains:annotations:23.0.0=classpath
|
||||
org.jvnet.staxex:stax-ex:1.8.1=classpath
|
||||
org.ow2.asm:asm-analysis:9.6=classpath
|
||||
org.ow2.asm:asm-commons:9.6=classpath
|
||||
org.ow2.asm:asm-tree:9.6=classpath
|
||||
org.ow2.asm:asm-util:9.6=classpath
|
||||
org.ow2.asm:asm:9.6=classpath
|
||||
org.slf4j:slf4j-api:1.7.30=classpath
|
||||
org.tensorflow:tensorflow-lite-metadata:0.1.0-rc2=classpath
|
||||
empty=
|
@ -0,0 +1,3 @@
|
||||
org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError
|
||||
android.useAndroidX=true
|
||||
android.enableJetifier=true
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user