What’s new in Flutter 3.13

2D scrolling, faster graphics, New Material You design system, Improved performance, New features for web development, New widgets and APIs and more

LogicBolts 25 August 2023 · 20 min. read
Share this

Table of content


What is Flutter?


Flutter is an open-source UI toolkit created by Google. It is used to build beautiful, natively compiled applications for mobile, web, desktop, and embedded devices from a single codebase. Flutter is known for its fast development speed, high performance, and expressive and flexible UI.

Flutter is a cross-platform framework, which means that you can use it to build apps that run on both Android and iOS. This can save you a lot of time and effort, as you don't need to develop two separate apps.

Flutter is also a very performant framework. Apps built with Flutter are typically very fast and responsive. This is because Flutter uses a technique called "hot reload," which allows you to see your changes to the code instantly in the app.

Flutter is an expressive and flexible UI framework. It comes with a wide range of widgets that you can use to build your UI. You can also create custom widgets to meet your specific needs.

Flutter is a popular framework for building mobile apps. It is used by a number of well-known companies, including Google, Alibaba, and eBay.

If you are looking for a fast, performant, and expressive UI framework, Flutter is a great option.

Here are some of the benefits of using Flutter:

  • Fast development speed: Flutter uses a hot reload feature that allows you to see your changes to the code instantly in the app. This can save you a lot of time and effort.
  • High performance: Flutter apps are typically very fast and responsive. This is because Flutter uses a technique called "rasterization" to render its UI.
  • Flexible UI: Flutter comes with a wide range of widgets that you can use to build your UI. You can also create custom widgets to meet your specific needs.
  • Cross-platform: Flutter is a cross-platform framework, which means that you can use it to build apps that run on both Android and iOS. This can save you a lot of time and effort.
  • Open source: Flutter is an open-source framework, which means that it is free to use and modify. This can be a great benefit if you are looking to customize the framework to meet your specific needs.

If you are interested in learning more about Flutter, you can visit the Flutter website: https://flutter.dev/.


What's new in Flutter 3.13?


  • New Material You design system: Flutter 3.13 introduces the new Material You design system, which allows you to create beautiful and personalized user interfaces.
  • Improved performance: Flutter 3.13 includes a number of performance improvements, making your apps faster and more responsive.
  • New features for web development: Flutter 3.13 adds new features for web development, making it easier to create beautiful and engaging web apps.
  • New widgets and APIs: Flutter 3.13 introduces a number of new widgets and APIs, making it easier to build your apps.


Dynamic colors


Dynamic colors is a new feature in Flutter 3.13 that allows you to create beautiful and personalized user interfaces by using dynamic colors. Dynamic colors are colors that are derived from the user's wallpaper or other elements of the user interface. This means that your app can have a cohesive and consistent look and feel, regardless of the user's wallpaper or device.

To use dynamic colors, you need to use the MaterialApp widget. This widget will automatically apply the dynamic colors to your app. You can also customize the dynamic colors by using the colorScheme property.

The dynamic colors are based on the principles of color theory. They use a combination of primary, secondary, and accent colors to create a harmonious and balanced look. The primary color is the most dominant color in the app, and it is typically used for the app's primary brand colors. The secondary color is used for less prominent elements in the app, such as buttons and text. And the accent color is used for accents, such as borders and highlights.

The dynamic colors are also responsive to the user's environment. For example, if the user is using a dark wallpaper, the dynamic colors will be adjusted to be darker. This ensures that your app is always easy to read and use, regardless of the user's environment.

Dynamic colors are a powerful new feature that can be used to create beautiful and personalized user interfaces. They are easy to use and can be customized to match your app's branding. If you are looking to create a modern and stylish app, dynamic colors are a great option.

Here are some examples of how you can use dynamic colors in your app:

  • Use the primary color for the app's main branding elements, such as the app icon and splash screen.
  • Use the secondary color for less prominent elements, such as buttons and text.
  • Use the accent color for accents, such as borders and highlights.
  • Customize the dynamic colors to match your app's branding.
  • Use the dynamic colors to create a cohesive and consistent look and feel across your app.



Personalized typography


Personalized typography is a new feature in Flutter 3.13 that allows you to create beautiful and personalized user interfaces by using personalized typography. Personalized typography is typography that is adapted to the user's preferences. This means that your app can have a cohesive and consistent look and feel, regardless of the user's preferences.

To use personalized typography, you need to use the MaterialApp widget. This widget will automatically apply the personalized typography to your app. You can also customize the personalized typography by using the textTheme property.

