Skip to main content

Command Palette

Search for a command to run...

All You Need to Know About Flutter Widgets

Updated
6 min read
All You Need to Know About Flutter Widgets

Have you ever wondered how apps are built? In Flutter, the answer lies in something magical called widgets. Let’s dive in to understand what widgets are, how they work, and why they’re so important.


What is a Widget?

A widget is like a building block in Flutter. Imagine you’re creating a LEGO model — each piece is like a widget. Widgets are the basic units that make up your app’s user interface (UI). Everything you see on the screen in a Flutter app is a widget: buttons, text, images, and even the spaces between them.

Widgets are:

  • Reusable: You can use the same widget in multiple places.

  • Customizable: You can change how they look or behave.

  • Hierarchical: Widgets live inside other widgets, forming a tree-like structure.


Why Are Widgets Key to Flutter?

Flutter is all about widgets! They:

  • Make building UIs easy.

  • Let you focus on what you want rather than how to do it.

  • Are part of a system where everything is a widget, even things like padding and layout.

Widgets can be stateless (don’t change) or stateful (can change when you interact with them).


Starting with Core Widgets

Let’s talk about some essential widgets that you’ll use all the time in Flutter. We’ll start with the most basic ones and move to more advanced ones.

1. MaterialApp

The MaterialApp widget is like the foundation of your app. It wraps your whole app and gives it a Material Design look (Google’s design system).

void main() {
  runApp(MaterialApp(
    home: Scaffold(
      appBar: AppBar(title: Text('Hello Flutter')),
      body: Center(child: Text('Welcome to Flutter!')),
    ),
  ));
}
  • Why use it? It helps manage navigation (moving between screens) and themes (colors and fonts).

  • What if we don’t use it? Without it, your app won’t have basic features like a default design, themes, or navigation.

2. Scaffold

The Scaffold widget provides a basic structure for your app screen. It includes common UI elements like an app bar, floating action button, and a drawer.

Scaffold(
  appBar: AppBar(
    title: Text('Scaffold Example'),
  ),
  body: Center(
    child: Text('This is a Scaffold!'),
  ),
  floatingActionButton: FloatingActionButton(
    onPressed: () {},
    child: Icon(Icons.add),
  ),
);
  • Why use it? It saves time by giving you prebuilt components.

  • What if we don’t use it? You’d have to create these features manually, which can be tedious.


Now that we have the basics down, let’s look at some other widgets you’ll use frequently.

3. Container

The Container widget is like a box. You can:

  • Change its size.

  • Add color or decorations.

  • Use it to hold other widgets.

Container(
  width: 100,
  height: 100,
  color: Colors.blue,
  child: Center(
    child: Text(
      'Container',
      style: TextStyle(color: Colors.white),
    ),
  ),
);

The Container widget is like a box. You can:

  • Change its size.

  • Add color or decorations.

  • Use it to hold other widgets.

4. Center

The Center widget is used to center its child widget in the middle of the screen.

Center(
  child: Text(
    'I am centered!',
    style: TextStyle(fontSize: 20),
  ),
);

The Center widget is used to center its child widget in the middle of the screen.

5. Text

The Text widget displays text on the screen. You can customize the font, size, color, and more.

Text(
  'Hello, Flutter!',
  style: TextStyle(
    fontSize: 24,
    color: Colors.black,
    fontWeight: FontWeight.bold,
  ),
);

The Text widget displays text on the screen. You can customize the font, size, color, and more.

6. Image

The Image widget is for showing pictures. You can load images from the internet or your app’s assets.

Image.network(
  'https://flutter.dev/images/flutter-logo-sharing.png',
  width: 100,
  height: 100,
);

The Image widget is for showing pictures. You can load images from the internet, your phone, or your app’s assets.

7. Stack

The Stack widget lets you place widgets on top of each other, like layers.

