web-dev-qa-db-fra.com

Comment obtenir des données du futurProvider en flutter

J'essaie de mettre en œuvre la prise en charge de la base de données locale dans mon application de flutter en cours de gestion à l'aide du fournisseur, je souhaite maintenant faire de la récupération de données obéir au modèle de gestion de l'État, mais je n'ai pas échoué.

J'ai essayé de faire un fournisseur traditionnel pour y parvenir, mais l'application a été bloquée dans une boucle de demandes à la base de données. Après une recherche, j'ai trouvé le futurProvider, mais je ne trouve pas comment puis-je obtenir un instantané à partir des données chargées

class _ReceiptsRouteState extends State<ReceiptsRoute> {
  List<Receipt> receipts = [];

  @override
  Widget build(BuildContext context) {
    return FutureProvider(
      initialData: List(),
      builder: (_){
        return DBProvider().receipts().then((result) {
          receipts = result;
        });
      },
      child: Scaffold(
        appBar: AppBar(
          title: Text(AppLocalizations.of(context).history),
        ),
        body: Container(
          child: ListView.builder(
            itemBuilder: (context, position) {
              final item = receipts[position];
              return ListTile(
                title: Text(item.date),
              );
            },
          ),
        ),
      ),
    );
  }
}

maintenant, mon application est en cours d'exécution car je souhaite, mais pas comme la façon dont il devrait fonctionner, j'ai utilisé FutureBuilder pour obtenir les données de la base de données directement, mais je sais que cela devrait passer par le fournisseur pour que je veux ainsi faire le bien

8
Basel Abuhadrous

Dans mon exemple, j'ai utilisé le paramètre Créer du futurProvider pour demander à l'API, puis j'ai utilisé le consommateur pour obtenir les résultats de l'API.

 FutureProvider(
        create: (_) => peopleService.getAllSurvivor(),
        child: Consumer<List<Survivor>>(builder: (context, survivors, _) {
          return survivors == null
              ? Center(child: CircularProgressIndicator())
              : ListView.builder(
                  itemCount: survivors.length,
                  itemBuilder: (context, index) {
                    var survivor = survivors[index];
                    return ListTile(
                      title: Text(survivor.name),
                      subtitle: Text(survivor.gender),
                      leading: Icon(Icons.perm_identity),
                    );
                  },
                );
        })));
0
Bruno Camargos