Stateful vs stateless widgets-what are they and how to use them? These questions may be haunting you nowadays if you just started coding with Flutter.
Flutter is becoming more popular day by day so are doubts of people related to flutter. In Flutter making apps is easy, everything in Flutter is a widget. There are two types of widgets in Flutter-
- Stateful widgets
- Stateful Widgets
We can also count Inherit widget as a type here but mainly we take two parts. What is the difference between stateful and stateless widgets and put head to head both of them.
In Flutter everything is a widget, Text, box. Container, and everything. Before moving to our main topic let’s know about the state first.
What is State in Flutter? Data can be read synchronously when you create the widget, and that data can be changed over time. It also can be defined as data that exists in app memory while app is running.
What is the Difference between stateful and stateless widgets?
Stateful vs stateless widgets: Definition
What is Stateless widget?
Stateless widgets are widgets that cannot be changed after they are created. This means once you create this widget you cannot change it. A Stateless widget is the best choice if you are building something static that doesn’t change with time. Data without input can be put in this.
The perfect example of a Stateless widget is ICON or Text. Once you place the ICON or some Image that will be there forever without changes so you can take it as a stateless widget.
How to create a Stateless widget in Flutter?
Let’s see the basic example of a Stateless widget and discuss the elements to create them, here is the example:
import 'package: flutter/material.dart';
void main() {runApp(const VsDifferenceApp());
class VsDifferenceApp extends StatelessWidget {
Widget build(BuildContext context) {
returnMaterialApp();
}
}
};
Let’s understand this basic code of stateless widget….
The first you run your app, it runs Void main function, if you know even a little bit about coding then you may know this fact.
Then, the class MyApp extends StatelessWidget, here we created a class with our app names which is inherits from the Stateless widget class.
Then Build the method. There are many questions like What is Build method in Flutter and How does the build method work? Well, we explained in a short way let’s have a look.
Build method: Widget build(BuildContext context), here build method is an abstract method created in the Stateless widget class, so there is a rule if you are inheriting the class then you must call all abstract methods in a new one.
Image of abstract method in class
In an Easy way, Stateless widgets are like Ghost, they do not change their clothes according to movies I watched, never seen a ghost in reality so If I will see one, will ask them this and update here currently just believe me:
What is Stateful Widget?
Stateful widgets are dynamic means they can be changed during runtime. The properties of Stateful widgets can be changed during runtime. Stateful widgets are used to take user inputs.
Stateful widgets are changed with user input, for example, suppose you want to change some text with Flutter so creating Stateful widgets can be used. That’s why it is called Stateful widgets cause input can change the data.
Examples of Stateful widgets are Form, slider, InkWell, and Textfield are basic examples of Stateful widgets.
How to create Stateful Widgets in Flutter?
Creating a Stateful widget is just slightly different from creating Stateless widgets. The difference is we were created in one step, here you just need to use two step to create Stateful widget. Let’s see the code:
import 'package:flutter/material.dart';
void main(){runApp(const MyApp());
// StatefulWidget
class VsDifferenceApp extends StatefulWidget {
@override
VsDifferenceApp createState() => VsDifferenceAppState();
}
class VsDifferenceApppState extends State<VsDifferenceApp> {
Widget build(BuildContext context) {
return MaterialApp();
};
Let’s understand the Stateful widget code in detail with how it is working.
At first, the void main method will run after running the program. Just create the class with the name of your app which inherits from the Stateful widget.
VsDifferenceApp createState() => VsDifferenceAppState(); -> Then we create a live state of it. Then we again create a class with our app state which inherits from the Class state which takes a parameter.
Then Build method in Stateful widget: Widget build(BuildContext context), which is the same abstract method in class State so we have to call it which is used to build a page. As its name suggests it works.
Key Difference table between Stateless and Stateful Widget in Flutter:
Stateless widget | Stateful widget |
Stateless widgets are static widgets | They are dynamic widgets |
They cannot be changed once they created | They can be changed in runtime. |
Don’t take user inputs | They take user inputs |
They do not have a state that’s why they remain unchanged | They do have an internal SetState method step, so ifyou change data in runtime, output changes |
Examples of Stateless widgets are Text widgets, Icon, Images, and more | Examples of Stateful widgets are Form, slider, InkWell, Textfield |
FAQs Related to the topic:
When to create a stateless widget?
If you want to create a static widget that you don’t want to change with the runtime or widgets that don’t take user inputs than you can create a stateless widget.
When to create a stateful widget?
Stateful widgets are created if you want to change the state of the widget in runtime or if you need a widget that takes user inputs that you need to create a stateful widget.
Stateless vs stateful widget- which is faster?
Both just render the code in form of widgets and then represent us. Just on the other hand stateful widget take user input. Executing speed can be dependent on the device you are running the app on, how big the element is etc, etc. People say, a stateless widget just renders the widget, it just shows the output, and doesn’t have any internal state, while stateful widgets pass through two steps, they do have an internal state method so the Stateless widget is slightly faster than stateful widgets.