我在Flutter中有一个用例,在这里我需要显示API的列表。在页面中选择了特定过滤器后,应通过触发新的API刷新显示的列表。下面是我的源代码,其中显示了API的列表。
class _MyFieldReportForm extends State<MyFieldReport> {
var myContext;
@override
Widget build(BuildContext context) {
myContext = context;
// TODO: implement build
return Scaffold(
body: new FutureBuilder<List<ReportData>>(
future: fetchProducts(new http.Client()),
builder: (context, snapshot) {
if (snapshot.hasError) print(snapshot.error);
return snapshot.hasData
? createListView(snapshot, myContext)
: new Center(child: new CircularProgressIndicator());
},
),
floatingActionButton: new FloatingActionButton(
child: new Icon(Icons.add),
backgroundColor: Colors.green,
onPressed: () {
Navigator.push(context,
MaterialPageRoute(builder: (context) => FieldvisitForm()));
},
),
);
}
}
按下任何过滤器按钮后,我需要使用新的API刷新此API。如果有人可以帮助我提供示例代码,那就太好了。
答案 0 :(得分:2)
最后了解解决方案。可以通过在
中获取列表来完成void initState() {
super.initState();
listFuture = fetchProducts(new http.Client());
}
在setState中,我正在更新列表。下面是完整的代码:
Future<List<ReportData>> listFuture;
body: new FutureBuilder<List<ReportData>>(
future: listFuture,
builder: (context, snapshot) {
if (snapshot.hasError) print(snapshot.error);
return snapshot.hasData
? createListView(snapshot, myContext)
: new Center(child: new CircularProgressIndicator());
},
),
onPressed: () {
setState(() {
refreshList();
});
void refreshList() {
listFuture = fetchProductsUpdate(new http.Client());
}
答案 1 :(得分:0)
结帐my repo,我创建了一个App类,扩展了全状态,而小部件为无状态,这也许会对您有所帮助