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?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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.