diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 536e8d4806..2e26551e0d 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,5 +1,8 @@ -**IMPORTANT:** Due to work on the docs.flutter.dev infrastructure, this repo is **not accepting pull requests**. +_Description of what this PR is changing or adding, and why:_ -Instead of creating a PR, please file an issue (https://github.com/flutter/website/issues/new/choose) about the needed change. +_Issues fixed by this PR (if any):_ -We expect to start accepting PRs again the week of May 11. +## Presubmit checklist +- [ ] This PR doesn’t contain automatically generated corrections (Grammarly or similar). +- [ ] This PR follows the [Google Developer Documentation Style Guidelines](https://developers.google.com/style) — for example, it doesn’t use _i.e._ or _e.g._, and it avoids _I_ and _we_ (first person). +- [ ] This PR uses [semantic line breaks](https://github.com/dart-lang/site-shared/blob/master/doc/writing-for-dart-and-flutter-websites.md#semantic-line-breaks) of 80 characters or fewer. \ No newline at end of file diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 3e37ab199b..23dc043b10 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -33,7 +33,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@7502d6e991ca767d2db617bfd823a1ed925a0d59 + uses: github/codeql-action/init@75b4f1c4669133dc294b06c2794e969efa2e5316 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -44,7 +44,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@7502d6e991ca767d2db617bfd823a1ed925a0d59 + uses: github/codeql-action/autobuild@75b4f1c4669133dc294b06c2794e969efa2e5316 # ℹ️ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -58,4 +58,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@7502d6e991ca767d2db617bfd823a1ed925a0d59 + uses: github/codeql-action/analyze@75b4f1c4669133dc294b06c2794e969efa2e5316 diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml index 989066dfab..6ad55b1eb4 100644 --- a/.github/workflows/scorecards-analysis.yml +++ b/.github/workflows/scorecards-analysis.yml @@ -49,6 +49,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@7502d6e991ca767d2db617bfd823a1ed925a0d59 + uses: github/codeql-action/upload-sarif@75b4f1c4669133dc294b06c2794e969efa2e5316 with: sarif_file: results.sarif diff --git a/Dockerfile b/Dockerfile index bf21e80e36..fd28246106 100644 --- a/Dockerfile +++ b/Dockerfile @@ -23,6 +23,7 @@ WORKDIR /app ENV JEKYLL_ENV=development RUN gem install bundler COPY Gemfile Gemfile.lock ./ +RUN bundle config set force_ruby_platform true RUN bundle install # Install Node deps diff --git a/Gemfile b/Gemfile index b851e475ce..ea15dd3716 100644 --- a/Gemfile +++ b/Gemfile @@ -4,7 +4,7 @@ gem 'jekyll', '4.2.2' gem 'webrick' # Used for custom _plugins -gem 'activesupport', '~> 7.0.2' +gem 'activesupport', '~> 7.0.3' gem 'liquid-tag-parser', '~> 2.0.2' group :jekyll_plugins do diff --git a/Gemfile.lock b/Gemfile.lock index cfdf022b03..91658b6b55 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ GEM remote: https://rubygems.org/ specs: - activesupport (7.0.2.4) + activesupport (7.0.3) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) minitest (>= 5.1) @@ -89,7 +89,7 @@ PLATFORMS x86_64-linux DEPENDENCIES - activesupport (~> 7.0.2) + activesupport (~> 7.0.3) jekyll (= 4.2.2) jekyll-toc (~> 0.17.1) liquid-tag-parser (~> 2.0.2) diff --git a/examples/codelabs b/examples/codelabs index b100728476..93549eb773 160000 --- a/examples/codelabs +++ b/examples/codelabs @@ -1 +1 @@ -Subproject commit b100728476af3ce59fcba53ebebff24d08e366a1 +Subproject commit 93549eb7736b7b5603e37337e766da1693c33d62 diff --git a/examples/cookbook/effects/parallax_scrolling/lib/excerpt1.dart b/examples/cookbook/effects/parallax_scrolling/lib/excerpt1.dart index ab8a0ca9fa..13d904e35d 100644 --- a/examples/cookbook/effects/parallax_scrolling/lib/excerpt1.dart +++ b/examples/cookbook/effects/parallax_scrolling/lib/excerpt1.dart @@ -13,4 +13,4 @@ class ParallaxRecipe extends StatelessWidget { ); } } -// #docregion ParallaxRecipe +// #enddocregion ParallaxRecipe diff --git a/examples/cookbook/effects/shimmer_loading/lib/main.dart b/examples/cookbook/effects/shimmer_loading/lib/main.dart index 5756dc3db1..111cdec934 100644 --- a/examples/cookbook/effects/shimmer_loading/lib/main.dart +++ b/examples/cookbook/effects/shimmer_loading/lib/main.dart @@ -212,4 +212,4 @@ class _ExampleUiLoadingAnimationState extends State { ); } } -// #docregion ExampleUiAnimationState +// #enddocregion ExampleUiAnimationState diff --git a/examples/cookbook/navigation/navigation_basics/lib/main_step1.dart b/examples/cookbook/navigation/navigation_basics/lib/main_step1.dart index f2f4844dc8..d687705b60 100644 --- a/examples/cookbook/navigation/navigation_basics/lib/main_step1.dart +++ b/examples/cookbook/navigation/navigation_basics/lib/main_step1.dart @@ -42,4 +42,3 @@ class SecondRoute extends StatelessWidget { ); } } -// #enddocregion Main diff --git a/examples/internationalization/add_language/lib/nn_intl.dart b/examples/internationalization/add_language/lib/nn_intl.dart index fc38c16c47..d79d4de065 100644 --- a/examples/internationalization/add_language/lib/nn_intl.dart +++ b/examples/internationalization/add_language/lib/nn_intl.dart @@ -346,6 +346,7 @@ class NnMaterialLocalizations extends GlobalMaterialLocalizations { @override String get alertDialogLabel => r'Alert'; + // #enddocregion Getters @override @@ -620,4 +621,236 @@ class NnMaterialLocalizations extends GlobalMaterialLocalizations { @override String get unspecifiedDateRange => 'Date Range'; + + @override + // TODO: implement keyboardKeyAlt + String get keyboardKeyAlt => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyAltGraph + String get keyboardKeyAltGraph => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyBackspace + String get keyboardKeyBackspace => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyCapsLock + String get keyboardKeyCapsLock => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyChannelDown + String get keyboardKeyChannelDown => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyChannelUp + String get keyboardKeyChannelUp => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyControl + String get keyboardKeyControl => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyDelete + String get keyboardKeyDelete => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyEisu + String get keyboardKeyEisu => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyEject + String get keyboardKeyEject => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyEnd + String get keyboardKeyEnd => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyEscape + String get keyboardKeyEscape => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyFn + String get keyboardKeyFn => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyHangulMode + String get keyboardKeyHangulMode => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyHanjaMode + String get keyboardKeyHanjaMode => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyHankaku + String get keyboardKeyHankaku => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyHiragana + String get keyboardKeyHiragana => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyHiraganaKatakana + String get keyboardKeyHiraganaKatakana => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyHome + String get keyboardKeyHome => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyInsert + String get keyboardKeyInsert => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyKanaMode + String get keyboardKeyKanaMode => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyKanjiMode + String get keyboardKeyKanjiMode => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyKatakana + String get keyboardKeyKatakana => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyMeta + String get keyboardKeyMeta => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyMetaMacOs + String get keyboardKeyMetaMacOs => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyMetaWindows + String get keyboardKeyMetaWindows => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyNumLock + String get keyboardKeyNumLock => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyNumpad0 + String get keyboardKeyNumpad0 => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyNumpad1 + String get keyboardKeyNumpad1 => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyNumpad2 + String get keyboardKeyNumpad2 => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyNumpad3 + String get keyboardKeyNumpad3 => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyNumpad4 + String get keyboardKeyNumpad4 => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyNumpad5 + String get keyboardKeyNumpad5 => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyNumpad6 + String get keyboardKeyNumpad6 => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyNumpad7 + String get keyboardKeyNumpad7 => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyNumpad8 + String get keyboardKeyNumpad8 => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyNumpad9 + String get keyboardKeyNumpad9 => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyNumpadAdd + String get keyboardKeyNumpadAdd => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyNumpadComma + String get keyboardKeyNumpadComma => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyNumpadDecimal + String get keyboardKeyNumpadDecimal => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyNumpadDivide + String get keyboardKeyNumpadDivide => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyNumpadEnter + String get keyboardKeyNumpadEnter => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyNumpadEqual + String get keyboardKeyNumpadEqual => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyNumpadMultiply + String get keyboardKeyNumpadMultiply => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyNumpadParenLeft + String get keyboardKeyNumpadParenLeft => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyNumpadParenRight + String get keyboardKeyNumpadParenRight => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyNumpadSubtract + String get keyboardKeyNumpadSubtract => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyPageDown + String get keyboardKeyPageDown => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyPageUp + String get keyboardKeyPageUp => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyPower + String get keyboardKeyPower => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyPowerOff + String get keyboardKeyPowerOff => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyPrintScreen + String get keyboardKeyPrintScreen => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyRomaji + String get keyboardKeyRomaji => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyScrollLock + String get keyboardKeyScrollLock => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeySelect + String get keyboardKeySelect => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeySpace + String get keyboardKeySpace => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyZenkaku + String get keyboardKeyZenkaku => throw UnimplementedError(); + + @override + // TODO: implement keyboardKeyZenkakuHankaku + String get keyboardKeyZenkakuHankaku => throw UnimplementedError(); } diff --git a/examples/ui/layout/adaptive_app_demos/lib/pages/adaptive_grid_page.dart b/examples/ui/layout/adaptive_app_demos/lib/pages/adaptive_grid_page.dart index 1b36d06d39..6de4f5ced4 100644 --- a/examples/ui/layout/adaptive_app_demos/lib/pages/adaptive_grid_page.dart +++ b/examples/ui/layout/adaptive_app_demos/lib/pages/adaptive_grid_page.dart @@ -51,7 +51,7 @@ class _AdaptiveGridPageState extends State { int colCount = max(1, (constraints.maxWidth / 250).floor()); // #docregion ScrollbarAlwaysShown return Scrollbar( - isAlwaysShown: DeviceType.isDesktop, + thumbVisibility: DeviceType.isDesktop, controller: _scrollController, child: GridView.count( controller: _scrollController, diff --git a/examples/ui/layout/adaptive_app_demos/lib/widgets/scroll_view_with_scrollbars.dart b/examples/ui/layout/adaptive_app_demos/lib/widgets/scroll_view_with_scrollbars.dart index 4ae2c6cd98..79c9d098d1 100644 --- a/examples/ui/layout/adaptive_app_demos/lib/widgets/scroll_view_with_scrollbars.dart +++ b/examples/ui/layout/adaptive_app_demos/lib/widgets/scroll_view_with_scrollbars.dart @@ -20,7 +20,7 @@ class _ScrollViewWithScrollbarsState extends State { Widget build(BuildContext context) { return Scrollbar( controller: _scrollController, - isAlwaysShown: context.select((AppModel m) => m.touchMode), + thumbVisibility: context.select((AppModel m) => m.touchMode), child: SingleChildScrollView( scrollDirection: widget.axis, controller: _scrollController, diff --git a/firebase.json b/firebase.json index 501975a1aa..2119aae702 100644 --- a/firebase.json +++ b/firebase.json @@ -223,6 +223,7 @@ { "source": "/go/federated-platforms", "destination": "https://docs.google.com/document/d/1z_4Z5JMTbk5c4FpayVAb-PTz2wLP-aSCirbieavT3Ws/edit?usp=sharing", "type": 301 }, { "source": "/go/federated-plugins", "destination": "https://docs.google.com/document/d/1LD7QjmzJZLCopUrFAAE98wOUQpjmguyGTN2wd_89Srs/edit", "type": 301 }, { "source": "/go/ffi-plugins", "destination": "https://docs.google.com/document/d/1vMw-W6L-r-uL1SUgzDh6J5rmtqum7SZdO9khWACrZJI/edit?resourcekey=0-vvjEK88N-pApyKTPWJ2IZQ", "type": 301 }, + { "source": "/go/flame-dartpad", "destination": "https://dartpad.dev/?id=3e52ca7b51ba15f989ad880b8b3314a2", "type": 301 }, { "source": "/go/floating-snackbar-offset", "destination": "https://docs.google.com/document/d/1elP-y83PtvfAZHNcpHCtnOFhZO9VnnlobwfQ33QO4hg/edit", "type": 301 }, { "source": "/go/flutter-doctor-app-folder", "destination": "https://docs.google.com/document/d/1_N70oh5rl0pMlz-epE_3fIr7gqE94dgoV-DHq5OlF2I/edit", "type": 301 }, { "source": "/go/flutter-engine-clocks", "destination": "https://docs.google.com/document/d/1Sx8QA1qXgJGw5r4ESviDnU2LSShNHiq_LjbRWPgSvXQ/edit?usp=sharing&resourcekey=0-BoBvLxgqf_nc_rwLc0zmTw", "type": 301 }, @@ -338,6 +339,7 @@ { "source": "/go/synchronized-widgettester", "destination": "https://docs.google.com/document/d/1VumsuG6dEFUVpPQLqqKJnhI0CoIS9fCAMN-NFHIPmo0/edit", "type": 301 }, { "source": "/go/system-mouse-cursor", "destination": "https://docs.google.com/document/d/1bJLRy6flZ0wDCbpl2QA8SURUWXIvRJKMRRemxlOo1cA/edit", "type": 301 }, { "source": "/go/tabs-and-text-fields", "destination": "https://docs.google.com/document/d/1aHucsI0NWGWu2Dm_XFsBLxiTgJRM8h2XBB7PVAnVxlU/edit?usp=sharing&resourcekey=0-zLbXFlP_A2e_Yoi43vdiiw", "type": 301 }, + { "source": "/go/take-flutter-home", "destination": "https://github.com/flutter/put-flutter-to-work", "type": 301 }, { "source": "/go/template", "destination": "https://docs.google.com/document/d/1SFRO8U2toOlAaZ38dsuEU7Wm5fn41wvBCWKiwADqfmw/edit", "type": 301 }, { "source": "/go/test-all-platforms", "destination": "https://docs.google.com/document/d/1-gw2zYFs_jBqsFPpXRonRNLYn6XNgvm34jc9HT84VKE/edit?usp=sharing", "type": 301 }, { "source": "/go/test-widgets-flutter-binding-clock", "destination": "https://docs.google.com/document/d/1EkkLbECNBwHgddBQAZqEy7iQLTIxR1rgChKzxcLwhio/edit", "type": 301 }, @@ -359,6 +361,7 @@ { "source": "/go/tracking-material-states", "destination": "https://docs.google.com/document/d/1PJdsOoXhWdhnpYKlW5Nm2Di3Di5XARoYyHerMwWovXE", "type": 301 }, { "source": "/go/trackpad-gestures", "destination": "https://docs.google.com/document/d/1oRvebwjpsC3KlxN1gOYnEdxtNpQDYpPtUFAkmTUe-K8/edit?usp=sharing&resourcekey=0-pt4_T7uggSTrsq2gWeGsYQ", "type": 301 }, { "source": "/go/triage-2022-rfp", "destination": "https://docs.google.com/document/d/1Kyrh1WijM04XqtUkVbL2uwDthlG9v3sljgl9HRlU4bU/edit", "type": 301 }, + { "source": "/go/try", "destination": "https://github.com/flutter/put-flutter-to-work", "type": 301 }, { "source": "/go/ui-imitation-games", "destination": "https://docs.google.com/document/d/1SbMjMiFhD2OZGTT3TCAOx6yfG-SYQ5F_fn7wwlZMumM/edit", "type": 301 }, { "source": "/go/union-typed-transform-stack-in-hit-test", "destination": "https://docs.google.com/document/d/1EsH7g-oyQIDZpRteg94iKJKgD7kVngZWq9ngDe6ORbM/edit?usp=sharing", "type": 301 }, { "source": "/go/unobstructed-platform-views", "destination": "https://docs.google.com/document/d/1_P3wa_nMqnhKsy-lDlNxT9GThZX2WhfVym4O4M7Q9qs/edit#", "type": 301 }, diff --git a/flutter b/flutter index c860cba910..5464c5bac7 160000 --- a/flutter +++ b/flutter @@ -1 +1 @@ -Subproject commit c860cba910319332564e1e9d470a17074c1f2dfd +Subproject commit 5464c5bac742001448fe4fc0597be939379f88ea diff --git a/package-lock.json b/package-lock.json index 180d07a451..b40007c532 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "dependencies": { "bootstrap-scss": "^4.6.1", "diff2html-cli": "^5.2.2", - "firebase-tools": "^v10.7.2", + "firebase-tools": "^v10.9.0", "font-awesome": "^4.7.0", "superstatic": "^8.0.0" } @@ -943,9 +943,9 @@ } }, "node_modules/firebase-tools": { - "version": "10.7.2", - "resolved": "https://registry.npmjs.org/firebase-tools/-/firebase-tools-10.7.2.tgz", - "integrity": "sha512-KU6cQ9XPBn2++gMBkR393LYbl4YEbKbHG/KsUR/JnfB2p5rhSPL/X4TntIl59QFs5527+VcLpeeeRRIB4Z9wUw==", + "version": "10.9.0", + "resolved": "https://registry.npmjs.org/firebase-tools/-/firebase-tools-10.9.0.tgz", + "integrity": "sha512-2EB8vNVHVYwfrFmKGKg/yPoOiTeofYdFSwiidEJzGpoMHTc2STNXl9n2+u4rA0LHQLl16nyG0A/oQm2UAy4Rjg==", "hasShrinkwrap": true, "dependencies": { "@google-cloud/pubsub": "^2.18.4", @@ -969,7 +969,7 @@ "exit-code": "^1.0.2", "express": "^4.16.4", "filesize": "^6.1.0", - "firebase-frameworks": "^0.3.0", + "firebase-frameworks": "^0.4.0", "fs-extra": "^5.0.0", "glob": "^7.1.2", "google-auth-library": "^7.11.0", @@ -3361,18 +3361,67 @@ } }, "node_modules/firebase-tools/node_modules/firebase-frameworks": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/firebase-frameworks/-/firebase-frameworks-0.3.0.tgz", - "integrity": "sha512-Zxtx5WsD8ZZdItIeDjjpM+JgaIWDdwBujmLYLKf2Ou6onyRsd8bNRrnVsqrnq4S3FN9TcNYliXdwMu7AwYdW7Q==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/firebase-frameworks/-/firebase-frameworks-0.4.0.tgz", + "integrity": "sha512-Seu+1dKNo3AacMrOHb1V0F41DfCKiM6gW4Go/34z78WtuBkzKNSUOUI+w8XCH7A96QGZRbNbGwt33BiSXEb2xQ==", "dependencies": { + "fs-extra": "^10.1.0", + "jsonc-parser": "^3.0.0", + "semver": "^7.3.7", "tslib": "^2.3.1" } }, + "node_modules/firebase-tools/node_modules/firebase-frameworks/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/firebase-tools/node_modules/firebase-frameworks/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/firebase-tools/node_modules/firebase-frameworks/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/firebase-tools/node_modules/firebase-frameworks/node_modules/tslib": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" }, + "node_modules/firebase-tools/node_modules/firebase-frameworks/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/firebase-tools/node_modules/forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -4552,6 +4601,11 @@ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, + "node_modules/firebase-tools/node_modules/jsonc-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==" + }, "node_modules/firebase-tools/node_modules/jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", @@ -10419,9 +10473,9 @@ } }, "firebase-tools": { - "version": "10.7.2", - "resolved": "https://registry.npmjs.org/firebase-tools/-/firebase-tools-10.7.2.tgz", - "integrity": "sha512-KU6cQ9XPBn2++gMBkR393LYbl4YEbKbHG/KsUR/JnfB2p5rhSPL/X4TntIl59QFs5527+VcLpeeeRRIB4Z9wUw==", + "version": "10.9.0", + "resolved": "https://registry.npmjs.org/firebase-tools/-/firebase-tools-10.9.0.tgz", + "integrity": "sha512-2EB8vNVHVYwfrFmKGKg/yPoOiTeofYdFSwiidEJzGpoMHTc2STNXl9n2+u4rA0LHQLl16nyG0A/oQm2UAy4Rjg==", "requires": { "@google-cloud/pubsub": "^2.18.4", "abort-controller": "^3.0.0", @@ -10444,7 +10498,7 @@ "exit-code": "^1.0.2", "express": "^4.16.4", "filesize": "^6.1.0", - "firebase-frameworks": "^0.3.0", + "firebase-frameworks": "^0.4.0", "fs-extra": "^5.0.0", "glob": "^7.1.2", "google-auth-library": "^7.11.0", @@ -12349,17 +12403,52 @@ } }, "firebase-frameworks": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/firebase-frameworks/-/firebase-frameworks-0.3.0.tgz", - "integrity": "sha512-Zxtx5WsD8ZZdItIeDjjpM+JgaIWDdwBujmLYLKf2Ou6onyRsd8bNRrnVsqrnq4S3FN9TcNYliXdwMu7AwYdW7Q==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/firebase-frameworks/-/firebase-frameworks-0.4.0.tgz", + "integrity": "sha512-Seu+1dKNo3AacMrOHb1V0F41DfCKiM6gW4Go/34z78WtuBkzKNSUOUI+w8XCH7A96QGZRbNbGwt33BiSXEb2xQ==", "requires": { + "fs-extra": "^10.1.0", + "jsonc-parser": "^3.0.0", + "semver": "^7.3.7", "tslib": "^2.3.1" }, "dependencies": { + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "requires": { + "lru-cache": "^6.0.0" + } + }, "tslib": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" } } }, @@ -13289,6 +13378,11 @@ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, + "jsonc-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==" + }, "jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", diff --git a/package.json b/package.json index 929fd7618a..935e1fe10f 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,6 @@ "diff2html-cli": "^5.2.2", "font-awesome": "^4.7.0", "superstatic": "^8.0.0", - "firebase-tools": "^v10.7.2" + "firebase-tools": "^v10.9.0" } } diff --git a/src/_data/happy_paths_cards.yml b/src/_data/happy_paths_cards.yml new file mode 100644 index 0000000000..793fe6a41f --- /dev/null +++ b/src/_data/happy_paths_cards.yml @@ -0,0 +1,24 @@ +- name: Ads + image: /assets/images/docs/happy-paths/HappyPaths_Icon_Ad_2d.png + description: Monetize your mobile app with in-app ads. + url: /development/packages-and-plugins/happy-paths/recommended/#ads- +- name: Background processing + image: /assets/images/docs/happy-paths/HappyPaths_Icon_Processing_2d.png + description: Enable headless execution of Dart code. + url: /development/packages-and-plugins/happy-paths/recommended/#background-processing- +- name: Geolocation + image: /assets/images/docs/happy-paths/HappyPaths_Icon_Geolocation_2d.png + description: Determine a user's location for enhanced app functionality. + url: /development/packages-and-plugins/happy-paths/recommended/#geolocation- +- name: Immutable data + image: /assets/images/docs/happy-paths/HappyPaths_Icon_ImmutableData_2d.png + description: Handle immutable data structures. + url: /development/packages-and-plugins/happy-paths/recommended/#immutable-data-- +- name: Structured local storage + image: /assets/images/docs/happy-paths/HappyPaths_Icon_Storage_2d.png + description: Maintain and preserve data. + url: /development/packages-and-plugins/happy-paths/recommended/#structured-local-storage- +- name: Web sockets + image: /assets/images/docs/happy-paths/HappyPaths_Icon_WebSockets_2d.png + description: Handle client and server connections. + url: /development/packages-and-plugins/happy-paths/recommended/#web-sockets- \ No newline at end of file diff --git a/src/_data/sidenav.yml b/src/_data/sidenav.yml index 2e56aa058c..35a11af1ce 100644 --- a/src/_data/sidenav.yml +++ b/src/_data/sidenav.yml @@ -103,9 +103,9 @@ - title: Advanced UI permalink: /development/ui/advanced children: - - title: Actions & shortcuts [NEW] + - title: Actions & shortcuts permalink: /development/ui/advanced/actions_and_shortcuts - - title: Keyboard focus [NEW] + - title: Keyboard focus permalink: /development/ui/advanced/focus - title: Gestures permalink: /development/ui/advanced/gestures @@ -164,7 +164,7 @@ permalink: /development/platform-integration/web/faq - title: Web renderers permalink: /development/platform-integration/web/renderers - - title: Custom app initialization + - title: Custom app initialization NEW permalink: /development/platform-integration/web/initialization - title: Desktop permalink: /desktop @@ -173,6 +173,10 @@ children: - title: Using packages permalink: /development/packages-and-plugins/using-packages + - title: Happy paths project NEW + permalink: /development/packages-and-plugins/happy-paths + - title: Happy paths recommendations NEW + permalink: /development/packages-and-plugins/happy-paths/recommended - title: Developing packages & plugins permalink: /development/packages-and-plugins/developing-packages - title: Flutter Favorites program @@ -369,34 +373,34 @@ - title: Resources children: - - title: Dart resources - permalink: /resources/bootstrap-into-dart - - title: Compatibility policy - permalink: /resources/compatibility - title: Architectural overview permalink: /resources/architectural-overview - - title: Inside Flutter - permalink: /resources/inside-flutter - - title: Google Fonts package - permalink: https://pub.dev/packages/google_fonts - - title: Platform adaptations - permalink: /resources/platform-adaptations - - title: Videos and online courses - permalink: /resources/videos - title: Books permalink: /resources/books - # - title: Flutter developer communities # TODO - # - title: Flutter learning resources # TODO - - title: FAQ - permalink: /resources/faq - - title: Design Documents - permalink: /resources/design-docs - - title: Creating useful bug reports - permalink: /resources/bug-reports + - title: Compatibility policy + permalink: /resources/compatibility - title: Contributing to Flutter permalink: https://github.com/flutter/flutter/blob/master/CONTRIBUTING.md + - title: Creating useful bug reports + permalink: /resources/bug-reports + - title: Dart resources + permalink: /resources/bootstrap-into-dart + - title: Design Documents + permalink: /resources/design-docs + - title: FAQ + permalink: /resources/faq + - title: Casual Games Toolkit NEW + permalink: /resources/games-toolkit + - title: Google Fonts package + permalink: https://pub.dev/packages/google_fonts + - title: Inside Flutter + permalink: /resources/inside-flutter - title: Official brand assets permalink: https://drive.google.com/drive/folders/1KXNtO9My2AMpDOF9A9Y_4aj4_BcgmDDT + - title: Platform adaptations + permalink: /resources/platform-adaptations + - title: Videos and online courses + permalink: /resources/videos - title: Reference expanded: true diff --git a/src/_includes/banner.html b/src/_includes/banner.html index c7b906b565..4076bfd5ca 100644 --- a/src/_includes/banner.html +++ b/src/_includes/banner.html @@ -7,7 +7,7 @@ You can now build Windows apps with Flutter! Learn more... {% endcomment %} {% endif -%} diff --git a/src/_sass/base/_base.scss b/src/_sass/base/_base.scss index 9c82433d93..5b56b68449 100644 --- a/src/_sass/base/_base.scss +++ b/src/_sass/base/_base.scss @@ -107,6 +107,20 @@ dd { } } +.happy-paths-image-holder { + align-items: left; + display: flex; + height: 120px; + justify-content: left; + + img { + height: auto; + max-width: 100%; + max-height: 100%; + width: auto; + } +} + .fixed-col { @include media-breakpoint-up(md) { bottom: 0; diff --git a/src/assets/images/docs/happy-paths/HappyPaths_HeaderImage_Cropped.png b/src/assets/images/docs/happy-paths/HappyPaths_HeaderImage_Cropped.png new file mode 100644 index 0000000000..e36cd19473 Binary files /dev/null and b/src/assets/images/docs/happy-paths/HappyPaths_HeaderImage_Cropped.png differ diff --git a/src/assets/images/docs/happy-paths/HappyPaths_Icon_Ad_2d.png b/src/assets/images/docs/happy-paths/HappyPaths_Icon_Ad_2d.png new file mode 100644 index 0000000000..af248178cf Binary files /dev/null and b/src/assets/images/docs/happy-paths/HappyPaths_Icon_Ad_2d.png differ diff --git a/src/assets/images/docs/happy-paths/HappyPaths_Icon_Ad_3d_001.png b/src/assets/images/docs/happy-paths/HappyPaths_Icon_Ad_3d_001.png new file mode 100644 index 0000000000..35b86da97d Binary files /dev/null and b/src/assets/images/docs/happy-paths/HappyPaths_Icon_Ad_3d_001.png differ diff --git a/src/assets/images/docs/happy-paths/HappyPaths_Icon_Geolocation_2d.png b/src/assets/images/docs/happy-paths/HappyPaths_Icon_Geolocation_2d.png new file mode 100644 index 0000000000..4314dfa65c Binary files /dev/null and b/src/assets/images/docs/happy-paths/HappyPaths_Icon_Geolocation_2d.png differ diff --git a/src/assets/images/docs/happy-paths/HappyPaths_Icon_Geolocation_3d_001.png b/src/assets/images/docs/happy-paths/HappyPaths_Icon_Geolocation_3d_001.png new file mode 100644 index 0000000000..86ea556709 Binary files /dev/null and b/src/assets/images/docs/happy-paths/HappyPaths_Icon_Geolocation_3d_001.png differ diff --git a/src/assets/images/docs/happy-paths/HappyPaths_Icon_ImmutableData_2d.png b/src/assets/images/docs/happy-paths/HappyPaths_Icon_ImmutableData_2d.png new file mode 100644 index 0000000000..c2bcb3cd0a Binary files /dev/null and b/src/assets/images/docs/happy-paths/HappyPaths_Icon_ImmutableData_2d.png differ diff --git a/src/assets/images/docs/happy-paths/HappyPaths_Icon_ImmutableData_3d_001.png b/src/assets/images/docs/happy-paths/HappyPaths_Icon_ImmutableData_3d_001.png new file mode 100644 index 0000000000..37c5fb49ce Binary files /dev/null and b/src/assets/images/docs/happy-paths/HappyPaths_Icon_ImmutableData_3d_001.png differ diff --git a/src/assets/images/docs/happy-paths/HappyPaths_Icon_Processing_2d.png b/src/assets/images/docs/happy-paths/HappyPaths_Icon_Processing_2d.png new file mode 100644 index 0000000000..a5cfa6461f Binary files /dev/null and b/src/assets/images/docs/happy-paths/HappyPaths_Icon_Processing_2d.png differ diff --git a/src/assets/images/docs/happy-paths/HappyPaths_Icon_Processing_3d_001.png b/src/assets/images/docs/happy-paths/HappyPaths_Icon_Processing_3d_001.png new file mode 100644 index 0000000000..665b6e2fb1 Binary files /dev/null and b/src/assets/images/docs/happy-paths/HappyPaths_Icon_Processing_3d_001.png differ diff --git a/src/assets/images/docs/happy-paths/HappyPaths_Icon_Storage_2d.png b/src/assets/images/docs/happy-paths/HappyPaths_Icon_Storage_2d.png new file mode 100644 index 0000000000..8f19b09f9b Binary files /dev/null and b/src/assets/images/docs/happy-paths/HappyPaths_Icon_Storage_2d.png differ diff --git a/src/assets/images/docs/happy-paths/HappyPaths_Icon_Storage_3d_001.png b/src/assets/images/docs/happy-paths/HappyPaths_Icon_Storage_3d_001.png new file mode 100644 index 0000000000..2f30155ebd Binary files /dev/null and b/src/assets/images/docs/happy-paths/HappyPaths_Icon_Storage_3d_001.png differ diff --git a/src/assets/images/docs/happy-paths/HappyPaths_Icon_WebSockets_2d.png b/src/assets/images/docs/happy-paths/HappyPaths_Icon_WebSockets_2d.png new file mode 100644 index 0000000000..ee8d773d4a Binary files /dev/null and b/src/assets/images/docs/happy-paths/HappyPaths_Icon_WebSockets_2d.png differ diff --git a/src/assets/images/docs/happy-paths/HappyPaths_Icon_WebSockets_3d_001.png b/src/assets/images/docs/happy-paths/HappyPaths_Icon_WebSockets_3d_001.png new file mode 100644 index 0000000000..eb28a3c424 Binary files /dev/null and b/src/assets/images/docs/happy-paths/HappyPaths_Icon_WebSockets_3d_001.png differ diff --git a/src/assets/js/archive.js b/src/assets/js/archive.js index c6dc79ef96..0124982b48 100644 --- a/src/assets/js/archive.js +++ b/src/assets/js/archive.js @@ -66,24 +66,51 @@ function updateTableFailed(os) { tab.find(".loading").text("Failed to load releases. Refresh page to try again."); } -function updateDownloadLink(releases, os) { - var channel = "stable"; - var releasesForChannel = releases.releases.filter(function (release) { - return release.channel == channel; + +var macOSArm64ArchiveFilename = ''; + +// Listen for the macOS arm64 download link to be clicked and update +// the example unzip command with correct arm64 filename +$(".download-latest-link-macos-arm64").click(function() { + macOSArch = 'arm64'; + + // Update inlined filenames in element text nodes with arm64 filename: + var fileNamePrefix = 'flutter_'; + var code = $('code:contains("' + fileNamePrefix + '")'); + var textNode = $(code).contents().filter(function() { + return this.nodeType == 3 && this.textContent.includes(fileNamePrefix); }); - if (!releasesForChannel.length) - return; + var text = $(textNode).text(); + //var newText = text.replace(new RegExp('^(.*?)\\b' + fileNamePrefix + '\\w+_v.*'), '$1' + macOSArm64ArchiveFilename); + $(textNode).replaceWith(`unzip ~/Downloads/${macOSArm64ArchiveFilename}`); - var release = releasesForChannel[0]; +}); + +/* +releases: A list of Flutter releases +base_url: link for sdk download link such as storage.googleapis.com... +os: macos, windows, or linux +[optional] arch: Only specify if there's additional architecture, such as arm64 +*/ +function updateReleaseDownloadButton(releases, base_url, os, arch = '') { + var archString = !arch.length ? archString = '': archString = '-' + arch; + + var release = releases[0]; var linkSegments = release.archive.split("/"); var archiveFilename = linkSegments[linkSegments.length - 1]; // Just the filename part of url - var downloadLink = $(".download-latest-link-" + os); + var downloadLink = $(".download-latest-link-" + os + archString); + + if (os == "macos" && arch == "arm64") { + macOSArm64ArchiveFilename = archiveFilename; + } + downloadLink .text(archiveFilename) - .attr("href", releases.base_url + "/" + release.archive); + .attr("href", base_url + "/" + release.archive); - // Update download-filename placeholders: - $(".download-latest-link-filename-" + os).text(archiveFilename); + + //Update download-filename placeholders: + $(".download-latest-link-filename-" + os + archString).text(archiveFilename); $(".download-latest-link-filename").text(archiveFilename); // Update inlined filenames in element text nodes: @@ -95,6 +122,45 @@ function updateDownloadLink(releases, os) { var text = $(textNode).text(); var newText = text.replace(new RegExp('^(.*?)\\b' + fileNamePrefix + '\\w+_v.*'), '$1' + archiveFilename); $(textNode).replaceWith(newText); + +} + +function updateDownloadLink(releases, os, arch) { + var channel = "stable"; + var releasesForChannel = releases.releases.filter(function (release) { + return release.channel == channel; + }); + if (!releasesForChannel.length) + return; + + // On macOS, update the download buttons for both architectures, x64 and arm64 + if (os == 'macos') { + // Filter releases by x64 architecture + var releasesForX64 = releasesForChannel.filter(function (release) { + return release.dart_sdk_arch == 'x64'; + }); + + updateReleaseDownloadButton(releasesForX64, releases.base_url, os); + + // Filter releases by arm64 architecture + var releasesForArm64 = releasesForChannel.filter(function (release) { + return release.dart_sdk_arch == 'arm64'; + }); + + // If no arm64 releases available, delete all apple silicon elements + if (!releasesForArm64.length) { + $(".apple-silicon").each(function(){ + this.remove(); + }) + + return; + } + + updateReleaseDownloadButton(releasesForArm64, releases.base_url, os, 'arm64'); + } + else { + updateReleaseDownloadButton(releasesForChannel, releases.base_url, os); + } } function updateDownloadLinkFailed(os) { diff --git a/src/codelabs/index.md b/src/codelabs/index.md index 7e0e5de53a..1002179234 100644 --- a/src/codelabs/index.md +++ b/src/codelabs/index.md @@ -13,6 +13,15 @@ provided workshop link takes you to the relevant YouTube video, which tells you where to find the associated DartPad link. +{{site.alert.secondary}} + **New workshops for Google I/O!** + Our GDEs have created new Flutter workshops! + For more information, check out + the [Flutter community blog][]. +{{site.alert.end}} + +[Flutter community blog]: {{site.medium}}/@flutter_community/622b52f70173 + ## Good for beginners If you're new to Flutter, we recommend starting with @@ -107,6 +116,10 @@ like layout and animations: Learn how to use the Material [animations][] package to add pre-built transitions to a Material app called Reply. +* [Take your Flutter app from boring to beautiful][] **NEW**
+ Learn how to use some of the features in Material 3 + to make your app more beautiful *and* more responsive. + * [MDC-101 Flutter: Material Components (MDC) Basics][]
Learn the basics of using Material Components by building a simple app with core components. The four MDC codelabs @@ -147,12 +160,13 @@ like layout and animations: [MDC-102 Flutter: Material Structure and Layout]: {{site.codelabs}}/codelabs/mdc-102-flutter [MDC-103 Flutter: Material Theming with Color, Shape, Elevation, and Type]: {{site.codelabs}}/codelabs/mdc-103-flutter [MDC-104 Flutter: Material Advanced Components]: {{site.codelabs}}/codelabs/mdc-104-flutter +[Take your Flutter app from boring to beautiful]: {{site.codelabs}}/codelabs/flutter-boring-to-beautiful ## Using Flutter with... Learn how to use Flutter with other technologies. -* [Adding WebView to your Flutter app][] **NEW**
+* [Adding WebView to your Flutter app][]
With the WebView Flutter plugin you can add a WebView widget to your Android or iOS Flutter app. diff --git a/src/deployment/ios.md b/src/deployment/ios.md index 3a5be8f2b1..fe753d0ea1 100644 --- a/src/deployment/ios.md +++ b/src/deployment/ios.md @@ -128,27 +128,6 @@ If you changed `Deployment Target` in your Xcode project, open `ios/Flutter/AppframeworkInfo.plist` in your Flutter app and update the `MinimumOSVersion` value to match. -## Updating the app's version number - -The default version number of the app is `1.0.0`. -To update it, navigate to the `pubspec.yaml` file -and update the following line: - -`version: 1.0.0+1` - -The version number is three numbers separated by dots, -such as `1.0.0` in the example above, followed by an optional -build number such as `1` in the example above, separated by a `+`. - -Both the version and the build number may be overridden in Flutter's -build by specifying `--build-name` and `--build-number`, -respectively. - -In iOS, `build-name` uses `CFBundleShortVersionString` -while `build-number` uses `CFBundleVersion`. -Read more about iOS versioning at [Core Foundation Keys][] -on the Apple Developer's site. - ## Add an app icon When a new Flutter app is created, a placeholder icon set is created. @@ -161,21 +140,36 @@ app's icons: 1. Verify the icon has been replaced by running your app using `flutter run`. -## Create a build archive with Xcode - -This step covers creating a build archive and uploading -your build to App Store Connect. +## Create a build archive and upload to App Store Connect During development, you've been building, debugging, and testing with _debug_ builds. When you're ready to ship your app to users on the App Store or TestFlight, you need to prepare a _release_ build. -At this point, you might consider [obfuscating your Dart code][] -to make it more difficult to reverse engineer. Obfuscating -your code involves adding a couple flags to your build command. -In Xcode, configure the app version and build: +### Update the app's build and version numbers -1. In Xcode, open `Runner.xcworkspace` in your app's `ios` folder. +The default version number of the app is `1.0.0`. +To update it, navigate to the `pubspec.yaml` file +and update the following line: +```yaml +version: 1.0.0+1 +``` +The version number is three numbers separated by dots, +such as `1.0.0` in the example above, followed by an optional +build number such as `1` in the example above, separated by a `+`. + +Both the version and the build number can be overridden in +`flutter build ipa` by specifying `--build-name` and `--build-number`, +respectively. + +In iOS, `build-name` uses `CFBundleShortVersionString` +while `build-number` uses `CFBundleVersion`. +Read more about iOS versioning at [Core Foundation Keys][] +on the Apple Developer's site. + +You may also override the `pubspec.yaml` build name and number in Xcode: + +1. Open `Runner.xcworkspace` in your app's `ios` folder. 1. Select **Runner** in the Xcode project navigator, then select the **Runner** target in the settings view sidebar. 1. In the Identity section, update the **Version** to the user-facing @@ -184,39 +178,62 @@ In Xcode, configure the app version and build: build number used to track this build on App Store Connect. Each upload requires a unique build number. -Finally, create a build archive and upload it to App Store Connect: +### Create an app bundle -
    -
  1. +Run `flutter build ipa` to produce an Xcode build archive (`.xcarchive` file) +in your project's `build/ios/archive/` directory and an App Store app +bundle (`.ipa` file) in `build/ios/ipa`. + +Consider adding the `--obfuscate` and `--split-debug-info` flags to +[obfuscate your Dart code][] to make it more difficult +to reverse engineer. + +If you are not distributing to the App Store, you can optionally +choose a different [export method][app_bundle_export_method] by +adding the option `--export-method ad-hoc`, +`--export-method development` or `--export-method enterprise`. -Run `flutter build ipa` to produce a build archive. {{site.alert.note}} - On versions of Flutter where `flutter build ipa` - is unavailable, open Xcode and select **Product > Archive**. - In the sidebar of the Xcode Organizer window, select your iOS app, - then select the build archive you just produced. + On versions of Flutter where `flutter build ipa --export-method` is unavailable, + open `build/ios/archive/MyApp.xcarchive` and follow the instructions below + to validate and distribute the app from Xcode. {{site.alert.end}} + +### Upload the app bundle to App Store Connect + +Once the app bundle is created, upload it to +[App Store Connect][appstoreconnect_login] by either: + +
      +
    1. + +Install and open the [Apple Transport macOS app][apple_transport_app]. +Drag and drop the `build/ios/ipa/*.ipa` app bundle into the app. +
    2. +
    3. -Open `build/ios/archive/MyApp.xcarchive` in Xcode. +Or upload the app bundle from the command line by running: +```bash +xcrun altool --upload-app --type ios -f build/ios/ipa/*.ipa --apiKey your_api_key --apiIssuer your_issuer_id +``` +Run `man altool` for details about how to authenticate with the App Store Connect API key.
    4. +
    5. +Or open `build/ios/archive/MyApp.xcarchive` in Xcode. + Click the **Validate App** button. If any issues are reported, address them and produce another build. You can reuse the same build ID until you upload an archive. -
    6. -
    7. - After the archive has been successfully validated, click -**Distribute App**. You can follow the status of your build in the -Activities tab of your app's details page on -[App Store Connect][appstoreconnect_login]. +**Distribute App**. {{site.alert.note}} When you export your app at the end of **Distribute App**, @@ -231,6 +248,9 @@ Activities tab of your app's details page on
    +You can follow the status of your build in the +Activities tab of your app's details page on +[App Store Connect][appstoreconnect_login]. You should receive an email within 30 minutes notifying you that your build has been validated and is available to release to testers on TestFlight. At this point you can choose whether to release @@ -470,5 +490,7 @@ detailed overview of the process of releasing an app to the App Store. [distributionguide_submit]: https://help.apple.com/xcode/mac/current/#/dev067853c94 [distributionguide_testflight]: https://help.apple.com/xcode/mac/current/#/dev2539d985f [distributionguide_upload]: https://help.apple.com/xcode/mac/current/#/dev442d7f2ca -[obfuscating your Dart code]: {{site.url}}/deployment/obfuscate +[obfuscate your Dart code]: {{site.url}}/deployment/obfuscate [TestFlight]: {{site.apple-dev}}/testflight/ +[app_bundle_export_method]: https://help.apple.com/xcode/mac/current/#/dev31de635e5 +[apple_transport_app]: https://apps.apple.com/us/app/transporter/id1450874784 diff --git a/src/deployment/macos.md b/src/deployment/macos.md index f1451f4dff..75204f773a 100644 --- a/src/deployment/macos.md +++ b/src/deployment/macos.md @@ -365,15 +365,6 @@ find . -name "Podfile" -execdir pod install \;
  2. -Enable the Flutter macOS option: - -```bash -flutter config --enable-macos-desktop -``` - -
  3. -
  4. - Build the Flutter macOS project: ```bash diff --git a/src/desktop/index.md b/src/desktop/index.md index ab63098d89..8fddc16324 100644 --- a/src/desktop/index.md +++ b/src/desktop/index.md @@ -10,18 +10,6 @@ Flutter's desktop support also extends to plugins—you can install existing plugins that support the Windows, macOS, or Linux platforms, or you can create your own. -{{site.alert.note}} - Windows is fully supported as a development target. For more information, see - [Announcing Flutter for Windows][]. - - macOS and Linux desktop app support is still beta-quality. Snapshots of their - support are available on the stable channel, but we recommend that you use the - beta channel for access to the latest features and bug fixes on those - platforms. -{{site.alert.end}} - -[Announcing Flutter for Windows]: {{site.flutter-medium}}/announcing-flutter-for-windows-6979d0d01fed - ## Requirements To compile a desktop application, you must build it **on** the targeted @@ -122,36 +110,10 @@ to create a new project with desktop support. ### Set up -On Windows, desktop support is enabled on Flutter 2.10 or higher. - -On macOS and Linux, desktop support is disabled by default in the stable -channel. You can manually enable it with one of these commands, depending on -which platform you are running: - -```terminal -$ flutter config --enable-macos-desktop -$ flutter config --enable-linux-desktop -``` - -{{site.alert.note}} - You only need to execute - `flutter config --enable--desktop` - once. You can check the status of your configuration at any time by using - the command `flutter config` with no arguments. -{{site.alert.end}} - -To test that desktop support is configured, use the `flutter devices` command to -list the available targets. In addition to any mobile or web devices, you should -see a row for the operating system you're running on, for example (on Windows): - -``` terminal -C:\> flutter devices -1 connected device: - -Windows (desktop) • windows • windows-x64 • Microsoft Windows [Version 10.0.22557.1] -``` +On Windows, desktop support is enabled on Flutter 2.10 or higher. On macOS and Linux, +desktop support is enabled on Flutter 3 or higher. -You might also run `flutter doctor` to see if there are any unresolved issues. +You might run `flutter doctor` to see if there are any unresolved issues. You should see a checkmark for each successfully configured area. It should look something like the following on Windows, with an entry for "develop for Windows": diff --git a/src/development/packages-and-plugins/favorites.md b/src/development/packages-and-plugins/favorites.md index ba32b5a5ae..f9bd2cb86a 100644 --- a/src/development/packages-and-plugins/favorites.md +++ b/src/development/packages-and-plugins/favorites.md @@ -15,6 +15,13 @@ own evaluation of packages and plugins for your project. You can see the complete list of [Flutter Favorite packages][] on pub.dev. +Looking to add more functionality to your app? +The [Happy paths project][] guides you with +opinionated recommendations for +plugins and packages that can take your app to the next level. + + [Happy paths project]: {{site.url}}/development/packages-and-plugins/happy-paths + ## Metrics Flutter Favorite packages have passed high quality standards diff --git a/src/development/packages-and-plugins/happy-paths/index.md b/src/development/packages-and-plugins/happy-paths/index.md new file mode 100644 index 0000000000..efd5d44a22 --- /dev/null +++ b/src/development/packages-and-plugins/happy-paths/index.md @@ -0,0 +1,54 @@ +--- +title: Happy paths project +description: The Happy paths page lists areas of technology where we recommend specific Flutter packages and plugins that add functionality to your app. +--- + +![Header image for Happy Paths](/assets/images/docs/happy-paths/HappyPaths_HeaderImage_Cropped.png){:width="30%"} + +Once you’ve learned Flutter basics and are ready to move on to developing more +advanced apps, how do you make that leap? The [pub.dev][] website +lists thousands of packages and plugins for Dart and Flutter. + +So how do you choose? + +Perhaps you suffer from [analysis paralysis][]. + +[analysis paralysis]: https://www.investopedia.com/terms/a/analysisparalysis.asp#:~:text=Analysis%20paralysis%20is%20an%20inability,an%20inability%20to%20pick%20one +[pub.dev]: {{site.pub}} + +The Happy paths project is here to help. +We’ve created Happy paths recommendations to help +you make informed decisions on how to add various types of functionality +to your app. There are _many_ packages that can help you achieve your goals, +but we wanted to provide some guidance for newer Flutter developers as you ramp +up to building larger and more complex apps. Keep in mind that these are not +the _only_ paths that you can choose, but are solutions that we can recommend. + +In future, we plan to add more happy path recommendations +for different areas of functionality. If there’s a specific +happy path recommendation that you would like to see, +please [file an issue][] to let us know. + +[file an issue]: {{site.github}}/flutter/website/issues/new/choose + + +{% for card in site.data.happy_paths_cards -%} + {% capture index0Modulo3 %}{{ forloop.index0 | modulo:3 }}{% endcapture %} + {% capture indexModulo3 %}{{ forloop.index | modulo:3 }}{% endcapture %} + {% if index0Modulo3 == '0' %} +
    + {% endif %} + +
    +
    + Happy Path logo +
    +
    {{card.name}}
    +

    {{card.description}}

    +
    +
    + {% if indexModulo3 == '0' %} +
    + {% endif %} +{% endfor -%} + diff --git a/src/development/packages-and-plugins/happy-paths/recommended.md b/src/development/packages-and-plugins/happy-paths/recommended.md new file mode 100644 index 0000000000..87112f5ee6 --- /dev/null +++ b/src/development/packages-and-plugins/happy-paths/recommended.md @@ -0,0 +1,163 @@ +--- +title: Happy paths recommendations +description: Recommended packages and plugins for adding functionality to your app. +--- + + +## Ads ![Ads happy path image](/assets/images/docs/happy-paths/HappyPaths_Icon_Ad_3d_001.png){:width="20%"} + +Are you looking to monetize your mobile app? You can do that by adding in-app +ads using the `google_mobile_ads` package. You’ll need to register a free +account with [AdMob](https://developers.google.com/admob/flutter/quick-start) +and you can then leverage one or more AdMob features, including the following: + +* Several ad formats: Banner, full-screen, native, and rewarded. +* Control over when ads display. For example, in between levels of a game, + after completing a task, or before starting a new game +* Monetization reports to help you make decisions about your app. + +#### Useful links +{:.no_toc} + +* [Get started with the AdMob](https://developers.google.com/admob/flutter/quick-start) guide +* [Create an AdMob account](https://admob.google.com/home/get-started/) tutorial +* [`google_mobile_ads`]({{site.pub-pkg}}/google_mobile_ads/install) package on pub.dev + + +## Background processing ![Background processing happy path image](/assets/images/docs/happy-paths/HappyPaths_Icon_Processing_3d_001.png){:width="20%"} + +The background processing path shows you how to run a Dart function +in the background on mobile devices. With background processing, +you can perform tasks like making an HTTP request, running an +expensive calculation, or displaying a notification in another isolate +(similar to a lightweight thread). + +One way to incorporate background processing in your mobile app is through the +[WorkManager]({{site.pub-pkg}}/workmanager) plugin. +This plugin enables headless execution of Dart code in the background. + +{{site.alert.secondary}} + **Is there a difference between a package and a plugin?** Yes, there is! + Both are packages, but a plugin is a type of package that contains + platform-specific code (such as Kotlin, Java, Swift, Objective C) that + communicates with the underlying platform. For more information, see + [Using packages]({{site.url}}/development/packages-and-plugins/using-packages). +{{site.alert.end}} + +Some features of WorkManager include: +* Control over how many times a job should run: once or periodically +* Ability to apply constraints on jobs like checking for a network connection, + only running when the device is charging, or only running when a device is + idle (Android only) + +#### Useful links +{:.no_toc} + +* [Android setup]({{site.github}}/fluttercommunity/flutter_workmanager/blob/main/ANDROID_SETUP.md) +* [iOS setup]({{site.github}}/fluttercommunity/flutter_workmanager/blob/main/IOS_SETUP.md) + + +## Geolocation ![Geolocation happy path image](/assets/images/docs/happy-paths/HappyPaths_Icon_Geolocation_3d_001.png){:width="20%"} + +Geolocation, the ability to determine where in the world a user is located, is +critical functionality for many applications; for example, shopping apps need +to calculate shipping, fitness apps need to track distance traveled, and so on. +The plugins in Flutter's ecosystem offer a number of features to help build +these experiences. + +A plugin that provides this functionality is the +[`geolocator`]({{site.pub-pkg}}/geolocator) plugin, rated as a +[Flutter favorite]({{site.url}}/development/packages-and-plugins/favorites). +With this plugin, you can check and request permission, fetch a one-time location, +and even provide a stream of constantly updated values as a user moves about. + +Features include: +* Ability to get a device's current location +* Receive location updates +* Ability to determine whether a devices's location services are enabled + +#### Useful links +{:.no_toc} + +* [How to get a user's location with the geolocator plugin](https://www.digitalocean.com/community/tutorials/flutter-geolocator-plugin) tutorial +* [`geolocator`]({{site.pub-pkg}}/geolocator) plugin + +## Immutable data ![Immutable data happy path image](/assets/images/docs/happy-paths/HappyPaths_Icon_ImmutableData_3d_001.png){:width="20%"} + +For an easy way to represent immutable application data, +check out two plugins that provide ways to handle and manipulate +immutable data: [`freezed`]({{site.pub-pkg}}/freezed) and +[`json_serializable`]({{site.pub-pkg}}/json_serializable), both rated as +[Flutter favorites]({{site.url}}/development/packages-and-plugins/favorites). + +These plugins can be used independently, +but are also great when used together. +The `freezed` package handles in-memory objects +and `json_serializable` maps those immutable +objects to and from the JSON format. + +#### Useful links +{:.no_toc} + +* Freezed + * [`freezed` package]({{site.pub-pkg}}/freezed#how-to-use) video + * [`freezed`]({{site.pub-pkg}}/freezed#how-to-use) package +* json_serializable + * [Serializing JSON using json_serializable]({{site.url}}/development/data-and-backend/json#serializing-json-using-code-generation-libraries) + * [`json_serializable`]({{site.github}}/google/json_serializable.dart/tree/master/example) + example on GitHub + * [`json_serializable`]({{site.pub-api}}/json_serializable/latest/) package + +## Structured local storage ![Structured local storage happy path image](/assets/images/docs/happy-paths/HappyPaths_Icon_Storage_3d_001.png){:width="20%"} + +Structured local storage increases app performance and improves the user +experience by selectively saving expensive or slow data on a user’s device. +This path suggests two plugins for local persistence: `drift` and `hive`. +Which plugin you choose depends on your needs. + +Drift, rated a [Flutter favorite]({{site.url}}/development/packages-and-plugins/favorites), offers a fully-typed object relational mapping (ORM) around SQLite, +with support on all Flutter platforms. Developers who require a fully +relational database on their users' device will benefit most from this package. + +Hive offers a fully-typed object document mapping (ODM) around a custom +storage solution, with support on all Flutter platforms. Developers who do not +require a fully relational database, especially if they use document-based storage +on their server (like Cloud Firestore) will benefit most from this package. + +#### Useful links +{:.no_toc} + +* Drift: + * [The boring flutter development show using Drift]({{site.youtube-site}}/watch?v=9o_M-LjO4no) video + * [Fluent sqlite database]({{site.youtube-site}}/watch?v=zpWsedYMczM&t=9s) + video that references Drift’s previous name, Moor + * [`drift`]({{site.pub-pkg}}/drift) package +* Hive: + * [Hive NoSQL Database IN 16 Minutes]({{site.youtube-site}}/watch?v=w8cZKm9s228) video + * [`hive`]({{site.pub-pkg}}/hive) package + + +## Web sockets ![Web Sockets Happy path image](/assets/images/docs/happy-paths/HappyPaths_Icon_WebSockets_3d_001.png){:width="20%"} + +Web sockets enable communication between Flutter clients and servers. +This path suggests two packages to use when installing and using web sockets. + +Use the [`web_socket_channel`]({{site.pub-pkg}}/web_socket_channel) +package for client-side web socket connections, and the +[`web_socket_connections`]({{site.pub-pkg}}/shelf_web_socket) package +for server-side Dart web sockets. + +#### Useful links +{:.no_toc} + +* web_socket_channel: + * [`Work with WebSockets`]({{site.url}}/cookbook/networking/web-sockets) + cookbook recipe + * [`web_socket_channel`]({{site.github}}/dart-lang/web_socket_channel/blob/master/example/example.dart) + example on GitHub + * [`web_socket_channel`]({{site.pub-pkg}}/web_socket_channel) package + +* shelf_web_socket + * [`shelf_web_socket`]({{site.github}}/dart-lang/shelf_web_socket#web-socket-handler-for-shelf) + example on GitHub + * [`shelf_web_socket`]({{site.pub-pkg}}/shelf_web_socket) package diff --git a/src/development/tools/sdk/release-notes/index.md b/src/development/tools/sdk/release-notes/index.md index 049601c39a..cc75ccf4e6 100644 --- a/src/development/tools/sdk/release-notes/index.md +++ b/src/development/tools/sdk/release-notes/index.md @@ -12,6 +12,9 @@ releases to the stable channel. [Hotfixes to the Stable Channel][] on the Flutter wiki. {{site.alert.end}} +* 3.0.0 + * [3.0.0 announcement][] + * [3.0.0 release notes & change log][] * 2.10.0 * [2.10.0 announcement][] * [2.10.0 release notes & change log][] @@ -42,6 +45,8 @@ releases to the stable channel. * Earlier * [Archived release notes][] +[3.0.0 announcement]: {{site.flutter-medium}}/whats-new-in-flutter-3-8c74a5bc32d0 +[3.0.0 release notes & change log]: {{site.url}}/development/tools/sdk/release-notes/release-notes-3.0.0 [2.10.0 announcement]: {{site.flutter-medium}}/whats-new-in-flutter-2-10-5aafb0314b12 [2.10.0 release notes & change log]: {{site.url}}/development/tools/sdk/release-notes/release-notes-2.10.0 [2.8.0 announcement]: {{site.flutter-medium}}/whats-new-in-flutter-2-8-d085b763d181 diff --git a/src/development/tools/sdk/release-notes/release-notes-2.10.0.md b/src/development/tools/sdk/release-notes/release-notes-2.10.0.md index 503ec9827f..e0818e0446 100644 --- a/src/development/tools/sdk/release-notes/release-notes-2.10.0.md +++ b/src/development/tools/sdk/release-notes/release-notes-2.10.0.md @@ -6033,7 +6033,7 @@ For information about subsequent bug-fix releases, see [29758](https://github.com/flutter/engine/pull/29758) Roll Fuchsia Mac SDK from Ivf969oJw... to L2bsr8go8... (cla: yes, waiting for tree to go green) -[29761](https://github.com/flutter/engine/pull/29761) Fix Kanji switch in Japanese IME on WIndows (cla: yes, waiting for tree to go green, platform-windows) +[29761](https://github.com/flutter/engine/pull/29761) Fix Kanji switch in Japanese IME on Windows (cla: yes, waiting for tree to go green, platform-windows) [29762](https://github.com/flutter/engine/pull/29762) Roll Fuchsia Linux SDK from ghwyDtFSJ... to Vxe912PZC... (cla: yes, waiting for tree to go green) @@ -8048,7 +8048,7 @@ For information about subsequent bug-fix releases, see [29760](https://github.com/flutter/engine/pull/29760) Empty commit to trigger main artifacts (cla: yes) -[29761](https://github.com/flutter/engine/pull/29761) Fix Kanji switch in Japanese IME on WIndows (cla: yes, waiting for tree to go green, platform-windows) +[29761](https://github.com/flutter/engine/pull/29761) Fix Kanji switch in Japanese IME on Windows (cla: yes, waiting for tree to go green, platform-windows) [29762](https://github.com/flutter/engine/pull/29762) Roll Fuchsia Linux SDK from ghwyDtFSJ... to Vxe912PZC... (cla: yes, waiting for tree to go green) @@ -9506,7 +9506,7 @@ For information about subsequent bug-fix releases, see [29736](https://github.com/flutter/engine/pull/29736) Use Fuchsia's Windows Clang SDK (cla: yes, platform-windows) -[29761](https://github.com/flutter/engine/pull/29761) Fix Kanji switch in Japanese IME on WIndows (cla: yes, waiting for tree to go green, platform-windows) +[29761](https://github.com/flutter/engine/pull/29761) Fix Kanji switch in Japanese IME on Windows (cla: yes, waiting for tree to go green, platform-windows) [29829](https://github.com/flutter/engine/pull/29829) Win32 a11y bridge and platform node delegates (cla: yes, Work in progress (WIP), platform-windows) diff --git a/src/development/tools/sdk/release-notes/release-notes-3.0.0.md b/src/development/tools/sdk/release-notes/release-notes-3.0.0.md new file mode 100644 index 0000000000..d891c7185b --- /dev/null +++ b/src/development/tools/sdk/release-notes/release-notes-3.0.0.md @@ -0,0 +1,572 @@ +--- +title: Flutter 3.0.0 release notes +short-title: 3.0.0 release notes +description: Release notes for Flutter 3.0.0. +--- +This page has release notes for 3.0.0. +For information about subsequent bug-fix releases, see +[Hotfixes to the Stable Channel][]. + +[Hotfixes to the Stable Channel]: https://github.com/flutter/flutter/wiki/Hotfixes-to-the-Stable-Channel + +## What's Changed +### Framework +* Revert "[Fonts] Update icons" by @guidezpl in https://github.com/flutter/flutter/pull/95966 +* Improve iOS fidelity of `barrierColor`s and edge decorations for full-screen Cupertino page transitions by @willlockwood in https://github.com/flutter/flutter/pull/95537 +* [Fonts] Update icons by @guidezpl in https://github.com/flutter/flutter/pull/96115 +* Allow `Checkbox`es in `DataTable`s to inherit colors from `CheckboxTheme` by @willlockwood in https://github.com/flutter/flutter/pull/96007 +* Fix autofill eligibility check by @LongCatIsLooong in https://github.com/flutter/flutter/pull/95210 +* [DropdownButtonFormField] Add borderRadius property by @dheerajv09 in https://github.com/flutter/flutter/pull/95944 +* Fix `DataTable` `_SortArrow` changing orientation when state is updated by @markusaksli-nc in https://github.com/flutter/flutter/pull/94455 +* Fix typo by @goderbauer in https://github.com/flutter/flutter/pull/96195 +* RawKeyboard repeat events, and SingleActivator.includeRepeats by @dkwingsmt in https://github.com/flutter/flutter/pull/96154 +* InteractiveViewer scaleFactor by @justinmc in https://github.com/flutter/flutter/pull/95224 +* Reland "Ensure the engineLayer is disposed when an OpacityLayer is disabled"" by @dnfield in https://github.com/flutter/flutter/pull/96295 +* Disallow copy and cut when `obscureText` is set on `TextField` by @gspencergoog in https://github.com/flutter/flutter/pull/96233 +* Revert "Disallow copy and cut when `obscureText` is set on `TextField` (#96233)" by @gspencergoog in https://github.com/flutter/flutter/pull/96308 +* Fix `paints..something` and `paints..everything` succeeding when they should fail by @willlockwood in https://github.com/flutter/flutter/pull/95993 +* Fixes `RangeError` bug when length of `TabBar.tabs` is changed by @werainkhatri in https://github.com/flutter/flutter/pull/94623 +* Make `FocusNode.traversalChildren` not be affected by parent's `canRequestFocus` by @gspencergoog in https://github.com/flutter/flutter/pull/95061 +* fix a scrollbar bug by @xu-baolin in https://github.com/flutter/flutter/pull/95894 +* Do not crash on LeaderLayer.applyTransform after retained rendering by @goderbauer in https://github.com/flutter/flutter/pull/96144 +* LayerLink can temporary allow multiple leaders by @chunhtai in https://github.com/flutter/flutter/pull/95977 +* TextEditingValue default selection docs by @justinmc in https://github.com/flutter/flutter/pull/96245 +* Adds ability to mark a subtree as not traversable by @werainkhatri in https://github.com/flutter/flutter/pull/94626 +* InkResponse enable if onTapDown is not null by @markusaksli-nc in https://github.com/flutter/flutter/pull/96224 +* InkWell.overlayColor is now resolved against MaterialState.pressed by @HansMuller in https://github.com/flutter/flutter/pull/96435 +* Support Scribble Handwriting by @fbcouch in https://github.com/flutter/flutter/pull/75472 +* [RenderListWheelViewport] Update content dimensions to prevent scroll offset changes by @xu-baolin in https://github.com/flutter/flutter/pull/96102 +* Fix Dialog alignment doc by @TahaTesser in https://github.com/flutter/flutter/pull/96388 +* Enable no_leading_underscores_for_library_prefixes by @goderbauer in https://github.com/flutter/flutter/pull/96420 +* Expose keyCode field in RawKeyEventDataWeb. by @b-luk in https://github.com/flutter/flutter/pull/96483 +* enable more retained rendering opportunities for LeaderLayer by @goderbauer in https://github.com/flutter/flutter/pull/96486 +* Migrate FloatingActionButton to Material 3 by @darrenaustin in https://github.com/flutter/flutter/pull/94486 +* Make `DraggableScrollableController` a `ChangeNotifier` by @caseycrogers in https://github.com/flutter/flutter/pull/96089 +* enable unnecessary_late by @goderbauer in https://github.com/flutter/flutter/pull/96417 +* Correct scroll notifications for NestedScrollView by @Piinks in https://github.com/flutter/flutter/pull/96482 +* MaterialStateProperty Docs by @Piinks in https://github.com/flutter/flutter/pull/96532 +* Add debug property for onPointerHover by @WasserEsser in https://github.com/flutter/flutter/pull/96555 +* Date Picker year selectors should announce as 'buttons' to accessibility framework. by @darrenaustin in https://github.com/flutter/flutter/pull/96546 +* Revert "Support Scribble Handwriting" by @LongCatIsLooong in https://github.com/flutter/flutter/pull/96615 +* Add Supported devices to the TapGestureRecognizer by @chunhtai in https://github.com/flutter/flutter/pull/96560 +* Fix UNUSED_ELEMENT_PARAMETER for field formal initializers. by @scheglov in https://github.com/flutter/flutter/pull/96553 +* Mac cmd + shift + left/right by @justinmc in https://github.com/flutter/flutter/pull/95948 +* Modularize ReorderableListView auto scrolling logic by @chunhtai in https://github.com/flutter/flutter/pull/96563 +* Slider: add themeable mouse cursor v2 by @HansMuller in https://github.com/flutter/flutter/pull/96623 +* Land Set "basic" mouse cursor for disabled buttons, PR #89346 by @HansMuller in https://github.com/flutter/flutter/pull/96561 +* Fix a [_ViewportElement] RenderObjectChild update bug by @xu-baolin in https://github.com/flutter/flutter/pull/96377 +* Provide Appbar's `foregroundColor` to package license page titles by @TahaTesser in https://github.com/flutter/flutter/pull/95685 +* Add example for CustomMultiChildLayout by @gspencergoog in https://github.com/flutter/flutter/pull/96632 +* PopupMenu: add themeable mouse cursor v2 by @HansMuller in https://github.com/flutter/flutter/pull/96567 +* Added TabBar.splashFactory, TabBarTheme.splashFactory,overlayColor by @HansMuller in https://github.com/flutter/flutter/pull/96252 +* [framework] dont null assert in _debugVerifyIllFatedPopulation by @jonahwilliams in https://github.com/flutter/flutter/pull/96551 +* Disallow copy and cut when text field is obscured. by @gspencergoog in https://github.com/flutter/flutter/pull/96309 +* feat: Added more youtube refs to widgets docstrings by @albertodev01 in https://github.com/flutter/flutter/pull/96484 +* update adaptive slider docs by @maheshmnj in https://github.com/flutter/flutter/pull/96599 +* Fix UNUSED_ELEMENT_PARAMETER for unused field formal parameter. by @scheglov in https://github.com/flutter/flutter/pull/96684 +* feat: added custom padding in PopupMenuButton by @arafaysaleem in https://github.com/flutter/flutter/pull/96657 +* [framework] remove hashcode override for Element by @jonahwilliams in https://github.com/flutter/flutter/pull/96644 +* Do not eagerly allocate inherited widget caches when initializing element tree by @jonahwilliams in https://github.com/flutter/flutter/pull/95596 +* Revert "feat: added custom padding in PopupMenuButton (#96657)" by @gspencergoog in https://github.com/flutter/flutter/pull/96781 +* Fix animate to curve argument by @caseycrogers in https://github.com/flutter/flutter/pull/96627 +* Clean up mouse region code by @chunhtai in https://github.com/flutter/flutter/pull/96636 +* Prevents DropdownButton from applying borderRadius property to first and last element of the list. by @chinmoy12c in https://github.com/flutter/flutter/pull/96695 +* Adds BorderStyle property to TabPageSelector by @chinmoy12c in https://github.com/flutter/flutter/pull/92436 +* Remove duplicate hashCode values & add missing commas by @TahaTesser in https://github.com/flutter/flutter/pull/96844 +* Removed the date from the Next/Previous month button's semantics for the Date Picker. by @darrenaustin in https://github.com/flutter/flutter/pull/96876 +* chore: added YouTube ref to docstring by @albertodev01 in https://github.com/flutter/flutter/pull/96880 +* chore(flutter_test): updated 'matchesGoldenFile' documentation by @albertodev01 in https://github.com/flutter/flutter/pull/96194 +* Use strict-raw-types analysis instead of no-implicit-dynamic by @srawlins in https://github.com/flutter/flutter/pull/96296 +* [Keyboard] Dispatch solitary synthesized `KeyEvent`s by @dkwingsmt in https://github.com/flutter/flutter/pull/96874 +* [web] validate WebDriver responses by @yjbanov in https://github.com/flutter/flutter/pull/96884 +* Call image stream listeners asynchronously if added asynchronously by @WasserEsser in https://github.com/flutter/flutter/pull/95525 +* chore: Moved didUpdateWidget calls first by @albertodev01 in https://github.com/flutter/flutter/pull/96944 +* Explain how MaterialApp renders text style in absence of Material Widget by @TahaTesser in https://github.com/flutter/flutter/pull/96530 +* Enable no_leading_underscores_for_local_identifiers by @goderbauer in https://github.com/flutter/flutter/pull/96422 +* Add ability to control if bottom child focus can be excluded in `AnimatedCrossFade` by @TahaTesser in https://github.com/flutter/flutter/pull/96593 +* Add closeDrawer and closeEndDrawer in ScaffoldState by @pedromassango in https://github.com/flutter/flutter/pull/96960 +* PageView scroll physics to match Android by @nt4f04uNd in https://github.com/flutter/flutter/pull/95423 +* ListTile: add themeable mouse cursor by @TahaTesser in https://github.com/flutter/flutter/pull/96740 +* Adds `CheckboxListTile.checkboxShape` by @werainkhatri in https://github.com/flutter/flutter/pull/95714 +* Allow current leader of layerlink to detach before the previous leade… by @chunhtai in https://github.com/flutter/flutter/pull/96810 +* Export shadows to `Icon` API by @mateusfccp in https://github.com/flutter/flutter/pull/83638 +* Deprecate Scrollbar isAlwaysShown -> thumbVisibility by @Piinks in https://github.com/flutter/flutter/pull/96957 +* Show keyboard after text input connection restarts by @LongCatIsLooong in https://github.com/flutter/flutter/pull/96541 +* Revert "PageView scroll physics to match Android" by @Piinks in https://github.com/flutter/flutter/pull/97150 +* [framework] remove extra casts by @jonahwilliams in https://github.com/flutter/flutter/pull/97155 +* add direction to CupertinoPickerDefaultSelectionOverlay by @Dan-Crane in https://github.com/flutter/flutter/pull/92959 +* relax routerReportsNewRouteInformation function signature by @chunhtai in https://github.com/flutter/flutter/pull/97154 +* Adds `CommonFinders.bySubtype()` finder. by @lrhn in https://github.com/flutter/flutter/pull/91415 +* Use a more appropriate curve on ScrollsToTop by @SuhwanCha in https://github.com/flutter/flutter/pull/96574 +* Deprecate Scrollbar hoverThickness and showTrackOnHover by @Piinks in https://github.com/flutter/flutter/pull/97173 +* Add splashRadius to PopupMenuButton by @Moluram in https://github.com/flutter/flutter/pull/91148 +* [framework] make HitTestEntry generic by @jonahwilliams in https://github.com/flutter/flutter/pull/97175 +* Mirror before scaling in _AnimatedIconPainter by @Amir-P in https://github.com/flutter/flutter/pull/93312 +* Flutter web add support for NetworkImage headers by @jonas-martinez in https://github.com/flutter/flutter/pull/85954 +* Re-land "Support Scribble Handwriting" (#96615) by @fbcouch in https://github.com/flutter/flutter/pull/96881 +* Revert the Scribble reland by @justinmc in https://github.com/flutter/flutter/pull/97405 +* Update RawScrollbar to support the track by @Piinks in https://github.com/flutter/flutter/pull/97335 +* Deprecate `useDeleteButtonTooltip` for Chips by @RoyARG02 in https://github.com/flutter/flutter/pull/96174 +* `RefreshIndicator`: Add an interactive example by @TahaTesser in https://github.com/flutter/flutter/pull/97254 +* Add `CupertinoTimerPicker` Interactive Example by @TahaTesser in https://github.com/flutter/flutter/pull/93621 +* Fix tappable area for `DropdownButtonFormField` & add `InkWell` to `DropdownButton` by @TahaTesser in https://github.com/flutter/flutter/pull/95906 +* fixes navigator to be able to handle route with duplicate page key in… by @chunhtai in https://github.com/flutter/flutter/pull/97394 +* Update `PopupMenuButton` example by @TahaTesser in https://github.com/flutter/flutter/pull/96681 +* [Icons] Prevent double underscores after replacement by @guidezpl in https://github.com/flutter/flutter/pull/96904 +* improve docs for testing dart fix by @werainkhatri in https://github.com/flutter/flutter/pull/97493 +* PointerDeviceKind and ui.PointerChange forwards-compatibility by @moffatman in https://github.com/flutter/flutter/pull/97350 +* Re-land "Support Scribble Handwriting" (#96615) by @fbcouch in https://github.com/flutter/flutter/pull/97437 +* BottomNavigationBar: add themeable mouse cursor by @TahaTesser in https://github.com/flutter/flutter/pull/96736 +* Fix VisualDensity's vertical lerp implementation by @WasserEsser in https://github.com/flutter/flutter/pull/96597 +* chore: Updated AutofillContextAction documentation by @albertodev01 in https://github.com/flutter/flutter/pull/97245 +* Updated gen_defaults to use new JSON output from the Material token database. by @darrenaustin in https://github.com/flutter/flutter/pull/97596 +* Allow Clip.none as a valid clipBehavior by @Piinks in https://github.com/flutter/flutter/pull/95593 +* Add DisplayFeatureSubScreen widget by @andreidiaconu in https://github.com/flutter/flutter/pull/92907 +* Updated the FAB defaults to only use function overrides for computed values. by @darrenaustin in https://github.com/flutter/flutter/pull/97677 +* Add docs about horizontal scrollbars by @Piinks in https://github.com/flutter/flutter/pull/97673 +* Update SliverChildDelegate docs by @Piinks in https://github.com/flutter/flutter/pull/97674 +* Add splashBorderRadius to TabBar by @nayeemtby in https://github.com/flutter/flutter/pull/97204 +* Invalidate the TextPainter line metrics cache when redoing text layout by @jason-simmons in https://github.com/flutter/flutter/pull/97446 +* Fix RouterObserver didPop is not called when reverseTransitionDuratio… by @chunhtai in https://github.com/flutter/flutter/pull/97171 +* Fix Local `SwitchTheme` not being inherited by `Switch` Widget by @TahaTesser in https://github.com/flutter/flutter/pull/97705 +* Clean up the bindings APIs. by @Hixie in https://github.com/flutter/flutter/pull/89451 +* Fix Local `CheckBoxTheme` not being inherited by `CheckBox` Widget by @TahaTesser in https://github.com/flutter/flutter/pull/97715 +* Fix Local `RadioTheme` not being inherited by `Radio` Widget by @TahaTesser in https://github.com/flutter/flutter/pull/97713 +* Fix `PopupMenuButton` example tag by @TahaTesser in https://github.com/flutter/flutter/pull/97763 +* Prepare the flutter.material.RawMaterialButton.mouseCursor doc template for themeable mouse cursors by @jpnurmi in https://github.com/flutter/flutter/pull/88470 +* Text editing shift + tap + drag interaction by @justinmc in https://github.com/flutter/flutter/pull/95213 +* Make the application lifecycle does not affect `SchedulerBinding.scheduleForcedFrame`. by @ColdPaleLight in https://github.com/flutter/flutter/pull/97468 +* Report progress on Dismissible update callback by @cachapa in https://github.com/flutter/flutter/pull/95504 +* RenderIndexedStack - Mark invisible children as offstage in debugDescribeProperties by @WasserEsser in https://github.com/flutter/flutter/pull/96639 +* TabBar: add themeable mouse cursor by @TahaTesser in https://github.com/flutter/flutter/pull/96737 +* removes `Material` from tests of `FooButton`s that implement it internally by @werainkhatri in https://github.com/flutter/flutter/pull/96899 +* Update default `ThemeData.textTheme` styles to Material 3 typography by @darrenaustin in https://github.com/flutter/flutter/pull/97829 +* Undo/redo by @justinmc in https://github.com/flutter/flutter/pull/96968 +* Remove RenderEditable dependency from TextSelectionHandleOverlay by @chunhtai in https://github.com/flutter/flutter/pull/97967 +* [framework] don't hit test for system nav bar or system chrome on desktop by @jonahwilliams in https://github.com/flutter/flutter/pull/97883 +* [framework] inline casts on Element.widget getter to improve web performance by @jonahwilliams in https://github.com/flutter/flutter/pull/97822 +* [EditableText] honor the "brieflyShowPassword" system setting by @LongCatIsLooong in https://github.com/flutter/flutter/pull/97769 +* Revert "[EditableText] honor the "brieflyShowPassword" system setting" by @godofredoc in https://github.com/flutter/flutter/pull/98089 +* implemented TapUp within InkResponse and InkWell by @gslender in https://github.com/flutter/flutter/pull/93833 +* Fix timer keeps active when resampling disabled in some cases by @wangying3426 in https://github.com/flutter/flutter/pull/97197 +* Unify Text selection API by @chunhtai in https://github.com/flutter/flutter/pull/98073 +* Allow remove listener on disposed change notifier by @chunhtai in https://github.com/flutter/flutter/pull/97988 +* [flutter_driver] show refresh rate status in timeline summary by @cyanglaz in https://github.com/flutter/flutter/pull/95699 +* Shift tap on an unfocused field by @justinmc in https://github.com/flutter/flutter/pull/97543 +* Windows/Linux keyboard shortcuts at a wordwrap by @justinmc in https://github.com/flutter/flutter/pull/96323 +* PointerDeviceKind forwards-compatibility in flutter_test by @moffatman in https://github.com/flutter/flutter/pull/98202 +* EditableText does not request focus on autofill by @LongCatIsLooong in https://github.com/flutter/flutter/pull/97846 +* [framework] use platform touchslop on Android by @jonahwilliams in https://github.com/flutter/flutter/pull/97971 +* Fix NavigationRail Indicator alignment for `NavigationRailLabelType.none` by @TahaTesser in https://github.com/flutter/flutter/pull/98028 +* Update Material tokens to v0.81. by @darrenaustin in https://github.com/flutter/flutter/pull/98149 +* Add `keyLog` and `connectionFactory` to HttpClient implementations by @brianquinlan in https://github.com/flutter/flutter/pull/98045 +* Reland "[EditableText] honor the "brieflyShowPassword" system setting #97769 " by @LongCatIsLooong in https://github.com/flutter/flutter/pull/98150 +* [performance] Process dirty nodes from top to bottom during paint to avoid unnecessary layer tree walks by @goderbauer in https://github.com/flutter/flutter/pull/98219 +* Refactor TextSelectionOverlay by @chunhtai in https://github.com/flutter/flutter/pull/98153 +* [performance] Trace direct calls to inflateWidget by @goderbauer in https://github.com/flutter/flutter/pull/98277 +* Add a BindingBase.debugBindingType() method to enable asserts that want to verify that the binding isn't initialized by @Hixie in https://github.com/flutter/flutter/pull/98226 +* Fix `fooTheme.of(context);` usage docs by @TahaTesser in https://github.com/flutter/flutter/pull/98402 +* Add `CupertinoSlider` example by @TahaTesser in https://github.com/flutter/flutter/pull/93633 +* CupertinoActionSheet: Update sample by @TahaTesser in https://github.com/flutter/flutter/pull/98356 +* CupertinoAlertDialog: Update sample by @TahaTesser in https://github.com/flutter/flutter/pull/98357 +* Add custom size constraints parameter to `PopupMenu` by @TahaTesser in https://github.com/flutter/flutter/pull/97798 +* Update `NavigationBar` to support Material 3 token by @darrenaustin in https://github.com/flutter/flutter/pull/98285 +* Add `CupertinoPicker` interactive example by @TahaTesser in https://github.com/flutter/flutter/pull/93622 +* Add `ExpansionTileTheme` by @TahaTesser in https://github.com/flutter/flutter/pull/98405 +* Update `CupertinoTextField` example by @TahaTesser in https://github.com/flutter/flutter/pull/93738 +* CupertinoSegmentedControl: Add an interactive example by @TahaTesser in https://github.com/flutter/flutter/pull/98154 +* CupertinoSlidingSegmentedControl: Add an interactive example by @TahaTesser in https://github.com/flutter/flutter/pull/98156 +* Added a NavgationBar example with nested Navigators by @HansMuller in https://github.com/flutter/flutter/pull/98440 +* Revert "[performance] Process dirty nodes from top to bottom during paint to avoid unnecessary layer tree walks" by @goderbauer in https://github.com/flutter/flutter/pull/98520 +* Hide toolbar when selection is out of view by @Renzo-Olivares in https://github.com/flutter/flutter/pull/98152 +* Add explanation to ChangeNotifier by @chunhtai in https://github.com/flutter/flutter/pull/98295 +* Dismiss text selection toolbar with ESC by @markusaksli-nc in https://github.com/flutter/flutter/pull/98511 +* Dismiss Autocomplete with ESC by @markusaksli-nc in https://github.com/flutter/flutter/pull/97790 +* Revert "Dismiss text selection toolbar with ESC" by @markusaksli-nc in https://github.com/flutter/flutter/pull/98600 +* Dismiss Modal Barrier on `handleTapCancel` by @TahaTesser in https://github.com/flutter/flutter/pull/98191 +* Remove unused parameter and consequently unused variable by @mateusfccp in https://github.com/flutter/flutter/pull/98428 +* Update example code and docs for InteractiveViewer.builder by @goderbauer in https://github.com/flutter/flutter/pull/98623 +* Remove deprecated RectangularSliderTrackShape.disabledThumbGapWidth by @Piinks in https://github.com/flutter/flutter/pull/98613 +* Update stretching overscroll clip behavior by @Piinks in https://github.com/flutter/flutter/pull/97678 +* Remove deprecated UpdateLiveRegionEvent by @Piinks in https://github.com/flutter/flutter/pull/98615 +* Remove `clipBehavior == Clip.none` conditions by @TahaTesser in https://github.com/flutter/flutter/pull/98503 +* Show `RefreshIndicator` on top when scroll's axis direction is up (matching native behaviour) by @TahaTesser in https://github.com/flutter/flutter/pull/93779 +* Remove deprecated VelocityTracker constructor by @Piinks in https://github.com/flutter/flutter/pull/98541 +* Add more tests to slider to avoid future breakages by @goderbauer in https://github.com/flutter/flutter/pull/98772 +* Revert "Add more tests to slider to avoid future breakages" by @zanderso in https://github.com/flutter/flutter/pull/98783 +* Spacebar and enter in EditableText work with Inkwells by @justinmc in https://github.com/flutter/flutter/pull/98469 +* Avoid unnecessary lambdas in SelectionOverlay.showHandles() by @tgucio in https://github.com/flutter/flutter/pull/98912 +* Update comments for chip tests by @RoyARG02 in https://github.com/flutter/flutter/pull/97476 +* Added optional parameter keyboardType to showDatePicker by @kirolous-nashaat in https://github.com/flutter/flutter/pull/93439 +* Fix getOffsetForCaret to return correct value if contains widget span by @chunhtai in https://github.com/flutter/flutter/pull/98542 +* Reland "Add more tests to slider to avoid future breakages (#98772)" by @goderbauer in https://github.com/flutter/flutter/pull/98936 +* Enable use_if_null_to_convert_nulls_to_bools lint by @tgucio in https://github.com/flutter/flutter/pull/98753 +* Remove redundant hide handles API from TextSelectionDelegate by @chunhtai in https://github.com/flutter/flutter/pull/98944 +* Test that render object changed its visual appearance after texture is create by @blasten in https://github.com/flutter/flutter/pull/98622 +* Add actionsOverflowAlignment parameter to dialog by @himamis in https://github.com/flutter/flutter/pull/95995 +* Fixed some issues and clarified the docs for ReorderableListView. by @darrenaustin in https://github.com/flutter/flutter/pull/98954 +* Remove deprecated DayPicker and MonthPicker by @Piinks in https://github.com/flutter/flutter/pull/98543 +* Adds `onReorderStart` and `onReorderEnd` arguments to `ReorderableList`. by @werainkhatri in https://github.com/flutter/flutter/pull/96049 +* Correct the MediaQuery test name by @nt4f04uNd in https://github.com/flutter/flutter/pull/98984 +* Revert "Remove redundant hide handles API from TextSelectionDelegate … by @chunhtai in https://github.com/flutter/flutter/pull/99008 +* Clean up ClipboardStatusNotifier by @chunhtai in https://github.com/flutter/flutter/pull/98951 +* Use int for PlaceholderSpan.placeholderCodeUnit by @tgucio in https://github.com/flutter/flutter/pull/98971 +* Draggable can be accepted when the data is null by @xu-baolin in https://github.com/flutter/flutter/pull/97355 +* Call bringIntoView after RenderEditable updates on paste by @tgucio in https://github.com/flutter/flutter/pull/98604 +* Assert golden files use the right extension by @Piinks in https://github.com/flutter/flutter/pull/99016 +* Revert "Assert golden files use the right extension" by @hterkelsen in https://github.com/flutter/flutter/pull/99075 +* Pasting collapses the selection and puts it after the pasted content by @justinmc in https://github.com/flutter/flutter/pull/98679 +* Correct font weight for Cupertino tab label by @SimonHausdorf in https://github.com/flutter/flutter/pull/90109 +* adds `trackRadius` to `ScrollbarPainter` and `RawScrollbar` by @werainkhatri in https://github.com/flutter/flutter/pull/98018 +* Fix a Tabs crash when change the TabControllers by @xu-baolin in https://github.com/flutter/flutter/pull/98242 +* Re-land Assert golden files use the right extension by @Piinks in https://github.com/flutter/flutter/pull/99082 +* Do not crash if dispatch the mouse events before the tooltip overlay detached by @xu-baolin in https://github.com/flutter/flutter/pull/97268 +* [ReorderableListView] Add `footer` by @TahaTesser in https://github.com/flutter/flutter/pull/92086 +* Add `clipBehavior` to `Snackbar` by @TahaTesser in https://github.com/flutter/flutter/pull/98252 +* Add Widget of the Week links by @craiglabenz in https://github.com/flutter/flutter/pull/99178 +* feat: Added docstring examples to AnimatedBuilder and ChangeNotifier by @albertodev01 in https://github.com/flutter/flutter/pull/98628 +* [Keyboard] Correctly convert down events that are immediately synthesized released by @dkwingsmt in https://github.com/flutter/flutter/pull/99200 +* Updated to v0.86 of the Material Design tokens. by @darrenaustin in https://github.com/flutter/flutter/pull/99292 +* Add NavigationBar dartpad example by @maheshmnj in https://github.com/flutter/flutter/pull/97046 +* Migrates packages/flutter to from `hashValues` to `Object.hash` by @werainkhatri in https://github.com/flutter/flutter/pull/96109 +* Added viewport fraction parameter to tabView by @Hari-07 in https://github.com/flutter/flutter/pull/98512 +* [framework] improve Notification API performance by skipping full Element tree traversal by @jonahwilliams in https://github.com/flutter/flutter/pull/98451 +* Remove redundant properties passed to _Editable by @Renzo-Olivares in https://github.com/flutter/flutter/pull/99192 +* Revert "Clean up ClipboardStatusNotifier (#98951)" by @chunhtai in https://github.com/flutter/flutter/pull/99361 +* Reland "Dismiss text selection toolbar with ESC" by @markusaksli-nc in https://github.com/flutter/flutter/pull/98995 +* Fix a Scrollbar hittest penetration issue by @xu-baolin in https://github.com/flutter/flutter/pull/99328 +* Revert "Draggable can be accepted when the data is null" by @Piinks in https://github.com/flutter/flutter/pull/99419 +* Limit overscroll stretching by @Piinks in https://github.com/flutter/flutter/pull/99364 +* Simplify SafeArea test for maintainBottomViewPadding to ensure maintainBottomViewPadding is always respected by @joellurcook in https://github.com/flutter/flutter/pull/97646 +* Specify widget height in EditableText shortcuts tests by @tgucio in https://github.com/flutter/flutter/pull/98607 +* More beautiful linear_gradient sample by @goderbauer in https://github.com/flutter/flutter/pull/99298 +* `CupertinoSliverNavigationBar`: Add example by @TahaTesser in https://github.com/flutter/flutter/pull/99384 +* Add material localizations for keyboard keys used for shortcut descriptions in menus. by @gspencergoog in https://github.com/flutter/flutter/pull/99020 +* Deprecate MaterialButtonWithIconMixin by @Piinks in https://github.com/flutter/flutter/pull/99088 +* Use `PlatformDispatcher.instance` over `window` where possible by @goderbauer in https://github.com/flutter/flutter/pull/99496 +* Reland clean up clipboard. by @chunhtai in https://github.com/flutter/flutter/pull/99363 +* Use `BindingBase.platformDispatcher` over `BindingBase.window` where possible by @goderbauer in https://github.com/flutter/flutter/pull/99443 +* Improve documentation of `EditableText`/`TextField` callbacks by @TahaTesser in https://github.com/flutter/flutter/pull/98414 +* complete migration of flutter repo to Object.hash* by @werainkhatri in https://github.com/flutter/flutter/pull/99505 +* Migrate `Dialog` to Material 3 by @TahaTesser in https://github.com/flutter/flutter/pull/98919 +* Improve container widget by @r-mzy47 in https://github.com/flutter/flutter/pull/98389 +* CupertinoButton: Add clickable cursor on web by @TahaTesser in https://github.com/flutter/flutter/pull/96863 +* [framework] add gesture settings to draggable by @jonahwilliams in https://github.com/flutter/flutter/pull/99567 +* Make popup menu position configurable by @TahaTesser in https://github.com/flutter/flutter/pull/98979 +* Re-invoke DismissIntent in Autocomplete if ignored by @markusaksli-nc in https://github.com/flutter/flutter/pull/99403 +* Remove package:typed_data from package:flutter dependencies by @jonahwilliams in https://github.com/flutter/flutter/pull/99604 +* Remove deprecated RenderObjectElement methods by @Piinks in https://github.com/flutter/flutter/pull/98616 +* CupertinoTabBar: Add clickable cursor on web by @TahaTesser in https://github.com/flutter/flutter/pull/96996 +* Remove deprecated Overflow and Stack.overflow by @Piinks in https://github.com/flutter/flutter/pull/98583 +* Remove deprecated CupertinoTextField, TextField, TextFormField maxLengthEnforced by @Piinks in https://github.com/flutter/flutter/pull/98539 +* Fix: Date picker interactive sample not loading by @maheshmnj in https://github.com/flutter/flutter/pull/99401 +* Add Foldable support for modal routes by @andreidiaconu in https://github.com/flutter/flutter/pull/92909 +* Revert "Remove deprecated CupertinoTextField, TextField, TextFormField maxLengthEnforced" by @Piinks in https://github.com/flutter/flutter/pull/99768 +* Update Material tokens to v0.88 by @darrenaustin in https://github.com/flutter/flutter/pull/99568 +* Remove deprecated OutlineButton by @Piinks in https://github.com/flutter/flutter/pull/98546 +* Add the refresh rate fields to perf_test by @cyanglaz in https://github.com/flutter/flutter/pull/99710 +* Re-land removal of maxLengthEnforced deprecation by @Piinks in https://github.com/flutter/flutter/pull/99787 +* Revert "Add the refresh rate fields to perf_test" by @zanderso in https://github.com/flutter/flutter/pull/99801 +* Avoid calling `performLayout` when only the relayout boundary is different by @LongCatIsLooong in https://github.com/flutter/flutter/pull/99056 +* remove unnecessary null check by @a14n in https://github.com/flutter/flutter/pull/99507 +* updateEditingValueWithDeltas snippet docs fix by @justinmc in https://github.com/flutter/flutter/pull/99570 +* Updated tokens to v0.90. by @darrenaustin in https://github.com/flutter/flutter/pull/99782 +* Fix `ColorScheme.shadow` to default to black even for dark themes. by @darrenaustin in https://github.com/flutter/flutter/pull/99722 +* Remove deprecated RenderEditable.onSelectionChanged by @Piinks in https://github.com/flutter/flutter/pull/98582 +* [Material] Create an InkSparkle splash effect that matches the Material 3 ripple effect by @clocksmith in https://github.com/flutter/flutter/pull/99731 +* Remove expired ThemeData deprecations by @Piinks in https://github.com/flutter/flutter/pull/98578 +* Update `NavigationRail` to support Material 3 tokens by @darrenaustin in https://github.com/flutter/flutter/pull/99171 +* Revert "Remove expired ThemeData deprecations" by @Piinks in https://github.com/flutter/flutter/pull/99920 +* Revert "[web] roll Chromium dep to 96.2" by @zanderso in https://github.com/flutter/flutter/pull/99949 +* Fix/text containing finder work with rich texts by @valentinmarq in https://github.com/flutter/flutter/pull/99682 +* Update semantics live region documentation by @jjoelson in https://github.com/flutter/flutter/pull/99987 +* Fix AndroidView offset and resize by @blasten in https://github.com/flutter/flutter/pull/99888 +* Revert "Avoid calling `performLayout` when only the relayout boundary is different" by @LongCatIsLooong in https://github.com/flutter/flutter/pull/100068 +* Make NavigationRail.selectedIndex nullable by @Jjagg in https://github.com/flutter/flutter/pull/95336 +* Revert "Do not eagerly allocate inherited widget caches when initializing element tree" by @jonahwilliams in https://github.com/flutter/flutter/pull/100152 +* Add 'mouseCursor' to TextFormField by @SahajRana in https://github.com/flutter/flutter/pull/99822 +* Web: treat modifier key without location by @moko256 in https://github.com/flutter/flutter/pull/98460 +* Always use texture layer when displaying an Android view by @blasten in https://github.com/flutter/flutter/pull/100091 +* Revert "Always use texture layer when displaying an Android view" by @zanderso in https://github.com/flutter/flutter/pull/100222 +* Add missing `expansionTileTheme` theme copyWith test by @TahaTesser in https://github.com/flutter/flutter/pull/100165 +* docs(flutter_test): fix mention of non-existing `matchesSemanticsNode` by @daadu in https://github.com/flutter/flutter/pull/99659 +* Remove unnecessary ignore: override_on_non_overriding_member by @brianquinlan in https://github.com/flutter/flutter/pull/99793 +* Disable Gold post-submit failures by @Piinks in https://github.com/flutter/flutter/pull/100308 +* Reland: "Always use texture layer when displaying an Android view" by @blasten in https://github.com/flutter/flutter/pull/100237 +* Roll chrome 96 attempt 2 by @yjbanov in https://github.com/flutter/flutter/pull/100073 +* Refractor `compute` by @jellynoone in https://github.com/flutter/flutter/pull/99527 +* Disable post-submit Gold failures entirely by @Piinks in https://github.com/flutter/flutter/pull/100332 +* Add support for surface tint color overlays to `Material` widget. by @darrenaustin in https://github.com/flutter/flutter/pull/100036 +* Material text selection menu should not show pointer cursor by @justinmc in https://github.com/flutter/flutter/pull/100248 +* Revert "[framework] don't hit test for system nav bar or system chrome on desktop" by @jonahwilliams in https://github.com/flutter/flutter/pull/100263 +* [Material] Use InkSparkle for splashFactory in ThemeData when useMaterial3 is true for Android non-web runtimes by @clocksmith in https://github.com/flutter/flutter/pull/99882 +* Reorganize compute docs and add sample code by @goderbauer in https://github.com/flutter/flutter/pull/100253 +* Fix `PopupMenuButton`'s `IconButton` not inheriting `IconTheme` size by @TahaTesser in https://github.com/flutter/flutter/pull/100199 +* Hide toolbar after select all on desktop by @justinmc in https://github.com/flutter/flutter/pull/100261 +* [framework] Remove danger zone by @jonahwilliams in https://github.com/flutter/flutter/pull/100246 +* Add fadeDuration back to TextSelectionOverlay by @chunhtai in https://github.com/flutter/flutter/pull/100381 +* Fix wrong documentation: There is no `LeaderLayer._lastOffset` anymore by @fzyzcjy in https://github.com/flutter/flutter/pull/100300 +* Introduce Theme extensions by @guidezpl in https://github.com/flutter/flutter/pull/98033 +* `CupertinoSwitch`: Add clickable cursor for web by @TahaTesser in https://github.com/flutter/flutter/pull/99554 +* Typo in EditableText strutStyle by @MrBirb in https://github.com/flutter/flutter/pull/100474 +* Fix `deprecated_new_in_comment_reference` for `material` library by @guidezpl in https://github.com/flutter/flutter/pull/100289 +* Fix stretch edge case by @Piinks in https://github.com/flutter/flutter/pull/99365 +* Reland "Add the refresh rate fields to perf_test #99710" by @cyanglaz in https://github.com/flutter/flutter/pull/99854 +* Put stretch indicator behind m3 flag by @Piinks in https://github.com/flutter/flutter/pull/100234 +* Re-land text selection theme clean up by @Piinks in https://github.com/flutter/flutter/pull/99927 +* Hide autocomplete menu on select. by @LongCatIsLooong in https://github.com/flutter/flutter/pull/100251 +* Add `surfaceTint` color to the ColorScheme. by @darrenaustin in https://github.com/flutter/flutter/pull/100153 +* Revert "Re-land text selection theme clean up" by @Piinks in https://github.com/flutter/flutter/pull/100564 +* Make `Tooltip` state class public by @TahaTesser in https://github.com/flutter/flutter/pull/100553 +* [RenderAnimatedSize] Resume interrupted resizing animation on attach by @LongCatIsLooong in https://github.com/flutter/flutter/pull/100519 +* Migrate `Card` widget to support Material 3 by @darrenaustin in https://github.com/flutter/flutter/pull/100532 +* Add back Gold `passfail` by @Piinks in https://github.com/flutter/flutter/pull/100576 +* [framework] use Uint8List for SMC by @jonahwilliams in https://github.com/flutter/flutter/pull/100582 +* Fix a ModalbottomSheet bug by @xu-baolin in https://github.com/flutter/flutter/pull/99970 +* Add `HitTestBehavior` property to `MouseRegion` by @xu-baolin in https://github.com/flutter/flutter/pull/100405 +* Fix: fix the delay of showOnScreen animation when keyboard comes up. by @luckysmg in https://github.com/flutter/flutter/pull/99546 +* Fix crash after paste and unmount by @justinmc in https://github.com/flutter/flutter/pull/100589 +* Fix `compute` in unsound null safety debug mode by @jellynoone in https://github.com/flutter/flutter/pull/100544 +* Updated tokens to v0.92. by @darrenaustin in https://github.com/flutter/flutter/pull/100599 +* Add child for placeholder widget by @M97Chahboun in https://github.com/flutter/flutter/pull/100372 +* Move `ListTileTheme` and its tests into separate classes and add `visualDensity` to the `ListTileTheme` by @TahaTesser in https://github.com/flutter/flutter/pull/100622 +* Revert "Reland: "Always use texture layer when displaying an Android view"" by @blasten in https://github.com/flutter/flutter/pull/100660 +* fix hidden TextSpan with recognizer does not auto scroll by @chunhtai in https://github.com/flutter/flutter/pull/100494 +* Fix typo (again) by @fzyzcjy in https://github.com/flutter/flutter/pull/100684 +* Fixes some widgets(`ListView.builder`, `GridView.builder` etc.) state-lose issue by @xu-baolin in https://github.com/flutter/flutter/pull/100547 +* Revert "Dismiss Modal Barrier on `handleTapCancel` (#98191)" by @chunhtai in https://github.com/flutter/flutter/pull/100784 +* Check for mount after cut postframecallback by @justinmc in https://github.com/flutter/flutter/pull/100776 +* Editable text sends enableInteractiveSelection to text input client by @chunhtai in https://github.com/flutter/flutter/pull/100649 +* Allow Drawer width to be customized by @TytaniumDev in https://github.com/flutter/flutter/pull/99777 +* Android Q transition by default by @AlexV525 in https://github.com/flutter/flutter/pull/98559 +* Revert "Android Q transition by default" by @zanderso in https://github.com/flutter/flutter/pull/100799 +* `Tooltip`: Add an example for `TooltipTriggerMode.manual` and add tests for existing `Tooltip` examples by @TahaTesser in https://github.com/flutter/flutter/pull/100554 +* Reland "Avoid calling `performLayout` when only the relayout boundary is different" by @LongCatIsLooong in https://github.com/flutter/flutter/pull/100581 +* Fix `FollowerLayer` (`CompositedTransformFollower`) has null pointer error when using with some kinds of `Layer`s by @fzyzcjy in https://github.com/flutter/flutter/pull/100672 +* Consider backgroundBlendMode in equality of BoxDecoration by @goderbauer in https://github.com/flutter/flutter/pull/100788 +* ✨ Android Q transition by default by @AlexV525 in https://github.com/flutter/flutter/pull/100812 +* `CupertinoActionSheet`/`CupertinoAlertDialog`: Add clickable cursor for web by @TahaTesser in https://github.com/flutter/flutter/pull/99548 +* `CupertinoSegmentedControl`/`CupertinoSlidingSegmentedControl`: Add clickable cursor for web by @TahaTesser in https://github.com/flutter/flutter/pull/99551 +* Make popup menus avoid display features by @andreidiaconu in https://github.com/flutter/flutter/pull/98981 +* Update performanceOverlay links by @danagbemava-nc in https://github.com/flutter/flutter/pull/100894 +* Relands "Starts using the --source flag to compile the dart registrant. (#98046)" by @gaaclarke in https://github.com/flutter/flutter/pull/100572 +* Reland: "Use texture layer when displaying an Android view" by @blasten in https://github.com/flutter/flutter/pull/100934 +* Revert "Reland: "Use texture layer when displaying an Android view" " by @zanderso in https://github.com/flutter/flutter/pull/100950 +* Allow unknown device kind to scroll scrollables by @chunhtai in https://github.com/flutter/flutter/pull/100800 +* Reland: "Use texture layer when displaying an Android view" by @blasten in https://github.com/flutter/flutter/pull/100990 +* Add isActivatedBy to ShortcutActivator by @gspencergoog in https://github.com/flutter/flutter/pull/100167 +* [Fonts] Update icons by @guidezpl in https://github.com/flutter/flutter/pull/100885 +* Fix `IconTheme` is not inherited when `Icon` is provided to `ListTile.title` and `ListTile.subtitle` by @TahaTesser in https://github.com/flutter/flutter/pull/100757 +* Minor improvements to `ThemeExtension` example by @guidezpl in https://github.com/flutter/flutter/pull/100693 +* Fix `LicensePage` too much spacing padding when `applicationVersion` and `applicationLegalese` are empty by @TahaTesser in https://github.com/flutter/flutter/pull/101030 +* Fix constructor doc for ScrollView.primary by @goderbauer in https://github.com/flutter/flutter/pull/100935 +* Prepare `packages` (minus tools,framework) for `use_super_parameters` by @goderbauer in https://github.com/flutter/flutter/pull/100510 +* Material 3 common buttons should use sparkle splash effect on Android. by @darrenaustin in https://github.com/flutter/flutter/pull/101075 +* Revert "Allow unknown device kind to scroll scrollables (#100800)" by @chunhtai in https://github.com/flutter/flutter/pull/101129 +* Fix Local `DataTableTheme` not being inherited by `DataTable` Widget by @TahaTesser in https://github.com/flutter/flutter/pull/101112 +* Refactor `ToggleButtons` (remove `RawMaterialButton`) by @TahaTesser in https://github.com/flutter/flutter/pull/99493 +* Reland "Allow unknown device kind to scroll scrollables (#100800)" by @chunhtai in https://github.com/flutter/flutter/pull/101301 +* Fix crashes when current route parsing transactions are discarded by @chunhtai in https://github.com/flutter/flutter/pull/100657 +* Implements a PlatformMenuBar widget and associated data structures by @gspencergoog in https://github.com/flutter/flutter/pull/100274 +* Made flag for debugging build time of user created widgets by @gaaclarke in https://github.com/flutter/flutter/pull/100926 +* [Cherrypick] Revert "Refactor `ToggleButtons` (remove `RawMaterialButton`) (#99493)" by @CaseyHillers in https://github.com/flutter/flutter/pull/101538 +* [flutter_releases] Flutter beta 2.13.0-0.2.pre Framework Cherrypicks by @CaseyHillers in https://github.com/flutter/flutter/pull/102193 +* [flutter_releases] Upgrade dwds to 12.1.1 by @christopherfujino in https://github.com/flutter/flutter/pull/101546 +### Tooling +* FFI plugin by @dcharkes in https://github.com/flutter/flutter/pull/94101 +* Revert "FFI plugin" by @zanderso in https://github.com/flutter/flutter/pull/96122 +* Add a new PrebuiltFlutterApplicationPackage interface. by @chingjun in https://github.com/flutter/flutter/pull/95290 +* Do not show v1 Android embedding message for non-Android commands by @jmagman in https://github.com/flutter/flutter/pull/96148 +* Migrate build commands to null safety by @jmagman in https://github.com/flutter/flutter/pull/95649 +* Migrate emulators, packages, upgrade, and downgrade to null safety by @jmagman in https://github.com/flutter/flutter/pull/95712 +* feat(flutter_tools): Added doctor path printing on verbose by @crisboarna in https://github.com/flutter/flutter/pull/95453 +* feat(flutter_tools): Changed NoIdeValidator validation type from error to warning by @crisboarna in https://github.com/flutter/flutter/pull/95492 +* Fix analyze --watch command iterator by @jmagman in https://github.com/flutter/flutter/pull/96264 +* Warm cache with all transitive dependencies in `flutter update-packages` command by @gspencergoog in https://github.com/flutter/flutter/pull/96258 +* Hide PII from doctor validators for GitHub template by @jmagman in https://github.com/flutter/flutter/pull/96250 +* Revert "feat(flutter_tools): Added doctor path printing on verbose" by @zanderso in https://github.com/flutter/flutter/pull/96414 +* Add suggestion for compileSdkVersion warning by @blasten in https://github.com/flutter/flutter/pull/95369 +* Fix typo by @utibeabasi6 in https://github.com/flutter/flutter/pull/96058 +* Update Flutter desktop doc URL in error message by @cbracken in https://github.com/flutter/flutter/pull/96559 +* Bump Android dependencies that rely on Jcenter by @blasten in https://github.com/flutter/flutter/pull/96558 +* Fully support Dart-only mobile and macOS plugins by @stuartmorgan in https://github.com/flutter/flutter/pull/96183 +* fix rsync output utf8decode bug by @intspt in https://github.com/flutter/flutter/pull/95881 +* Fix wrong documentation URL for adding desktop support to existing app by @PoojaB26 in https://github.com/flutter/flutter/pull/94399 +* Document template CMake files by @stuartmorgan in https://github.com/flutter/flutter/pull/96534 +* Migrate assemble and integration_test_device to null safety by @jmagman in https://github.com/flutter/flutter/pull/96630 +* Skip flaky test: background_isolate_test.dart: Hot restart kills background isolates by @keyonghan in https://github.com/flutter/flutter/pull/96678 +* feat: support configure a custom launch url for flutter web by @wangying3426 in https://github.com/flutter/flutter/pull/95002 +* Add boxes around version freshness alerts by @jmagman in https://github.com/flutter/flutter/pull/96152 +* Enable inline Dart plugin implementation on Desktop by @stuartmorgan in https://github.com/flutter/flutter/pull/96610 +* Pass 'build ios' device ID into xcodebuild by @jmagman in https://github.com/flutter/flutter/pull/96669 +* Take screenshot when drive fails to start app or test by @jmagman in https://github.com/flutter/flutter/pull/96828 +* Fix SDK versions for Flutter packages in analyze tests to enable null-safe mode by @DanTup in https://github.com/flutter/flutter/pull/96950 +* Remove unused code from android_device.dart by @swift-kim in https://github.com/flutter/flutter/pull/95450 +* Adjust lipo thinning input/output for macOS by @zanderso in https://github.com/flutter/flutter/pull/97111 +* Use frontend_server from the Dart SDK by @zanderso in https://github.com/flutter/flutter/pull/97078 +* [flutter_tools] support files in flutter analyze #96231 by @Jasguerrero in https://github.com/flutter/flutter/pull/97021 +* Don't use example folder as a project type signal by @stuartmorgan in https://github.com/flutter/flutter/pull/97157 +* [flutter_tools] Fix bug in background_isolate_test.dart by @christopherfujino in https://github.com/flutter/flutter/pull/97170 +* [flutter_tools] auto-migrate dev users to beta by @christopherfujino in https://github.com/flutter/flutter/pull/97028 +* Take drive screenshot on test failure before app is stopped by @jmagman in https://github.com/flutter/flutter/pull/96973 +* Fix hot-restart background-isolate-test test by ensuring updated timestamp is in the future. by @aam in https://github.com/flutter/flutter/pull/97247 +* [flutter_tools] add validation of paths of contained files to os_utils _unpackArchive() by @christopherfujino in https://github.com/flutter/flutter/pull/96565 +* ProxiedDevice, connection to a remotely connected device via flutter daemon. by @chingjun in https://github.com/flutter/flutter/pull/95738 +* [tool] Use an arm64 Dart SDK on arm64 macOS by @zanderso in https://github.com/flutter/flutter/pull/97189 +* FFI plugins by @dcharkes in https://github.com/flutter/flutter/pull/96225 +* Make remaining DAP tests null-safe by @DanTup in https://github.com/flutter/flutter/pull/97368 +* [flutter_tools] remove dummy implementation from abstract class .isEnabled() by @christopherfujino in https://github.com/flutter/flutter/pull/96888 +* Make DAP tests more tolerant of output that didn't come from the app being tested by @DanTup in https://github.com/flutter/flutter/pull/97291 +* Fix typo: recieve => receive by @caioagiani in https://github.com/flutter/flutter/pull/97488 +* Disallow running on unsupported devices by @jmagman in https://github.com/flutter/flutter/pull/97338 +* Export an IPA for distribution via "flutter build ipa" without --export-options-plist by @jmagman in https://github.com/flutter/flutter/pull/97243 +* Revert "Export an IPA for distribution via "flutter build ipa" without --export-options-plist" by @jmagman in https://github.com/flutter/flutter/pull/97616 +* [flutter_tools] Use proper project name in templates by @collinjackson in https://github.com/flutter/flutter/pull/96373 +* [flutter_tool] Download gen_snapshot.zip for macOS desktop by @zanderso in https://github.com/flutter/flutter/pull/97627 +* Change all instance of throwing strings to throw specific error classes. by @chingjun in https://github.com/flutter/flutter/pull/97325 +* Revert "[flutter_tool] Download gen_snapshot.zip for macOS desktop (#97627) by @zanderso in https://github.com/flutter/flutter/pull/97664 +* Addresses the feedbacks in #95738 by @chingjun in https://github.com/flutter/flutter/pull/97457 +* Reland: [flutter_tool] Download gen_snapshot.zip for macOS desktop by @zanderso in https://github.com/flutter/flutter/pull/97671 +* Exit the tool if a DevTools subprocess fails when running on a bot by @jason-simmons in https://github.com/flutter/flutter/pull/97613 +* [flutter_tool] allow disabling profile mode timeline traces by @jonahwilliams in https://github.com/flutter/flutter/pull/97622 +* Export an IPA for distribution via "flutter build ipa" without --export-options-plist by @jmagman in https://github.com/flutter/flutter/pull/97672 +* Pin `package:ffi` in `plugin_ffi` template by @dcharkes in https://github.com/flutter/flutter/pull/97720 +* Restructure Windows plugin template by @stuartmorgan in https://github.com/flutter/flutter/pull/93511 +* [flutter_tools] Fix bundle file not found when flavor contains upperc… by @MichaelTamm in https://github.com/flutter/flutter/pull/92660 +* Fix error in type cast. by @chingjun in https://github.com/flutter/flutter/pull/97778 +* [flutter_tools] increment y instead of m when calling flutter --version on master by @christopherfujino in https://github.com/flutter/flutter/pull/97827 +* Include -isysroot -arch and -miphoneos-version-min when creating dummy module App.framework by @jmagman in https://github.com/flutter/flutter/pull/97689 +* Add support for attachRequest in DAP, running "flutter attach" by @DanTup in https://github.com/flutter/flutter/pull/97652 +* Fix how Gradle resolves Android plugin by @blasten in https://github.com/flutter/flutter/pull/97823 +* Fix typo FutterApplication -> FlutterApplication by @bannzai in https://github.com/flutter/flutter/pull/97897 +* Revert "Fix how Gradle resolves Android plugin" by @blasten in https://github.com/flutter/flutter/pull/98050 +* Export activity for module in AndroidManifest.xml by @blasten in https://github.com/flutter/flutter/pull/98076 +* Add debugging info to android_plugin_example_app_build_test by @dcharkes in https://github.com/flutter/flutter/pull/98107 +* [flutter_tools] Make variants of Pub have consistent method signatures by @swift-kim in https://github.com/flutter/flutter/pull/98119 +* Fix flutter gen-l10n help message by @TahaTesser in https://github.com/flutter/flutter/pull/98147 +* [flutter_tools] fix type error in flutter update-packages --jobs=n by @christopherfujino in https://github.com/flutter/flutter/pull/98283 +* flutter_build_null_unsafe_test print failed build output by @jmagman in https://github.com/flutter/flutter/pull/98310 +* [flutter_tools] remove pub dependencies from universal by @Jasguerrero in https://github.com/flutter/flutter/pull/97722 +* [flutter_tools] rename two unit tests that were not actually being run on CI by @christopherfujino in https://github.com/flutter/flutter/pull/98299 +* Update flutter_tools to look for new VM service message by @bkonyi in https://github.com/flutter/flutter/pull/97683 +* [flutter_tools] do not validate maven upstream if cloud storage override provided by @christopherfujino in https://github.com/flutter/flutter/pull/98293 +* Dump backtrace when cannot attach to observatory by @jmagman in https://github.com/flutter/flutter/pull/98550 +* Remove "beta-quality" for Windows by @timsneath in https://github.com/flutter/flutter/pull/98614 +* [flutter_tools] remove flaky web vm service test by @christopherfujino in https://github.com/flutter/flutter/pull/98540 +* Reland "Enable caching of CPU samples collected at application startup (#89600)" by @bkonyi in https://github.com/flutter/flutter/pull/98769 +* Improve Gradle retry logic by @blasten in https://github.com/flutter/flutter/pull/96554 +* [flutter_tools] deprecate the dev branch from the feature system by @christopherfujino in https://github.com/flutter/flutter/pull/98689 +* Revert "Reland "Enable caching of CPU samples collected at application startup (#89600)"" by @zanderso in https://github.com/flutter/flutter/pull/98803 +* Fixed order dependency and removed no-shuffle-tag in build_ios_framew… by @Swiftaxe in https://github.com/flutter/flutter/pull/94699 +* Add option in ProxiedDevice to only transfer the delta when deploying. by @chingjun in https://github.com/flutter/flutter/pull/97462 +* Removed no-shuffle tag and fixed order dependency in daemon_test.dart by @Swiftaxe in https://github.com/flutter/flutter/pull/98970 +* Skip `can validate flutter version in parallel` test in `Linux web_tool_tests` by @keyonghan in https://github.com/flutter/flutter/pull/99017 +* Increase recommended CocoaPods version to 1.11 by @jmagman in https://github.com/flutter/flutter/pull/98621 +* reads min/target sdk versions from localproperties by @brunotacca in https://github.com/flutter/flutter/pull/98450 +* [dap] Don't use --start-paused when running in Profile/Release mode by @DanTup in https://github.com/flutter/flutter/pull/98926 +* Wait for ios-deploy stdout before closing logLine stream by @jmagman in https://github.com/flutter/flutter/pull/99041 +* Work around VS CMake generation bug by @stuartmorgan in https://github.com/flutter/flutter/pull/98945 +* Print events and views when first frame is taking awhile during tracing by @jmagman in https://github.com/flutter/flutter/pull/98957 +* Revert "reads min/target sdk versions from localproperties" by @blasten in https://github.com/flutter/flutter/pull/99191 +* Starts using the `--source` flag to compile the dart registrant. by @gaaclarke in https://github.com/flutter/flutter/pull/98046 +* Update minimum required version to Xcode 13 by @jmagman in https://github.com/flutter/flutter/pull/97746 +* Fix the race condition in cache_test.dart by @gspencergoog in https://github.com/flutter/flutter/pull/99423 +* Fix custom-device default forwardPortSuccessRegex by @mbriand in https://github.com/flutter/flutter/pull/97719 +* Add Windows performance benchmark by @jonahwilliams in https://github.com/flutter/flutter/pull/99564 +* Add logging when first frame is not rendering by @jmagman in https://github.com/flutter/flutter/pull/99566 +* [flutter_tools] Add timeout duration to error and handle exceptions for HttpHostValidator. by @RoyARG02 in https://github.com/flutter/flutter/pull/98290 +* Support route on ios by @Jasguerrero in https://github.com/flutter/flutter/pull/99078 +* Check string size before Win32 MultiByte <-> WideChar conversions by @cbracken in https://github.com/flutter/flutter/pull/99729 +* Handle hidden dot files in iOS framework bundles by @jmagman in https://github.com/flutter/flutter/pull/99771 +* Fix Typo by @Phelicks in https://github.com/flutter/flutter/pull/97793 +* 95533 min sdk error msgs enhancements by @brunotacca in https://github.com/flutter/flutter/pull/99550 +* Remove tool crash git.io link shortener by @jmagman in https://github.com/flutter/flutter/pull/99574 +* Pass 'assume-initialize-from-dill-up-to-date' flag to the frontend server by @chingjun in https://github.com/flutter/flutter/pull/99791 +* First pass at using platform abstraction for plugins by @fuzzybinary in https://github.com/flutter/flutter/pull/92672 +* [tool] Add CADisableMinimumFrameDurationOnPhone to iOS templates by @cyanglaz in https://github.com/flutter/flutter/pull/94509 +* Fix flutter web app not respecting assets path when in non-root folder by @nicolasvac in https://github.com/flutter/flutter/pull/96774 +* Fix route integration test on ios by @Jasguerrero in https://github.com/flutter/flutter/pull/99781 +* [flutter_tools] exec rather than spawn subprocess from bin/internal/shared.sh by @christopherfujino in https://github.com/flutter/flutter/pull/99871 +* Add portForwarder for ProxiedDevice. by @chingjun in https://github.com/flutter/flutter/pull/100111 +* Add more specific cause on web development tool error output by @yuseok in https://github.com/flutter/flutter/pull/98553 +* MigrateConfig and migrate integration testing base by @GaryQian in https://github.com/flutter/flutter/pull/99092 +* [macOS] Enable universal binary builds by default by @cbracken in https://github.com/flutter/flutter/pull/100271 +* [flutter_tools] Null safe update packages by @christopherfujino in https://github.com/flutter/flutter/pull/99357 +* Reintroduce the ability to override the coverage formatter by @liamappelbe in https://github.com/flutter/flutter/pull/100320 +* [flutter_tools] check if stream is open before sending message in ios device by @christopherfujino in https://github.com/flutter/flutter/pull/99947 +* Handle Flutter.Error events and disable structure errors for noDebug mode by @DanTup in https://github.com/flutter/flutter/pull/100149 +* [flutter_tools] process exception during linux_doctor is handled by @Jasguerrero in https://github.com/flutter/flutter/pull/100159 +* Specify destination when building for macOS by @dnfield in https://github.com/flutter/flutter/pull/100315 +* Revert "Starts using the `--source` flag to compile the dart registrant. (#98046) by @gaaclarke in https://github.com/flutter/flutter/pull/100493 +* Revert "[flutter_tools] remove pub dependencies from universal #97722" by @Jasguerrero in https://github.com/flutter/flutter/pull/100508 +* [macOS] Use arm64 snapshot in arm64 App.framework by @cbracken in https://github.com/flutter/flutter/pull/100504 +* Upgrade to flutter_lints 2.0 by @goderbauer in https://github.com/flutter/flutter/pull/99881 +* [flutter_tools] Skip version freshness check for non-standard remotes by @RoyARG02 in https://github.com/flutter/flutter/pull/97202 +* [dap] Remove some code that's not longer required by @DanTup in https://github.com/flutter/flutter/pull/98928 +* Don't terminate Dart process pids from VM Service, record flutter_tools VM pid by @DanTup in https://github.com/flutter/flutter/pull/100223 +* Remove the end period of a URL in project template by @asashour in https://github.com/flutter/flutter/pull/99816 +* Filter out some stray Xcode logging during macOS builds by @jmagman in https://github.com/flutter/flutter/pull/100707 +* [flutter_tools] Fix VersionUpstreamValidator to respect FLUTTER_GIT_URL by @RoyARG02 in https://github.com/flutter/flutter/pull/100605 +* Add `CADisableMinimumFrameDurationOnPhone` migration by @cyanglaz in https://github.com/flutter/flutter/pull/100647 +* [flutter_tool] Adds --enable-impeller flag to the run command by @zanderso in https://github.com/flutter/flutter/pull/100835 +* Pass ARCHS build setting to flutter assemble on macOS by @jmagman in https://github.com/flutter/flutter/pull/100811 +* [flutter_tools] warn when doctor takes long by @christopherfujino in https://github.com/flutter/flutter/pull/100805 +* [macOS] Remove beta-quality wording from messages by @cbracken in https://github.com/flutter/flutter/pull/99699 +* [Linux] Remove beta-quality wording from messages by @cbracken in https://github.com/flutter/flutter/pull/99700 +* Set ARCHS to single-arch for local engine macOS builds by @jmagman in https://github.com/flutter/flutter/pull/100917 +* [flutter_tool] Have long-running validators fail by @christopherfujino in https://github.com/flutter/flutter/pull/100936 +* [flutter_conductor] Extend timeout for codesign integration test by @christopherfujino in https://github.com/flutter/flutter/pull/100940 +* Migrate .packages -> package_config.json by @sigurdm in https://github.com/flutter/flutter/pull/99677 +* Reland "Enable caching of CPU samples collected at application startup (#89600)" by @bkonyi in https://github.com/flutter/flutter/pull/100995 +* Migrate AGP and Gradle versions to 7.1.2/7.4 by @blasten in https://github.com/flutter/flutter/pull/99723 +* [web] flutter.js initialization with ui.webOnlyWarmupEngine by @ditman in https://github.com/flutter/flutter/pull/100177 +* [winuwp] Add removal warning in config help text by @cbracken in https://github.com/flutter/flutter/pull/101086 +* Retire v1 embedding compatibility from automatic multidex support by @GaryQian in https://github.com/flutter/flutter/pull/100685 +* Prepare `flutter_tools` for `use_super_parameters` by @goderbauer in https://github.com/flutter/flutter/pull/100509 +* [Revert] Skip overall_experience_test.dart: flutter run writes and clears pidfile appropriately by @keyonghan in https://github.com/flutter/flutter/pull/101267 +* Add note to doctor validator if script is running Rosetta by @jmagman in https://github.com/flutter/flutter/pull/101309 +* [Cherrypick] Partial revert of super params in tools (#101436) by @CaseyHillers in https://github.com/flutter/flutter/pull/101527 +* [flutter_releases] Flutter beta 2.13.0-0.3.pre Framework Cherrypicks by @CaseyHillers in https://github.com/flutter/flutter/pull/102620 +### MacOS +* [macOS] Add run release test in devicelab by @cbracken in https://github.com/flutter/flutter/pull/100526 + +## New Contributors +* @willlockwood made their first contribution in https://github.com/flutter/flutter/pull/95537 +* @utibeabasi6 made their first contribution in https://github.com/flutter/flutter/pull/96058 +* @fbcouch made their first contribution in https://github.com/flutter/flutter/pull/75472 +* @b-luk made their first contribution in https://github.com/flutter/flutter/pull/96483 +* @WasserEsser made their first contribution in https://github.com/flutter/flutter/pull/96555 +* @intspt made their first contribution in https://github.com/flutter/flutter/pull/95881 +* @PoojaB26 made their first contribution in https://github.com/flutter/flutter/pull/94399 +* @ipowell made their first contribution in https://github.com/flutter/flutter/pull/91899 +* @swift-kim made their first contribution in https://github.com/flutter/flutter/pull/95450 +* @Dan-Crane made their first contribution in https://github.com/flutter/flutter/pull/92959 +* @SuhwanCha made their first contribution in https://github.com/flutter/flutter/pull/96574 +* @Amir-P made their first contribution in https://github.com/flutter/flutter/pull/93312 +* @jonas-martinez made their first contribution in https://github.com/flutter/flutter/pull/85954 +* @caioagiani made their first contribution in https://github.com/flutter/flutter/pull/97488 +* @MichaelTamm made their first contribution in https://github.com/flutter/flutter/pull/92660 +* @cachapa made their first contribution in https://github.com/flutter/flutter/pull/95504 +* @bannzai made their first contribution in https://github.com/flutter/flutter/pull/97897 +* @gslender made their first contribution in https://github.com/flutter/flutter/pull/93833 +* @brianquinlan made their first contribution in https://github.com/flutter/flutter/pull/98045 +* @KristinBi made their first contribution in https://github.com/flutter/flutter/pull/98159 +* @kirolous-nashaat made their first contribution in https://github.com/flutter/flutter/pull/93439 +* @himamis made their first contribution in https://github.com/flutter/flutter/pull/95995 +* @brunotacca made their first contribution in https://github.com/flutter/flutter/pull/98450 +* @SimonHausdorf made their first contribution in https://github.com/flutter/flutter/pull/90109 +* @Hari-07 made their first contribution in https://github.com/flutter/flutter/pull/98512 +* @mbriand made their first contribution in https://github.com/flutter/flutter/pull/97719 +* @r-mzy47 made their first contribution in https://github.com/flutter/flutter/pull/98389 +* @Phelicks made their first contribution in https://github.com/flutter/flutter/pull/97793 +* @nicolasvac made their first contribution in https://github.com/flutter/flutter/pull/96774 +* @valentinmarq made their first contribution in https://github.com/flutter/flutter/pull/99682 +* @jjoelson made their first contribution in https://github.com/flutter/flutter/pull/99987 +* @SahajRana made their first contribution in https://github.com/flutter/flutter/pull/99822 +* @yuseok made their first contribution in https://github.com/flutter/flutter/pull/98553 +* @jellynoone made their first contribution in https://github.com/flutter/flutter/pull/99527 +* @luckysmg made their first contribution in https://github.com/flutter/flutter/pull/99546 +* @M97Chahboun made their first contribution in https://github.com/flutter/flutter/pull/100372 +* @TytaniumDev made their first contribution in https://github.com/flutter/flutter/pull/99777 + +**Full Changelog**: https://github.com/flutter/flutter/compare/2.10.0...2.13.0-0.4.pre diff --git a/src/development/ui/layout/building-adaptive-apps.md b/src/development/ui/layout/building-adaptive-apps.md index ca84c1bc22..c577fa6711 100644 --- a/src/development/ui/layout/building-adaptive-apps.md +++ b/src/development/ui/layout/building-adaptive-apps.md @@ -890,7 +890,7 @@ toggle `alwaysShown` when on a desktop platform: ```dart return Scrollbar( - isAlwaysShown: DeviceType.isDesktop, + thumbVisibility: DeviceType.isDesktop, controller: _scrollController, child: GridView.count( controller: _scrollController, diff --git a/src/get-started/editor.md b/src/get-started/editor.md index 5b162533f5..281589ba00 100644 --- a/src/get-started/editor.md +++ b/src/get-started/editor.md @@ -67,7 +67,7 @@ Use the following instructions for macos: ### Linux or Windows -Use the following instructions for Linux or WIndows: +Use the following instructions for Linux or Windows: 1. Open plugin preferences (**File > Settings > Plugins**). 1. Select **Marketplace**, select the Flutter plugin and click diff --git a/src/get-started/install/_get-sdk-mac.md b/src/get-started/install/_get-sdk-mac.md index c31720fe42..49c3f8f018 100644 --- a/src/get-started/install/_get-sdk-mac.md +++ b/src/get-started/install/_get-sdk-mac.md @@ -3,11 +3,18 @@ 1. Download the following installation bundle to get the latest {{site.sdk.channel}} release of the Flutter SDK: - [(loading...)](#){:.download-latest-link-{{os}}.btn.btn-primary} + |Intel | | Apple Silicon | + |------| | ---------------| + |[(loading...)](#){:.download-latest-link-{{os}}.btn.btn-primary} | | [(loading...)](#){:.download-latest-link-{{os}}-arm64.apple-silicon.btn.btn-primary} | +
    For other release channels, and older builds, see the [SDK releases][] page. +
    {{site.alert.tip}} + To determine whether your Mac uses an Apple silicon processor, refer to [Mac computers with Apple silicon]{:target="_blank"} on apple.com + {{site.alert.end}}
    + 1. Extract the file in the desired location, for example: {% comment %} @@ -108,3 +115,4 @@ For additional download options, see `flutter help precache`. [snapd]: https://snapcraft.io/flutter [Update your path]: #update-your-path [Upgrading Flutter]: {{site.url}}/development/tools/sdk/upgrading +[Mac computers with Apple silicon]: https://support.apple.com/en-us/HT211814 diff --git a/src/get-started/install/_ios-setup.md b/src/get-started/install/_ios-setup.md index 2a3b0c1f71..4ab98f3170 100644 --- a/src/get-started/install/_ios-setup.md +++ b/src/get-started/install/_ios-setup.md @@ -102,7 +102,13 @@ $ sudo gem install cocoapods ``` {{site.alert.note}} The default version of Ruby requires `sudo` to install the CocoaPods gem. - If you are using a Ruby Version manager, you may need to run without `sudo`. + If you are using a Ruby Version manager, you might need to run without `sudo`. + + Additionally, if you are installing on an [Apple Silicon Mac][], + run the command: + ```terminal + $ sudo gem uninstall ffi && sudo gem install ffi -- --enable-libffi-alloc + ``` {{site.alert.end}}
  5. @@ -173,3 +179,4 @@ or clicking the Run button in Xcode. [Trust Mac]: {{site.url}}/assets/images/docs/setup/trust-computer.png [web download]: {{site.apple-dev}}/xcode/ [Xcode account add]: {{site.url}}/assets/images/docs/setup/xcode-account.png +[Apple Silicon Mac]: https://support.apple.com/en-us/HT211814 diff --git a/src/get-started/install/_linux-desktop-setup.md b/src/get-started/install/_linux-desktop-setup.md index dc74a1d9bf..12d3f8da71 100644 --- a/src/get-started/install/_linux-desktop-setup.md +++ b/src/get-started/install/_linux-desktop-setup.md @@ -1,22 +1,5 @@ ## Linux setup -{{site.alert.warning}} - **Beta!** - This area covers desktop support, - which is available as a beta release. - Beta support still has notable feature gaps, - including accessibility support. - You can try a beta snapshot of desktop support - on the stable channel, or you can keep up - with the latest changes to desktop on the - beta channel. - For more information, see the **Desktop** - section in [What's new in Flutter 2][], - a free article on Medium. -{{site.alert.end}} - -[What's new in Flutter 2]: {{site.flutter-medium}}/whats-new-in-flutter-2-0-fe8e95ecc65 - ### Additional Linux requirements For Linux desktop development, @@ -42,15 +25,3 @@ $ sudo apt-get install clang cmake ninja-build pkg-config libgtk-3-dev liblzma-d [Ninja build]: https://ninja-build.org/ [pkg-config]: https://www.freedesktop.org/wiki/Software/pkg-config/ [liblzma-dev]: https://packages.debian.org/sid/liblzma-dev - -### Enable desktop support - -At the command line, perform the following command to enable desktop support - -```terminal -$ flutter config --enable-linux-desktop -``` - -For more information, see [Desktop support for Flutter][] - -[Desktop support for Flutter]: {{site.url}}/desktop \ No newline at end of file diff --git a/src/get-started/install/_macos-desktop-setup.md b/src/get-started/install/_macos-desktop-setup.md index 1303a9d180..4b8c2c9b57 100644 --- a/src/get-started/install/_macos-desktop-setup.md +++ b/src/get-started/install/_macos-desktop-setup.md @@ -1,22 +1,5 @@ ## macOS setup -{{site.alert.warning}} - **Beta!** - This area covers desktop support, - which is available as a beta release. - Beta support still has notable feature gaps, - including accessibility support. - You can try a beta snapshot of desktop support - on the stable channel, or you can keep up - with the latest changes to desktop on the - beta channel. - For more information, see the **Desktop** - section in [What's new in Flutter 2][], - a free article on Medium. -{{site.alert.end}} - -[What's new in Flutter 2]: {{site.flutter-medium}}/whats-new-in-flutter-2-0-fe8e95ecc65 - ### Additional macOS requirements For macOS desktop development, @@ -27,15 +10,3 @@ you need the following in addition to the Flutter SDK: [CocoaPods]: https://cocoapods.org/ [Xcode]: {{site.apple-dev}}/xcode/ - -### Enable desktop support - -At the command line, perform the following command to enable desktop support - -```terminal -$ flutter config --enable-macos-desktop -``` - -For more information, see [Desktop support for Flutter][] - -[Desktop support for Flutter]: {{site.url}}/desktop \ No newline at end of file diff --git a/src/get-started/install/_path-mac.md b/src/get-started/install/_path-mac.md index 44d045fafc..4e0a9ccd99 100644 --- a/src/get-started/install/_path-mac.md +++ b/src/get-started/install/_path-mac.md @@ -44,6 +44,4 @@ whenever you open a new window. For example: $ which flutter ``` -{% include docs/dart-tool.md %} - [Get the Flutter SDK]: #get-sdk diff --git a/src/get-started/install/macos.md b/src/get-started/install/macos.md index 2c9a8d3ae3..603bb83c0f 100644 --- a/src/get-started/install/macos.md +++ b/src/get-started/install/macos.md @@ -21,9 +21,11 @@ your development environment must meet these minimum requirements: [install `git` separately][]. {{site.alert.important}} - If you're installing on a Mac with the latest [Apple M1 processor][], - you may find [these supplementary notes][] useful reading as we complete support - for the new Apple Silicon architecture. + If you're installing on an [Apple Silicon Mac][], you must also have the Rosetta + translation environment available, which you can install manually by running: + ```terminal + $ sudo softwareupdate --install-rosetta --agree-to-license + ``` {{site.alert.end}} {% include_relative _get-sdk-mac.md %} @@ -48,7 +50,7 @@ to be able to build and run your first Flutter app. Set up your preferred editor. -[Apple M1 processor]: https://www.apple.com/mac/m1 +[Apple Silicon Mac]: https://support.apple.com/en-us/HT211814 [these supplementary notes]: {{site.repo.flutter}}/wiki/Developing-with-Flutter-on-Apple-Silicon [Xcode]: {{site.apple-dev}}/xcode/ [install `git` separately]: https://git-scm.com/download/mac diff --git a/src/resources/games-toolkit.md b/src/resources/games-toolkit.md new file mode 100644 index 0000000000..75f0225039 --- /dev/null +++ b/src/resources/games-toolkit.md @@ -0,0 +1,234 @@ +--- +title: Casual Games Toolkit +description: Learn more about creating app-like games in Flutter. +--- + +The Flutter Casual Games Toolkit, announced at Google I/O 2022, +pulls together new and existing resources that enable you to +speed up development of casual games on mobile. + +This page outlines what resources are available and +where you can find them. + +## How Flutter can help + +In the beginning, four engineers had a vision of +developing a framework for creating performant mobile apps +written as a single application. +What later became Flutter has grown in many ways, +but has always focused on writing apps. + +Games fall into roughly two categories: video games +and app-like games. You are likely familiar with both +types of games, though you might not have thought +about them in quite this way. + +_Video games_ include arcade-style games: shooters, +racing games, and so on. +Video games are generally action-based and use a +continual input device, like a joystick. + +_App-like_ games include casual games such as board games, +card games, puzzles, and strategy games. +App-like games tend to respond to user input, +like tapping on a card or entering a number or letter. + +Because these games _are_ app-like, they are +especially well suited for Flutter. + +When we say _casual games_, we are primarily +referring to app-like games in this context. + +## What's included + +The Casual Games Toolkit provides the following free resources: + +* A [game template app][game-template], available in Flutter's + [samples repo][], includes the following prebuilt features: + * Main menu + * Sound & music + * Ads + * In-app purchases + * Achievements and leader boards + * Crashlytics support +* A video, [Build your own game in Flutter][game-video], + explaining how to use the template +* Source code for a [finished tic tac toe game][], + built using the [game template][game-template], + and released [on Android][] and [iOS][] +* A link to a [Flutter Games Discord][game-discord] channel + (use the [direct link][direct-discord] if you already + have a Discord account) + +[finished tic tac toe game]: {{site.github}}/filiph/tictactoe +[game-discord]: https://discord.gg/WY5NwwjBQz +[iOS]: https://apps.apple.com/us/app/tic-tac-toe-puzzle-game/id1611729977 +[on Android]: https://play.google.com/store/apps/details?id=dev.flutter.tictactoe +[samples repo]: {{site.github}}/flutter/samples + +The game template is opinionated (it pretty +much has to be), so it uses specific packages, +like `provider`, `google_mobile_ads`, `in_app_purchase`, +`audioplayers`, `crashlytics`, and `games_services`. +Feel free to change the code +to use other packages, if you prefer. + +And, yes, the game template assumes that **you'll +want to earn money for your mobile game**, +so the ads and in-app purchase packages are already +integrated with the template and ready to be configured. + +As explained on the [Games][] page, +you can also take advantage of up to $900 +in offers when you integrate Google services, +such as [Cloud, Firebase][], and [Ads][], +into your game. +(Terms and conditions apply: You must connect your +Firebase and GCP accounts to use credits for +Firebase services and verify your business +email during sign up to earn an additional $100 +on top of the normal $300 credit. For the Ads offer, +[check your region's eligibility][]. + +[Ads]: https://ads.google.com/intl/en_us/home/flutter/#!/ +[check your region's eligibility]: https://www.google.com/intl/en/ads/coupons/terms/flutter/ +[Cloud, Firebase]: https://cloud.google.com/free +[Games]: {{site.main-url}}/games + +## Get started + +Are you ready? To get started: + +1. [Watch the Quick Start video][game-video] +1. [Clone the games template repo][game-template] +1. [Join the Flutter Games community on Discord][game-discord] + (use the [direct link][direct-discord] if you already + have a Discord account). +1. Set up accounts on AdMob, Firebase, and Cloud, as needed +1. Write your game! +1. Deploy to both the Google and Apple stores + +[direct-discord]: https://discord.com/login?redirect_to=%2Fchannels%2F420324994703163402%2F964110538986651658 +[game-discord]: https://discord.com/invite/WY5NwwjBQz +[game-template]: {{site.github}}/flutter/samples/tree/master/game_template +[game-video]: {{site.youtube-site}}/watch?v=zGgeBNiRy-8&t=3s + +## Video games + +Perhaps you want to write a video-style game? +The game template is still valuable for +the high-level structure of such games. + +For video games, you might want to look into the +[Flame package][flame-package], +join the [Flame community on Discord][flame-discord], +and play with the [Flame demo app on DartPad][flame-demo]. + +In fact, the people at Very Good Ventures wrote a +[Pinball game][pinball-game] for Google I/O 2022 using the Flame engine. +For more information, check out +[I/O Pinball Powered by Flutter and Firebase][], +a free article on Medium and [play the game][pinball-game]. + +{% comment %} +Some examples of successful mobile videogames +built with Flutter and Flame include +[Tomb Toad][] and [Air Hockey][]. +{% endcomment %} + +[Air Hockey]: https://play.google.com/store/apps/details?id=com.ignacemaes.airhockey +[flame-demo]: https://dartpad.dev/?id=3e52ca7b51ba15f989ad880b8b3314a2 +[flame-discord]: https://discord.gg/5unKpdQD78 +[flame-package]: {{site.pub}}/packages/flame +[I/O Pinball Powered by Flutter and Firebase]: {{site.medium}}/flutter/di-o-pinball-powered-by-flutter-and-firebase-d22423f3f5d +[pinball-game]: https://pinball.flutter.dev/#/ +[Tomb Toad]: https://play.google.com/store/apps/details?id=com.crescentmoongames.tombtoad + +## Other resources + +Once you feel ready to go beyond the games template, +you might want to investigate other resources +recommended by the community. +Bolded items in the following table are used in the games template: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Feature + Resources +
    Animations & sprites + Special effects recipes (including animations)
    + rive package
    + Spriter Pro tool
    + spriteWidget package +
    App review + app_review package +
    Audio + audioplayers package +
    Firebase + Flutter Firebase getting started guide NEWLY UPDATED
    + firebase_crashlytics + package (tracks crashes of your app) +
    Game engines + Flame engine
    + Bonfire engine
    + forge2d package +
    Games services + games_services package +
    Images and icons + CraftPix (free and purchasable assets)
    + Game Developer Studio (purchasable asset packs)
    + GIMP (a free image editor to create your own assets) +
    Persistence + shared_preferences package
    + sqflite package
    + Couchbase Lite, cbl_flutter package +
    Special effects + Paint API docs
    + Special effects recipes +
    Win 32 + win32_gamepad + package (supports win32 gamepad) +
    diff --git a/src/whats-new.md b/src/whats-new.md index c15d67195f..beec80cd3d 100644 --- a/src/whats-new.md +++ b/src/whats-new.md @@ -18,7 +18,86 @@ and review the [Dart changelog][]. [release notes]: {{site.url}}/development/tools/sdk/release-notes [flutter-announce]: {{site.groups}}/forum/#!forum/flutter-announce [Dart Announce]: https://groups.google.com/a/dartlang.org/g/announce -[Dart changelog]: https://github.com/dart-lang/sdk/blob/master/CHANGELOG.md +[Dart changelog]: {{site.github}}/dart-lang/sdk/blob/main/CHANGELOG.md + +## May 11, 2022, Google I/O Edition: Flutter 3 release + +Flutter 3 is live!!! For more information, see +[Introducing Flutter 3][], [What's new in Flutter 3][], +and [Dart 2.17: Productivity and integration][] +(free articles on Medium), +and the [Flutter 3 release notes][]. + +[Dart 2.17: Productivity and integration]: {{site.medium}}/dartlang/dart-2-17-b216bfc80c5d +[Flutter 3 release notes]: {{site.url}}/development/tools/sdk/release-notes/release-notes-3.0.0 +[Introducing Flutter 3]: {{site.medium}}/flutter/introducing-flutter-3-5eb69151622f +[What's new in Flutter 3]: {{site.medium}}/flutter/whats-new-in-flutter-3-8c74a5bc32d0 + +**Docs updated or added since the 2.10 release** + +* We have launched the Casual Games Toolkit + to help you build games with Flutter. + Learn more on the [Games page][] and the + [Games doc page][]. +* Are you struggling to level up as a Flutter + developer? We have created the Happy paths + project to help. Learn more on the + [Happy paths page][]. +* Are you a web developer who would like more + control over your app's launch process? + Check out the new page, + [Customizing web app initialization][], + which has been added to the newly updated + and collected web docs under + `/development/platform-integraton/web`. +* Flutter 3 supports the Apple Silicon Mac (aka M1). + We've updated the [macOS install page][] + to offer an Apple Silicon download button. +* In Flutter 3, the macOS and Linux platforms + have reached stable, in addition to Windows. + You can now develop your app to run on any + or all of these platforms. As a result, + the [Desktop][] (and related) pages are updated. +* The [Performance best practices][] page has + largely been rewritten and moved to be more visible. + The changes include additional advice on avoiding jank, + including how to minimize layout passes caused + by intrinsics, and techniques to minimize + calls to `saveLayer()`. +* Firebase's Flutter docs have been overhauled. + Check out the newly updated + [Flutter Firebase get started guide][]. +* The [dart.dev][] site has its own [what's new][dart-whats-new] + page, but one new page of note is the guide, + [Learning Dart as a JavaScript developer][js-to-dart]. + Stay tuned for similar articles on Swift and C#. + +[Customizing web app initialization]: {{site.url}}/development/platform-integration/web/initialization +[dart-whats-new]: {{site.dart-site}}/guides/whats-new +[dart.dev]: {{site.dart-site}} +[Desktop]: {{site.url}}/desktop +[Flutter Firebase get started guide]: https://firebase.google.com/docs/flutter/setup +[Games page]: {{site.main-url}}/games +[Games doc page]: {{site.url}}/resources/games-toolkit +[Happy paths page]: {{site.url}}/development/packages-and-plugins/happy-paths +[js-to-dart]: {{site.dart-site}}/guides/language/coming-from/js-to-dart +[macOS install page]: {{site.url}}/get-started/install/macos + +**Codelabs and workshops** + +We have a new codelab since the last stable release: + +* [Take your Flutter app from boring to beautiful][] + Learn how to use features in Material 3 to make your + more beautiful *and* more responsive. + +Also, check out the workshops written by our GDEs +and available on the [Flutter community blog][]. + +[Flutter community blog]: {{site.medium}}/@flutter_community/622b52f70173 +[Take your Flutter app from boring to beautiful]: {{site.codelabs}}/codelabs/flutter-boring-to-beautiful + +--- ## Feb 3, 2022, Windows Support: 2.10 release @@ -29,11 +108,13 @@ For more information, see and [What's new in Flutter 2.10][], free articles on Medium. - + [Announcing Flutter for Windows]: {{site.flutter-medium}}/announcing-flutter-for-windows-6979d0d01fed [What's new in Flutter 2.10]: {{site.flutter-medium}}/whats-new-in-flutter-2-10-5aafb0314b12 +--- + ## December 8, 2021: 2.8 release Flutter 2.8 is live! For details, see