Em Flutter, os widgets são divididos em duas categorias principais: Stateless e Stateful.
StatelessWidget
StatelessWidget é um tipo de widget que não tem estado interno mutável. Isso significa que, uma vez que um StatelessWidget é construído com um conjunto de parâmetros (também conhecidos como propriedades), seus atributos visuais não podem ser alterados. Um StatelessWidget é imutável e não reage a mudanças internas. Ele é ideal para componentes simples e estáticos, como textos, ícones ou contêineres que não precisam ser redesenhados.
Exemplo de StatelessWidget:
import 'package:flutter/material.dart';
class GreetingWidget extends StatelessWidget {
final String message;
const GreetingWidget({required this.message});
@override
Widget build(BuildContext context) {
return Text(message);
}
}StatefulWidget
StatefulWidget, por outro lado, é um tipo de widget que tem um estado interno mutável. Este widget pode ser reconstruído quando seu estado muda. Ele consiste em duas classes: a classe que estende StatefulWidget e a classe que estende State, onde o estado é mantido e modificado.
Quando o estado de um StatefulWidget muda (por exemplo, quando um botão é pressionado, uma caixa de texto é editada etc.), o método setState() é chamado, indicando ao Flutter que ele precisa redesenhar o widget para refletir as mudanças no estado.
Exemplo de StatefulWidget:
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: <Widget>[
Text('Contagem: $_counter'),
ElevatedButton(
onPressed: _incrementCounter,
child: Text('Incrementar'),
),
],
);
}
}Em resumo, a diferença principal entre StatelessWidget e StatefulWidget é a capacidade de ter um estado mutável. StatelessWidget não possui estado interno e é estático, enquanto StatefulWidget possui um estado mutável e pode ser reconstruído quando esse estado muda.