1
votes

Comment puis-je recharger la liste après l'insertion d'un nouvel enregistrement?

J'ai un listView et il est créé en utilisant Future Builder toutes les données sont récupérées sur le serveur et après avoir ajouté un nouvel enregistrement, un enregistrement est ajouté avec succès dans la base de données et Naviguer. pop sur la page listView mais ma liste n'est pas actualisée, comment puis-je actualiser ma liste?

IconButton (
  icon: Icon(Icons.add_location),
  onPressed: navigateToAddAddress
)

void navigateToAddAddress() async {
  await Navigator.push(context, MaterialPageRoute(builder: (context) {
    return AddAddress();
  }));
}
Widget _buildLoadingPage() => Material(
  child: Center(
    child: CircularProgressIndicator(),
  ),
);

Widget _buildErrorPage(error) => Material(
  child: Center(
    child: Text("ERROR: $error"),
  ),
);
FutureBuilder<List<NewAddressModel>>(
  future: myAddressList,
  builder: (context, snapshot) {
    print(snapshot);
    if (snapshot.hasData)
      return addressList(snapshot.data);
    else if (snapshot.hasError)
      return _buildErrorPage(snapshot.error);
    else
      return _buildLoadingPage();
  },
),


3 commentaires

Essayez-vous d'utiliser Navigator.push (). WhenComplete (() {setState () {}})?


@Abjox pouvez-vous me dire la même chose pour supprimer si je supprime un enregistrement, cet enregistrement est supprimé mais la liste n'est pas actualisée.


Je l'ai résolu en utilisant @override void didChangeDependencies () {super.didChangeDependencies (); _myList = hitApiGetData (); } C'est la bonne route ?


3 Réponses :


2
votes

C'est parce que lorsque vous naviguez d'une page à une autre, vous devez ajouter la méthode whencomplete comme @Abjox l'a dit, de sorte que lorsque vous revenez à la page Listview, la méthode de construction est appelée et le futurbuilder récupère les données et afficher dans vos données dans la liste que vous avez insérée dans la base de données.


4 commentaires

pouvez-vous me dire la même chose pour supprimer si je supprime un enregistrement, cet enregistrement est supprimé mais la liste n'est pas actualisée?


Je l'ai résolu en utilisant @override void didChangeDependencies () {super.didChangeDependencies (); _myList = hitApiGetData (); } C'est la bonne route ?


Vous devriez consulter son message juste pour la référence: stackoverflow.com/questions / 54641746 /… . Si cela fonctionne, c'est super.


Une aide supplémentaire s'il vous plaît dans cette requête stackoverflow.com/questions/59942915/...



1
votes

Utilisez Navigator.push (). whenComplete (() {setState () {}}) comme ceci comme @Abjox l'a suggéré.

void navigateToAddAddress() async {
    Navigator.of(context).push
      (new MaterialPageRoute(builder: (context) => AddAddress()))
        .whenComplete((){setState(() {
//          use here that method by which you load data into listView    
        });});
  }


0 commentaires

2
votes

Il vous suffit de réaffecter l'appel de la fonction Future à myAddressList puis d'appeler setState.

Future<void> navigateToAddAddress() async {
  await Navigator.push(
    context,
    MaterialPageRoute(
      builder: (context) => AddAddress(),
    ),
  );
  setState((){
    myAddressList = _fetchAddressListFromServer();
  });
}


2 commentaires

hey pouvez-vous m'aider dans cette requête stackoverflow.com/q/59942915/12094392


@Toyed J'ai ajouté une réponse à votre un autre message . Tu peux essayer