Olá, Ewerton!
Entendi sua dúvida. Realmente, se a lista tiver apenas um produto, a falha ainda vai existir mesmo com a verificação pelo tamanho da lista. A solução que você encontrou de criar uma variável para mostrar quando é a primeira chamada e só mostrar os produtos depois dessa primeira chamada é uma boa abordagem para resolver esse problema.
No entanto, uma alternativa para lidar com esse caso específico de ter apenas um produto na lista é verificar se o tamanho da lista é maior que zero antes de realizar o loop de iteração. Assim, você evita a falha mesmo quando a lista tem apenas um produto. Por exemplo:
if (snapshot.docChanges.length > 0) {
for (var change in snapshot.docChanges) {
// realizar as modificações necessárias
}
}
Dessa forma, o loop de iteração só será executado se houver pelo menos uma alteração na lista. Caso contrário, ele será ignorado.
Espero que essa sugestão seja útil para você. Se tiver mais alguma dúvida, é só me dizer!
Espero ter ajudado e bons estudos!