J'ai une application qui permet aux utilisateurs d'afficher des données de jauge de rivières d'une API qui répertorie les rivières de l'ensemble des États-Unis. Les utilisateurs peuvent enregistrer des jauges comme favoris qui sont ensuite affichés dans une vue Favoris. Les favoris sont stockés dans les paramètres par défaut des utilisateurs par ID. La vue Favoris est peuplée via un modèle de vue Favoris qui est construit à l'aide des paramètres par défaut de l'utilisateur. Les favoris sont affichés dans une vue de liste et lorsque l'application est taraudée, l'application charge une vue de détails. Dans la vue Détails, l'utilisateur peut choisir de supprimer le favori. Lors de votre retour à la vue Favoris à l'aide du bouton arrière, la vue Favoris devrait refléter le changement, mais ce n'est pas le cas. J'utilise le fournisseur de flutter et ceci est ma première implémentation de celui-ci.
Je défini le fournisseur en Main puisque j'aurai besoin d'y accéder dans l'application. P>
var approveRemovalButton = FlatButton( child: Text('Remove', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold, color: Colors.blue), ), onPressed: () { animationDuration = 0; favesVM.deleteFavorite(widget.gaugeId); Navigator.pop(context); }, );
3 Réponses :
Je pense que vous créez explicitement plusieurs fournies et que vous avez chargé des données dans un fournisseur et lorsque vous notifiez les modifications, le notificateur parent est notifié et les modifications ne se reflètent pas. Ne créez pas de distinct Veuillez remplacer p> avec p> favorisviewModel code> comme vous devez utiliser le même objet. Vous avez déjà créé un objet dans
runapp () code>
Votre problème que vous avez deux modèles de vue fonctionnant en même temps, permettez-moi d'expliquer comment:
en appelant et aussi en faisant ce p> Vous créez un autre modèle de vue p> La partie délicate est donc la suivante: vous avez deux modèles de vue qui contiennent les mêmes données,
Vous utilisez le modèle de vue du consommateur (pas du localisateur) pour afficher les données dans votre liste de liste, puis vous supprimez les données du localisateur, la suppression ne sera donc pas reflétée. P> en tant que solution Vous pouvez envelopper votre FavorisviewModel ViewModel = FavorisViewModel (); // servicelocator
FavoritCard code> par
consommateur
modèle.deletefavorite () code> p> p> p> P>
Mettez à jour votre Etat
class _FavoritesView extends State<FavoritesView> {
FavoritesViewModel viewModel;
@override
void initState() {
super.initState();
viewModel = Provider.of<FavoritesViewModel>(context, listen: false);
viewModel.loadFavorites();
}
@override
Widget build(BuildContext context) {
return Consumer<FavoritesViewModel>(
builder: (context, model, child) => Scaffold(
appBar: AppBar(
title: Text('=Favorites='),
),
body: ListView.builder(
itemCount: model.favorites.length,
itemBuilder: (context, index) {
return FavoriteCard(model.favorites[index], Key(model.favorites[index]));
},
),
),
);
}
Pouvez-vous partager le code FavoritCard s'il vous plaît? J'ai besoin de vérifier comment DeleteFavorite est appelé
@ikerfah, merci! Ajout d'extraits d'où la fonction DELETE est appelée.