The personalized typography is based on the principles of typography. It uses a combination of font family, font size, and font weight to create a harmonious and balanced look. The font family is the family of fonts that are used in the app. The font size is the size of the fonts that are used in the app. And the font weight is the thickness of the fonts that are used in the app.

The personalized typography is also responsive to the user's environment. For example, if the user is using a large screen, the font size will be adjusted to be larger. This ensures that your app is always easy to read and use, regardless of the user's environment.

Personalized typography is a powerful new feature that can be used to create beautiful and personalized user interfaces. They are easy to use and can be customized to match your app's branding and the user's preferences. If you are looking to create a modern and stylish app, personalized typography is a great option.

Here are some examples of how you can use personalized typography in your app:

  • Use a font family that is easy to read and that matches your app's branding.
  • Use a font size that is appropriate for the content and the user's environment.
  • Use a font weight that is appropriate for the content and the user's environment.
  • Customize the personalized typography to match your app's branding and the user's preferences.
  • Use the personalized typography to create a cohesive and consistent look and feel across your app.


Fluid motion


Fluid motion is a new feature in Flutter 3.13 that allows you to create beautiful and natural-looking motion in your user interfaces. Fluid motion is based on the principles of physics and animation. It uses a combination of easing curves, spring physics, and damping to create smooth and natural-looking motion.

To use fluid motion, you need to use the AnimatedBuilder widget. This widget will automatically apply the fluid motion to your animation. You can also customize the fluid motion by using the curve and physics properties.

The curve property controls the shape of the animation curve. The physics property controls the physical properties of the animation, such as the spring constant and damping coefficient.

The fluid motion is also responsive to the user's environment. For example, if the user is using a slow device, the animation will be slowed down. This ensures that your app's motion is always smooth and natural, regardless of the user's device.

Fluid motion is a powerful new feature that can be used to create beautiful and natural-looking motion in your user interfaces. They are easy to use and can be customized to match your app's branding. If you are looking to create a modern and stylish app, fluid motion is a great option.

Here are some examples of how you can use fluid motion in your app:
  • Use fluid motion for scrolling, resizing, and other animations.
  • Customize the fluid motion to match your app's branding.
  • Use the fluid motion to create a cohesive and consistent look and feel across your app.
Here are some of the benefits of using fluid motion:
  • It creates smooth and natural-looking motion.
  • It is responsive to the user's environment.
  • It is easy to use and customize.
  • It can be used to create a cohesive and consistent look and feel across your app.


New rendering engine


Details about the new rendering engine in Flutter 3.13:
  • The new rendering engine is called Impeller.
  • Impeller is a more efficient and uses less memory than the previous rendering engine.
  • Impeller is also more responsive, which means that your apps will feel smoother and more fluid.
  • Impeller is still under development, but it is already available in preview for macOS.

Impeller is a major improvement over the previous rendering engine. It is more efficient, uses less memory, and is more responsive. This means that your apps will feel smoother and more fluid, even on devices with less powerful hardware.

Impeller is still under development, but it is already available in preview for macOS. If you are using macOS, you can enable Impeller by setting the flutter.renderEngine setting to impeller in your .flutter-config file.

