flutter 我不能在FutureBuilder中使用刷新指示器?

wbrvyc0a  于 2023-03-13  发布在  Flutter
关注(0)|答案(3)|浏览(140)

我正在尝试将RefreshIndicatorFutureBuilder一起使用,但在从数据库中删除行后提取刷新数据时似乎无法正常工作

RefreshIndicator(
          onRefresh: () async {
            return await carProvider.getCar();
          },
          child: FutureBuilder<List<Car>>(
            future: carProvider.getCar(),
            // initialData: carProvider.carList,
            builder:
                (BuildContext context, AsyncSnapshot<List<Car>> snapshot) {
              print(snapshot.connectionState);
              if (snapshot.connectionState == ConnectionState.waiting)
                return CircularProgressIndicator();
              else if (snapshot.connectionState == ConnectionState.done &&
                  snapshot.data.length > 0)
                return ListView.builder(
                  itemCount: snapshot.data.length,
                  shrinkWrap: true,
                  itemBuilder: (context, index) => Row(
                    children: [
                      Text(snapshot.data[index].name),
                      RaisedButton(
                        child: Text('Remove'),
                        onPressed: () {
                          carProvider.removeCar(snapshot.data[index]);
                          carProvider.getCar();
                        },
                      )
                    ],
                  ),
                );
              else
                return Center(
                  child: Text('Something is wrong'),
                );
            },
          ),
        ),
col17t5w

col17t5w1#

FutureBuilder没有“绑定”到方法,这意味着再次调用carProvider.getCar()不会影响FutureBuilder。
它所做的只是再次调用函数。

onRefresh: () async {
            return await carProvider.getCar();
          },

更简单的方法是调用setState来重新构建FutureBuilder。

onRefresh: () async {
            setState((){});
   },
jrcvhitl

jrcvhitl2#

你可以这样做:

Future refresh() async{
return await carProvider.getCar();
}

然后:

RefreshIndicator(onRefresh: refresh, child: FutureBuilder(future: refresh, ....))
1szpjjfi

1szpjjfi3#

如果在StatefulWidget中使用,这实际上很简单。
1.创建一个将来返回一些数据的方法,例如Future<List<String> _getLocations(){....}
1.声明未来变量,例如late Future<List<String>> _futureLocations
1.在initState方法_futureLocations = _fetchLocations();中初始化此future * 此处不等待 *
1.创建一个FutureBuilder,将未来设置为_futureLocations
1.创建一个刷新指示器作为上述FutureBuilder的父级
1.在onRefresh方法中,调用一个简单方法,如下所示

onRefresh:()async{
  setState((){
   _futureLocations = _fetchLocations();
  });

就是这样!上面的setState将触发FutureBuilder,它将用新的更新重新构建。

相关问题