Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Em qual classe herdar de stateful?

Olá. Acabei de aprender sobre classes stateful, mas fiquei com uma dúvida relacionada à organização e modularização: Suponha que eu tenha uma classe que cria widgets que possuem uma linha que contem um botao e um texto Neste texto é mostrado quantas vezes o botao foi pressionado. Qual classe deve extender um stateful widget? A classe MyApp? Ou a classe que retorna as linhas? Pergunto isso pois queria entender se, para obter uma melhor fluidez e velocidade do programa, é melhor criar apenas uma classe stateful que engloba todos os componentes da tela (mesmo aqueles que não mudam) ou uma classe stateless que engloba todos os elementos da tela e chama os widgets stateful que alteram.

Obrigado.

2 respostas
solução!

Olá Eduardo,

Sua pergunta é muito relevante e demonstra que você está realmente se aprofundando no Flutter. Vamos lá!

Quando falamos em classes Stateful e Stateless, estamos falando sobre o gerenciamento de estado dos widgets. Um widget Stateless é imutável, ou seja, uma vez que seus atributos são definidos, eles não podem ser alterados. Já um widget Stateful pode mudar ao longo do tempo, ou seja, ele é mutável.

No seu caso, você tem um botão e um texto que muda de acordo com a quantidade de vezes que o botão é pressionado. Isso indica que você precisa de um widget que possa mudar seu estado, ou seja, um Stateful widget.

Agora, em relação a qual classe deve herdar de Stateful, isso vai depender da sua necessidade. Se você tem vários widgets que mudam de estado na mesma tela, pode ser uma boa ideia ter uma classe Stateful que englobe todos eles. Mas se apenas um ou outro widget muda de estado, pode ser mais eficiente ter cada um deles como uma classe Stateful separada.

No seu exemplo, a classe que retorna as linhas (com o botão e o texto) poderia ser a classe Stateful, já que ela é quem gerencia o estado desses widgets.

Aqui está um exemplo de como poderia ser essa classe:

class LinhaBotaoTexto extends StatefulWidget {
  @override
  _LinhaBotaoTextoState createState() => _LinhaBotaoTextoState();
}

class _LinhaBotaoTextoState extends State<LinhaBotaoTexto> {
  int _contador = 0;

  @override
  Widget build(BuildContext context) {
    return Row(
      children: <Widget>[
        RaisedButton(
          onPressed: () {
            setState(() {
              _contador++;
            });
          },
          child: Text('Pressione'),
        ),
        Text('Botão pressionado $_contador vezes'),
      ],
    );
  }
}

Nesse exemplo, a classe LinhaBotaoTexto é um StatefulWidget e tem um estado _contador que muda cada vez que o botão é pressionado.

Espero ter ajudado e bons estudos!

Entendi. Obrigado!