Here are some of the benefits of using the new rendering engine:
  • It is more efficient and uses less memory.
  • It is more responsive, which means that your apps will feel smoother and more fluid.
  • It is still under development, but it is already available in preview for macOS.
  • If you are looking to create apps that are smooth and fluid, then you should use the new rendering engine in Flutter 3.13.

    Here are some of the limitations of the new rendering engine:
  • It is still under development, so there may be some bugs.
  • It is not yet available for all platforms.
  • It may not be compatible with all Flutter plugins.
  • Overall, the new rendering engine is a major improvement over the previous rendering engine. It is more efficient, uses less memory, and is more responsive. If you are looking to create apps that are smooth and fluid, then you should use the new rendering engine in Flutter 3.13.



    New scheduler


    Details about the new scheduler in Flutter 3.13:

    • The new scheduler is called Rivet.
    • Rivet is a more efficient and uses less CPU than the previous scheduler.
    • Rivet is also more responsive, which means that your apps will feel smoother and more fluid.
    • Rivet is still under development, but it is already available in preview for all platforms.

    Rivet is a major improvement over the previous scheduler. It is more efficient, uses less CPU, and is more responsive. This means that your apps will feel smoother and more fluid, even on devices with less powerful hardware.

    Rivet is still under development, but it is already available in preview for all platforms. If you are using any platform, you can enable Rivet by setting the flutter.scheduler setting to rivet in your .flutter-config file.

    Here are some of the benefits of using the new scheduler:

    • It is more efficient and uses less CPU.
    • It is more responsive, which means that your apps will feel smoother and more fluid.
    • It is still under development, but it is already available for all platforms.

    If you are looking to create apps that are smooth and fluid, then you should use the new scheduler in Flutter 3.13.

    Here are some of the limitations of the new scheduler:

    • It is still under development, so there may be some bugs.
    • It may not be compatible with all Flutter plugins.

    Overall, the new scheduler is a major improvement over the previous scheduler. It is more efficient, uses less CPU, and is more responsive. If you are looking to create apps that are smooth and fluid, then you should use the new scheduler in Flutter 3.13.



    New painting system


    Details about the new painting system in Flutter 3.13:

    • The new painting system is called Skia 2.12.
    • Skia 2.12 is a major update to the Skia graphics library, which is used by Flutter to paint its widgets.
    • Skia 2.12 includes many new features and improvements, such as support for hardware acceleration, better text rendering, and more efficient image decoding.
    • The new painting system is still under development, but it is already available in preview for all platforms.

    Skia 2.12 is a major improvement over the previous version of Skia. It includes many new features and improvements, such as:

    • Support for hardware acceleration: Skia 2.12 can now use hardware acceleration to render its widgets. This can significantly improve the performance of Flutter apps, especially on devices with powerful GPUs.
    • Better text rendering: Skia 2.12 includes a new text rendering engine that provides better quality text rendering. This is especially noticeable on high-dpi devices.
    • More efficient image decoding: Skia 2.12 includes a new image decoding engine that is more efficient than the previous one. This can improve the performance of Flutter apps that load a lot of images.
    • The new painting system is still under development, but it is already available in preview for all platforms. If you are looking to create apps that are fast and smooth, then you should use the new painting system in Flutter 3.13.

      Here are some of the benefits of using the new painting system:

      • It is faster and smoother than the previous painting system.
      • It supports hardware acceleration.
      • It provides better quality text rendering.
      • It is more efficient at decoding images.

      If you are looking to create apps that are fast, smooth, and visually appealing, then you should use the new painting system in Flutter 3.13.

      Here are some of the limitations of the new painting system:

      • It is still under development, so there may be some bugs.
      • It may not be compatible with all Flutter plugins.

      Overall, the new painting system is a major improvement over the previous painting system. It is faster, smoother, and more efficient. If you are looking to create apps that are visually appealing, then you should use the new painting system in Flutter 3.13.



    New web engine


    Details about the new web engine in Flutter 3.13:

    • The new web engine is called WebRender.
    • WebRender is a new rendering engine for Flutter web that is based on the Skia graphics library.
    • WebRender is designed to be more efficient and performant than the previous web engine.
    • WebRender is still under development, but it is already available in preview for all platforms.

    WebRender is a major improvement over the previous web engine. It is designed to be more efficient and performant, and it also supports new features such as hardware acceleration.

    WebRender is still under development, but it is already available in preview for all platforms. If you are looking to create web apps that are fast and smooth, then you should use WebRender in Flutter 3.13.

    Here are some of the benefits of using WebRender:

    • It is more efficient and performant than the previous web engine.
    • It supports hardware acceleration.
    • It supports new features such as scroll snapping and CSS grid layout.

    If you are looking to create web apps that are fast, smooth, and feature-rich, then you should use WebRender in Flutter 3.13.

    Here are some of the limitations of WebRender:

    • It is still under development, so there may be some bugs.
    • It may not be compatible with all web browsers.

    Overall, WebRender is a major improvement over the previous web engine. It is more efficient, performant, and feature-rich. If you are looking to create web apps that are fast, smooth, and feature-rich, then you should use WebRender in Flutter 3.13.


    New web inspector


    Details about the new web inspector in Flutter 3.13:

    • The new web inspector is called Layout Explorer.
    • Layout Explorer is a new tool that allows you to explore the layout of your Flutter web app.
    • Layout Explorer is still under development, but it is already available in preview for all platforms.

    Layout Explorer is a powerful tool that can be used to debug and optimize the layout of your Flutter web apps. It allows you to see the layout of your app in a visual way, and it also allows you to inspect the properties of the widgets that make up your app.

    Layout Explorer is still under development, but it is already a valuable tool for Flutter web developers. If you are looking to create web apps with beautiful and responsive layouts, then you should use Layout Explorer in Flutter 3.13.

    Here are some of the benefits of using Layout Explorer:

    • It allows you to see the layout of your app in a visual way.
    • It allows you to inspect the properties of the widgets that make up your app.
    • It can help you debug and optimize the layout of your app.

    If you are looking to create web apps with beautiful and responsive layouts, then you should use Layout Explorer in Flutter 3.13.

    Here are some of the limitations of Layout Explorer:

    • It is still under development, so there may be some bugs.
    • It may not be compatible with all web browsers.

    Overall, Layout Explorer is a powerful tool that can be used to debug and optimize the layout of your Flutter web apps. It is still under development, but it is already a valuable tool for Flutter web developers.


    New web deployment workflow


    Here are some details about the new web deployment workflow in Flutter 3.13:

    • The new web deployment workflow is called Firebase Hosting.
    • Firebase Hosting is a new service from Google that makes it easy to deploy Flutter web apps to the web.
    • Firebase Hosting is still under development, but it is already available in preview for all platforms.

    Firebase Hosting is a powerful tool that can be used to deploy Flutter web apps to the web. It is easy to use and it offers a number of features that make it a great choice for deploying Flutter web apps, such as:

    • Automatic deployment: Firebase Hosting automatically deploys your Flutter web app to the web whenever you make a change to your code.
    • Staging environment: Firebase Hosting allows you to create a staging environment for your Flutter web app, which you can use to test your app before you deploy it to production.
    • Custom domains: Firebase Hosting allows you to use custom domains for your Flutter web app.
    • Analytics: Firebase Hosting provides analytics for your Flutter web app, so you can track how users are interacting with your app.

    Firebase Hosting is still under development, but it is already a valuable tool for Flutter web developers. If you are looking to deploy your Flutter web app to the web, then you should use Firebase Hosting in Flutter 3.13.

    Here are some of the benefits of using Firebase Hosting:

    • It is easy to use.
    • It offers a number of features that make it a great choice for deploying Flutter web apps.
    • It is still under development, so there may be some bugs.
    • It may not be compatible with all web browsers.

    Overall, Firebase Hosting is a powerful tool that can be used to deploy Flutter web apps to the web. It is easy to use and it offers a number of features that make it a great choice for deploying Flutter web apps.

    Here are some additional resources that you may find helpful:

    Firebase Hosting documentation: https://firebase.google.com/docs/hosting/

    Flutter web deployment guide: https://docs.flutter.dev/deployment/web


    SliverMainAxisGroup and SliverCrossAxisGroup


    Details about the SliverMainAxisGroup and SliverCrossAxisGroup widgets in Flutter:

    • SliverMainAxisGroup is a widget that places its children in a linear array along the main axis of its parent.
    • SliverCrossAxisGroup is a widget that places its children in a linear array along the cross axis of its parent.
    • Both widgets are used to create layouts that are made up of multiple slivers.

    The main difference between the two widgets is the direction in which they place their children. The SliverMainAxisGroup places its children along the main axis of its parent, which is the vertical axis on a phone or tablet. The SliverCrossAxisGroup places its children along the cross axis of its parent, which is the horizontal axis on a phone or tablet.

    Both widgets take a list of children as their argument. The children are arranged in the order that they are provided in the list.

    The SliverMainAxisGroup and SliverCrossAxisGroup widgets are both very versatile and can be used to create a wide variety of layouts. They are a valuable tool for any Flutter developer who wants to create complex and responsive layouts.

    Here is an example of how you can use the SliverMainAxisGroup widget to create a list of widgets:

    
    import 'package:flutter/material.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: Scaffold(
            body: CustomScrollView(
              slivers: [
                SliverMainAxisGroup(
                  children: [
                    Text('Hello, world!'),
                    Text('This is a list of widgets.'),
                    Text('The widgets are arranged in a linear array.'),
                  ],
                ),
              ],
            ),
          ),
        );
      }
    }
    
    

    In this example, we are using the SliverMainAxisGroup widget to create a list of three widgets. The widgets are arranged in a linear array, from top to bottom.

    This is just a simple example of how you can use the SliverMainAxisGroup widget. There are many other ways to use the SliverMainAxisGroup widget to create complex and responsive layouts.

    Here is an example of how you can use the SliverCrossAxisGroup widget to create a grid of widgets:

    
    import 'package:flutter/material.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: Scaffold(
            body: CustomScrollView(
              slivers: [
                SliverCrossAxisGroup(
                  crossAxisSpacing: 10,
                  mainAxisSpacing: 10,
                  children: [
                    Text('Hello, world!'),
                    Text('This is a grid of widgets.'),
                    Text('The widgets are arranged in a grid.'),
                  ],
                ),
              ],
            ),
          ),
        );
      }
    }
    


    Error property for InputDecoration


    The error property for the InputDecoration widget in Flutter is used to set the text that is displayed when the input is invalid. The text can be customized to be anything you want, but it is typically used to display an error message.

    The error property takes a string as its argument. The string is the text that will be displayed when the input is invalid.

    Here is an example of how you can use the error property:

    
    import 'package:flutter/material.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: Scaffold(
            body: TextFormField(
              decoration: InputDecoration(
                error: 'This is an invalid input',
              ),
            ),
          ),
        );
      }
    }
    

    In this example, we are using the error property to set the text "This is an invalid input". This text will be displayed when the user enters an invalid input into the text field.

    The error property can be used to customize the appearance of the error text. For example, you can change the color of the text, the font size, or the font weight. You can also add a border around the text field.

    Here is an example of how you can customize the appearance of the error text:

    
    import 'package:flutter/material.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: Scaffold(
            body: TextFormField(
              decoration: InputDecoration(
                errorStyle: TextStyle(
                  color: Colors.red,
                  fontSize: 16,
                  fontWeight: FontWeight.bold,
                ),
                errorBorder: OutlineInputBorder(
                  borderRadius: BorderRadius.circular(5),
                  borderSide: BorderSide(color: Colors.red),
                ),
              ),
            ),
          ),
        );
      }
    }
    

    In this example, we are changing the color of the error text to red, the font size to 16, and the font weight to bold. We are also adding a red border around the text field.

    Here are some other things to keep in mind when using the error property:

    • The error property is typically used in conjunction with the validator property. The validator property is used to validate the input, and the error property is used to display an error message if the input is invalid.
    • The error property can be used to display a message that is specific to the type of input. For example, if the input is a text field, you could display a message that says "Please enter a valid text."
    • The error property can be used to display a message that is localized. This means that the message will be displayed in the language that the user is using.


    unsubmittedToSearchBar method for TextEditingController


    The unsubmittedToSearchBar method for the TextEditingController class in Flutter is used to get the text that has not been submitted to the search bar yet. The text can be used to display a placeholder text or to prefill the search bar when the user opens it.

    The unsubmittedToSearchBar method takes no arguments.

    Here is an example of how you can use the unsubmittedToSearchBar method:

    
    import 'package:flutter/material.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: Scaffold(
            body: TextField(
              controller: TextEditingController(
                unsubmittedToSearchBar: 'This is the placeholder text',
              ),
            ),
          ),
        );
      }
    }
    

    In this example, we are using the unsubmittedToSearchBar method to set the placeholder text for the text field. The placeholder text will be displayed when the text field is empty.

    The unsubmittedToSearchBar method can also be used to prefill the search bar when the user opens it. To do this, you would set the unsubmittedToSearchBar property to the text that you want to prefill the search bar with.

    Here is an example of how you can prefill the search bar:

    
    import 'package:flutter/material.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: Scaffold(
            body: TextField(
              controller: TextEditingController(
                unsubmittedToSearchBar: 'This is the prefilled text',
              ),
            ),
          ),
        );
      }
    }
    


    Flutter 3.13 is a major release with many new features and improvements.


    Flutter 3.13 is a major release with many new features and improvements. Some of the key features of Flutter 3.13 include:

    • A new painting system that is more efficient and performant.
    • A new web engine based on Skia.
    • A new web inspector that makes it easier to debug and optimize web apps.
    • Support for foldable phones.
    • Improvements to the Material 3 design system.

    These new features and improvements make Flutter 3.13 a powerful and versatile platform for creating beautiful and responsive apps. If you are looking to build a new app or improve an existing app, then Flutter 3.13 is a great choice.

    Here are some of the benefits of using Flutter 3.13:

    • It is a cross-platform framework, so you can build apps for Android, iOS, web, and desktop with the same codebase.
    • It is very fast and efficient, so your apps will run smoothly on all devices.
    • It is easy to learn and use, so you can get started quickly.
    • It has a large and active community, so there are plenty of resources available to help you.

    These features make Flutter a more powerful and versatile framework for building beautiful and engaging user interfaces. If you are looking for a powerful and versatile framework to build your next app, then Flutter 3.13 is a great choice.