Introduction
In Flutter, both setState()
and initState()
are important methods used in the lifecycle of a StatefulWidget. Let's understand their differences and see some code examples.
initState()
- initState(): This method is called when the StatefulWidget is inserted into the widget tree for the first time. It is typically used for initialization tasks that need to be performed only once. Here's an example:
class MyWidget extends StatefulWidget {
@override
_MyWidgetState createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
String _message = '';
@override
void initState() {
super.initState();
_message = 'Hello, World!';
}
@override
Widget build(BuildContext context) {
return Text(_message);
}
}
In the above code, _message is initialized to 'Hello, World!' inside the initState() method. This value will persist throughout the lifetime of the widget and won't change unless the widget is rebuilt.
setState()
setState()
: This method is used to update the state of a StatefulWidget. When you callsetState()
, Flutter rebuilds the widget, updating any properties that have changed. Here's an example:
class MyWidget extends StatefulWidget {
@override
_MyWidgetState createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
String _message = '';
void _updateMessage() {
setState(() {
_message = 'Hello, Flutter!';
});
}
@override
Widget build(BuildContext context) {
return Column(
children: [
Text(_message),
RaisedButton(
onPressed: _updateMessage,
child: Text('Update Message'),
),
],
);
}
}
In this example, _message
is initially an empty string. When the button is pressed, _updateMessage()
is called, which updates _message
to 'Hello, Flutter!' by calling setState()
. As a result, the widget is rebuilt, and the updated message is displayed.
In summary, initState()
is used for one-time initialization tasks, typically performed when the widget is first inserted into the tree. On the other hand, setState()
is used to update the state of the widget and trigger a rebuild of the widget tree with the updated state.