Stack(
  children: [
    Container(width: 100, height: 100, color: Colors.red),
    Positioned(
      top: 20,
      left: 20,
      child: Container(width: 50, height: 50, color: Colors.blue),
    ),
  ],
);

The Stack widget lets you place widgets on top of each other, like layers.

8. Row and Column

These widgets arrange children in a horizontal (Row) or vertical (Column) direction.

Row Example:

Row(
  mainAxisAlignment: MainAxisAlignment.spaceEvenly,
  children: [
    Icon(Icons.star, size: 50, color: Colors.red),
    Icon(Icons.star, size: 50, color: Colors.green),
    Icon(Icons.star, size: 50, color: Colors.blue),
  ],
);

Column Example:

Column(
  mainAxisAlignment: MainAxisAlignment.center,
  children: [
    Text('First Item'),
    Text('Second Item'),
    Text('Third Item'),
  ],
);

These widgets arrange children in a horizontal (Row) or vertical (Column) direction.

9. ListView

Use the ListView widget to create scrollable lists of widgets.

ListView(
  children: [
    ListTile(title: Text('Item 1')),
    ListTile(title: Text('Item 2')),
    ListTile(title: Text('Item 3')),
  ],
);

Use the ListView widget to create scrollable lists of widgets.

10. Padding

The Padding widget adds space around a widget.

Padding(
  padding: EdgeInsets.all(16.0),
  child: Text('Padded Text'),
);

The Padding widget adds space around a widget.

11. ElevatedButton

This widget creates a button with some elevation, making it look raised.

ElevatedButton(
  onPressed: () {
    print('Button Pressed!');
  },
  child: Text('Click Me'),
);

This widget creates a button with some elevation, making it look raised.

12. Icon

The Icon widget displays icons, like those used for navigation or actions.

Icon(
  Icons.thumb_up,
  size: 50,
  color: Colors.blue,
);

The Icon widget displays icons, like those used for navigation or actions.

13. Card

The Card widget gives a material design card look to your content.

Card(
  child: Padding(
    padding: EdgeInsets.all(16.0),
    child: Text('This is a Card!'),
  ),
  elevation: 4,
);

The Card widget gives a material design card look to your content.

14. Expanded

The Expanded widget lets a child widget take up available space within a Row or Column.

Row(
  children: [
    Expanded(
      child: Container(color: Colors.red, height: 100),
    ),
    Expanded(
      child: Container(color: Colors.green, height: 100),
    ),
  ],
);

The Expanded widget lets a child widget take up available space within a Row or Column.

15. TextField

The TextField widget lets users input text.

TextField(
  decoration: InputDecoration(
    labelText: 'Enter your name',
    border: OutlineInputBorder(),
  ),
);

The TextField widget lets users input text.

16. AppBar

The AppBar widget provides a title bar at the top of the screen.

AppBar(
  title: Text('AppBar Example'),
  backgroundColor: Colors.blue,
);

The AppBar widget provides a title bar at the top of the screen.

17. AlertDialog

The AlertDialog widget shows a pop-up dialog box.

AlertDialog(
  title: Text('Alert'),
  content: Text('This is an alert dialog.'),
  actions: [
    TextButton(
      onPressed: () {},
      child: Text('OK'),
    ),
  ],
);

The AlertDialog widget shows a pop-up dialog box.

18. Checkbox

The Checkbox widget is for toggling options on or off.

Checkbox(
  value: true,
  onChanged: (bool? newValue) {
    print('Checkbox toggled!');
  },
);

The Checkbox widget is for toggling options on or off.

19. Slider

The Slider widget lets users select a value by sliding a thumb along a track.

20. GestureDetector

The GestureDetector widget allows you to detect gestures like taps, swipes, and pinches.

Conclusion

Widgets are the heart of Flutter. They make creating beautiful and functional apps straightforward and fun. By mastering the most commonly used widgets, you’ll be well on your way to building amazing apps. Remember, every great app starts with small blocks — just like LEGO!