У меня есть приложение, подключенное к 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 = [];
})