【发布时间】:2020-07-08 04:19:28
【问题描述】:
我基本上是在尝试从 api 重新获取数据并使用 RefreshIndicator 将其显示在屏幕上。在小部件的 onRefresh 方法中,我将 FutureBuilder 小部件的 future 设置为新值。但是,在 FutureBuilder 中的 api AsyncSnapShot 返回数据之前,数据不会再出现空值。当有新数据的获取请求时,它仍然显示旧数据。我想要它做的是显示一个 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 上刷新屏幕内容。感谢您的帮助。
【问题讨论】: