多次调用ListView.builder
我正在尝试从Firestore获取数据,并使用多次调用ListView.builder,listview,flutter,Listview,Flutter,我正在尝试从Firestore获取数据,并使用ListView.builder将其显示在卡片中。我有一个布尔值isAvailable,我希望用它重新组织数据的顺序。如果它是真的,它将被放在列表的顶部,如果它是假的,它将被放在列表的底部。这是部分代码 假设我有一个具有Firebase相应字段的类用户。当我调用该过滤器函数并附加User实例并运行该程序时,该列表将重复大约12次。但是,如果我不过滤内容,只按原样使用ListView.builder,那么它会正确显示 假设userTile返回一张包含用
ListView.builder
将其显示在卡片中。我有一个布尔值isAvailable
,我希望用它重新组织数据的顺序。如果它是真的,它将被放在列表的顶部,如果它是假的,它将被放在列表的底部。这是部分代码
假设我有一个具有Firebase相应字段的类用户。当我调用该过滤器函数并附加User实例并运行该程序时,该列表将重复大约12次。但是,如果我不过滤内容,只按原样使用ListView.builder
,那么它会正确显示
假设userTile
返回一张包含用户内容的卡片
出于某种原因,filter函数被多次调用,因此列表也被多次追加。这有什么办法吗?我想按顺序在顶部显示可用内容,在底部显示不可用内容
我还尝试使用计数器,确保过滤器不会像这样运行多次
int count=0
并用if(count
包围for循环,并在末尾添加count=count+1
然而,这似乎也不能解决问题
我没有调用notAvailable list上的userTile,因为我希望它首先与available list一起工作
List notAvailableData = [];
List availableData = [];
List orderedList = [];
void filterContent(List users) {
for (int i = 0; i < userData.length; i++) {
User userData = users[i];
if (userData.isAvailable == true) {
available.add(userData);
} else {
notAvailable.add(userData);
}
}
}
@override
Widget build(BuildContext context) {
final users = Provider.of<List<User>>(context) ?? [];
filterContent(users);
return ListView.builder(
itemCount: available.length,
itemBuilder: (context, index) {
return _userTile(context, available[index], index);
},
);
}
}
List notAvailableData=[];
列表可用数据=[];
List orderedList=[];
无效筛选器内容(列出用户){
for(int i=0;i
有十几种方法可以解决您的问题,我只给您介绍一条捷径;只要在功能启动时刷新列表(可用
,和不可用
)
void filterContent(List users) {
available = [];
notAvailable = [];
for (int i = 0; i < userData.length; i++) {
User userData = users[i];
if (userData.isAvailable == true) {
available.add(userData);
} else {
notAvailable.add(userData);
}
}
}
void filterContent(列出用户){
可用=[];
notAvailable=[];
for(int i=0;i
为什么要在本地进行筛选?你可以让firestore为你过滤数据?我怎么能做到?我无法理解为什么我没有想到这一点,谢谢!但是你知道为什么它被多次调用,或者它忽略了计数条件,并且不管怎样都在递增吗?从你共享的这些代码中不清楚调用多次的原因。可能有东西一次又一次地调用build
方法,例如:asetState
。