Actualisation écran avec Navigateur 2.0 et webservice

Bonjour les codeurs giraffe,

Depuis quelques jours en suivant avec application les cours de @mbritto sur « Directus » et « Flutter : Architecture et Navigation », je suis confronté à un problème qui me fait tourner en rond.

J’ai créé sur Directus une base de données avec des clients, je la télécharge dans mon application Flutter sans problème. Mon HomeScreen affiche la liste des clients (Avec un Listview.builder).

Quand je veux créer un nouveau client depuis l’application Flutter, j’arrive à naviguer vers un écran de création (avec des textfields pour remplir les infos) et mon POST vers mon webservice se passe avec succès. Jusque-là tout va bien.

C’est juste que lorsque j’enregistre le nouveau client, je reviens sur mon HomeScreen (via le Navigator 2.0), mais ma liste de clients n’est pas mise à jour avec le nouveau client que je viens de créer. Si je relance l’application, il est néanmoins bien présent.

J’ai tenté d’ajouter le client depuis Flutter à ma liste de clients, sauf qu’il n’a pas d’id généré par le webservice (nécessaire pour accéder à la page des infos du client).

Je ne sais plus dans quelle direction chercher pour solutionner ce problème.

Si quelqu’un peut m’orienter et me donner une piste de réflexion…

En vous remerciant

Décidément, il faut parfois savoir arrêter sa journée quand on a l’impression d’avoir tout exploré et qu’on est dans une impasse…
La nuit m’a porté conseil. Finalement c’était bête comme choux. En me remémorant mon post d’hier j’ai vu que la solution était dans le problème.
Suffisait de ne pas construire ma liste de clients avec un Listview.builder, mais l’intégrer dans un FutureBuilder. Et hop, le tour est joué!
Si ça peut servir…

1 « J'aime »

Effectivement il existe plusieurs solutions pour régler ce problème : l’idée principale consiste à déclencher un rechargement de la liste quand c’est nécessaire. Tu peux le faire systématiquement ou seulement après être allé sur des écrans de modification, etc.

Bonjour @mbritto,

D’abord, merci pour tout ce que tu proposes. Chaque jour m’offre la possibilité de progresser un peu plus et je m’éclate vraiment à visionner toutes tes vidéos et replays.:pray:

Concernant le déclenchement du rechargement de la liste, avec mon FutureBuilder, le rechargement (avec appel au webservice) se réalise à chaque affichage de l’écran même s’il n’y a pas eu de modification.
Quel est le principe pour ne recharger que si je reviens de l’écran de création (ou de modification) d’un item ?
J’imagine que cela se joue dans le NavigationDelegate… mais à quel endroit ?
Peut-être ici:

return Navigator(
      pages: pagesList,
      onPopPage: (route, result) {
        if (route.didPop(result) == false) {
          return false;
        }
        return onBackButtonTouched(result);
      },
    );

Si quelqu’un a la réponse, cela me permettrait d’optimiser mon code pour limiter les appels au webservice.

Bien à vous

Chaque projet est différent donc il n’existe pas de réponse toute prête.
Mais l’idée est que ton NavigationDelegate va reconstruire ta hierarchie à chaque navigation, tu vas donc recréer tes view models à chaque fois.
Normalement ça devrait recharger à chaque fois tes données si c’est ce que fait ton view model.
Maintenant, si ton viewmodel est relié à un contrôleur intermédiaire et non directement au webservice, alors ce controleur pourrait par exemple créer un cache pour ne pas rechercher sans arrêt les mêmes informations

Hello !
Je pinaille sur le même problème. Je ne comprends pas ce qu’il se passe. J’ai pourtant bien intégré la page dans un futureBuilder. J’ai essayé avec un listview.builder et une listview avec une boucle for à l’intérieur même problème.
Quand je debug le code passe bien par la fonction de MAJ des items de la listes pourtant.
Dans Directus pas de problème. Par contre ca ne fonctionne pas dans l’appli. Le plus étrange c’est que meme en arrêtant l’app et en la relançant la maj ne se fait pas. Puis au bout de 10 min la MAJ se fait.
:sob:

Ca y est j’ai trouvé … le problème venait du cache que j’avais laissé dans mon docker compose.yml file.

La où la situation est cocasse, c’est que j’avais déjà envoyé une solution au problème (fournie par Maxime) sur un autre de tes posts @Behache

Parfois :face_with_peeking_eye: :face_with_peeking_eye:

J’avais lu rapidement ton problème. J’attendais ce week-end pour m’y pencher plus en détails, mais il me semblait bien que ça pouvait être ce problème de cache du fichier Docker et que c’est toi qui avait publié une solution. :joy:
C’est pour ça que je ne comprenais pas trop. :crazy_face:
Allez, c’est la fin d’année, on va pouvoir déconnecter et se reposer un peu.
Belles fêtes de fin d’année à tous.

1 « J'aime »