在颤振中重置 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 = [];
})
我使用渡轮和分页功能将我的应用程序连接到 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 = [];
})