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

Dúvida sobre callback

É realmente necessário implementar o callback a partir da função onClick? Não é tão trabalhoso, mas achei bem desnecessário... É dito durante a aula que se deve fazer assim, pois seria difícil ficar passando como argumento vários valores.

Eu decidi criar um novo campo chamado "newPage" que passa a tela que deve ser chamada. Essa abordagem está correta?

Eu fiz dessa forma e deu certo, também achei mais fácil:

class _FeatureItem extends StatelessWidget {
  final String name;
  final IconData icon;
  final Widget newPage;

... // resto do código

child: InkWell(
        onTap: () {
          Navigator.of(context).push(MaterialPageRoute(
            builder: (context) => newPage, // aqui eu chamo a tela que será chamada ao receber o click
          ));
        },
... //resto do código

E para chamar ele, basta fazer assim:

_FeatureItem(
    name: "Transfer",
    icon: Icons.monetization_on,
    newPage: ContactsList(),
),

E caso seja necessário que aceite null como valor, ficaria assim:

_FeatureItem(
    name: "Transfer",
    icon: Icons.monetization_on,
    newPage: null,
),

class _FeatureItem extends StatelessWidget {
  final String name;
  final IconData icon;
  final Widget? newPage;

 InkWell(
        onTap: () {
          if (newPage != null) {
            Navigator.of(context).push(MaterialPageRoute(
              builder: (context) => newPage!,
            ));
          }
        },
2 respostas
solução!

Olá, sobre a necessidade de implementar o callback como foi apresentado no curso, acredito que depende.

Ao implementar o callback a partir da função onClick, é possível ter maior flexibilidade no comportamento do_FeatureItem já que a responsabilidade sobre o que fazer quando o item for clicado fica para o elemento pai que esta usando-o, podendo ter algum outro comportamento alem de navegar para outra tela.

Sobre a sua abordagem, também acho que depende de como você decidiu estruturar o código.

Se no seu caso o _FeatureItem vai apenas navegar para um outro widget mantendo o histórico de navegação, a maneira que você implementou acho que sera uma boa.

Mas se for preciso mudar como a navegação será realizada em um caso especifico ou precisar fazer algum processamento antes de navegar, a opção de implementar o callback seria melhor.

Entendi, muito obrigado! Perfeita explicação. Vou ir vendo o resto das aulas, caso o professor vá fazer algo além de navegar para outro widget, daí mudo meu código e implemento o callback.

Obrigado pela ajuda!