Flutter 1.7.8 release notes

The 1.7.8 release is a follow-on to the 1.5.4 stable release in May, providing 1289 merged PRs and closing 184 issues. The major themes of this release are:

  • Support for 32-bit and 64-bit bundles on Android
  • Large number of iOS features and fixes, including improved text editing and localization
  • AndroidX support for new projects via the --androidx flag of 'flutter create'
  • A new widget: the RangeSlider

As detailed in our roadmap, we're also continuing the ongoing work in the Flutter engine and framework to support turning on web and desktop targets; however, this is not yet ready for general usage.

Support for 32-bit and 64-bit Android Bundles

#

From August 1st, 2019, Android apps that use native code and target Android 9 Pie will be required to provide a 64-bit version in addition to the 32-bit version when publishing to the Google Play Store. Since all Flutter apps include native code, this requirement will affect new Flutter apps submitted to the store, as well as updates to existing Flutter apps. This does not affect existing app versions published to the store.

This release includes support for building app bundles and APKs that support both 32-bit and 64-bit binaries, completing our work on https://github.com/flutter/flutter/issues/31922. By using this release when building an Android application, your App Bundle or APK now supports both 32-bit and 64-bit CPU architectures by default.

Breaking Changes

#

The following are the list of breaking changes in this release along with descriptions of each change and how to handle it in your Flutter code.

Severe Crash Changes

#

We've also fixed several crashing issues in this release.

  • #31228 Fix ExpansionPanelList Duplicate Global Keys Exception
  • #31581 Fix Exception on Nested TabBarView disposal
  • #34460 Add back ability to override the local engine in Gradle

iOS

#

We continue to focus heavily on the iOS support in Flutter, including enhanced text editing and localization in this release.

  • #29809 Fix text selection toolbar appearing under obstructions
  • #29824 Cupertino localization step 8: create a gen_cupertino_localizations and generate one for cupertino english and french
  • #29954 Cupertino localization step 9: add tests
  • #30129 Fix refresh control in the gallery demo, update comments
  • #30224 Cupertino localization step 10: update the flutter_localizations README
  • #31039 Fix bundle id on iOS launch using flutter run
  • #31308 Added font bold when isDefaultAction is true in CupertinoDialogAction
  • #31326 Add more shuffle cupertino icons
  • #31332 iOS selection handles are invisible
  • #31464 CupertinoPicker fidelity revision
  • #31623 fix edge swiping and dropping back at starting point
  • #31644 Cupertino localization step 12: push translation for all supported languages
  • #31687 Center iOS caret, remove constant offsets that do not scale
  • #31763 Fix ScrollbarPainter thumbExtent calculation and add padding
  • #31852 Text selection handles are sometimes not interactive
  • #32013 Cupertino Turkish Translation
  • #32086 Fix CupertinoSliverRefreshControl onRefresh callback
  • #32469 Let CupertinoNavigationBarBackButton take a custom onPressed
  • #32513 Cupertino localization step 12 try 2: push translation for all supported languages
  • #32620 Added ScrollController to TextField
  • #32823 Add enableInteractiveSelection to CupertinoTextField
  • #32974 Fix disabled CupertinoTextField style
  • #33450 Do not return null from IosProject.isSwift
  • #33624 CupertinoTabScaffold crash fix
  • #33634 Let there be scroll bars
  • #33653 Include advice about dispose in TextEditingController api
  • #33684 Disable CocoaPods input and output paths in Xcode build phase and adopt new Xcode build system
  • #33739 fixed cupertinoTextField placeholder textAlign
  • #33852 Disable CocoaPods input and output paths in Xcode build phase and adopt new Xcode build system
  • #34293 Change Xcode developmentRegion to 'en' and CFBundleDevelopmentRegion to DEVELOPMENT_LANGUAGE
  • #34964 CupertinoTextField.onTap

Android

#

