我基本上是想从api重新获取数据,并使用 RefreshIndicator 在屏幕上显示它们。在小部件的 onRefresh 方法中,将 FutureBuilder 小部件的future设置为新值。但是,在FutureBuilder中的api AsyncSnapShot返回数据之前,永远不会再有null数据。当有新数据的提取请求时,它仍然显示OLD DATA。我想要做的是显示一个LoadingProgressIndicator来显示而不是旧数据。就像代码第一次一样。这是我的代码
return Scaffold(
appBar: AppBar(
title: Text("GDC Saudia"),
),
backgroundColor: Colors.grey[300],
body: RefreshIndicator(
onRefresh: () {
return Future.delayed(Duration(seconds: 0), () {
setState(() {
_quotesFuture = _getData(Endpoint.all);
});
});
},
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
SizedBox(),
AnimatedBuilder(child: GestureDetector(),),
SizedBox(),
FutureBuilder(
future: _quotesFuture,
builder: (context, snapshot) {
if (snapshot.hasError) {
return Center(
child: Text(
"Some error occured",
style: TextStyle(color: Colors.red, fontSize: 32),
),
);
} else if (!snapshot.hasData) {
return Expanded(
child: Center(child: CircularProgressIndicator()));
}
return Expanded(
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 8.0),
child: ListView.builder(
itemBuilder: (_, index) => AnimatedTranslationWidget(
duration: 1 + (index * 0.10),
child: QuoteCard(
quote: snapshot.data[index],
),
),
itemCount: snapshot.data.length,
),
),
);
}),
],
),
),
);
这是initState方法
Future<List<Quote>> _quotesFuture;
@override
void initState() {
_quotesFuture = _getData(Endpoint.all);
super.initState();
}
Future<List<Quote>> _getData(Endpoint point) async =>
await ApiService(API()).getEndpointsData(point);
我只是尝试刷新OnRefresh Pull上的屏幕内容。谢谢您的帮助。