列表中的项目在删除后未删除-颤动

时间:2019-04-12 08:58:00

标签: api listview flutter expandable

使用api调用从列表中删除项目对我来说是成功的。但是,当我尝试删除列表中的最后一个剩余项目时,当我拉动刷新时,它没有消失,就像其余的一样。

enter image description here

该项目仍然保留在那里,尽管它为我提供了状态码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;
    }
  }
}

删除适用于所有项目,也可以从列表中删除,除非当它是最后一个剩余项目时,如图所示,它不会从列表中删除。不知道为什么吗?

0 个答案:

没有答案