In this release, we've improved support for Android with new support for AndroidX from an external contributor (Thanks, Josh!) and supporting 64-bit and 32-bit APK bundles in compliance with the Google Play Store's updated policy.

  • #31028 Adds support for generating projects that use AndroidX support libraries
  • #31359 Remove support for building dynamic patches on Android
  • #31491 Allow adb stdout to contain the port number without failing
  • #31835 Cherry-pick ADB CrOS fix to beta
  • #32787 Support 32 and 64 bit
  • #33191 Remove colon from Gradle task name since it's deprecated
  • #33611 Use Dart's new direct ELF generator to package AOT blobs as shared libraries in Android APKs
  • #33696 Generate ELF shared libraries and allow multi-abi libs in APKs and App bundles
  • #33901 Respond to AndroidView focus events.
  • #33923 [flutter_tool] Track APK sha calculation time
  • #33951 Whitelist adb.exe heap corruption exit code.
  • #34066 Adds the androidX flag to a modules pubspec.yaml template so it is se…
  • #34123 Generate ELF shared libraries and allow multi-abi libs in APKs and App bundles

Material

#

This release includes a number of improvements to existing Material components, including the DatePicker, SnackBar and TimePicker, as well as a new component: the RangeSlider.

  • #30572 [Material] Adaptive Slider constructor
  • #30884 [Material] Update TabController to support dynamic Tabs
  • #31018 [Material] selected/unselected label styles + icon themes on BottomNavigationBar
  • #31025 added scrimColor property in Scaffold widget
  • #31275 Update SnackBar to allow for support of the new style from Material spec
  • #31295 Improve ThemeData.accentColor connection to secondary color
  • #31318 Add BottomSheetTheme to enable theming color, elevation, shape of BottomSheet
  • #31438 Implements focus handling and hover for Material buttons.
  • #31514 Date picker layout exceptions
  • #31566 TimePicker moves to minute mode after hour selection
  • #31662 added shape property to SliverAppBar
  • #31681 [Material] Create a themable Range Slider (continuous and discrete)
  • #31693 Adds a note to Radio's/RadioListTile's onChange
  • #31902 Updated primaryColor docs to refer to colorScheme properties
  • #31938 Update scrimDrawerColor with proper const format
  • #32053 Increase TimePicker touch targets
  • #32070 rename foreground and background to light and dark #32527 Added 'enabled' property to the PopupMenuButton
  • #32726 Material should not prevent ScrollNotifications from bubbling upwards
  • #32904 Use reverseDuration on Tooltip and InkWell
  • #32911 Material Long Press Text Handle Flash
  • #33073 SliverAppBar shape property
  • #34869 [Material] Properly call onChangeStart and onChangeEnd in Range Slider
  • #32950 Material allows "select all" when not collapsed

Web

#

The work on web functionality continues with merging of the code from flutter_web repo into the main flutter repo, providing a simpler developer experience for this pre-release technology. We've already compiled many of the existing Flutter samples for web. Enjoy!

  • #32360 Allow flutter web to be compiled with flutter
  • #33197 Wire up hot restart and incremental rebuilds for web
  • #33406 Add web safe indirection to Platform.isPlatform getters
  • #33525 Add capability to flutter test –platform=chrome
  • #33533 Reland - Wire up hot restart and incremental rebuilds for web
  • #33629 Add real-er restart for web using webkit inspection protocol
  • #33859 Reland support flutter test on platform chrome
  • #33892 add benchmarks to track web size
  • #33956 Codegen an entrypoint for flutter web applications
  • #34018 Add flutter create for the web
  • #34084 make running on web spooky
  • #34112 Separate web and io implementations of network image
  • #34159 Use product define for flutter web and remove extra asset server
  • #34589 Remove most of the target logic for build web, cleanup rules
  • #34856 set device name to Chrome
  • #34885 Reland: rename web device

Desktop

#

