简体   繁体   中英

Screen not updated after calling FutureBuilder again

I have a screen that loads shopping cart items in a ListView.builder:

Expanded(
                    child: RefreshIndicator(
                        onRefresh: refresh,
                        child: Container(
                          child: FutureBuilder(
                            future: loadData(),
                            builder: (context, snapshot) {
                              if (snapshot.hasData) {

      List<dynamic>? filteredList = snapshot.data as List;
...

The data are loaded using the function loadData()

 Future<List<LineaCesta>> loadData() async {
    await fetchLineasCesta(idCesta);
    return fetchLineasCesta(idCesta);
  }

Then, inside the item card, there are some buttons to add or remove product quantity.

Here you have the case for adding a new one:

onPressed:  () async {
//añadir uno maas
final prefs = await SharedPreferences.getInstance(); 
idCesta = prefs.getString("cesta_id")!;
checkExistenciaCestaPoner( idCesta!,lineaCesta.producto,lineaCesta.precio,context); 
print(  "refrescando despues de añadir item"); 
   });
  });
}

Then there are called other functions that at the end are calling the function loadData() again.

The issue is that all made changes are not updated after calling loadData.

I need to leave the screen and load it again to get all data updated.

EDIT:

Future<List<LineaCesta>> fetchLineasCesta(String cesta) async {


  String url = Constantes().URLProyecto+Constantes().APICarpeta+"get_lineas_cesta.php?cesta="+cesta;
  final response = await http.get(Uri.parse(url));

  return lineaCestaFromJson(response.body);

}

When you like to refresh the FutureBuilder, reassing the future variable. For this I will prefer creating a separate variable for FutureBuilder's future .

 late Future<List<LineaCesta>> loadDateFuture = loadData();

And use

FutureBuilder<List<LineaCesta>>(
  future: loadDateFuture,

Now to update, reassign the loadDateFuture

loadDateFuture = loadData(); // like this 

You can check Randal L. Schwartz's video

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM