Welcome to Flutter 3.27! This release is packed with exciting updates designed to enhance your development experience and elevate your app’s performance.
Flutter 3.27 brings improvements across the framework, engine, and ecosystem, with notable advancements in Impeller and updates to Cupertino widgets. We’re also introducing powerful new features in DevTools, streamlining how you manage your Flutter projects. With over 1,400 commits from 187 contributors, including 49 first-time contributors, this release showcases the strength of the Flutter community and its collective effort to push the framework forward. Let’s dive into the highlights of what’s new in Flutter 3.27!
Cupertino Widget Updates in Flutter 3.27
Flutter 3.27 introduces several important updates to the Cupertino widget set, enhancing their functionality, customization options, and alignment with iOS standards. Here are the key improvements:
CupertinoCheckbox & CupertinoRadio: Both widgets receive high-fidelity updates, including refined sizes, colors, stroke widths, and press behaviors. Significant customizability improvements have been added, such as new properties for mouse cursors, semantic labels, thumb images, and fill colors. Some deprecated properties, like the inactive color of CupertinoCheckbox, have been removed, while others, like the track color of CupertinoSwitch, have been renamed to improve consistency. These updates bring the Cupertino widgets closer to feature parity with their Material counterparts.
CupertinoSwitch: Along with other updates, the CupertinoSwitch widget now benefits from more customization options, such as the ability to adjust its thumb images and track colors, and improved behavior for mouse cursors and semantic labels.
CupertinoSlidingSegmentedControl: This widget has received visual improvements, including updated thumb radius, separator height, padding, shadows, and thumb scale alignment. It now supports disabling individual segments and uses proportional layout based on segment content, providing greater flexibility.
Key Contributions from the Community
Contribution: Thanks to, CupertinoNavigationBar and CupertinoSliverNavigationBar now feature transparent backgrounds until content is scrolled underneath them. This allows the navigation bar to match the background color in its expanded state, with a customizable color for its collapsed state. Additionally, the ability to smoothly transition between both colors during scrolling has been added.
Contribution: A significant contribution introduces the CupertinoButtonSize enum and sizeStyle property for CupertinoButton. This update allows developers to apply the iOS 15+ button styles and the new CupertinoButton.tinted constructor for buttons with translucent backgrounds. Additionally, CupertinoButton now supports an onLongPress handler and enables actions via keyboard shortcuts.
Other Notable Updates
CupertinoPicker & CupertinoDatePicker: These widgets now allow for scrolling directly to the tapped items, improving usability and precision.
CupertinoAlertDialog: Now supports the tap-slide gesture, providing a smoother interaction experience.
CupertinoActionSheet: The ActionSheet widget receives high-fidelity updates, with improved padding and font sizes across all system text size settings. It also now supports haptic feedback when sliding over buttons, enhancing the tactile experience.
Additional Enhancements:
CupertinoContextMenu: This widget now supports scrolling when its actions overflow the screen, making it more versatile.
CupertinoDatePicker: Long content in the columns of CupertinoDatePicker is no longer clipped, improving the display of extended text.
Normalizing Material Theming
In Flutter 3.27, significant progress has been made in normalizing the theming of various Material components. The CardTheme, DialogTheme, and TabBarTheme have all been refactored to better align with Flutter’s established conventions for component theming. New theme data classes—CardThemeData, DialogThemeData, and TabBarThemeData—have been introduced, allowing developers to customize the default visual properties of these components more easily. This is part of an ongoing effort to enhance the theming consistency across the Material library, and future releases will continue to refine and normalize other component themes.
Enhanced CarouselView Features
Flutter 3.27 brings an exciting new feature to CarouselView: the addition of CarouselView.weighted. This update enables more flexible and dynamic layouts within carousels. By adjusting the flexWeights parameter in the constructor, developers can control the relative size and positioning of items within the carousel. For example:
[3, 2, 1] creates a multi-browse layout.
[7, 1] results in a hero layout.
[1, 7, 1] produces a centered-hero layout.
These values define the relative "weight" each item occupies in the carousel, allowing for customized and responsive carousel layouts tailored to the needs of your app's design.
Material Updates in Flutter 3.27
Flutter 3.27 brings a series of improvements to the Material components, enhancing functionality and addressing a variety of issues. Here are the key updates:
Feature Enhancements
SegmentedButton: A new direction property has been added, allowing items within the SegmentedButton to be aligned vertically, offering more flexibility in layout.
Icon Customization: The styleFrom method for ButtonStyleButton classes (such as ElevatedButton, FilledButton, OutlinedButton, TextButton, MenuItemButton, and SubmenuButton) now includes additional icon-related properties. These updates allow for more precise customization of icons within buttons, enhancing the visual design flexibility.
Bug Fixes
Button Icon Defaults: The default icon size and color for ButtonStyleButton classes have been aligned with Material 3 specifications, ensuring consistency with the latest design guidelines.
AppBar Scroll Behavior: The AppBar’s scroll-under behavior has been corrected to properly persist when the navigation drawer is opened, now matching the expected behavior on native Android apps.
MenuAnchor Enhancements: Focus-related fixes have been implemented for MenuAnchor. Additionally, several issues with DropdownMenu—such as scrolling problems within nested scrollables and inconsistencies with the filter mechanism—have been resolved for smoother interaction.
Route Transition Improvements
ModalRoutes are now more flexible when transitioning between pages with different types of animations. In previous releases, if a new route entered the screen while the existing route had a different transition, it could cause visual misalignment. Now, ModalRoutes can pass exit transition builders to each other, ensuring that the enter and exit transitions are always in sync. This improvement makes it possible to use multiple route transition styles on the same page, enhancing navigation flexibility with Flutter's Navigator and Router.
Text Selection Enhancements
Shift + Click Gesture: On Linux, macOS, and Windows, Flutter’s SelectionArea now supports the Shift + Click gesture. This allows users to extend the selection to the clicked position, improving text selection usability.
Clearing Selections: You can now clear text selections within a SelectionArea and SelectableRegion using the clearSelection method on SelectableRegionState. Additionally, SelectableRegionState is now accessible through SelectionArea by providing a GlobalKey and using SelectionAreaState.selectableRegion.
Rendering Fixes: Several issues with RenderParagraph have been addressed, ensuring that text selections within SelectionArea or SelectableRegion continue to function properly after window resizing. Selections now behave as expected even when users click or tap outside the text area.
Row and Column Spacing
Flutter 3.27 introduces a highly anticipated convenience feature for Rows and Columns: spacing. This new spacing parameter allows developers to easily apply a fixed pixel offset between the children of a Row or Column. This reduces the amount of code needed to manage spacing, making it more efficient and cleaner to design layouts with consistent child spacing.
Engine Enhancements
Impeller on Android
We’re excited to announce that Impeller is now the default rendering engine on modern Android devices. Since Flutter 3.16, Impeller has been available in preview for Android, and in this release, we've made significant improvements based on user feedback to enhance both performance and fidelity.
For modern Android devices with Vulkan support, Impeller now provides superior performance and rendering quality. However, for older devices or those without Vulkan support, the Skia rendering engine will continue to be used.
Opt-out option: If needed, developers can opt-out of Impeller by using the --no-enable-impeller flag with the flutter command-line tool, or by adding the following line to the AndroidManifest.xml:
xml
Copy code
<meta-data
android:name="io.flutter.embedding.android.EnableImpeller"
android:value="false" />
Looking ahead, we plan to continue improving Impeller’s performance on Android, with the goal of making its OpenGL backend production-ready and eventually removing the Skia fallback.
As the Android hardware ecosystem is diverse, we encourage Flutter developers to upgrade to the latest stable version and report any issues when Impeller is enabled, especially with specific device details and Android version information. Your feedback remains essential to refining Impeller’s performance on Android.
iOS Improvements
For iOS users, Flutter 3.27 addresses a notable issue related to compositor backpressure that caused frame delays in previous versions. On high-frame-rate devices, these delays resulted in dropped frames and jank, especially when the raster workload was delayed by the compositor.
Thanks to the contribution from open-source developer, a new Metal rendering surface implementation has been added. This improvement allows the raster workload to start more consistently after the UI workload finishes, reducing delays and improving frame times. As a result, Flutter now delivers more stable performance and is better able to hit 120Hz on high-frame-rate devices.
Framework: Wide Gamut Colors
Flutter now supports the use of colors in the DisplayP3 color space, enabling UIs that take full advantage of displays on iOS devices. This addition also expands support for wider bit depths, allowing more colors in both sRGB and DisplayP3 color spaces. As a result, some older Color methods have been deprecated. For details on these breaking changes, please refer to the official notice.
Web: Performance, Efficiency, and Accessibility Enhancements
Flutter 3.27 introduces several important improvements to the Flutter web experience:
Image Decoding Optimization: In Safari and Firefox, image decoding for static images now uses the native element, replacing WebAssembly codecs. This change eliminates image decoding jank and reduces WebAssembly memory usage.
Platform Views Optimization: Optimizations to platform views reduce the number of canvas overlays, enhancing rendering efficiency.
WebAssembly Compatibility: All Flutter team-developed plugins and packages are now compatible with WebAssembly.
Accessibility Enhancements: Multiple fixes have been made to improve accessibility, including for headings, dialogs, passwords, iOS keyboards, links, and scrollable elements.
Rendering Fixes: Several rendering issues in the CanvasKit and Skwasm renderers have been resolved, addressing bugs related to image filters, clipping, and memory usage of Paint objects.
Drag Scrolling in Multi-View Mode: Drag scrolling performance has been improved in multi-view mode.
iOS: Swift Package Manager Migration
Flutter is moving towards Swift Package Manager (SPM) integration, bringing numerous benefits:
Access to Swift Package Ecosystem: Flutter plugins can now tap into the growing ecosystem of Swift packages.
Simpler Installation: SPM is bundled with Xcode, meaning you won’t need Ruby or CocoaPods for Flutter on iOS platforms in the future.
Support for Swift Package Manager was initially available only on the "main" channel, but it is now also accessible on both the beta and stable channels. While SPM is not yet enabled by default, it will be once any issues are resolved.
Plugin authors are encouraged to migrate to Swift Package Manager, and many popular plugins—such as Firebase and others—have already done so. Additionally, Pub.dev now checks for Swift Package Manager compatibility, and packages that don’t support it will receive reduced scores.
If you have feedback on SPM support in Flutter, please report it.
Android: Edge-to-Edge and Freeform Support
Edge-to-Edge Mode: On devices running Android 15 or newer, Flutter apps will now run in edge-to-edge mode by default, utilizing the full screen. Developers can opt out of this behavior by following the provided guide.
Freeform Window Support: Android’s Freeform mode, which allows users to resize app windows, has been expanded to handle hardware cutouts properly. Flutter’s SafeArea and MediaQuery now handle these cutouts when an app window is resized in Freeform mode, providing a smoother user experience.
Kotlin Build Script Support and Declarative Plugin Migration in Flutter 3.27
Flutter 3.27 introduces official support for Kotlin build scripts (build.gradle.kts files). This means that developers can now leverage Kotlin to configure their Gradle builds, with full tooling support from Flutter. If you encounter any issues with Kotlin support, please file a bug report. While Groovy remains the supported language for Gradle, this shift to Kotlin improves type safety and makes it easier to maintain unit tests for build code.
This release also marks the end of support for Gradle’s legacy apply script method. For new projects, Kotlin build files will be the default. Most existing apps will require a manual migration to Kotlin. You can find migration documentation to guide you through the process.
The migration to declarative inclusion of the Flutter Gradle Plugin brings several benefits, including better maintainability and enhanced stability across Android tooling versions.
Ecosystem Updates
Flutter and Dart Package Ecosystem Summit 2024
As part of FlutterCon USA 2024, we hosted the second Flutter and Dart Package Ecosystem Summit in September, following a successful summit at FlutterCon Europe in July 2024 and a virtual summit in August 2023. This summit featured package authors and maintainers engaging in unconference-style sessions on various topics, including:
Swift Package Manager support
Native Interop: Past, Present, and Future
Sustainable package maintenance models
We look forward to hosting more summits in partnership with the Flutter community to continue evolving the ecosystem.
Download Metrics on Pub.dev
To provide more insight into the popularity of packages, we have introduced download count metrics on pub.dev. Each package page now features a 30-day download count (replacing the previous popularity score). Additionally, we’ve added an interactive sparkline chart to track weekly download trends, helping developers spot usage spikes, such as after a new release, or monitor a package's popularity over time.
These download counts reflect raw data from various sources, including CI systems, human users, and package analysis tools.
Pub Workspaces
With Dart 3.6, we’ve launched Pub Workspaces, a new feature designed for managing multiple related packages within a single monorepo. By defining a root pubspec.yaml that references other packages, developers can ensure that all packages in the repository share a consistent set of dependencies. This also optimizes IDE performance by reducing memory usage when opening the entire workspace, as the analyzer only tracks a single analysis context.
Automated Publishing of Flutter Packages
We’ve enhanced the GitHub Actions workflow (setup-dart publish) to support the automated publishing of Flutter packages to pub.dev. This update streamlines the process of contributing to the Pub ecosystem in a consistent and verifiable way.
New Plugin Releases and Updates
Interactive Media Ads Plugin
We’ve launched the Interactive Media Ads (IMA) Flutter plugin, which simplifies the integration of multimedia ads into iOS and Android apps built with Flutter. The IMA plugin supports ad requests from any VAST-compliant ad server and handles ad playback within your app. Key features include:
Client-side APIs for linear instream video ads
VAST and VMAPsupport
Single & Podded Ad Requests
Skippable ads
In-App Purchase Updates
We’ve updated the in_app_purchase_storekit package to support StoreKit 2 in iOS and macOS, migrating from the deprecated StoreKit 1 APIs in iOS 18. This change allows for new StoreKit 2 features, such as improved subscription management. A migration guide will be available soon to help developers transition to the new functionality. Note that this is a non-breaking change, so you can migrate at your convenience.
DevTools and IDEs: Flutter 3.27 Updates
Flutter 3.27 brings several updates to DevTools, enhancing both its functionality and usability. This release includes new features, improved robustness, and some exciting experimental features that you can enable. Let’s explore these updates and improvements in detail!
Key DevTools Updates
iOS Deep Link Validation
The Flutter Deep Links tool now supports validating iOS deep link settings. Previously, deep link validation was limited to Android, but with this update, you can now validate deep links for both Android and iOS directly within DevTools.
Improved Offline Workflow
To improve workflows when working with "offline" data, DevTools now supports exporting Network data as a .har file. This enables you to save and share network traffic data for later use or import it into other tools. Additionally, you can now load memory snapshots into DevTools even when the tool isn’t connected to a running app, making it easier to continue analyzing past sessions.
Memory Tool Resilience
We’ve heard your feedback about losing memory tool data when your app crashes, especially when debugging Out of Memory (OOM) issues. Flutter 3.27 addresses this pain point by allowing you to view the most recent memory data even after your app disconnects. This update ensures you don’t lose critical debugging information if your app crashes unexpectedly.
These are just a few of the key improvements in DevTools for this release. For a more detailed list of updates, check out the release notes for DevTools versions 2.38.0, 2.39.0, and 2.40.1.
Previews and Experimental Features to Try
1. New Flutter Inspector
The Flutter Inspector has undergone significant changes to improve its usability and UI debugging experience. You can enable the new Inspector by toggling the “New Inspector” setting in DevTools.
Key improvements include:
Condensed Widget Tree: The widget tree has been streamlined for easier navigation, especially useful when working within IDEs with limited horizontal screen space.
Toggle Implementation Widgets: You can now toggle whether implementation widgets (those added by the framework or third-party packages) are included in the widget tree, making the Inspector more focused on your custom widgets.
Widget Details View: A detailed view for the selected widget now includes an inline layout viewer, properties of the widget and render object, and a flex layout explorer for Flex widgets and their children.
These changes are available for you to try out now, and more improvements are on the way. If you encounter any issues, please report them to help us refine the Inspector before it becomes the default version.
WebAssembly Support in DevTools
A new experimental feature in DevTools allows you to enable WebAssembly (WASM) to load the DevTools web app. By switching to WASM, you can experience better performance compared to the default JavaScript-compiled version of DevTools. This feature is still experimental, so we encourage you to try it out and report any issues you find with the WASM build.
Breaking Changes and Deprecations in Flutter 3.27
Flutter 3.27 introduces several breaking changes and deprecations that developers need to be aware of. Here’s a summary of the key changes:
Material Design 3 Tokens
Flutter has integrated the latest Material Design 3 tokens (v6.1) into the Flutter Material library. These updates involve changes to the mapping of four color roles in Light mode, ensuring a more visually appealing look while maintaining accessible contrast. The affected color properties are:
On-primary-container (Primary10 to Primary30)
On-secondary-container (Secondary10 to Secondary30)
On-tertiary-container (Tertiary10 to Tertiary30)
On-error-container (Error10 to Error30)
These updates impact widgets that use these color roles as their default values, but no breakages were observed in testing.
Additionally, the border color of Chips (Chip, ActionChip, ChoiceChip, FilterChip, and InputChip) has been updated from ColorScheme.outline to ColorScheme.outlineVariant, improving the visual hierarchy between chips and buttons.
Deprecating Objective-C iOS Projects
Since Flutter 1.9.1 (released in 2019), new iOS projects have defaulted to using Swift. As a result, creating new Objective-C iOS projects is now deprecated. The flutter create --ios-language objc flag will be removed in a future version of Flutter. However, developers can still open Xcode projects and add Objective-C files, including for plugins. The flutter create --android-language java flag for Java support in Android apps will remain unchanged.
Deep Link Default Flag Change
In Flutter 3.27, the default value for deep linking has changed from false to true, making deep linking opt-in by default. If you’re using Flutter’s default deep linking setup, there’s no need to manually set the flag to true. However, if you're utilizing third-party deep linking plugins, such as:
firebase dynamic links
uni_link
app_links
This update introduces a breaking change. In these cases, you’ll need to manually reset the Flutter deep linking flag to false. For more information on this change, refer to the design document.
Deprecating Support for Older SDKs in IDEs
As Dart and Flutter plugins for VS Code and IntelliJ evolve, maintaining support for older Dart SDK versions has become increasingly difficult. Starting with Dart 3.6, Flutter will deprecate support for Dart SDK versions older than 3.0 (released in May 2023). While these versions may still work, official support and fixes for issues specific to older SDK versions will no longer be provided.
When Dart 3.7 is released (expected Q1 2025), support for these older SDK versions will be fully removed, and future plugin releases may not be compatible with them. Developers using older Dart SDK versions are encouraged to upgrade to Dart 3.0 or later to continue receiving support and updates.
This change will affect less than 1% of users but allows the team to focus on improving the experience for the majority of developers.
Closing Thoughts
For a full list of breaking changes and migration guidance, refer to the breaking changes page. A huge thank you to the Flutter community for your ongoing contributions. Your feedback, enthusiasm, and contributions help drive Flutter forward. We’re excited about the future and can’t wait to see the incredible apps you build with Flutter 3.27!
Conclusion
A heartfelt thank you to the entire hire Flutter developers community for your invaluable contributions, feedback, and passion that have made Flutter 3.27 a reality! Your ongoing support continues to drive the growth and evolution of Flutter. We are thrilled about what the future holds for Flutter and can’t wait to see the incredible apps you create with the new features and enhancements in this release.
For a full breakdown of all the changes, be sure to check out the comprehensive release notes and changelog. Ready to explore the latest and greatest? Simply run flutter upgrade and start building your next app today!
Original Published: https://encodedots.hashnode.dev/flutter-3-27-release
Top comments (5)
Flutter 3.27 very useful article for flutter developer. Thank for sharing @encodedots
Thank you @devshi-b
Nice Information to share! Very Useful Article......
Thanks, very useful
Totally agree. nice explanation. @encodedots