我正在尝试将RefreshIndicator与FutureBuilder一起使用,但在从数据库中删除行后提取刷新数据时似乎无法正常工作
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'),
);
},
),
),
3条答案
按热度按时间col17t5w1#
FutureBuilder
没有“绑定”到方法,这意味着再次调用carProvider.getCar()
不会影响FutureBuilder。它所做的只是再次调用函数。
更简单的方法是调用setState来重新构建FutureBuilder。
jrcvhitl2#
你可以这样做:
然后:
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
方法中,调用一个简单方法,如下所示就是这样!上面的setState将触发FutureBuilder,它将用新的更新重新构建。