api - 更新屏幕自动颤动
问题描述
如您所见,我的屏幕包含框。按下删除按钮后,box25 已成功从数据库中删除,但仍显示在屏幕上。当我移至配置文件选项卡并返回框选项卡时,box25 已删除。
删除功能:
void removeBox(int id) async {
// if (_formKey.currentState.validate()) {
String boxId = _boxNameController.text;
boxApi.removeBox(id).then((data) {
if (data != null) {
Navigator.pop(context);
}
/* Navigator.push(
context, MaterialPageRoute(builder: (context) => BoxSettings()));*/
ScaffoldMessenger.of(context).showSnackBar(snackBar1);
}).catchError((error) {
ScaffoldMessenger.of(context)
.showSnackBar(SnackBar(content: Text(error.toString())));
});
setState(() {});
}
Future<String> removeBox(int id) async {
SharedPreferences localStorage = await SharedPreferences.getInstance();
String token = localStorage.getString('access_token');
await checkInternet();
Map<String, String> headers = {
'Content-type': 'application/json',
'Accept': 'application/json',
'Authorization': 'Bearer $token'
};
Map<String, dynamic> body = {
'boxId': id,
};
print(body);
inspect(body);
var response = await http.post(Uri.parse(ApiUtil.REMOVE_BOX),
headers: headers, body: jsonEncode(body));
print(response.statusCode);
print(response);
if (response.statusCode == 200) {
var body = jsonDecode(response.body);
var data = body['message'];
print(data);
inspect(data);
return data;
} else {
throw Exception('Failed to remove box');
}
}
如何自动从屏幕上删除框?
解决方案
你做的一切都是正确的......但是当你的响应成功时,你应该从列表中本地删除该框,然后你应该调用 setState()。
伪代码:-
/// Remove box ontap
onTap(){
/// server method call
.....
/// if response successful then remove box loacally
list.removeAt(index);
setState(){}
}
推荐阅读
- javascript - 禁用提交按钮后表单未提交
- javascript - 使用纯javascript删除货币符号并用点替换逗号
- php - 从 WordPress 中的函数获取值
- json - 如何在 epoch 中更新 Postgres 中的当前时间的 json 对象
- stm32 - 无法使用 SPI (stm32h743) 传输。配置问题
- typescript - 如何在打字稿的Object中使用类函数?
- elasticsearch - 搜索查询以匹配所有并返回所有数据而不使用 curl
- angular - 在 ngx-bootstrap 下拉菜单中,外部点击不会关闭下拉菜单。有什么解决办法吗?
- jquery - 计算帖子中的产品数量
- javascript - 如何仅在计算结果时显示 div?