Olá Marco, tudo bem?
Sim, é possível atualizar apenas o Widget que exibe a lista de pedidos sem que toda a página seja renderizada novamente. Para isso, você pode utilizar o widget StreamBuilder
.
O StreamBuilder
é um widget que permite construir widgets de forma reativa, ou seja, ele é reconstruído automaticamente sempre que os dados que ele está observando são atualizados.
Você pode criar um Stream
que emite a lista de pedidos atualizada e utilizá-lo no StreamBuilder
para construir a lista de pedidos. Dessa forma, apenas o StreamBuilder
será reconstruído quando houver uma atualização na lista de pedidos.
Aqui está um exemplo de como utilizar o StreamBuilder
no seu código:
Stream<List<PedidoDto>> _pedidosStream;
@override
void initState() {
super.initState();
_pedidosStream = Stream.periodic(duration).asyncMap((_) => PedidoService().aguardandoConfirmacao());
}
@override
Widget build(BuildContext context) {
return StreamBuilder<List<PedidoDto>>(
stream: _pedidosStream,
builder: (context, snapshot) {
if (snapshot.hasData) {
return ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(snapshot.data[index].nome),
subtitle: Text(snapshot.data[index].descricao),
);
},
);
} else if (snapshot.hasError) {
return Text('Erro ao carregar lista de pedidos');
} else {
return CircularProgressIndicator();
}
},
);
}
Nesse exemplo, o StreamBuilder
está observando o Stream
_pedidosStream
, que é atualizado periodicamente com a lista de pedidos atualizada. Quando o StreamBuilder
é reconstruído, ele verifica se há dados no snapshot
e, se houver, constrói a lista de pedidos. Se houver um erro, exibe uma mensagem de erro e, se não houver dados ainda, exibe um indicador de progresso.
Espero ter ajudado e bons estudos!