FutureBuilder数据没有得到更新按钮单击



首先简要介绍一下这个问题。我已经定义了一个函数来获取数据从我的api和函数是:

Future<void> getProductDetailsData(params) async {
if (_isNetworkAvail) {
await apiBaseHelper
.getAPICall(getProductData, params)
.then((getdata) async => {
if (getdata.containsKey('data'))
{
productDataList = (getdata['data']['items'] as List)
.map((data) => ProductModel.fromJson(data))
.toList(),
tempProductDataList.addAll(productDataList),
}
});
} else {
setState(() {
_isNetworkAvail = false;
});
}
}

,我给出的参数是Future<void> myData = getProductDetailsData({'id': widget.dealerId.toString()});然后我在FutureBuilder的future中使用了myData

现在我已经定义了一个MultiSelectDialogField,在它的onConfirm上我想改变参数,这样我就可以根据给定的参数获得特定的数据。对于这个,我输入了

onConfirm: (results) {
setState(() {
myData = getProductDetailsData({
'id': widget.dealerId.toString(),
'categoryId': "23",
});
});
}

但问题是FutureBuilder没有更新,只显示参数为{'id': widget.dealerId.toString()}的数据

您只需要使用await.then从未来获得值。在.then中,你需要调用setState

Future<void> getProductDetailsData(params) async {
if (_isNetworkAvail) {
apiBaseHelper
.getAPICall(getProductData, params)
.then((getdata) async => {
if (getdata.containsKey('data'))
{
productDataList = (getdata['data']['items'] as List)
.map((data) => ProductModel.fromJson(data))
.toList(),
tempProductDataList.addAll(productDataList),
}
setState(() {}); //here
});
} else {
setState(() {
_isNetworkAvail = false;
});
}
}

更好
Future<void> getProductDetailsData(params) async {
if (_isNetworkAvail) {
final getdata =  await apiBaseHelper
.getAPICall(getProductData, params); 
if (getdata.containsKey('data'))
{
....
}
setState(() {});

} else {
setState(() {
_isNetworkAvail = false;
});
}

也可以使用await并在下一行调用setState。也可以使用FutureBuilder。

最新更新