在颤振中重置 ListView

Reset ListView in flutter

我使用渡轮和分页功能将我的应用程序连接到 graphql。现在它会在页面加载时获取前 25 个结果,然后当我滚动到底部时它会获取接下来的 25 个结果。下面是执行此操作的代码。

final getAllPartnerOrganizationsReq = GGetAllPartnerOrganizationsReq(
    (b) => b
      ..requestId = 'MyReviewsReq'
      ..vars.offset = 0
      ..vars.limit = 25,
  );

  void getNextPartnerOrganizations(int offset, int limit) {
    final nextGetAllPartnerOrganizationsReq =
        getAllPartnerOrganizationsReq.rebuild((b) => b
          ..requestId = 'MyReviewsReq'
          ..vars.offset = offset
          ..vars.limit = limit
          ..updateResult = (previous, result) {
            if (previous == null) {
              return result;
            }
            return previous.rebuild((b) => b
              ..partnerOrganizations
                  .addAll(result!.partnerOrganizations!.asList()));
          });
    client.requestController.add(nextGetAllPartnerOrganizationsReq);
  }

  @override
  void initState() {
    super.initState();
    client.request(getAllPartnerOrganizationsReq).listen((response) {
      for (var i = offset;
          i < response.data!.partnerOrganizations!.length;
          i++) {
        partners.add(response.data!.partnerOrganizations![i]);
      }
      offset += 25;
      setState(() {});
    });

    _scrollController.addListener(() {
      if (_scrollController.position.pixels ==
          _scrollController.position.maxScrollExtent) {
        getNextPartnerOrganizations(offset, 25);
      }
    });
  }

问题: 我想要一个完全重置此列表视图的功能。我有两个需求,一个是一个简单的刷新图标,它将列表重置为最初的 25 个,另一个将作为搜索的一部分,因此如果用户使用某个术语进行搜索,它会删除列表并使用这些术语重新获取。我不需要知道如何使用搜索,我基本上需要一种方法来从 ListView 中删除所有内容并返回到空白状态。下面是与 ListView 所在位置相关的代码。

@override
  Widget build(BuildContext context) {
    final model = Provider.of<RetailerDetailsModel>(context, listen: false);

    return Scaffold(
      appBar: AppBar(
        title: const Text('Data Management System'),
      ),
      body: LayoutBuilder(
        builder: (context, constraints) {
          if (partners.isNotEmpty) {
            print('partners');
            return ListView.separated(
              controller: _scrollController,
              itemBuilder: (context, index) => Card(
                child: Column(
                  mainAxisSize: MainAxisSize.min,
                  children: <Widget>[
                    ListTile(
                      leading: kIsWeb
                          ? FadeInImage.assetNetwork(
                              width: 100,
                              height: double.infinity,
                              imageErrorBuilder: (context, index, error) =>
                                  const Text('Failed to load'),
                              image: 'https://${partners[index].logo}',
                              placeholder: 'assets/logo.jpg',
                            )
                          : CachedNetworkImage(
                              imageUrl: 'https://${partners[index].logo}',
                              placeholder: (context, url) =>
                                  const CircularProgressIndicator(),
                              fit: BoxFit.contain,
                              width: 100,
                              height: double.infinity,
                            ),
                      title: Text(partners[index].companyName),
                      subtitle: Text(
                        partners[index].ogDescription ?? 'No Description Set',
                        maxLines: 3,
                      ),
                      trailing:
                          Text(partners[index].ecommTechnology ?? 'Unknown'),
                    ),

由于代码中未提供 partners 变量的定义,因此通过查看它在代码中的使用方式,此答案假定它是某种列表。

要删除 ListView 中的所有条目,您只需重置此列表即可。

setState((){
 partners = [];
})