Skip to main content

Responsive guide

Typically, a responsive app has had its layout tuned for the available screen size. Often this means (for example), re-laying out the UI if the user resizes the window, or changes the device’s orientation. This is especially necessary when the same app can run on a variety of devices, from a watch, phone, tablet, to a laptop or desktop computer.

tip
  • In responsive UI we don’t use hard-coded values for dimension and positions.
  • Use MediaQuery to get the real-time size of the window.
  • Use Flexible and Expanded widgets to get a flexible UI that works with percentage rather than hardcoded values.
  • Use LayoutBuilder to get the ConstraintBox of the parent widget.
  • You can get the orientation of the device using MediaQuery or OrientationBuilder.

Types of Responsive UI​

Responsive UI is of two types:

  1. Working with Orientation
  2. Creating layouts for different screen sizes ... [ 🌟 valid for Web design ]

Responsive UI for Orientation​

How do we detect orientation changes?

We can get the orientation of the device using MediaQuery or OrientationBuilder.

OrientationBuilder​

info

We can check the orientation at any point in the code (inside or outside the OrientationBuilder) using

MediaQuery.of(context).orientation

For that time when we’re lazy and/or only portrait will do, use

SystemChrome.setPreferredOrientations(DeviceOrientation.portraitUp);

To start out, we use a widget called OrientationBuilder. OrientationBuilder is a widget which builds a layout or part of a layout on an orientation change.


Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: OrientationBuilder(
builder: (context, orientation) {
return orientation == Orientation.portrait
? _buildVerticalLayout() /// if orientation is portrait return 'Example Widget _buildVerticalLayout()'
: _buildHorizontalLayout(); /// else return 'Example Widget _buildHorzontalLayout()'
},
),
);
}

The OrientationBuilder has a builder function to build our layout. The builder function is called when the orientation changes. The possible values being Orientation.portrait or Orientation.landscape.


Responsive UI for different screen sizes​


MUST KNOW for platform specific Responsive UI​

There are two basic approaches to creating Flutter apps with responsive design:

Use the LayoutBuilder class From its builder property, you get a BoxConstraints object. Examine the constraint’s properties to decide what to display. For example, if your maxWidth is greater than your width breakpoint, return a Scaffold object with a row that has a list on the left. If it’s narrower, return a Scaffold object with a drawer containing that list. You can also adjust your display based on the device’s height, the aspect ratio, or some other property. When the constraints change (for example, the user rotates the phone, or puts your app into a tile UI in Nougat), the build function runs.

  • Use the MediaQuery.of() method in your build functions This gives you the size, orientation, etc, of your current app. This is more useful if you want to make decisions based on the complete context rather than on just the size of your particular widget. Again, if you use this, then your build function automatically runs if the user somehow changes the app’s size.

Other useful widgets and classes for creating a responsive UI:

  • AspectRatio
  • CustomSingleChildLayout
  • CustomMultiChildLayout
  • FittedBox
  • FractionallySizedBox
  • LayoutBuilder
  • MediaQuery
  • MediaQueryData

great Responsive UI package​

responsive_builder ✅​

responsive_framework​

flutter_screenutil​

packages to fix some Responsive Issues​

NOT IDEAL - DON'T USE​

Somewhat Confusing on what it wants to do


Tutorials on Responsive UI​

FilledStack's responsive_builder​

diegoveloper's Responsive UI video​

Flutter Responsive UI for Learning Platform App​