Olá Henrique!
Obrigado por compartilhar sua dúvida conosco. Desculpa a demora. Eu estou respondendo esse tópico para tentar ajudar você e outros alunos com essa mesma dúvida.
Entendo que você está enfrentando um problema com o uso do setState
em sua aplicação, devido ao fato de todo o aplicativo estar sendo construído em uma única página e não ser possível utilizar o refresh
na página de adicionar lista.
Uma alternativa para contornar essa situação é utilizar o Provider
, uma biblioteca que permite o gerenciamento de estado de forma global na sua aplicação. Com o Provider
, você pode compartilhar o estado entre diferentes partes do seu aplicativo, mesmo que estejam em páginas diferentes.
Você pode criar um ChangeNotifier
para representar o estado da sua aplicação e utilizar o Provider
para fornecer esse estado para as partes que precisam dele. Assim, quando você precisar atualizar o estado, basta chamar um método no seu ChangeNotifier
e o Provider
se encarregará de notificar todas as partes que dependem desse estado para que sejam atualizadas.
Aqui está um exemplo de como você pode implementar isso:
- Crie uma classe que estende
ChangeNotifier
para representar o estado da sua aplicação. Por exemplo:
class AppState extends ChangeNotifier {
int counter = 0;
void incrementCounter() {
counter++;
notifyListeners();
}
}
- Em seu widget principal, envolva-o com o
ChangeNotifierProvider
, fornecendo uma instância do AppState
. Por exemplo:
ChangeNotifierProvider(
create: (_) => AppState(),
child: MaterialApp(
// ...
),
)
- Em qualquer widget que precise acessar ou modificar o estado, utilize o
Consumer
para obter o estado fornecido pelo Provider
. Por exemplo:
Consumer<AppState>(
builder: (context, appState, _) {
return Text(appState.counter.toString());
},
)
- Para atualizar o estado, basta chamar o método apropriado no seu
ChangeNotifier
. Por exemplo:
RaisedButton(
onPressed: () {
Provider.of<AppState>(context, listen: false).incrementCounter();
},
child: Text('Increment'),
)
Dessa forma, sempre que o estado for atualizado, o Consumer
será notificado e atualizará automaticamente a interface do usuário.
Espero que essa alternativa seja útil para você! Se tiver mais alguma dúvida, estou à disposição. Bons estudos!