flutter 再次调用FutureBuilder后屏幕未更新

jdzmm42g  于 2022-12-19  发布在  Flutter
关注(0)|答案(1)|浏览(241)

我有一个在ListView中加载购物车项目的屏幕。

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

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

使用函数loadData()加载数据

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

然后,在项目卡内,有一些按钮来添加或删除产品数量。
下面是添加一个新示例的案例:

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"); 
   });
  });
}

然后调用其他函数,这些函数最后再次调用函数loadData()
问题是调用loadData后,所有更改都不会更新。
我需要离开屏幕并再次加载它以更新所有数据。
编辑:

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);

}
brccelvz

brccelvz1#

当你想刷新FutureBuilder时,重新分配future变量。为此我更愿意为FutureBuilder的future创建一个单独的变量。

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

并使用

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

现在要更新,请重新分配loadDateFuture

loadDateFuture = loadData(); // like this

您可以选中Randal L. Schwartz's video

相关问题