使用api调用从列表中删除项目对我来说是成功的。但是,当我尝试删除列表中的最后一个剩余项目时,当我拉动刷新时,它没有消失,就像其余的一样。
该项目仍然保留在那里,尽管它为我提供了状态码200,表明该项目已成功从API中删除。
这里我使用扩展图块显示项目,弹出菜单按钮删除选项可在按下时删除项目,并在用户拉动刷新时刷新列表。
扩展图块:
...
Future<Null> refresh() async {
setState(() {
getJsonData();
});
Completer<Null> completer = new Completer<Null>();
completer.complete();
return completer.future;
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: Center(
child: RefreshIndicator(
child: ListView.builder(
itemBuilder: (BuildContext context, int index) => Card(
child: SingleChildScrollView(
child: StuffInTiles(
levelsData[index]['target_price'],
),
),
),
itemCount: levelsData.length,
),
onRefresh: refresh,
),
),
),
);
}
class StuffInTiles extends StatelessWidget {
final double targetPrice;
StuffInTiles(this.targetPrice);
delete() async {
String url = "http://35.240.193.96:8080/users";
Map map = {
'target_price': targetPrice,
'user_id': 'user2'
};
print(await apiRequest(url, map));
}
Future<String> apiRequest(String url, Map jsonMap) async {
HttpClient httpClient = new HttpClient();
HttpClientRequest request = await httpClient.deleteUrl(Uri.parse(url));
request.headers.set('content-type', 'application/json');
request.add(utf8.encode(json.encode(jsonMap)));
HttpClientResponse response = await request.close();
String statusCode = response.statusCode.toString();
String reply = await response.transform(utf8.decoder).join();
print(statusCode);
httpClient.close();
return reply;
}
@override
Widget build(BuildContext context) {
List<dynamic> _getChildren() {
List<Widget> children = [];
levelsData.forEach(
(element) {
if (targetPrice.toString() == element['target_price'].toString()) {
children.add(
ListTile(
...
trailing: PopUpMenu(
onDelete: () {
delete();
},
),
),
);
}
},
);
return children;
}
}
}
删除适用于所有项目,也可以从列表中删除,除非当它是最后一个剩余项目时,如图所示,它不会从列表中删除。不知道为什么吗?