Fala, Dev! Tudo bem?

Espero demais que tenha gostado da nossa funcionalidade de atualização com o RefreshIndicator, mas tenho alguns pontos para te passar, mais exatamente 2, certo?

Caso tenhamos uma listagem com vários pedidos, tudo vai correr super bem com nossa atualização de pedidos, mas caso você venha a testar com apenas 1 ou 2 pedidos apenas, você notará que a atualização relutará para funcionar.  Ué, mas por quê?

Este comportamento normalmente ocorre com o Widget RefreshIndicator, já que o mesmo precisa detectar internamente uma rolagem para que aí sim chame o seu onRefresh. Quando temos poucos itens na lista, não necessitando uma rolagem, o mesmo não funciona como deveria.

Para resolvermos este problema é bem simples! Basta que no atributo physics da nossa lista que está envolvida no RefreshIndicator a gente adicione outra classe que é a AlwaysScrollableScrollPhysics(). Isso faz com que nossa lista sempre apresente o comportamento de rolagem o que vai acionar o RefreshIndicator. Vai ficar desta forma:


...
return RefreshIndicator(
  onRefresh: () => controller.getAllOrders(),
  child: ListView.separated(
    physics: const AlwaysScrollableScrollPhysics(), <=== AQUI
    padding: const EdgeInsets.all(16),
...


Show de bola! Com isso resolvemos o primeiro ponto!


O segundo ponto é o seguinte: Quando estiver na visualização dos seus pedidos, e atualizar a listagem, com o RefreshIndicator, pode ser que com você os produtos do pedido acabem sumindo, mas não se preocupe que logo abaixo vamos resolver isso, e é bem simples. :D

Para consertarmos é preciso que quando formos buscar os itens do pedido, agora passemos a recuperar do objeto order que está presente em nosso controlador do tipo OrderController, o qual está sendo provido pelo GetBuilder com o nome controller. Vai ficar desta forma na listagem dos itens do pedido:


...
child: ListView(
  children: controller.order.items.map((orderItem) { <=== AQUI
    return _OrderItemWidget(
      utilsServices: utilsServices,
      orderItem: orderItem,
... 


E pronto! Tudo solucionado! :D

Espero que tenha conseguido realizar no seu projeto, mas caso tenha qualquer problema ou dúvida é só me falar aqui no fórum. Estou sempre à disposição. Bons estudos.