Flutter Widgets

Igor L Sambo💙🇲🇿
GDG Maputo
Published in
4 min readJun 27, 2022

InkWell vs IconButton

Tudo em Flutter são Widgets. E sendo assim, um dos primeiros conceitos a serem abordados quando aprendemos desenvolvimento em Flutter são os Widgets, desde o que realmente são, como funcionam, como e quando implementar os mesmos, ou seja, o propósito de cada um.
Tenho em particular, notado que alguns widgets são ambíguos a primeira impressão e muitas vezes a implementação de um mesmo feature pode variar de desenvolvedor para desenvolvedor, por exemplo o uso de container no lugar de sizedBoxes, entre outros cenários.

Para este artigo vamos explorar um pouco de outros dois widgets que me parecem de certa forma ter algumas semelhanças, e com essa premissa em mente iremos ver como cada um funciona, quais são as aplicações recomendadas, e saber se de facto são ambíguos.

InkWell

É referenciado pela documentação como “uma área rectangular de um Widget que responde a toque”, ou seja, ele precisa ter um widget ancestral que será onde as reações do toque se farão sentir espalhando “tinta”.
Na imagem a seguir podemos ver a ilustração desta área após o toque.

InkWell infographic (fonte: https://flutter.github.io/assets-for-api-docs/assets/material/ink_well.png)
  • highlight — é a cor/efeito que tem ao passar o mouse pelo widget ancestral.
  • splash — é a reação que o elemento sofre após o toque.
  • child — o widget ao qual associamos ao InkWell.

O importante a notar aqui é que o InkWell é uma área, e não necessariamente um material — um pedaço de material, ao qual deve ser notada uma determinada elevação em contraste aos elementos que o rodeiam — , ou seja, excepto quando alguma ação ocorre ele não mostra nenhuma propriedade própria.

gif 01

Por isso é importante notar que precisamos sempre ter um elemento ao qual podemos usar como meio de comunicação com o utilizador para que possa interagir e ter este feedback visual, lembrando da imagem que representa o InkWell temos lá o child para isso. No gif (jif, giph,jiph — como leste???rsrsrsr) anterior temos o Inkwell apenas a pintar sobre o canvas (AnimatedContainer), no caso o Material que ele depende.

Adicionando um child, ficaríamos com….

gif 02

Mas lembrando que a pintura é sobre o parent widget (o Material ancestral).

IconButton

Mais uma vez, recorremos à documentação, que refere ao icon button como “uma imagem marcada em um Material widget que reage a toques por preenchê-la de cor(tinta)”.
Estes são geralmente usados em AppBars, como actions, mas podem ser usados em outros lugares.

O IconButton como vimos na definição e assim como o nome sugere, depende de uma imagem, um ícone, e pelos meus experimentos, aceita um texto, porém, não aconselho a usar. Pelo que, não é possível usar sem especificar o a propriedade icon (required this.icon) e também o onPressed, e podendo estar desabilitado se o retorno for nulo.

Conclusão

Como podemos notar ambos estão associados a interação com o utilizador e permitem realizar acções específicas com base em toque, porém, a forma como cada um irá reagir ao toque é diferente, o InkWell possui propriedades como onTap, onLongTap, onDoubleTap para acionar acções e por sua vez o IconButton possui apenas o onPressed . Podemos observar a partir deste diferencial que o InkWell tem a capacidade de permitir ao utilizador interagir com o aplicativo de várias formas, enquanto que o IconButton é mais específico, funcionando apenas como um botão caracterizado por uma imagem marcada aka ícone.

Podemos também notar que o principal ponto do InkWell não é a ação em si (o toque), mas sim a reactividade/interação visual do elemento com o utilizador, podemos ver isso no gif 01, enquanto que, o IconButton tem a premissa de permitir a interação com base no toque, sendo o ícone e ações necessárias.

Com estes pontos considerados, a sua aplicação e usabilidade em nossos aplicativos deve ser escolhido olhando para a necessidade do widget, por exemplo, se temos uma imagem a qual queremos dar algum protagonismo podemos recorrer ao InkWell, e podemos se calhar onDoubleTap mostrar uma mensagem, mas se o nosso intuito é simplesmente permitir ao utilizador clicar em um botão mais visual com aplicação de um ícone, o ideal seria recorrer ao IconButton.

Disclaimer: Este artigo não é um guia pragmático sobre a utilização destes widgets. A sua aplicação deve ser estudada de acordo com cada use-case. Esta é apenas uma comparação baseada em suas propriedades e apenas influenciar uma discussão acerca.

Espero que tenha aprendido com este artigo e que se tenha divertido enquanto lia.
Se tiver gostado, deixe ficar a sua reação 👏🏾. E fique a vontade para sugerir um tema que gostaria de ver.

Agradecia também que deixasse ficar o seu comentário, assim como sugestões para próximos tópicos a abordar, assim como sua curiosidade, podendo fazê-lo pela caixa de comentários 💬, ✉️ igorlsambo1999@gmail.com ou 🐦 @lsambo02.

Obrigado por acompanhar até ao fim e espero por você no próximo artigo!

--

--