July 7, 2022

Flutter 3.0: What to Expect With the Latest Flutter Update

Industry News

The latest and greatest version of Flutter has arrived. The most recent Flutter update — Flutter 3.0 — offers users a wealth of new support capabilities (including foldable phones!), enhanced app experiences, more control over app initialization, and upgrades to code review tools.  

Sounds pretty great, right? Here we will dive into what it means for testers and devs in more detail. 

Back to top

A Range of New Support Capabilities in Flutter 3.0

One of the biggest points of emphasis for this Flutter update are all the new support features. With Flutter, you can now leverage the framework in macOS and Linux, in addition to Windows (which was announced several months prior). 

What does this mean specifically for dev teams? A whole bunch of cool stuff. 

  • MacOS System Menu Bar – Users can now create platform-rendered menu bars using the PlatformMenuBar widget and control what appears in the macOS application menus. 
  • International Text Input – International text input is now fully supported on all desktop platforms. That includes languages that leverage text input method editors (IMEs) like Chinese, Japanese, and Korean, as well as third-party input methods like Sogou and Google Japanese Input. 
  • Accessibility – There is now support for accessibility features across all desktop platforms—screen readers, accessible navigation, and more. 
  • Universal Binaries – Now macOS desktop apps are built as universal binaries. There is native support for both existing Intel-based Macs and the latest M1-powered Apple Silicon devices. 
  • Foldable Phones – A collaboration led by Microsoft means new features and widgets allow you to create dynamic experiences on foldable devices. This explainer on foldable phones will provide more detail.
Back to top

Mobile and Web Application Support in the New Flutter Update

In addition to new support features across platforms, there are a few new bells and whistles when it comes to Flutter 3.0 for both mobile and web applications. First, we will look at a few things to expect from a mobile perspective. 

Mobile Application Support

  • Foldable Phones – As previously mentioned, the new Flutter update now supports foldable mobile devices. MediaQuery now contains a list of DisplayFeatures that describe the bounds and states of these unique device elements like hinges, folds, and cutouts. New widgets integrated with Flutter’s default dialogs and pop-ups make the framework aware and responsive to these elements from the start. 
  • IOS Releases – Releasing your iOS app just got simplified. When your team is ready to distribute to TestFlight or the App Store, build the app bundle with new widgets and upload it to Apple through the Apple Transport macOS app. Once you have set up your initial Xcode project settings, you do not need to open Xcode to release your app. 
  • 32-bit iOS/iOS 9/iOS 10 – Say goodbye to support for these older iOS versions and 32-bit iOS devices. This change will affect the iPhone 4S, iPhone 5, iPhone 5C, and the 2nd, 3rd, and 4th generation iPad devices. Flutter 3 is the last stable release that supports these iOS versions and devices. Check this documentation by Flutter to learn how to adjust to the end of support of these devices. 

Web Application Support

  • Image Decoding – Flutter 3.0 means the framework now automatically detects and uses the ImageDecoder API in browsers that support it (e.g. Chrome, Edge, Opera, Samsung Browser, and more). This feature doubles the speed of image decoding and never blocks the main thread, which removes all the development headaches previously caused by images. 
  • App Lifecycles – The new API for Flutter web app lifecycles gives you the flexibility to control the ground-up process of your Flutter app from the hosting HTML page. You will see this in action with scenarios like splash screens, loading indicators, and plain HTML landing pages. 
Back to top

Tooling Updates in Flutter 3.0

The latest Flutter update also comes with performance updates under the hood that will make your life much easier . Enhancements to Flutter and Dart include an updated lint package, which helps fix most lint warnings automatically. You will find performance improvements featuring partial repaint on Android devices that support it, improved opacity animations in simple cases, and raster and UI threads running at higher priority on Android and iOS than other threads. 

Additionally, you can now preview an experimental rendering backend called Impeller on iOS. This feature precompiles a smaller, simpler set of shaders at engine build time, so they will not compile while an app is running. You will also experience improved performance with inline ads in user-critical interactions like scrolling and transitions between pages. 

Back to top

Testing Flutter Apps With Perfecto

Every app built with the latest Flutter update still needs to be tested. Your users are not able to take advantage of all the great new features and improvements if your app crashes. Lucky for you, Perfecto and Flutter testing go together really well. 

Combined with Perfecto, organizations can release high-quality Flutter applications quickly and easily, as well as test your code on any supported real device.

With iOS, for example, you simply need to use your built-for-testing IPA file and the following two files to test with Perfecto:

The build.gradle file:

buildscript {
    repositories {
        jcenter()
        maven {
            url "https://repo1.perfectomobile.com/public/repositories/maven"
        }
    }

    dependencies {
        classpath "com.perfectomobile.instrumentedtest.gradleplugin:plugin:+"
    }
}

apply plugin:'com.perfectomobile.instrumentedtest.gradleplugin'

perfectoGradleSettings {
    configFileLocation "configFile.json"
}

The JSON config file:

{
    "cloudURL": "<cloud_id>.perfectomobile.com",
    "securityToken":"<TOKEN>",
   
    
    "appPath":"repository://PUBLIC:flutter_xcuitest.ipa",
    "hostedTestModuleName":"RunnerTests",
    "isHostedTestModule":true,
    
    
    "devices": [
            {"deviceName":"<deviceID>"},
            {"deviceName":"<deviceID>"}
    ],

    "shard": false,
    "jobName": "Flutter_iOS_Job",
      "jobNumber": 1,
      "branch": "Flutter_Branch",
      "projectName": "My_Flutter_Project",
      "projectVersion": "v1.0",
      "tags": ["XCUI", "plugin"],
    "takeScreenshotOnTestFailure": false,
    "takeScreenshotOnTestEnd": false,
    "takeScreenshotOnTestStep": false,
    "runUITests":true,
    "runUnitTests":false,
    "installationDetails": {
        "resign": true
      },
      
      "numOfDevices": 2
  }

After that, all you need to do is check the results on our Reporting page. 

Learn more about our platform to learn about our Flutter testing capabilities in more detail. 

Perfecto Free Trial

Back to top