Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多次调用ListView.builder_Listview_Flutter - Fatal编程技术网

多次调用ListView.builder

多次调用ListView.builder,listview,flutter,Listview,Flutter,我正在尝试从Firestore获取数据,并使用ListView.builder将其显示在卡片中。我有一个布尔值isAvailable,我希望用它重新组织数据的顺序。如果它是真的,它将被放在列表的顶部,如果它是假的,它将被放在列表的底部。这是部分代码 假设我有一个具有Firebase相应字段的类用户。当我调用该过滤器函数并附加User实例并运行该程序时,该列表将重复大约12次。但是,如果我不过滤内容,只按原样使用ListView.builder,那么它会正确显示 假设userTile返回一张包含用

我正在尝试从Firestore获取数据,并使用
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
方法,例如:a
setState