【发布时间】:2021-04-17 07:35:54
【问题描述】:
我正在使用 FutureBuilder 来显示从服务器加载的数据。我只想在应用程序启动时显示一次加载状态,这就是我从 initState 调用 API 的原因。我从服务器获取的数据可能会发生变化,为了反映 UI 的变化,我正在使用 refreshIndicator。问题是我无法想出更新状态的解决方案。
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
GlobalKey<RefreshIndicatorState> _refreshIndicatorKey =
GlobalKey<RefreshIndicatorState>();
Future<List<Photo>> _photosServer;
@override
void initState() {
super.initState();
_photosServer = ApiRest.getPhotos();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: RefreshIndicator(
key: _refreshIndicatorKey,
onRefresh: () {
_refreshIndicatorKey.currentState.show();
await getPhotosFromServer();
...
},
child: FutureBuilder(
future: _photosServer,
builder: (BuildContext context, snapshot) {
if (snapshot.data == null) {
return Center(
child: Text('Loading...'),
);
}
return ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (BuildContext context, index) => ListTile(
title: Text(snapshot.data[index].title),
),
);
},
),
),
);
}
}
在 onRefresh 函数中,我使用以下代码在从服务器获取数据时显示 RefreshIndicator。
onRefresh: () {
_refreshIndicatorKey.currentState.show();
await getPhotosFromServer();
...
}
我还应该做些什么来处理这个问题?
【问题讨论】:
-
目前没有办法用
FutureBuilder做到这一点。 -
如果您想多次“刷新”您的
ListView,请使用StreamBuilder,而不是FutureBuilder
标签: flutter state pull-to-refresh flutter-futurebuilder