条件 ListView.builder
Posted
技术标签:
【中文标题】条件 ListView.builder【英文标题】:Conditional ListView.builder 【发布时间】:2020-07-13 13:51:21 【问题描述】:return ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (BuildContext context, int index)
final bool alreadySaved =
_saved.contains(snapshot.data[index]);
if (!snapshot.data[index].isParliamentary)
return ListTile(
title: Text(snapshot.data[index].name,
style: TextStyle(
fontSize: 20.0,
fontWeight: FontWeight.bold,
)),
trailing: Icon(
alreadySaved
? Icons.favorite
: Icons.favorite_border,
color: alreadySaved ? Colors.red : null,
),
onTap: ()
setState(()
if (alreadySaved)
_saved.remove(snapshot.data[index]);
print(_saved);
else
_saved.add(snapshot.data[index]);
print(_saved);
);
,
);
);
尝试在我的 JSON 文件中使用布尔语句“isParliamentary”创建。 'isParliamentary' 值为 'false' 的对象根本不显示。我需要 else 语句吗?
【问题讨论】:
您正在检查 isParliamentary 并返回一个列表图块,当该值为 false 时,您没有指定屏幕上应该显示的内容。那你期待看到什么? 我希望它跳过对 isParliamentary 具有 true 的对象。我怎样才能只为这些对象返回任何内容? 为什么不在创建 listview 之前过滤掉那些对象?如果您不想显示任何内容,请返回一个空容器。但我建议你在构建列表视图之前过滤掉那些不需要的对象。 这能回答你的问题吗? How to conditionally add widgets to a list? 【参考方案1】:break ListView.builder 也有同样的问题,但我没有得到任何合适的解决方案,我尝试使用下面的代码来处理条件 ListView
ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (BuildContext context, int index)
final bool alreadySaved = _saved.contains(snapshot.data[index]);
if (!snapshot.data[index].isParliamentary)
// Return Widget for this condition,
else
// Return else widget
// if you don't have else widget the return null like below
// return null;
)
我已经尝试过这个解决方案,它工作正常,没有出现任何错误。
【讨论】:
【参考方案2】:我通过返回一个 SizedBox(height: 0);当我尝试只返回 null 时,一旦触发 null 并且列表停止,我的索引就会停止。
【讨论】:
以上是关于条件 ListView.builder的主要内容,如果未能解决你的问题,请参考以下文章
关于SQL多条件查询问题: 若其中一条件为空值如何设置忽略该条件而用其它条件组合查询??