The experimental support for desktop in Flutter continues as well, with many improvements to the basics needed on desktop like hover, focus traversal, shortcuts, actions and even game controllers! We've also continued to simplify the developer experience, which you can read about here. This is very early, but if you are trying desktop support in Flutter, please log issues when you find them!

  • #30076 Implements FocusTraversalPolicy and DefaultFocusTraversal features.
  • #30339 Add buttons to gestures
  • #31329 Add Xcode build script for macOS target
  • #31515 Support local engine and asset sync for macOS
  • #31567 Remove need for build/name scripts on Linux desktop
  • #31631 Teach Linux to use local engine
  • #31699 Re-land: Add support for Tooltip hover
  • #31802 Reland "Fix text field selection toolbar under Opacity (#31097)"
  • #31819 Redo: Add buttons to gestures
  • #31873 Add basic desktop linux checks
  • #31935 Redo#2: Add buttons to gestures
  • #32025 Make Hover Listener respect transforms
  • #32142 Fix RenderPointerListener so that callbacks aren't called at the wrong time.
  • #32335 Teach flutter msbuild for Windows
  • #32776 Text field focus and hover support.
  • #32838 Handles hidden by keyboard
  • #32914 Make hover and focus not respond when buttons and fields are disabled.
  • #33090 [Material] Add support for hovered, pressed, and focused text color on Buttons.
  • #33277 Implement macOS support in flutter doctor
  • #33279 Fix a problem in first focus determination.
  • #33298 Add actions and keyboard shortcut map support
  • #33443 Wrap Windows build invocation in a batch script
  • #33454 ensure unpack declares required artifacts
  • #33477 Fix onExit calling when the mouse is removed.
  • #33540 Pass local engine variables to Windows build
  • #33608 Restructure macOS project files
  • #33632 Update the keycodes from source
  • #33636 Implement plugin tooling support for macOS
  • #33695 Add pseudo-key synonyms for keys like shift, meta, alt, and control.
  • #33868 Game controller button support
  • #33872 Add 'doctor' support for Windows
  • #33874 Prevent windows web doctor from launching chrome
  • #34050 limit open files on macOS when copying assets
  • #34376 Add missing pieces for 'driver' support on macOS
  • #34755 Add linux doctor implementation

Animation, Scrolling & Images

#

In this release, we continue to polish animations, scrolling and image support.

  • #21896 Bottom sheet scrolling
  • #28834 Sliver animated list #29677 Fix calculation of hero rectTween when Navigator isn't fullscreen
  • #32730 Add reverseDuration to AnimationController
  • #32843 Added a missing dispose of an AnimationController that was leaking a ticker.
  • #31832 Allow DSS to be dragged when its children do not fill extent
  • #33627 SliverFillRemaining flag for different use cases
  • #32853 Add onBytesReceived callback to consolidateHttpClientResponseBytes()
  • #32857 Add debugNetworkImageHttpClientProvider
  • #32936 Add some sanity to the ImageStream listener API
  • #33729 Update consolidateHttpClientResponseBytes() to use compressionState
  • #33369 Add loading support to Image

Typography & Accessibility

#

We're also continuing to push towards excellent typography and accessibility, including support for accessing OpenType font-specific features, as demonstrated in this sample.

  • #31987 Text wrap width
  • #33230 Framework support for font features in text styles
  • #33808 fix ExpansionPanelList merge the header semantics when it is not necessary
  • #34368 Fix semantics_tester
  • #34434 Semantics fixes

Fundamentals

#

