Por que antes de refatorar o codigo, o Kako usou "widget.nomeDaVariavel" na Row de dificuldade, e quando ele foi refatorar ele colocou só o nome da variavel, sem o "widget." atras?
Por que antes de refatorar o codigo, o Kako usou "widget.nomeDaVariavel" na Row de dificuldade, e quando ele foi refatorar ele colocou só o nome da variavel, sem o "widget." atras?
Oi Ryan, tudo bem?
O que acontece é que, quando estamos trabalhando dentro de um widget Stateful, precisamos usar a palavra-chave "widget" para acessar as variáveis definidas no widget. Isso ocorre porque estamos, na verdade, dentro do estado do widget, e não do widget em si. Portanto, "widget.nomeDaVariavel" é usado para acessar a variável do widget a partir do seu estado.
No entanto, quando Kako refatorou o código e criou um novo widget Stateless para a dificuldade, ele não precisou mais usar "widget." antes do nome da variável. Isso porque, neste caso, a variável "dificuldade" foi passada como um parâmetro para o novo widget Stateless, e poderia ser acessada diretamente.
Vou dar um exemplo para ilustrar isso:
Suponha que você tenha um widget Stateful assim:
class MeuWidget extends StatefulWidget {
final String nome;
MeuWidget({required this.nome});
@override
_MeuWidgetState createState() => _MeuWidgetState();
}
class _MeuWidgetState extends State<MeuWidget> {
@override
Widget build(BuildContext context) {
return Text(widget.nome);
}
}
Neste caso, você precisa usar "widget.nome" para acessar a variável "nome" dentro do método build, que está no estado do widget.
Agora, se você refatorar e criar um novo widget Stateless para o texto, ficaria assim:
class MeuTexto extends StatelessWidget {
final String nome;
MeuTexto({required this.nome});
@override
Widget build(BuildContext context) {
return Text(nome);
}
}
Neste caso, você pode acessar diretamente a variável "nome" dentro do método build, sem precisar usar "widget." antes.
Espero ter ajudado.
Um abraço e bons estudos.