Difference between Stateless and Stateful widgets in Flutter

In Flutter, widgets are the most basic building blocks to create interactive user interfaces for various mobile applications. Widgets can either be classified as either stateless or stateful in Flutter. This s based on the behavioral aspects of the widgets.

Understanding the difference between these two main types of widgets in Flutter is crucial for building powerful and responsive apps that behave according to the user's needs.

Stateless Widgets in Flutter

A stateless widget, as the name suggests, is immutable and completely stateless. This means that these widgets do not hold any internal state.

This widget is used to represent a completely static part of the user interface that can't be changed or redrawn at a later time. This is mainly because the widget does not have any state that could be updated at a later time.

To be precise, once the build() method of a stateless widget is called, it won't be called again. Hence, the widget would not be able to react to any user changes.

How to implement a stateless widget in Flutter

Stateless widgets are defined by extending the StatelessWidget class provided by the Flutter framework. Since these widgets do not maintain any state, they are lightweight and render efficiently.

class MyTextWidget extends StatelessWidget {
final String text;
const MyTextWidget(this.text);
@override
Widget build(BuildContext context) {
return Text(text);
}
}
Example of Stateless widget

Here MyTextWidget is our own customized widget that extends the StatlessWidget class, hence making it our very own stateless widget. This simple widget defines a String variable called text and returns the value that was passed to it through the constructor.

Applications of Stateless widgets

Stateless widgets are ideal for displaying static content that won't be changed throughout the application's runtime. It can display icons, texts, and images that don't require updates.

They are useful in scenarios where the UI remains the same regardless of external factors. For example, a label displaying the application logo or a heading introducing a section of the app can be implemented as stateless widgets.

Stateful widgets in Flutter

On the contrary, Flutter also allows the incorporation of widgets that are dynamic and can hold their internal state over time. These widgets are called Stateful widgets.

This allows your Flutter app to handle dynamic data and acct accordingly to the user interactions. This results in a user-friendly app that can interact with the user and display the changes on the user interface according to its functionality.

How to implement Stateful widget in Flutter

Stateful widgets consist of two separate classes: the widget class itself, which is immutable, and a corresponding state class, which is mutable and holds the state data. The state class extends the State<StatefulWidget> class.

import 'package:flutter/material.dart';

class CounterWidget extends StatefulWidget {
  @override
  _CounterWidgetState createState() => _CounterWidgetState();
}

class _CounterWidgetState extends State<CounterWidget> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        Text('Counter: $_counter',
        style: TextStyle(
          color: Colors.blue,
        ),
        ),
        SizedBox(
          height: 20
        ),
        RaisedButton(
          onPressed: _incrementCounter,
          child: Text('Increment'),
        ),
      ],
    );
  }
}
Stateless counter widget

In the example above, the CounterWidget is a stateful widget that maintains the _counter variable. Whenever the user taps the "Increment" button, the _incrementCounter function is called, updating the state using the setState method. This triggers a rebuild of the widget, reflecting the updated counter value in the UI.

The setState function

The setState function is one of the most important differences between the stateless and stateful widgets in Flutter. This function allows real-time updates of the user interface in the app, as shown in the above example.

The stateless widgets hold no states. Thus they don't have access to the setState function. However, the stateful widgets can update their states through this function and provide real-time updates to the users through the user interface.

Static vs. dynamic

Stateless widgets in Flutter are static. Once their Build() method is called, it won't be called again. Therefore, the stateless widgets can only cater to static widgets and interfaces throughout the mobile application. These static widgets would not be prone to changes throughout the application's run-time.

On the other hand, Stateful widgets are very comfortable with handling dynamic data and widgets. The state of these widgets can be updated according to the will of the user, and the users can display the changes efficiently.

Summary

We can best summarize the differences between the two widgets in a table as given below.

Stateless widgets

Stateful Widgets

Internal State

No internal state to maintain

Can update internal state

Rebuild

Can't trigger rebuilds

Can rebuild when state changes

User Interaction

Doesn't react to user interactions

Responds to user's interactions

Application

Display static content

Respond to user's inputs

Performance

Lightweight and efficient

Slightly more overhead

Widget Structure

Single class

Two classes: Widget & State

State management

No explicit state management

Requires explicit state

management using setState

Copyright ©2024 Educative, Inc. All rights reserved