【发布时间】:2021-04-23 11:34:24
【问题描述】:
我有一个由 ListView.builder 提供的列表,我使用一个函数来检查是否正在搜索列表中的对象,但我想在没有找到对象时显示一个屏幕。所以用户知道什么都没有找到,但我正在努力解决它,代码看起来像这样:
Container OnlyShow = Container(
child: ListView.builder(
itemCount: myList.length,
itemBuilder: (context, index) {
if (searchfunction(myList[index]) == true) {
return myListObject(myList[index]);
} else {
return Container(height: 0, width: 0,);
}
},
),
);
搜索功能本身不是问题我只想知道如何找出 ListView.builder 是否只返回空容器,因为这意味着没有对象等于搜索,因此什么也找不到。
我尝试过类似的方法:
Container OnlyShow = Container(
child: ListView.builder(
itemCount: myList.length,
itemBuilder: (context, index) {
if (searchfunction(myList[index]) == true) {
if (howManyObjectsAreFalse > 0) {
howManyObjectsAreFalse--;
dismissNoResultsFoundScreen();
}
return myListObject(myList[index]);
} else {
if (howManyObjectsAreFalse < myList.length) {
howManyObjectsAreFalse++;
}
if (howManyObjectsAreFalse == myList.length) {
showNoResultsFoundScreen();
}
return Container(height: 0, width: 0,);
}
},
),
);
int howManyObjectsAreFalse = 0;
当返回一个空的 Container 时,它应该像这样工作,当返回一个 Result 时,计数会减少,所以当计数达到列表的长度时,就会显示 NoResultScreen。
它确实有效,但有一些奇怪的例外情况,有时计数似乎在值之间波动,即使 ListView.builder 只返回空容器。
注意:列表不是空的,我只是为列表中不等于搜索值的每个对象返回一个空容器。所以我不会减少列表什么的
我希望有人可以帮助我以更好的方式实现这一目标。
【问题讨论】:
-
列表不为空
-
没有找到任何东西:当只返回空容器时,
myList保持不变,我不更改myList我只查看searchfunction(myList) == true和如果我返回myList[index]和如果不是,我返回一个空容器 -
child: myList.where(searchfunction).isEmpty ? Text('nothing was found') : ListView.builder(...) -
但老实说返回这样的
Container(height: 0, width: 0,);是错误的:您应该删除不存在的数据,而不是显示空的小部件 -
顺便说一句,你不能使用 tmp 数组,如:
final tempArray = myList.where(searchfunction).toList();吗?并使用它:tempArray.isEmpty? Text('nothing found') : ListView.builder(itemCount: tempArray.length, ...