As always, we continue to polish the fundamentals.

  • #30388 Add hintStyle in SearchDelegate
  • #30406 Add binaryMessenger constructor argument to platform channels
  • #30612 Added required parameters to FlexibleSpaceBarSettings
  • #30796 Unbounded TextField width error
  • #30942 rectMoreOrLess equals, prep for 64bit rects
  • #31282 Stop precaching the artifacts for dynamic mode.
  • #31485 Prevent exception being thrown on hasScrolledBody
  • #31520 Don't add empty OpacityLayer to the engine
  • #31526 replace no-op log reader with real implementation
  • #31757 Make FlutterProject factories synchronous
  • #31807 Make const available for classes that override AssetBundle
  • #31825 Fix missing return statements on function literals
  • #31861 Add Horizontal Padding to Constrained Chip Label Calculations
  • #31868 Handle notification errors
  • #31889 Start abstracting platform logic builds behind a shared interface
  • #32126 Bump multicast_dns version
  • #32192 Transform PointerEvents to the local coordinate system of the event receiver
  • #32328 Add breadcrumbs to TextOverflow
  • #32434 Support for replacing the TabController, after disposing the old one
  • #32528 Tapping a modal bottom sheet should not dismiss it by default
  • #33152 ModalRoute resumes previous focus on didPopNext
  • #33297 Instrument add to app flows
  • #33458 Add to app measurement
  • #33462 Fix text scaling of strut style
  • #33473 fix 23723 rounding error
  • #33474 Fixed for DropdownButton crashing when a style was used that didn't include a fontSize
  • #33475 Move declaration of semantic handlers from detectors to recognizers
  • #33488 use toFixedAsString and DoubleProperty in diagnosticProperties
  • #33802 Double double tap toggles instead of error
  • #33876 Reland "Framework support for font features in text styles"
  • #33886 Add currentSystemFrameTimeStamp to SchedulerBinding
  • #33955 Add localFocalPoint to ScaleDetector
  • #33999 Updating MediaQuery with viewPadding
  • #34055 Toggle toolbar exception fix
  • #34057 Add endIndent property to Divider and VerticalDivider
  • #34068 fix empty selection arrow when double clicked on empty read only text…
  • #34081 Report async callback errors that currently go unreported.
  • #34175 Don't show scrollbar if there isn't enough content
  • #34243 update the Flutter.Frame event to use new engine APIs
  • #34295 Prepare for Uint8List SDK breaking changes
  • #34298 Preserving SafeArea : Part 2
  • #34355 Text field vertical align
  • #34365 redux of a change to use new engine APIs for Flutter.Frame events
  • #34508 add route information to Flutter.Navigation events
  • #34512 Make sure fab semantics end up on top
  • #34515 OutlineInputBorder adjusts for borderRadius that is too large
  • #34519 fix page scroll position rounding error
  • #34526 retry on HttpException during cache download
  • #34529 Remove compilation trace and dynamic support code
  • #34573 Ensures flutter jar is added to all build types on plugin projects
  • #34587 Do not copy paths, rects, and rrects when layer offset is zero
  • #34932 Added onChanged property to TextFormField
  • #35092 Add FlutterProjectFactory so that it can be overridden internally.
  • #33272 Add mustRunAfter on mergeAssets task to force task ordering
  • #33535 Custom height parameters for DataTable header and data rows
  • #33628 DataTable Custom Horizontal Padding

Tooling

#

Last but not least, we continue to polish and simplify our tooling as well, including providing a much clearer error message when the flutter tooling finds itself in a read-only directory (a common problem for Flutter developers that we're hoping this helps address).

  • #31342 check if project exists before regenerating platform specific tooling
  • #31399 add ignorable track-widget-creation flag to build aot
  • #31406 if there is no .ios or ios sub-project, don't attempt building for iOS
  • #31446 Allow filtering devices to only those supported by current project
  • #31591 make sure we exit early if the Runner.xcodeproj file is missing
  • #31804 only build asset when there is asset declared in pubspec
  • #31812 Fix #31764: Show appropriate error message when fonts pubspec.yaml isn't iterable
  • #32072 don't NPE with empty pubspec
  • #33041 Rename flutter packages to flutter pub
  • #33448 Use vswhere to find Visual Studio
  • #33472 add daemon command to enumerate supported platforms
  • #33924 Added –dart-flags option to flutter run
  • #33980 Increase daemon protocol version for getSupportedPlatforms
  • #33990 Add device category for daemon
  • #34181 Reland "Added –dart-flags option to flutter run (#33924)"
  • #34291 Check whether FLUTTER_ROOT and FLUTTER_ROOT/bin are writable.
  • #34353 Refactor Gradle plugin
  • #34517 pass .packages path to snapshot invocation
  • #34527 Don't crash on invalid .packages file
  • #34606 Remove portions of the Gradle script related to dynamic patching
  • #34616 Kill compiler process when test does not exit cleanly
  • #34624 Break down flutter doctor validations and results
  • #34683 add read only semantics flag
  • #34684 Add more structure to errors.
  • #34685 Close platform when tests are complete (dispose compiler and delete font files)
  • #34725 Fix NPE in flutter tools
  • #34736 Remove flags related to dynamic patching
  • #34785 Tweak the display name of emulators
  • #34794 Add emulatorID field to devices in daemon
  • #34802 Prefer ephemeral devices from command line run
  • #34859 Fix Vertical Alignment Regression
  • #35074 Attempt to enable tool coverage redux
  • #35084 Move findTargetDevices to DeviceManager
  • #33284 make sure we build test targets too
  • #33867 Remove environment variable guards for command line desktop and web
  • #33283 Fix relative paths and snapshot logic in tool

Full Issue List

#

You can see the full list of issues addressed in this release here.