-

+
diff --git a/src/content/platform-integration/windows/extern_win.md b/src/content/platform-integration/windows/extern_win.md
index 909be6161b..657924e211 100644
--- a/src/content/platform-integration/windows/extern_win.md
+++ b/src/content/platform-integration/windows/extern_win.md
@@ -1,13 +1,15 @@
---
title: External windows in Flutter Windows apps
-description: Special considerations for adding external windows to Flutter apps
+description: >-
+ Special considerations for adding external windows to Flutter apps
---
# Windows lifecycle
## Who is affected
-Windows applications built against Flutter versions after 3.13 that open non-Flutter windows.
+Windows applications built against Flutter versions after 3.13
+that open non-Flutter windows.
## Overview
@@ -15,7 +17,7 @@ Windows applications built against Flutter versions after 3.13 that open non-Flu
When adding a non-Flutter window to a Flutter Windows app, it will not be part
of the logic for application lifecycle state updates by default. For example,
this means that when the external window is shown or hidden, the app lifecycle
-state will not appropriately update to inactive or hidden. As a result, the app
+state won't appropriately update to inactive or hidden. As a result, the app
might receive incorrect lifecycle state changes through
[WidgetsBindingObserver.didChangeAppLifecycle][].
@@ -25,10 +27,13 @@ To add the external window to this application logic,
the window's `WndProc` procedure
must invoke `FlutterEngine::ProcessExternalWindowMessage`.
-To achieve this, add the following code to a window message handler function:
+To achieve this, add the following code to the message handler function
+of your custom external window. In C++ wrappers for the Win32 API,
+this is often a class method called from the window's `WndProc`.
+The exact file and class name depend on your app's implementation.
```cpp diff
- LRESULT Window::Messagehandler(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) {
+ LRESULT MyExternalWindow::MessageHandler(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) {
+ std::optional
result = flutter_controller_->engine()->ProcessExternalWindowMessage(hwnd, msg, wparam, lparam);
+ if (result.has_value()) {
+ return *result;
diff --git a/src/content/platform-integration/windows/setup.md b/src/content/platform-integration/windows/setup.md
index a4e27aee3a..71d6a32b88 100644
--- a/src/content/platform-integration/windows/setup.md
+++ b/src/content/platform-integration/windows/setup.md
@@ -10,13 +10,13 @@ to run, build, and deploy Flutter apps for the Windows desktop platform.
:::note
If you haven't set up Flutter already,
-visit and follow the [Get started with Flutter][] guide first.
+visit and follow [Install Flutter][] first.
If you've already installed Flutter,
ensure that it's [up to date][].
:::
-[Get started with Flutter]: /get-started
+[Install Flutter]: /install
[up to date]: /install/upgrade
## Set up tooling {: #set-up-tooling}
@@ -120,9 +120,6 @@ or begin expanding integration with Windows.
diff --git a/src/content/reference/create-new-app.md b/src/content/reference/create-new-app.md
index be99548bf5..8d929d9108 100644
--- a/src/content/reference/create-new-app.md
+++ b/src/content/reference/create-new-app.md
@@ -435,5 +435,5 @@ check out the [Flutter CLI reference][cli-reference].
[cli-reference]: /reference/flutter-cli
-[flutter-setup]: /get-started
+[flutter-setup]: /install
[package-name]: {{site.dart-site}}/effective-dart/style#do-name-packages-and-file-system-entities-using-lowercase-with-underscores
diff --git a/src/content/release/archive-whats-new.md b/src/content/release/archive-whats-new.md
index c091aba2d0..bc8b946de8 100644
--- a/src/content/release/archive-whats-new.md
+++ b/src/content/release/archive-whats-new.md
@@ -107,7 +107,7 @@ You might also check out the [Dart 3.7 release][] blog post.
[Architectural overview page]: /resources/architectural-overview
[bc-3.29]: /release/breaking-changes#released-in-flutter-3-29
[Dart 3.7 release]: {{site.medium}}/dartlang/announcing-dart-3-7-bf864a1b195c
-[Flutter for Jetpack Compose devs]: /get-started/flutter-for/compose-devs
+[Flutter for Jetpack Compose devs]: /flutter-for/compose-devs
[Test orientation]: /cookbook/testing/widget/orientation
---
@@ -337,7 +337,7 @@ To learn more, check out [dart.dev/go/macros][].
[Adaptive and Responsive design]: /ui/adaptive-responsive
[Casual Games Toolkit]: /resources/games-toolkit
[Flutter fundamentals docs]: /learn/pathway
-[Flutter install]: /get-started
+[Flutter install]: /install
[Flutter web app initialization]: /platform-integration/web/initialization
[website README]: {{site.github}}/flutter/website/?tab=readme-ov-file#flutter-documentation-website
[Support for WebAssembly (Wasm)]: /platform-integration/web/wasm
@@ -369,7 +369,7 @@ You might also check out the [Dart 3.3 release][] blog post.
[@TahaTesser]: {{site.github}}/TahaTesser
[Concurrency and isolates]: /perf/isolates
-[Flutter install]: /get-started
+[Flutter install]: /install
[let us know]: {{site.github}}/flutter/website/issues/new/choose
[migrating from Material 2 to Material 3]: /release/breaking-changes/material-3-migration
[Use themes to share colors and font styles]: /cookbook/design/themes
@@ -758,9 +758,9 @@ and [Introducing Dart 3 alpha][].
[Adding an iOS clip target]: /platform-integration/ios/ios-app-clip
[Creating Flavors for Flutter]: /deployment/flavors
[Customizing web app initialization]: /platform-integration/web/initialization
-[Flutter concurrency for Swift developers]: /get-started/flutter-for/dart-swift-concurrency
+[Flutter concurrency for Swift developers]: /flutter-for/dart-swift-concurrency
[Flutter FAQ]: /resources/faq
-[Flutter for SwiftUI developers]: /get-started/flutter-for/swiftui-devs
+[Flutter for SwiftUI developers]: /flutter-for/swiftui-devs
[Internationalizing Flutter apps]: /ui/internationalization
[Introducing isolate background channels]: {{site.medium}}/flutter/introducing-background-isolate-channels-7a299609cad8
[Learning Dart as a Swift developer]: {{site.dart-site}}/guides/language/coming-from/swift-to-dart
@@ -812,7 +812,7 @@ to reflect the latest available codelabs.
[Add a user authentication flow to a Flutter app using FirebaseUI]: {{site.firebase}}/codelabs/firebase-auth-in-flutter-apps
[Building a game with Flutter and Flame]: {{site.codelabs}}/codelabs/flutter-flame-game
-[codelabs & workshops]: /reference/learning-resources
+[codelabs & workshops]: /learn/learning-resources
[Local development for your Flutter apps using the Firebase Emulator Suite]: https://web.archive.org/web/20251102002913/https://firebase.google.com/codelabs/get-started-firebase-emulators-and-flutter
[Using FFI in a Flutter plugin]: https://web.archive.org/web/20250908035316/https://codelabs.developers.google.com/codelabs/flutter-ffigen
[Your first Flutter app]: {{site.codelabs}}/codelabs/flutter-codelab-first
@@ -886,7 +886,7 @@ and the [Flutter 3.3 release notes][3.3 release notes].
[Build and release a Windows desktop app]: /deployment/windows
[Developer mode]: {{site.apple-dev}}/documentation/xcode/enabling-developer-mode-on-a-device
[Handling errors in Flutter]: /testing/errors
-[install page]: /get-started
+[install page]: /install
[navigation and routing overview]: /ui/navigation
[URL strategies]: /ui/navigation/url-strategies
@@ -951,7 +951,7 @@ and the [Flutter 3 release notes][].
[Games page]: {{site.main-url}}/games
[Games doc page]: /resources/games-toolkit
[js-to-dart]: {{site.dart-site}}/guides/language/coming-from/js-to-dart
-[install page]: /get-started
+[install page]: /install
**Codelabs and workshops**
@@ -1390,14 +1390,14 @@ publication since the last stable release:
[Announcing Adobe XD Support for Flutter]: {{site.flutter-blog}}/announcing-adobe-xd-support-for-flutter-4b3dd55ff40e
[Announcing Flutter 1.20]: {{site.flutter-blog}}/announcing-flutter-1-20-2aaf68c89c75
[Building performant Flutter widgets]: {{site.flutter-blog}}/building-performant-flutter-widgets-3b2558aa08fa
-[codelabs landing]: /reference/learning-resources
+[codelabs landing]: /learn/learning-resources
[Desktop support]: /platform-integration/desktop
[dev-tools]: {{site.flutter-blog}}/new-tools-for-flutter-developers-built-in-flutter-a122cb4eec86
[Developing for iOS 14 beta]: /platform-integration/ios/ios-debugging
[Enums with Extensions in Dart]: {{site.flutter-blog}}/enums-with-extensions-dart-460c42ea51f7
[Flutter and Desktop apps]: {{site.flutter-blog}}/flutter-and-desktop-3a0dd0f8353e
[Flutter architectural overview]: /resources/architectural-overview
-[Flutter codelabs]: /reference/learning-resources
+[Flutter codelabs]: /learn/learning-resources
[Flutter Day]: https://events.withgoogle.com/flutter-day/
[Flutter Package Ecosystem Update]: {{site.flutter-blog}}/flutter-package-ecosystem-update-d50645f2d7bc
[Flutter Performance Updates in 2019]: {{site.flutter-blog}}/going-deeper-with-flutters-web-support-66d7ad95eb5224
@@ -1563,7 +1563,7 @@ Happy Fluttering!
[Flutter Medium publication]: {{site.medium}}/flutter
[Migrating your plugin to the new Android APIs]: /release/breaking-changes/plugin-api-migration
[Web support for Flutter goes beta]: {{site.flutter-blog}}/web-support-for-flutter-goes-beta-35b64a1217c0
-[Get started]: /get-started
+[Get started]: /install
## 10 Sep 2019: 1.9 release
diff --git a/src/content/release/breaking-changes/android-java-gradle-migration-guide.md b/src/content/release/breaking-changes/android-java-gradle-migration-guide.md
index a9476b8d18..f2a4203864 100644
--- a/src/content/release/breaking-changes/android-java-gradle-migration-guide.md
+++ b/src/content/release/breaking-changes/android-java-gradle-migration-guide.md
@@ -136,12 +136,10 @@ A few notes to be aware of:
you might (though it's unlikely) encounter issues
that result from changes to Gradle, such as
[deprecated Gradle classes][], or changes to the
- Android file structure, such as
- [splitting out ApplicationId from PackageName][].
+ Android file structure.
If this occurs, downgrade to a release of Gradle
between 7.3 and 7.6.1, inclusive.
* Upgrading to Flutter 3.10 won't fix this issue.
[deprecated Gradle classes]: https://docs.gradle.org/7.6/javadoc/deprecated-list.html
[issue 122609]: {{site.repo.flutter}}/issues/122609
-[splitting out ApplicationId from PackageName]: http://tools.android.com/tech-docs/new-build-system/applicationid-vs-packagename
diff --git a/src/content/release/breaking-changes/default-systemuimode-edge-to-edge.md b/src/content/release/breaking-changes/default-systemuimode-edge-to-edge.md
index 727a5a9821..93a30e1857 100644
--- a/src/content/release/breaking-changes/default-systemuimode-edge-to-edge.md
+++ b/src/content/release/breaking-changes/default-systemuimode-edge-to-edge.md
@@ -7,33 +7,39 @@ description: >-
{% render "docs/breaking-changes.md" %}
-:::note
-You might have found this page because you see a warning in the Google Play
-Console concerning "Edge-to-edge may not display for all users" or "Your app
-uses deprecated APIs or parameters for edge-to-edge".
-These warnings **will not** impact users.
-
-This warning references deprecated code used in the Flutter engine to implement
-edge-to-edge mode. The engine relies on this deprecated code to avoid breaking
-changes for users, so it will continue to work should you set edge-to-edge
-mode in your app. See [flutter#169810] for more information.
-:::
-
## Summary
+Edge-to-edge mode is Android's default display behavior as of
+Android version 15 and above. In Android 15, you could
+opt out of this behavior but, as of Android 16, you can't.
+To learn more about this change,
+check out the [Android 16 release notes][].
+
+[Android 16 release notes]: {{site.android-dev}}/about/versions/16/behavior-changes-16#edge-to-edge
+
+## Android 16 (or later)
+
+Using the mechanism to opt out of edge-to-edge on Android 16
+or later might cause your app to crash, but you can avoid this
+by using version-specific resources; for details,
+visit the [migration guide](#migration-guide).
+
+To learn how to structure your app to avoid this,
+we recommend that you visit the Leancode article, [Mastering Edge-To-Edge in Flutter:
+A Deep Dive Into the System Navigation Bar in Android][article].
+You can also find more discussion in [Issue 168635][] on GitHub.
+
+[article]: https://leancode.co/blog/mastering-edge-to-edge-in-flutter
+[Issue 168635]: {{site.github}}/flutter/flutter/issues/168635#issuecomment-3485274018
+
+## Android 15 (and below)
+
If your Flutter app targets Android SDK version 15,
your app automatically displays in edge-to-edge mode,
as documented on the [`SystemUiMode`][] API page.
-To maintain non-edge-to-edge app behavior
+To maintain non edge-to-edge app behavior
(including an unset `SystemUiMode`),
-follow the steps in [migration guide](#migration-guide).
-
-:::note
-If your Flutter app targets Android SDK version 16 or later,
-your app automatically displays in edge-to-edge mode, and you
-cannot opt-out. To learn more about this change, check out the
-[Android 16 release notes][].
-:::
+follow the steps in the [migration guide](#migration-guide).
[`SystemUiMode`]: {{site.api}}/flutter/services/SystemUiMode.html
@@ -44,8 +50,8 @@ target Android 15 or later.
To learn more about this change, check out the [Android 15 release notes][].
This impacts devices running on Android SDK 15+ or API 35+.
-Prior to Flutter 3.27, Flutter apps target Android 14 by default and
-won't opt into edge-to-edge mode automatically, but
+Prior to Flutter 3.27, Flutter apps targeted Android 14 by default and
+didn't opt into edge-to-edge mode automatically, but
your app _will_ be impacted when you choose to target Android 15.
If your app targets `flutter.targetSdkVersion` (as it does by default),
then it targets Android 15 starting with Flutter version 3.27,
@@ -67,16 +73,14 @@ Be aware of the following:
[edge-to-edge mode]: {{site.android-dev}}/develop/ui/views/layout/edge-to-edge
[Android 15 release notes]: {{site.android-dev}}/about/versions/15/behavior-changes-15#edge-to-edge
-[Android 16 release notes]: {{site.android-dev}}/about/versions/16/behavior-changes-16#edge-to-edge
[`SystemChrome.setEnabledSystemUIMode`]: {{site.api}}/flutter/services/SystemChrome/setEnabledSystemUIMode.html
## Migration guide
-To opt out of edge-to-edge on SDK 15, specify
-the new style attribute in each activity that requires it.
+To opt out of edge-to-edge on Android SDK 15,
+specify the new style attribute in each activity that requires it.
If you have a parent style that child styles need to opt out of,
-you can modify the parent only.
-In the following example,
+you can modify the parent only. In the following example,
update the style configuration generated from `flutter create`.
By default, the styles used in a Flutter app are set in
@@ -127,7 +131,13 @@ Ensure both styles are updated consistently in both files.
This modified style opts your app out of edge-to-edge for
apps targeting Android SDK 15.
-So now you're done!
+
+:::note
+If your app runs on Android 16 or above, to avoid crashes you can
+create a `your_app/android/app/src/main/res/values-35` resource
+directory that contains styles without the
+`android:windowOptOutEdgeToEdgeEnforcement` attribute.
+:::
## Timeline
diff --git a/src/content/release/breaking-changes/deprecate-text-input-connection-set-style.md b/src/content/release/breaking-changes/deprecate-text-input-connection-set-style.md
new file mode 100644
index 0000000000..c462be190c
--- /dev/null
+++ b/src/content/release/breaking-changes/deprecate-text-input-connection-set-style.md
@@ -0,0 +1,75 @@
+---
+title: Deprecate `TextInputConnection.setStyle`
+description: >-
+ The `TextInputConnection.setStyle` method has been deprecated in favor
+ of the `TextInputConnection.updateStyle` method.
+---
+
+{% render "docs/breaking-changes.md" %}
+
+## Summary
+
+`TextInputConnection.setStyle` is deprecated in favor of
+`TextInputConnection.updateStyle`, which supports synchronizing
+`letterSpacing`, `wordSpacing`, and `lineHeight` to the engine.
+
+## Context
+
+The previous `setStyle` method did not support `letterSpacing`, `wordSpacing`,
+or `lineHeight`. This caused visual misalignment of the selection highlight
+and IME caret when these properties were used.
+
+The replacement `updateStyle` method (via `TextInputStyle`) supports these
+properties, ensuring the system input is synchronized with the rendered text.
+
+## Migration guide
+
+Authors of custom text input clients should replace calls to
+`TextInputConnection.setStyle` with `TextInputConnection.updateStyle`.
+
+### Code before migration:
+
+```dart
+connection.setStyle(
+ fontFamily: 'Roboto',
+ fontSize: 14.0,
+ fontWeight: FontWeight.normal,
+ textDirection: TextDirection.ltr,
+ textAlign: TextAlign.start,
+);
+```
+
+### Code after migration:
+
+```dart
+connection.updateStyle(
+ TextInputStyle(
+ fontFamily: 'Roboto',
+ fontSize: 14.0,
+ fontWeight: FontWeight.normal,
+ textDirection: TextDirection.ltr,
+ textAlign: TextAlign.start,
+ letterSpacing: 1.2,
+ wordSpacing: 1.0,
+ lineHeight: 1.5,
+ ),
+);
+```
+
+## Timeline
+
+Landed in version: TBD
+In stable release: Not yet
+
+## References
+
+Relevant PR:
+
+* [PR 180436][]
+
+Relevant issues:
+
+* [Issue 161592][]
+
+[PR 180436]: {{site.repo.flutter}}/pull/180436
+[Issue 161592]: {{site.repo.flutter}}/issues/161592
diff --git a/src/content/release/breaking-changes/index.md b/src/content/release/breaking-changes/index.md
index 4113cf20fd..97c9198e60 100644
--- a/src/content/release/breaking-changes/index.md
+++ b/src/content/release/breaking-changes/index.md
@@ -60,14 +60,20 @@ They're sorted by release and listed in alphabetical order:
### Not yet released to stable
-* [Migrating Flutter Android app to Android Gradle Plugin 9.0.0][]
+* [Changing RawMenuAnchor close order][]
* [Deprecate `onReorder` callback][]
* [Deprecated `cacheExtent` and `cacheExtentStyle`][]
+* [Deprecate `TextInputConnection.setStyle`][]
+* [ListTile throws exception when wrapped in a colored widget][]
+* [Migrating Flutter Android app to Android Gradle Plugin 9.0.0][]
* [Page transition builders reorganization][]
-[Migrating Flutter Android app to Android Gradle Plugin 9.0.0]: /release/breaking-changes/migrate-to-agp-9
+[Changing RawMenuAnchor close order]: /release/breaking-changes/raw-menu-anchor-close-order
[Deprecate `onReorder` callback]: /release/breaking-changes/deprecate-onreorder-callback
[Deprecated `cacheExtent` and `cacheExtentStyle`]: /release/breaking-changes/scroll-cache-extent
+[Deprecate `TextInputConnection.setStyle`]: /release/breaking-changes/deprecate-text-input-connection-set-style
+[ListTile throws exception when wrapped in a colored widget]: /release/breaking-changes/list-tile-color-warning
+[Migrating Flutter Android app to Android Gradle Plugin 9.0.0]: /release/breaking-changes/migrate-to-agp-9
[Page transition builders reorganization]: /release/breaking-changes/decouple-page-transition-builders
diff --git a/src/content/release/breaking-changes/list-tile-color-warning.md b/src/content/release/breaking-changes/list-tile-color-warning.md
new file mode 100644
index 0000000000..16e3b8cbc2
--- /dev/null
+++ b/src/content/release/breaking-changes/list-tile-color-warning.md
@@ -0,0 +1,113 @@
+---
+title: ListTile throws exception when wrapped in a colored widget
+description: >-
+ ListTile throws an exception when it is wrapped in an intermediate
+ widget with a non-transparent background color.
+---
+
+## Summary
+
+When a `ListTile` is wrapped in a widget with a non-transparent background color
+(such as a `Container` or `ColoredBox` with a color specified) that sits between
+the `ListTile` and its nearest `Material` ancestor, the framework now throws an
+exception.
+
+## Background
+
+`ListTile` paints its background color and ink splashes on the nearest `Material`
+ancestor. When a widget with an opaque background color is placed between the
+`ListTile` and its `Material` ancestor, it obscures these visual effects, making
+them invisible to the user.
+
+To prevent developers from accidentally introducing this bug and wondering why
+the background or ink splash effects on the `ListTile` are not displaying, an
+assert was introduced. This exception explicitly points out the issue during
+development.
+
+If your code has an intermediate colored widget between a `ListTile` and a
+`Material` widget, you will see an error similar to this:
+
+```text
+ListTile background color or ink splashes may be invisible.
+The ListTile is wrapped in a Container that has a background color. Because
+ListTile paints its background and ink splashes on the nearest Material
+ancestor, this Container will hide those effects. To fix this, wrap the ListTile
+in its own Material widget, or remove the background color from the intermediate
+Container.
+```
+
+## Migration guide
+
+To fix the exception, follow the exception's hint and either remove the
+background color from the intermediate widget, or wrap the `ListTile` in its own
+`Material` widget.
+
+Code before migration:
+
+```dart
+// The colored Container hides the ink splashes from the ListTile.
+Material(
+ child: Container(
+ color: Colors.pink,
+ child: ListTile(
+ title: const Text('Title'),
+ onTap: () {},
+ ),
+ ),
+)
+```
+
+Code after migration:
+
+```dart
+// Use a Material widget directly for the background color.
+Material(
+ color: Colors.pink,
+ child: Container(
+ child: ListTile(
+ title: const Text('Title'),
+ onTap: () {},
+ ),
+ ),
+)
+```
+
+Or you can wrap the `ListTile` in its own `Material` widget directly:
+
+```dart
+Container(
+ color: Colors.blue,
+ child: Material(
+ type: MaterialType.transparency,
+ child: ListTile(
+ title: const Text('Title'),
+ onTap: () {},
+ ),
+ ),
+)
+```
+
+## Timeline
+
+Landed in version: TBD
+In stable release: Not yet
+
+## References
+
+API documentation:
+
+* [`ListTile`][]
+* [`Material`][]
+
+Relevant issues:
+
+* [Issue 174366][]
+
+Relevant PRs:
+
+* [PR 181402][]
+
+[`ListTile`]: {{site.api}}/flutter/material/ListTile-class.html
+[`Material`]: {{site.api}}/flutter/material/Material-class.html
+[Issue 174366]: {{site.repo.flutter}}/issues/174366
+[PR 181402]: {{site.repo.flutter}}/pull/181402
diff --git a/src/content/release/breaking-changes/network-policy-ios-android.md b/src/content/release/breaking-changes/network-policy-ios-android.md
index 430cd624f9..f55ed2459e 100644
--- a/src/content/release/breaking-changes/network-policy-ios-android.md
+++ b/src/content/release/breaking-changes/network-policy-ios-android.md
@@ -19,13 +19,6 @@ Insecure HTTP is not allowed by platform:
Use HTTPS instead.
-:::important
-This change over-restricted HTTP access on local networks beyond the
-restrictions imposed by mobile platforms ([flutter/flutter#72723]({{site.repo.flutter}}/issues/72723)).
-
-This change has since been reverted.
-:::
-
## Context
Starting with Android [API 28][] and [iOS 9][],
@@ -42,10 +35,14 @@ network policy. See the migration guide below for details.
[API 28]: {{site.android-dev}}/training/articles/security-config#CleartextTrafficPermitted
[iOS 9]: {{site.apple-dev}}/documentation/bundleresources/information_property_list/nsapptransportsecurity
-Much like the platforms, the application can still open
-insecure socket connections. Flutter does not enforce
-any policy at socket level; you would be
-responsible for securing the connection.
+:::important
+The following only applies to platform native sockets (sockets owned
+by the Android and iOS platforms).
+
+Flutter does not enforce any policy at socket level; you would be
+responsible for securing the connection. If the socket is owned by
+Dart/Flutter, no policy will be enforced.
+:::
## Migration guide
@@ -53,33 +50,29 @@ On iOS, you can add [NSExceptionDomains][] to your
application's Info.plist.
On Android, you can add a [network security config][] XML.
-For Flutter to find your XML file, you need to also add a
-`metadata` entry to the `` tag in your manifest.
-This metadata entry should carry the name:
-`io.flutter.network-policy` and should contain the
-resource identifier of the XML.
-For instance, if you put your XML configuration under
-`res/xml/network_security_config.xml`,
-your manifest would contain the following:
+### Allowing cleartext connection for debug builds
+
+If you would like to allow HTTP connections for Android debug
+builds, you can add the following snippet to your $project_path\android\app\src\debug\AndroidManifest.xml:
```xml
-
+
...
-
```
-### Allowing cleartext connection for debug builds
-
-If you would like to allow HTTP connections for Android debug
-builds, you can add the following snippet to your $project_path\android\app\src\debug\AndroidManifest.xml:
-
+Then, add the network configuration to your $project_path/android/app/src/debug/res/xml/network_security_config.xml:
```xml
-
+
+
+
+
```
+It is also possible to set the policy per domain. See the Android
+docuentation for more information.
+
For iOS, you can follow [these instructions](/add-to-app/ios/project-setup/?tab=embed-using-cocoapods#set-local-network-privacy-permissions) to create a `Info-debug.plist` and put this in:
```xml
@@ -96,12 +89,6 @@ We **do not** recommend you do this for your release builds.
* Build time configuration is the only way to change
network policy. It cannot be modified at runtime.
-* Localhost connections are always allowed.
-* You can allow insecure connections only to domains.
- Specific IP addresses are not accepted as input.
- This is in line with what platforms support. If you would
- like to allow IP addresses, the only option is to allow
- cleartext connections in your app.
[network security config]: {{site.android-dev}}/training/articles/security-config#CleartextTrafficPermitted
[NSExceptionDomains]: {{site.apple-dev}}/documentation/bundleresources/information_property_list/nsapptransportsecurity/nsexceptiondomains
diff --git a/src/content/release/breaking-changes/raw-menu-anchor-close-order.md b/src/content/release/breaking-changes/raw-menu-anchor-close-order.md
new file mode 100644
index 0000000000..b8e8dedeac
--- /dev/null
+++ b/src/content/release/breaking-changes/raw-menu-anchor-close-order.md
@@ -0,0 +1,137 @@
+---
+title: Changing RawMenuAnchor close order
+description: >-
+ Closing a `RawMenuAnchor` now triggers `onClose` and `onCloseRequested` callbacks
+ for all descendant `RawMenuAnchor`s in a coordinated sequence.
+---
+
+{% render "docs/breaking-changes.md" %}
+
+## Summary
+
+Closing a `RawMenuAnchor` now triggers the `onCloseRequested`
+and `onClose` callbacks for all descendant `RawMenuAnchor`s.
+The `onCloseRequested` callback is triggered top-down,
+starting from the triggering `RawMenuAnchor` and moving to its descendants,
+while the `onClose` callback is triggered bottom-up.
+If a `RawMenuAnchor` is already closed,
+calls to `MenuController.close` and `MenuController.closeChildren`
+will not trigger the `onCloseRequested` callback.
+
+## Background
+
+`RawMenuAnchor` is a low-level widget used to build custom menu systems.
+Previously, a `RawMenuAnchor` did not automatically notify its descendants
+when it was closed.
+Developers were required to manually call `controller.closeChildren()`
+within the `onCloseRequested` callback to trigger closure
+in descendant `RawMenuAnchor`s.
+
+Furthermore, the `onClose` callback timing was inconsistent.
+A parent `RawMenuAnchor`'s `onClose` could be executed
+before its descendants had finished closing.
+
+The updated behavior ensures that when a parent `RawMenuAnchor` begins to close,
+it subsequently triggers `onCloseRequested` for all of its
+descendant `RawMenuAnchor`s in a top-down manner.
+
+When `hideOverlay` is called from within `onCloseRequested` to close the menu,
+all descendant `RawMenuAnchor`s will have their `onClose` callbacks executed
+in a bottom-up order.
+This means that the most recently opened `RawMenuAnchor`
+will have its `onClose` callback executed first,
+followed by its parent, and so on up the hierarchy.
+
+This design allows for a coordinated closing sequence
+where child `RawMenuAnchor`s can perform necessary cleanup
+before their parents finalize the closing process.
+
+Finally, if a `RawMenuAnchor` is already closed,
+calls to `MenuController.close` and `MenuController.closeChildren`
+will not trigger the `onCloseRequested` callback,
+preventing unnecessary callback executions.
+
+## Migration guide
+
+If your code does not override the default implementation of
+`RawMenuAnchor.onCloseRequested` or your `RawMenuAnchor`
+does not contain submenus, no changes are required.
+
+If you have a custom implementation of `onCloseRequested`
+in a `RawMenuAnchor` containing submenus,
+`controller.closeChildren()` is now called automatically
+when the parent menu closes.
+You should ensure that your implementation of `onCloseRequested`
+still behaves correctly in this context.
+Immediate calls to `controller.closeChildren()` within your
+`onCloseRequested` callback are no longer necessary and should be removed.
+
+Additionally, if your logic relied on the parent's `onClose` callback
+firing before its descendants,
+you may need to refactor your code to account for the new
+bottom-up execution order.
+
+Code before migration:
+
+```dart
+RawMenuAnchor(
+ controller: menuController,
+ onCloseRequested: (hideOverlay) {
+ if (!animationController.isForwardOrCompleted) {
+ return;
+ }
+
+ // Descendant submenus must be closed before the parent menu. This is now
+ // handled automatically, so this call is no longer necessary.
+ menuController.closeChildren();
+ animationController.reverse().whenComplete(hideOverlay);
+ },
+ onClose: () {
+ // This might have executed before descendants called onClose().
+ _handleMenuClosed();
+ },
+ // ...
+)
+```
+
+Code after migration:
+
+```dart
+RawMenuAnchor(
+ controller: menuController,
+ onCloseRequested: (hideOverlay) {
+ if (!animationController.isForwardOrCompleted) {
+ return;
+ }
+
+ // menuController.closeChildren() is now called automatically.
+ animationController.reverse().whenComplete(hideOverlay);
+ },
+ onClose: () {
+ // This now executes only after all descendant submenus have called onClose().
+ _handleMenuClosed();
+ },
+ // ...
+)
+```
+
+:::important
+This migration is not supported by `dart fix`
+:::
+
+## References
+
+API documentation:
+
+* [`RawMenuAnchor`]({{site.api}}/flutter/widgets/RawMenuAnchor-class.html)
+* [`RawMenuAnchor.onCloseRequested`]({{site.api}}/flutter/widgets/RawMenuAnchor/onCloseRequested.html)
+
+Relevant issues:
+
+* [[widgets/raw_menu_anchor.dart] onClose should be called by descendant menus
+ before parent]({{site.repo.flutter}}/issues/182355)
+
+Relevant PRs:
+
+* [[widgets/raw_menu_anchor.dart] Always onClose and onCloseRequested on
+ descendants before parent.]({{site.repo.flutter}}/pull/182357)
diff --git a/src/content/release/breaking-changes/uiscenedelegate.md b/src/content/release/breaking-changes/uiscenedelegate.md
index a741ea1ed7..231a9e4532 100644
--- a/src/content/release/breaking-changes/uiscenedelegate.md
+++ b/src/content/release/breaking-changes/uiscenedelegate.md
@@ -6,69 +6,79 @@ description: >
{% render "docs/breaking-changes.md" %}
+:::important
+As of the Flutter 3.41 release, `UIScene` support is the
+default for iOS apps and auto migration to `UIScene`
+is automatic.
+:::
+
## Summary
-Apple now requires iOS developers to adopt the UIScene life cycle.
-This migration has implications on the [app launch
-sequence]({{site.apple-dev}}/documentation/uikit/about-the-app-launch-sequence)
-and [app life
-cycle]({{site.apple-dev}}/documentation/uikit/managing-your-app-s-life-cycle).
+Apple now requires iOS developers to adopt the `UIScene` life cycle.
+This migration has implications for the [app launch sequence][]
+and [app life cycle][].
+
+[app launch sequence]: {{site.apple-dev}}/documentation/uikit/about-the-app-launch-sequence
+[app life cycle]: {{site.apple-dev}}/documentation/uikit/managing-your-app-s-life-cycle
## Background
-During WWDC25, Apple
-[announced]({{site.apple-dev}}/videos/play/wwdc2025/243/?time=1317)
-the following:
+During WWDC25, Apple [announced][] the following:
+
> In the release following iOS 26, any UIKit app built with the latest SDK will
> be required to use the UIScene life cycle, otherwise it will not launch.
To use the UIScene lifecycle with Flutter, migrate the following support:
-* All Flutter apps that support iOS - See the [migration guide for Flutter
- apps](/release/breaking-changes/uiscenedelegate/#migration-guide-for-flutter-apps)
-* Flutter embedded in iOS native apps - See the [migration guide for adding
- Flutter to an existing
- app](/release/breaking-changes/uiscenedelegate/#migration-guide-for-adding-flutter-to-existing-app-add-to-app)
-* Flutter plugins that use iOS application lifecycle events - See the [migration
- guide for
- plugins](/release/breaking-changes/uiscenedelegate/#migration-guide-for-flutter-plugins)
-
-Migrating to UIScene shifts the AppDelegate's role—the UI lifecycle is
-now handled by the UISceneDelegate. The AppDelegate
-remains responsible for process events and the overall application
-lifecycle. All UI-related logic should be moved from the AppDelegate to the
-corresponding UISceneDelegate methods. After migrating to UIScene,
-UIKit won't call AppDelegate methods related to UI state.
+
+* For all Flutter apps that support iOS,
+ visit the [migration guide][] for Flutter apps.
+* For Flutter apps embedded in iOS native apps, visit the
+ [migration guide for adding Flutter to an existing app][migrate-existing-app].
+* For Flutter plugins that use iOS application lifecycle events, visit the
+ [migration guide for plugins][]
+
+Migrating to UIScene shifts the `AppDelegate`'s role—the UI lifecycle is
+now handled by the `UISceneDelegate`. The `AppDelegate`
+remains responsible for process events and the overall application lifecycle.
+All UI-related logic should be moved from the `AppDelegate` to the
+corresponding `UISceneDelegate` methods. After migrating to `UIScene`,
+UIKit won't call `AppDelegate` methods related to UI state.
+
+[announced]: {{site.apple-dev}}/videos/play/wwdc2025/243/?time=1317
+[migrate-existing-app]: /release/breaking-changes/uiscenedelegate/#migration-guide-for-adding-flutter-to-existing-app-add-to-app
+[migration guide]: /release/breaking-changes/uiscenedelegate/#migration-guide-for-flutter-apps
+[migration guide for plugins]: /release/breaking-changes/uiscenedelegate/#migration-guide-for-flutter-plugins
## Migration guide for Flutter apps
-### Auto-Migrate (Experimental)
+### Auto-migrate
-The Flutter CLI can automatically migrate your app if your AppDelegate has not
-been customized.
+As of Flutter 3.41, `UIScene` is supported by default.
+The Flutter CLI automatically migrates your app if your `AppDelegate`
+hasn't been customized.
-1. Enable UIScene Migration Feature
+1. Build or run your app
```console
-flutter config --enable-uiscene-migration
+flutter run
```
-
-2. Build or run your app
+or
```console
-flutter run
-or
flutter build ios
```
-If the migration succeeds, you will see a log that says "Finished migration to
-UIScene lifecycle". Otherwise, it warns you to migrate manually using the
-included instructions. If the migration succeeds, no further action is required!
+If the migration succeeds,
+you will see a log that says "Finished migration to UIScene lifecycle".
+Otherwise, it warns you to migrate manually using the included instructions.
+If the migration succeeds, no further action is required.
### Migrate AppDelegate
Previously, Flutter plugins were registered in
-`application:didFinishLaunchingWithOptions:`. To accomodate the new app launch
-sequence, plugin registration must now be handled in a new callback called
+`application:didFinishLaunchingWithOptions:`.
+To accommodate the new app launch sequence,
+plugin registration must now be handled in a new callback called
`didInitializeImplicitFlutterEngine`.
1. Add `FlutterImplicitEngineDelegate` and move `GeneratedPluginRegistrant`.
@@ -116,7 +126,7 @@ sequence, plugin registration must now be handled in a new callback called
2. Create method channels and platform views in
-`didInitializeImplicitFlutterEngine`, if applicable.
+ `didInitializeImplicitFlutterEngine`, if applicable.
If you previously created [method channels][method-channels-docs] or
[platform views][platform-views-docs] in
@@ -181,25 +191,26 @@ usage](/release/breaking-changes/uiscenedelegate/#bespoke-flutterviewcontroller-
3. Migrate any custom logic within application life cycle events.
-Apple has deprecated application life cycle events related to UI state. After
-migrating to UIScene lifecycle, UIKit will no longer call these events.
+Apple has deprecated application life cycle events related to UI state.
+After migrating to UIScene lifecycle, UIKit will no longer call these events.
-If you were using one of these depreacted APIs, such as
-[`applicationDidBecomeActive`]({{site.apple-dev}}/documentation/uikit/uiapplicationdelegate/applicationdidbecomeactive(_:)),
-you will likely need to create a SceneDelegate and migrate to scene life cycle
-events. See [Apple's
-documentation]({{site.apple-dev}}/documentation/technotes/tn3187-migrating-to-the-uikit-scene-based-life-cycle)
-on migrating.
+If you were using one of these deprecated APIs, such as [`applicationDidBecomeActive`],
+you will likely need to create a `SceneDelegate` and migrate to scene life cycle events.
+Check out [Apple's documentation] on migrating.
-If you implement your own SceneDelegate, you must subclass it with
-`FlutterSceneDelegate` or conform to the `FlutterSceneLifeCycleProvider`
-protocol. See the [following
-examples](/release/breaking-changes/uiscenedelegate/#createupdate-a-scenedelegate).
+If you implement your own `SceneDelegate`,
+you must subclass it with `FlutterSceneDelegate` or
+conform to the `FlutterSceneLifeCycleProvider` protocol.
+Visit the [following examples][].
+
+[Apple's documentation]: {{site.apple-dev}}/documentation/technotes/tn3187-migrating-to-the-uikit-scene-based-life-cycle
+[`applicationDidBecomeActive`]: {{site.apple-dev}}/documentation/uikit/uiapplicationdelegate/applicationdidbecomeactive
+[following examples]: /release/breaking-changes/uiscenedelegate/#createupdate-a-scenedelegate
### Migrate Info.plist
-To complete the migration to the UIScene lifecycle, add an `Application Scene
-Manifest` to your Info.plist.
+To complete the migration to the `UIScene` lifecycle,
+add an `Application Scene Manifest` to your `Info.plist`.
As seen in Xcode's editor:
@@ -239,8 +250,8 @@ As XML:
### Create a SceneDelegate (Optional)
-If you need access to the `SceneDelegate`, you can create one by
-subclassing `FlutterSceneDelegate`.
+If you need access to the `SceneDelegate`,
+you can create one by subclassing `FlutterSceneDelegate`.
1. Open your app in Xcode
2. Right click the **Runner** folder and select **New Empty File**
@@ -262,8 +273,7 @@ class SceneDelegate: FlutterSceneDelegate {
```
3. Change the "Delegate Class Name" (`UISceneDelegateClassName`) in the
-Info.plist from `FlutterSceneDelegate` to
-`$(PRODUCT_MODULE_NAME).SceneDelegate`.
+`Info.plist` from `FlutterSceneDelegate` to `$(PRODUCT_MODULE_NAME).SceneDelegate`.
@@ -288,7 +298,7 @@ For Objective-C projects, create a `SceneDelegate.h` and `SceneDelegate.m`:
```
3. Change the "Delegate Class Name" (`UISceneDelegateClassName`) in the
-Info.plist from `FlutterSceneDelegate` to `SceneDelegate`.
+`Info.plist` from `FlutterSceneDelegate` to `SceneDelegate`.
@@ -323,10 +333,11 @@ but not required. The `FlutterSceneDelgate` forwards scene callbacks, such as
-When using Flutter in a SwiftUI app, you can [optionally use a
-FlutterAppDelegate](/add-to-app/ios/add-flutter-screen#using-the-flutterappdelegate)
-to receive application events. To migrate that to use UIScene events, you can
-make the following changes:
+When using Flutter in a SwiftUI app,
+you can [optionally use a FlutterAppDelegate][]
+to receive application events.
+To migrate that to use `UIScene` events,
+you can make the following changes:
1. Set the Scene Delegate to `FlutterSceneDelegate` in
`application:configurationForConnecting:options:`.
@@ -350,24 +361,26 @@ make the following changes:
}
```
-2. If your app does not support multiple scenes, set `Enable Multiple Scenes`
-to `NO` under `Application Scene Manifest` in your target's Info properties.
-This is enabled by default for SwiftUI apps.
+[optionally use a FlutterAppDelegate]: /add-to-app/ios/add-flutter-screen#using-the-flutterappdelegate
+
+2. If your app doesn't support multiple scenes, set `Enable Multiple Scenes`
+ to `NO` under `Application Scene Manifest` in your target's Info properties.
+ This is enabled by default for SwiftUI apps.

-Otherwise, see [If your app supports multiple
-scenes](/release/breaking-changes/uiscenedelegate/#if-your-app-supports-multiple-scenes)
-for further instructions.
+Otherwise, visit [if your app supports multiple scenes][] for further instructions.
+[if your app supports multiple scenes]: /release/breaking-changes/uiscenedelegate/#if-your-app-supports-multiple-scenes
+
### If you can't directly make FlutterSceneDelegate a subclass
-If you can't directly make `FlutterSceneDelegate` a subclass, you can use the
-`FlutterSceneLifeCycleProvider` protocol and
+If you can't directly make `FlutterSceneDelegate` a subclass,
+you can use the `FlutterSceneLifeCycleProvider` protocol and
`FlutterPluginSceneLifeCycleDelegate` object to forward scene life cycle events
to Flutter.
@@ -510,12 +523,14 @@ to Flutter.
### If your app supports multiple scenes
-When multiple scenes is enabled (UIApplicationSupportsMultipleScenes), Flutter cannot automatically associate a
-`FlutterEngine` with a scene during the scene connection phase. In order for
-plugins to receive launch connection information, the `FlutterEngine` must be
-manually registered with either the `FlutterSceneDelegate` or
-`FlutterPluginSceneLifeCycleDelegate` during
-`scene:willConnectToSession:options:`. Otherwise, once the view, created by the
+When multiple scenes is enabled (`UIApplicationSupportsMultipleScenes`),
+Flutter can't automatically associate a
+`FlutterEngine` with a scene during the scene connection phase.
+For plugins to receive launch connection information,
+the `FlutterEngine` must be manually registered with either the
+`FlutterSceneDelegate` or `FlutterPluginSceneLifeCycleDelegate` during
+`scene:willConnectToSession:options:`.
+Otherwise, once the view, created by the
`FlutterViewController` and `FlutterEngine`, is added to the view heirarchy,
the `FlutterEngine` will automatically register for scene events.
@@ -638,7 +653,7 @@ sceneLifeCycleDelegate.unregisterSceneLifeCycle(with: flutterEngine)
## Migration guide for Flutter plugins
-Not all plugins use lifecycle events. If your plugin does, though, you will
+Not all plugins use lifecycle events. However, if your plugin does you will
need to migrate to UIKit's scene-based lifecycle.
1. Update the Dart and Flutter SDK versions in your pubspec.yaml
@@ -674,9 +689,9 @@ environment:
3. Registers the plugin as a receiver of `UISceneDelegate` calls.
-To continue supporting apps that have not migrated to the UIScene lifecycle yet,
-you might consider remaining registered to the App Delegate and keeping the App
-Delegate events as well.
+To continue supporting apps that have not migrated to the `UIScene` lifecycle yet,
+you might consider remaining registered to the App Delegate and keeping the
+`AppDelegate` events as well.
@@ -703,11 +718,10 @@ Delegate events as well.
-4. Add one or more of the following scene events that are needed for your
-plugin.
+4. Add one or more of the following scene events needed for your plugin.
-Most App Delegate UI events have a 1-to-1 replacement. To see details for each
-event, visit Apple's documentation on
+Most `AppDelegate` UI events have a 1-to-1 replacement.
+To see details for each event, visit Apple's documentation on
[`UISceneDelegate`][] and [`UIWindowSceneDelegate`][].
[`UISceneDelegate`]: {{site.apple-dev}}/documentation/uikit/uiscenedelegate
@@ -792,26 +806,28 @@ public func windowScene(
5. Move launch logic from `application:willFinishLaunchingWithOptions:` and
-`application:didFinishLaunchingWithOptions:` to
-`scene:willConnectToSession:options:`.
+ `application:didFinishLaunchingWithOptions:` to
+ `scene:willConnectToSession:options:`.
Despite `application:willFinishLaunchingWithOptions:` and
-`application:didFinishLaunchingWithOptions:` not being deprecated, after
-migrating to the `UIScene` lifecycle, the launch options will be `nil`. Any logic
-performed here related to the launch options should be moved to the
-`scene:willConnectToSession:options:` event.
-
+`application:didFinishLaunchingWithOptions:` not being deprecated,
+after migrating to the `UIScene` lifecycle,
+the launch options will be `nil`.
+Any logic performed here related to the launch options should be
+moved to the `scene:willConnectToSession:options:` event.
6. [Optional] Migrate other deprecated APIs to support multiple scenes in the future.
-| Deprecated API | UIScene Replacement |
-|:---------------------------------------------------------------------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| [`UIScreen mainScreen`](https://developer.apple.com/documentation/uikit/uiscreen/1617815-mainscreen) | [`self.pluginRegistrar.viewController.view.window.windowScene.screen`](https://developer.apple.com/documentation/uikit/uiwindowscene/screen?language=objc) |
-| [`UIApplication keyWindow`](https://developer.apple.com/documentation/uikit/uiapplication/1622924-keywindow) | [`self.pluginRegistrar.viewController.view.window.windowScene.keyWindow`](https://developer.apple.com/documentation/uikit/uiwindowscene/keywindow?language=objc) |
-| [`UIApplication windows`](https://developer.apple.com/documentation/uikit/uiapplication/windows) | [`self.pluginRegistrar.viewController.view.window.windowScene.windows`](https://developer.apple.com/documentation/uikit/uiwindowscene/windows?language=objc) |
-| [`UIApplicationDelegate window`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/window) | [`self.pluginRegistrar.viewController.view.window.windowScene.keyWindow`](https://developer.apple.com/documentation/uikit/uiview/window?language=objc) |
+| Deprecated API | UIScene Replacement |
+|:---------------------------------------------------------------------------------------------------------------|:-------------------------------------------------------------------------------------------------------------------|
+| [`UIScreen mainScreen`](https://developer.apple.com/documentation/uikit/uiscreen/1617815-mainscreen) | [`UIWindowScene screen`](https://developer.apple.com/documentation/uikit/uiwindowscene/screen?language=objc) |
+| [`UIApplication keyWindow`](https://developer.apple.com/documentation/uikit/uiapplication/1622924-keywindow) | [`UIWindowScene keyWindow`](https://developer.apple.com/documentation/uikit/uiwindowscene/keywindow?language=objc) |
+| [`UIApplication windows`](https://developer.apple.com/documentation/uikit/uiapplication/windows) | [`UIWindowScene windows`](https://developer.apple.com/documentation/uikit/uiwindowscene/windows?language=objc) |
+| [`UIApplicationDelegate window`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/window) | [`UIView window`](https://developer.apple.com/documentation/uikit/uiview/window?language=objc) |
-Instead of accessing these APIs, you can access the windowScene through the viewController. See examples below.
+Instead of accessing these APIs,
+you can access the `windowScene` through the `viewController`.
+See the following examples.
@@ -928,8 +944,9 @@ Migration options:
```
## Hide Migration Warning
-To hide the Flutter CLI warning about migrating to UIScene, add the following
-to your pubspec.yaml:
+
+To hide the Flutter CLI warning about migrating to UIScene,
+add the following to your pubspec.yaml:
```yaml file="pubspec.yaml" diff
flutter:
@@ -937,6 +954,14 @@ to your pubspec.yaml:
+ enable-uiscene-migration: false
```
+## Temporarily disable UIScene
+
+To _temporarily_ disable UIScene, add an underscore (`_`)
+in front of **Application Scene Manifest** in your `Info.plist`:
+
+
+
+When you are ready to re-enable, remove the underscore.
## Timeline
diff --git a/src/content/release/release-notes/index.md b/src/content/release/release-notes/index.md
index 1755818869..6564de5ae1 100644
--- a/src/content/release/release-notes/index.md
+++ b/src/content/release/release-notes/index.md
@@ -2,6 +2,7 @@
title: Flutter release notes
shortTitle: Release notes
description: Release notes for Flutter for prior releases.
+showToc: false
---
This page links to announcements and release notes for
@@ -9,12 +10,18 @@ releases to the stable channel.
:::note
For information about bug-fix releases,
-check out the Flutter [CHANGELOG][].
+check out the Flutter repository [changelog][].
-To see what's changed in beta releases, check out the
-[Beta channel](/install/archive#beta-channel) section on the archive page.
+To see what's changed in beta releases, follow the steps
+outlined in the [Beta channel][] section of the [SDK archive][] page.
:::
+[changelog]: {{site.repo.flutter}}/blob/stable/CHANGELOG.md
+[Beta channel]: /install/archive#beta-channel
+[SDK archive]: /install/archive
+
+## Stable releases
+
* 3.41.0
* [3.41.0 announcement][]
* [3.41.0 release notes & change log][]
@@ -112,7 +119,6 @@ To see what's changed in beta releases, check out the
* Earlier
* [Archived release notes][]
-[Archived release notes]: /release/release-notes/release-notes-archive
[3.41.0 announcement]: {{site.flutter-blog}}/whats-new-in-flutter-3-41-302ec140e632
[3.41.0 release notes & change log]: /release/release-notes/release-notes-3.41.0
[3.41.0 breaking changes & migrations]: /release/breaking-changes#released-in-flutter-3-41
@@ -184,4 +190,3 @@ To see what's changed in beta releases, check out the
[1.12.13 announcement]: {{site.flutter-blog}}/announcing-flutter-1-12-what-a-year-22c256ba525d
[1.12.13 release notes and change log]: /release/release-notes/release-notes-1.12.13
[Archived release notes]: /release/release-notes/release-notes-archive
-[CHANGELOG]: {{site.repo.flutter}}/blob/stable/CHANGELOG.md
diff --git a/src/content/release/whats-new.md b/src/content/release/whats-new.md
index 5e899b4ea0..62279afed9 100644
--- a/src/content/release/whats-new.md
+++ b/src/content/release/whats-new.md
@@ -52,7 +52,7 @@ significant changes:
both Flutter and Dart, as announced in a recent [blog post][fwe].
You can find the Flutter [learning pathway][] under the **Learn**
tab at the top of [docs.flutter.dev][]. To return to the rest of the site,
- select the **User Guides** tab. As always, the **Reference**
+ select the **Guides** tab. As always, the **Reference**
tab takes you to the [Flutter API docs][].
* Flutter and Dart now have an [official glossary][].
@@ -60,12 +60,12 @@ significant changes:
a glossary has been added to the Flutter website.
Expect to see it grow in the fullness of time.
-* As always, check out the [breaking changes][] page,
- which includes links to migrations guides and other vital information.
+* As always, check out the [breaking changes][bc-3-41] page for this release,
+ which includes links to migration guides and other vital information.
A special thank you to [navaronbracke][], who wrote a migration
guide for the [deprecation of the `onReorder` callback][onReorder].
-
-[breaking changes]: /release/breaking-changes
+
+[bc-3-41]: /release/breaking-changes#released-in-flutter-3-41
[docs.flutter.dev]: /
[Flutter API docs]: {{site.api}}
[fwe]: {{site.flutter-blog}}/announcing-our-new-dart-and-flutter-getting-started-experience-b8c4b2be0984
diff --git a/src/content/resources/courses.md b/src/content/resources/courses.md
index 4e96d6587d..628c0b5e8e 100644
--- a/src/content/resources/courses.md
+++ b/src/content/resources/courses.md
@@ -7,28 +7,47 @@ showBreadcrumbs: false
Learn how to build Flutter apps with these video courses.
Before signing up for a course, verify that it includes
up-to-date information, such as null-safe Dart code.
-These courses are listed alphabetically.
+
+These courses are grouped by language and listed alphabetically.
To include your course, [submit a PR][]:
+## English
+
* [20 Hour Dart & Flutter YT Course For Beginners][] by Rivaan Ranawat
* [Best Dart Course][] by Tadas Petra & Robert Brunhage
* [Best Flutter Course][] by Tadas Petra & Robert Brunhage
-* [Flutter in Production][] by Andrea Bizzotto
-* [Flutter Foundations][] by Andrea Bizzotto
-* [Flutter & Firebase Masterclass][] by Andrea Bizzotto
-* [Flutter Animations Masterclass][] by Andrea Bizzotto
-* [The Complete Dart Developer Guide][] by Andrea Bizzotto
-* [Flutter & Dart - The Complete Guide, 2023 Edition][]
-* [The Complete 2021 Flutter Development Bootcamp Using Dart][] by App Brewery
-* [Flutter leicht gemacht 2022 - Zero to Mastery!][] by Max Berktold (German)
-* [Flutter Zero to Hero][] by Veli Bacik (Turkish)
-* [Flutter Bootcamp][] by Rubens de Melo (Portuguese)
-* [Flutter para iniciantes][] by Rubens de Melo (Portuguese)
* [Dart & Flutter - Zero to Mastery 2023 + Clean Architecture][] by Max Berktold & Max Steffen
* [Dart & Flutter - Zero to Mastery 2023 - Keiko Corp. Food Reviews App][] by Marco Napoli
+* [Flutter & Dart - The Complete Guide, 2023 Edition][]
+* [Flutter & Firebase Masterclass][] by Andrea Bizzotto
+* [Flutter Animations Masterclass][] by Andrea Bizzotto
+* [Flutter Crash Course][]
+* [Flutter Foundations][] by Andrea Bizzotto
+* [Flutter in Production][] by Andrea Bizzotto
* [Sticky Grouped Headers in Flutter][] by Marco Napoli
-* [Flutter University - From Zero to Mastery][] by Fudeo (Italian)
-* [Tech Idara - Flutter from Basic to Advanced][] by Ishaq Hassan (Urdu)
+* [The Complete 2021 Flutter Development Bootcamp Using Dart][] by App Brewery
+* [The Complete Dart Developer Guide][] by Andrea Bizzotto
+
+## German
+
+* [Flutter leicht gemacht 2022 - Zero to Mastery!][] by Max Berktold
+
+## Italian
+
+* [Flutter University - From Zero to Mastery][] by Fudeo
+
+## Portuguese
+
+* [Flutter Bootcamp][] by Rubens de Melo
+* [Flutter para iniciantes][] by Rubens de Melo
+
+## Turkish
+
+* [Flutter Zero to Hero][] by Veli Bacik
+
+## Urdu
+
+* [Tech Idara - Flutter from Basic to Advanced][] by Ishaq Hassan
[20 Hour Dart & Flutter YT Course For Beginners]: https://youtu.be/CzRQ9mnmh44
[Best Dart Course]: https://www.hungrimind.com/learn/dart
diff --git a/src/content/resources/faq.md b/src/content/resources/faq.md
index ab13a2f63b..37b9613f63 100644
--- a/src/content/resources/faq.md
+++ b/src/content/resources/faq.md
@@ -1015,7 +1015,7 @@ You can compile and deploy your Flutter app to iOS, Android,
请参阅 [不同操作系统下安装 Flutter 的方法文档][install] 了解更多。
-[install]: /get-started
+[install]: /install
[supported platforms]: /reference/supported-platforms
### Does Flutter run on the web?
diff --git a/src/content/resources/games-toolkit.md b/src/content/resources/games-toolkit.md
index d404ca4750..aedc57a0cd 100644
--- a/src/content/resources/games-toolkit.md
+++ b/src/content/resources/games-toolkit.md
@@ -331,7 +331,7 @@ investigate other resources that our community recommended.
[Flame game engine]: https://flame-engine.org/
[Games]: {{site.main-url}}/games
[I/O Pinball Powered by Flutter and Firebase]: {{site.medium}}/flutter/di-o-pinball-powered-by-flutter-and-firebase-d22423f3f5d
-[install Flutter]: /get-started
+[install Flutter]: /install
[Tomb Toad]: https://play.google.com/store/apps/details?id=com.crescentmoongames.tombtoad
[basic-template-readme]: {{site.repo.games}}/blob/main/templates/basic/README.md
[basic-template]: {{site.repo.games}}/tree/main/templates/basic
diff --git a/src/content/testing/integration-tests/index.md b/src/content/testing/integration-tests/index.md
index dfa7f6f941..2cb77d83b0 100644
--- a/src/content/testing/integration-tests/index.md
+++ b/src/content/testing/integration-tests/index.md
@@ -135,7 +135,7 @@ To add `integration_test` and `flutter_test` packages as
`dev_dependencies` using `sdk: flutter`, run following command.
```console
-$ flutter pub add 'dev:integration_test:{"sdk":"flutter"}'
+$ flutter pub add "dev:integration_test:{sdk: flutter}"
```
Output:
diff --git a/src/content/tools/devtools/memory.md b/src/content/tools/devtools/memory.md
index e44132899d..f797638129 100644
--- a/src/content/tools/devtools/memory.md
+++ b/src/content/tools/devtools/memory.md
@@ -380,7 +380,7 @@ The quantities plotted on the y-axis are as follows:
For more information, see [Dart VM internals][].
[Command-line and server apps]: {{site.dart-site}}/server
-[Custom Flutter engine embedders]: {{site.repo.flutter}}/blob/main/engine/src/flutter/docs/Custom-Flutter-Engine-Embedders.md
+[Custom Flutter engine embedders]: {{site.repo.flutter}}/blob/main/docs/engine/Custom-Flutter-Engine-Embedders.md
[Dart VM internals]: https://mrale.ph/dartvm/
[DevTools Performance view]: /tools/devtools/performance
[Flutter architectural overview]: /resources/architectural-overview
diff --git a/src/content/tools/devtools/release-notes/release-notes-2.41.0.md b/src/content/tools/devtools/release-notes/release-notes-2.41.0.md
index 0d49629cf5..4dcde70ef0 100644
--- a/src/content/tools/devtools/release-notes/release-notes-2.41.0.md
+++ b/src/content/tools/devtools/release-notes/release-notes-2.41.0.md
@@ -19,8 +19,9 @@ To learn more about DevTools, check out the
## Inspector updates
-* Added an option to the [new Inspector's](https://docs.flutter.dev/tools/devtools/release-notes/release-notes-2.40.2#inspector-updates)
- settings to allow auto-refreshing the widget tree after a hot-reload. - [#8483](https://github.com/flutter/devtools/pull/8483)
+* Added an option to the new Inspector's settings to allow
+ auto-refreshing the widget tree after a hot-reload. -
+ [#8483](https://github.com/flutter/devtools/pull/8483)
## Network profiler updates
diff --git a/src/content/tools/devtools/release-notes/release-notes-2.42.3.md b/src/content/tools/devtools/release-notes/release-notes-2.42.3.md
index dd65543c5b..846c8b3061 100644
--- a/src/content/tools/devtools/release-notes/release-notes-2.42.3.md
+++ b/src/content/tools/devtools/release-notes/release-notes-2.42.3.md
@@ -21,7 +21,7 @@ To learn more about DevTools, check out the
* Enabled the new inspector by default. This can be disabled in the inspector settings. - [#8650](https://github.com/flutter/devtools/pull/8650)

-* Fixed an issue where selecting an implementation widget on the device while implementation widgets were hidden in the [new inspector](https://docs.flutter.dev/tools/devtools/release-notes/release-notes-2.40.1#inspector-updates) showed an error. - [#8625](https://github.com/flutter/devtools/pull/8625)
+* Fixed an issue where selecting an implementation widget on the device while implementation widgets were hidden in the new inspector showed an error. - [#8625](https://github.com/flutter/devtools/pull/8625)
* Enabled auto-refreshes of the widget tree on hot-reloads and navigation events by default. This can be disabled in the inspector settings. - [#8646](https://github.com/flutter/devtools/pull/8646)

diff --git a/src/content/tools/devtools/release-notes/release-notes-2.55.0.md b/src/content/tools/devtools/release-notes/release-notes-2.55.0.md
new file mode 100644
index 0000000000..f60209557b
--- /dev/null
+++ b/src/content/tools/devtools/release-notes/release-notes-2.55.0.md
@@ -0,0 +1,16 @@
+---
+title: DevTools 2.55.0 release notes
+shortTitle: 2.55.0 release notes
+breadcrumb: 2.55.0
+showToc: false
+---
+
+The 2.55.0 release of the Dart and Flutter DevTools
+includes the following changes among other general improvements.
+To learn more about DevTools, check out the
+[DevTools overview](/tools/devtools).
+
+## Full commit history
+
+To find a complete list of changes in this release, check out the
+[DevTools git log](https://github.com/flutter/devtools/tree/v2.55.0).
diff --git a/src/content/tools/pubspec.md b/src/content/tools/pubspec.md
index f8ccd1d8d7..b69f932828 100644
--- a/src/content/tools/pubspec.md
+++ b/src/content/tools/pubspec.md
@@ -110,7 +110,7 @@ publish_to: none
version: 1.0.0+1
environment:
- sdk: ^3.10.0
+ sdk: ^3.11.0
dependencies:
[!flutter:!] # Required for every Flutter project
diff --git a/src/content/tools/sdk.md b/src/content/tools/sdk.md
index 64055527f2..e879ee3357 100644
--- a/src/content/tools/sdk.md
+++ b/src/content/tools/sdk.md
@@ -83,7 +83,7 @@ Flutter SDK 中提供了 [`dart` CLI 工具][`dart` CLI tool] (`flutter/bin/dart
[Dart SDK]: {{site.dart-site}}/tools/sdk
[`dart` CLI tool]: {{site.dart-site}}/tools/dart-tool
[`flutter` CLI tool]: /reference/flutter-cli
-[Install]: /get-started
+[Install]: /install
[README file]: {{site.repo.flutter}}/blob/main/README.md
## SDK support for Flutter developer tools
diff --git a/src/content/ui/accessibility/accessibility-testing.md b/src/content/ui/accessibility/accessibility-testing.md
index f8b40bc6b6..a3b83d41aa 100644
--- a/src/content/ui/accessibility/accessibility-testing.md
+++ b/src/content/ui/accessibility/accessibility-testing.md
@@ -88,8 +88,8 @@ void main() {
}
```
-To try these tests out, run them on the app you create in the
-[Write your first Flutter app](/get-started/codelab) codelab.
+To try these tests out, run them on
+a [new app created with `flutter create`][create-new-app].
Each button on that app's main screen serves as a tappable target
with text rendered in an 18-point font.
@@ -97,6 +97,7 @@ You can add Guideline API tests alongside other [widget tests][],
or in a separate file, such as `test/a11y_test.dart` in this example.
[Accessibility Guideline API]: {{site.api}}/flutter/flutter_test/AccessibilityGuideline-class.html
+[create-new-app]: /reference/create-new-app
[widget tests]: /testing/overview#widget-tests
## Testing accessibility on the web
diff --git a/src/content/ui/accessibility/assistive-technologies.md b/src/content/ui/accessibility/assistive-technologies.md
index e11804a6ab..232c21dc4f 100644
--- a/src/content/ui/accessibility/assistive-technologies.md
+++ b/src/content/ui/accessibility/assistive-technologies.md
@@ -89,7 +89,7 @@ NVDA screen reader. To learn about using NVDA to test
Windows apps, check out
[Screen Readers 101 For Front-End Developers (Windows)][nvda].
-[nvda]: https://get-evinced.com/blog/screen-readers-101-for-front-end-developers-windows
+[nvda]: https://evinced.com/blog/screen-readers-101-for-front-end-developers-windows
On a Mac, you can use the desktop version of VoiceOver,
which is included in macOS.
diff --git a/src/content/ui/adaptive-responsive/more-info.md b/src/content/ui/adaptive-responsive/more-info.md
index 4401f6d4c1..71d4c4f117 100644
--- a/src/content/ui/adaptive-responsive/more-info.md
+++ b/src/content/ui/adaptive-responsive/more-info.md
@@ -53,6 +53,6 @@ Here are some resources that you might find useful:
[Material guidelines on canonical layouts]: {{site.material}}/foundations/layout/canonical-layouts/overview
[Human interface guidelines (Apple)]: {{site.apple-dev}}/design/human-interface-guidelines/
[Material design for large screens]: {{site.material2}}/blog/material-design-for-large-screens
-[Machine sizes and breakpoints (Microsoft)]: https://docs.microsoft.com/en-us/windows/uwp/design/layout/screen-sizes-and-breakpoints-for-responsive-desig
-[Responsive design techniques (Microsoft)]: https://docs.microsoft.com/en-us/windows/uwp/design/layout/responsive-design
+[Machine sizes and breakpoints (Microsoft)]: https://learn.microsoft.com/windows/apps/design/layout/screen-sizes-and-breakpoints-for-responsive-design
+[Responsive design techniques (Microsoft)]: https://learn.microsoft.com/windows/apps/design/layout/responsive-design
[UI design do's and don'ts (Apple)]: {{site.apple-dev}}/design/tips/
diff --git a/src/content/ui/interactivity/index.md b/src/content/ui/interactivity/index.md
index 8302ae400b..c145ffbe59 100644
--- a/src/content/ui/interactivity/index.md
+++ b/src/content/ui/interactivity/index.md
@@ -1152,7 +1152,7 @@ Wonderous app [running app][wonderous-app], [repo][wonderous-repo]
[`ElevatedButton`]: {{site.api}}/flutter/material/ElevatedButton-class.html
[wonderous-app]: {{site.wonderous}}/web
[wonderous-repo]: {{site.repo.wonderous}}
-[set up]: /get-started
+[set up]: /install
[`SizedBox`]: {{site.api}}/flutter/widgets/SizedBox-class.html
[`Slider`]: {{site.api}}/flutter/material/Slider-class.html
[`State`]: {{site.api}}/flutter/widgets/State-class.html
diff --git a/src/content/ui/internationalization/index.md b/src/content/ui/internationalization/index.md
index 076404304f..3cdb6d817f 100644
--- a/src/content/ui/internationalization/index.md
+++ b/src/content/ui/internationalization/index.md
@@ -1549,7 +1549,7 @@ RegEx adds last two lines with commented out code and closing bracket.
```dart
-const nnDateSymbols = {
+const Map nnDateSymbols = {
'NAME': 'nn',
'ERAS': ['f.Kr.', 'e.Kr.'],
```
diff --git a/src/content/ui/layout/constraints.md b/src/content/ui/layout/constraints.md
index d7b8fff1ea..51dd0a6e12 100644
--- a/src/content/ui/layout/constraints.md
+++ b/src/content/ui/layout/constraints.md
@@ -276,10 +276,10 @@ import 'package:flutter/material.dart';
void main() => runApp(const HomePage());
-const red = Colors.red;
-const green = Colors.green;
-const blue = Colors.blue;
-const big = TextStyle(fontSize: 30);
+const Color red = Colors.red;
+const Color green = Colors.green;
+const Color blue = Colors.blue;
+const TextStyle big = TextStyle(fontSize: 30);
//////////////////////////////////////////////////
diff --git a/src/content/ui/layout/index.md b/src/content/ui/layout/index.md
index f95fd305c0..9ceae47d54 100644
--- a/src/content/ui/layout/index.md
+++ b/src/content/ui/layout/index.md
@@ -1942,7 +1942,7 @@ The following resources might help when writing layout code.
[Layout tutorial]: /ui/layout/tutorial
[Widget catalog]: /ui/widgets
-[HTML/CSS Analogs in Flutter]: /get-started/flutter-for/web-devs
+[HTML/CSS Analogs in Flutter]: /flutter-for/web-devs
[API reference docs]: {{site.api}}/flutter
[Adding assets and images]: /ui/assets/assets-and-images
[Zero to One with Flutter]: {{site.medium}}/@mravn/zero-to-one-with-flutter-43b13fd7b354
diff --git a/src/content/ui/layout/tutorial.md b/src/content/ui/layout/tutorial.md
index b530bb21c1..9e5e9c54dc 100644
--- a/src/content/ui/layout/tutorial.md
+++ b/src/content/ui/layout/tutorial.md
@@ -155,7 +155,7 @@ In this section, shell out the basic Flutter app code to start your app.
}
```
-[Set up your Flutter environment]: /get-started
+[Set up your Flutter environment]: /install
[new-flutter-app]: /reference/create-new-app
## Add the Title section
diff --git a/src/data/sidenav/default.yml b/src/data/sidenav/default.yml
index 91d1bc161b..e096dc4f6d 100644
--- a/src/data/sidenav/default.yml
+++ b/src/data/sidenav/default.yml
@@ -87,6 +87,7 @@
permalink: /cookbook/lists/floating-app-bar
- title: 构建一个平行错位滚动的效果
permalink: /cookbook/effects/parallax-scrolling
+
- title: 自适应 & 响应式设计
permalink: /ui/adaptive-responsive
icon: devices
@@ -268,7 +269,61 @@
- divider
- header: 界面以外的开发
-- title: 数据调用和后端
+- title: AI 解决方案
+ permalink: /ai
+ icon: smart_toy
+ children:
+ - title: AI 创作
+ permalink: /ai/create-with-ai
+ - title: AI 规则
+ permalink: /ai/ai-rules
+ - title: AI 最佳实践
+ permalink: /ai/best-practices
+ children:
+ - title: 概览
+ permalink: /ai/best-practices
+ - title: 提示词 (Prompt)
+ permalink: /ai/best-practices/prompting
+ - title: 结构化 & 输出
+ permalink: /ai/best-practices/structure-output
+ - title: 工具调用 (函数调用)
+ permalink: /ai/best-practices/tool-calls
+ - title: 交互模式
+ permalink: /ai/best-practices/mode-of-interaction
+ - title: 开发者体验
+ permalink: /ai/best-practices/developer-experience
+ - title: AI 工具包
+ permalink: /ai/ai-toolkit
+ children:
+ - title: 概览
+ permalink: /ai/ai-toolkit
+ - title: 用户体验
+ permalink: /ai/ai-toolkit/user-experience
+ - title: 功能集成
+ permalink: /ai/ai-toolkit/feature-integration
+ - title: 自定义大语言模型 (LLM) 提供商
+ permalink: /ai/ai-toolkit/custom-llm-providers
+ - title: 聊天客户端示例
+ permalink: /ai/ai-toolkit/chat-client-sample
+ - title: Flutter GenUI SDK
+ permalink: /ai/genui
+ children:
+ - title: 概览
+ permalink: /ai/genui
+ - title: 主要组件 & 概念
+ permalink: /ai/genui/components
+ - title: 开始使用
+ permalink: /ai/genui/get-started
+ - title: 输入与事件
+ permalink: /ai/genui/input-events
+ - title: Dart & Flutter MCP server
+ permalink: /ai/mcp-server
+ - title: Flutter 的 Gemini CLI 扩展
+ permalink: /ai/gemini-cli-extension
+ - title: Firebase AI Logic
+ permalink: https://firebase.google.cn/docs/ai-logic/get-started?platform=flutter
+
+- title: 数据调用 & 后端
permalink: /data-and-backend
icon: storage
children:
@@ -770,60 +825,6 @@
permalink: https://codelabs.developers.google.cn/codelabs/google-maps-in-flutter
- title: Google 地图 package 文档
permalink: https://developers.google.cn/maps/flutter-package
- - title: 使用 AI 进行创作
- permalink: /ai
- icon: smart_toy
- children:
- - title: 概览
- permalink: /ai/create-with-ai
- - title: AI 规则
- permalink: /ai/ai-rules
- - title: AI 最佳实践
- permalink: /ai/best-practices
- children:
- - title: 概览
- permalink: /ai/best-practices
- - title: 提示词 (Prompt)
- permalink: /ai/best-practices/prompting
- - title: 结构化 & 输出
- permalink: /ai/best-practices/structure-output
- - title: 工具调用 (函数调用)
- permalink: /ai/best-practices/tool-calls
- - title: 交互模式
- permalink: /ai/best-practices/mode-of-interaction
- - title: 开发者体验
- permalink: /ai/best-practices/developer-experience
- - title: AI 工具包
- permalink: /ai/ai-toolkit
- children:
- - title: 概览
- permalink: /ai/ai-toolkit
- - title: 用户体验
- permalink: /ai/ai-toolkit/user-experience
- - title: 功能集成
- permalink: /ai/ai-toolkit/feature-integration
- - title: 自定义大语言模型 (LLM) 提供商
- permalink: /ai/ai-toolkit/custom-llm-providers
- - title: 聊天客户端示例
- permalink: /ai/ai-toolkit/chat-client-sample
- - title: Flutter GenUI SDK
- permalink: /ai/genui
- children:
- - title: 概览
- permalink: /ai/genui
- - title: 主要组件 & 概念
- permalink: /ai/genui/components
- - title: 开始使用
- permalink: /ai/genui/get-started
- - title: 输入与事件
- permalink: /ai/genui/input-events
- - title: Dart & Flutter MCP server
- permalink: /ai/mcp-server
- - title: Flutter 的 Gemini CLI 扩展
- permalink: /ai/gemini-cli-extension
- - title: Firebase AI Logic
- permalink: https://firebase.google.cn/docs/ai-logic/get-started?platform=flutter
-
- title: 拥有其他平台开发经验?
icon: devices
@@ -915,3 +916,4 @@
permalink: /reference/flutter-cli
- title: Flutter API 文档
permalink: https://api.flutter-io.cn
+
diff --git a/src/data/site.yml b/src/data/site.yml
index c398a4c201..06b11b0f6b 100644
--- a/src/data/site.yml
+++ b/src/data/site.yml
@@ -69,7 +69,7 @@ bili:
embed: 'https://player.bilibili.com/player.html'
std-size: 'width="560" height="315"'
-currentFlutterVersion: '3.38.6'
+currentFlutterVersion: '3.41.2'
# Settings for Jaspr.
diff --git a/tool/dash_site/lib/src/commands/analyze_dart.dart b/tool/dash_site/lib/src/commands/analyze_dart.dart
index af942ad03e..7be48fc2dd 100644
--- a/tool/dash_site/lib/src/commands/analyze_dart.dart
+++ b/tool/dash_site/lib/src/commands/analyze_dart.dart
@@ -33,9 +33,10 @@ final class AnalyzeDartCommand extends Command {
int analyzeDart({bool verboseLogging = false}) {
final directoriesToAnalyze = [
- path.join('site'),
+ 'examples',
+ 'packages',
+ 'site',
path.join('tool', 'dash_site'),
- path.join('examples'),
];
if (!verboseLogging) {
@@ -52,7 +53,7 @@ int analyzeDart({bool verboseLogging = false}) {
return pubGetResult;
}
- final flutterAnalyzeOutput = Process.runSync('flutter', const [
+ final flutterAnalyzeOutput = Process.runSync('dart', const [
'analyze',
'.',
], workingDirectory: directory);
diff --git a/tool/dash_site/lib/src/commands/format_dart.dart b/tool/dash_site/lib/src/commands/format_dart.dart
index 41f9dfa8b0..40eef3972c 100644
--- a/tool/dash_site/lib/src/commands/format_dart.dart
+++ b/tool/dash_site/lib/src/commands/format_dart.dart
@@ -34,17 +34,11 @@ final class FormatDartCommand extends Command {
}
int formatDart({bool justCheck = false}) {
- // Currently format all Dart files in the /tool directory
- // and everything in /examples.
final directoriesToFormat = [
- /// flutter.cn 只检查 tool/dash_site
- 'tool/dash_site',
+ 'examples',
+ 'packages',
'site',
- ...Directory('examples')
- .listSync()
- .whereType()
- .map((e) => e.path)
- .where((e) => !path.basename(e).startsWith('.')),
+ path.join('tool', 'dash_site'),
];
final dartFormatOutput = Process.runSync(Platform.resolvedExecutable, [
diff --git a/tool/dash_site/lib/src/utils.dart b/tool/dash_site/lib/src/utils.dart
index 74221a4c01..2cdce591c4 100644
--- a/tool/dash_site/lib/src/utils.dart
+++ b/tool/dash_site/lib/src/utils.dart
@@ -33,7 +33,7 @@ int installJasprCliIfNecessary() {
'global',
'activate',
'jaspr_cli',
- '^0.22.2',
+ '^0.22.3',
]);
if (activateOutput.exitCode != 0) {
diff --git a/tool/dash_site/pubspec.yaml b/tool/dash_site/pubspec.yaml
index 85510a74ba..8ebe90d7d2 100644
--- a/tool/dash_site/pubspec.yaml
+++ b/tool/dash_site/pubspec.yaml
@@ -4,22 +4,16 @@ publish_to: none
resolution: workspace
environment:
- sdk: ^3.10.0
+ sdk: ^3.11.0
dependencies:
args: ^2.7.0
excerpter:
- git:
- url: https://github.com/dart-lang/site-shared
- path: pkgs/excerpter
- ref: f91ed8ecef6a0b31685804fe4102b25fda021460
+ path: ../../packages/excerpter
io: ^1.0.5
linkcheck: ^3.1.0
path: ^1.9.1
dev_dependencies:
analysis_defaults:
- git:
- url: https://github.com/dart-lang/site-shared
- path: pkgs/analysis_defaults
- ref: f91ed8ecef6a0b31685804fe4102b25fda021460
+ path: ../../packages/analysis_defaults