Oi, Diego. Tudo bem?
Num cenário real, onde você precisa buscar dados de uma base de dados ou de uma API REST, a abordagem pode variar, mas vou te dar uma sugestão.
Um dos cenários é utilizar o padrão de repositório pra separar a lógica de acesso a dados (seja de uma base de dados local ou de uma API) da lógica de apresentação e estado.
Vão ser criados uma classe repositório que será responsável por fazer as chamadas à base de dados ou API. Essa classe pode ter métodos como fetchClients, addClient, fetchClientTypes, etc.
O ChangeNotifier (ou outro tipo de provider) vai utilizar o repositório para obter e manipular os dados. Dessa forma, o provider se torna responsável por gerenciar o estado e notificar as páginas quando há mudanças. E as páginas vão escutar o provider pra obter os dados e reagir a mudanças no estado.
Então, pra resumir teremos:
- Repositório: Que é responsável por acessar a base de dados ou API.
- Provider: Que gerencia o estado e utiliza o repositório pra obter e manipular dados.
- Páginas: Que escutam o provider pra obter dados e reagir a mudanças no estado.
Espero ter ajudado.
Um abraço e bons estudos.