Listview 我可以向列表视图生成器添加更多条件吗?
我有一个Flitter中的ListView生成器。我使用它作为搜索功能。如果列表中的项目包含输入字段中的字母,它将使用特定索引构建该项目。一切正常。 问题是,我希望用户能够找到一个包含多个关键字的项目。因此,我认为增加一些条件会很好。如果第一个关键字列表搜索不正确,请查看下一个列表中是否有关键字。不同列表中的索引引用同一对象。如何添加此条件。我尝试了复制和过去,但在第一个条件后,只是监督第二个条件Listview 我可以向列表视图生成器添加更多条件吗?,listview,flutter,filter,Listview,Flutter,Filter,我有一个Flitter中的ListView生成器。我使用它作为搜索功能。如果列表中的项目包含输入字段中的字母,它将使用特定索引构建该项目。一切正常。 问题是,我希望用户能够找到一个包含多个关键字的项目。因此,我认为增加一些条件会很好。如果第一个关键字列表搜索不正确,请查看下一个列表中是否有关键字。不同列表中的索引引用同一对象。如何添加此条件。我尝试了复制和过去,但在第一个条件后,只是监督第二个条件 Widget build(BuildContext context) { return new
Widget build(BuildContext context) {
return new Material(
child: new Column(children: <Widget>[
new Padding(
padding: new EdgeInsets.only(top: 20.0),
),
new Expanded(
child: new ListView.builder(
itemCount: shops.length,
itemBuilder: (BuildContext context, int index) {
return filter == null || filter == ""
? new Card(
child: ListTile(
leading: ConstrainedBox(
constraints: BoxConstraints(
minWidth: 115,
minHeight: 44,
maxWidth: 115,
maxHeight: 64,
),
child: Image.asset(images[index], fit: BoxFit.cover),
),
title: Text(shops[index]),
subtitle: Text(streets[index]),
trailing: Icon(Icons.more_vert),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => BarberHome()),
);
},
))
: shops[index].toLowerCase().contains(filter.toLowerCase()) ? //the first condition
new Card(
child: ListTile(
leading: ConstrainedBox(
constraints: BoxConstraints(
minWidth: 115,
minHeight: 44,
maxWidth: 115,
maxHeight: 64,
),
child:
Image.asset(images[index], fit: BoxFit.cover),
),
title: Text(shops[index]),
subtitle: Text(streets[index]),
trailing: Icon(Icons.more_vert),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => BarberHome()),
);
},
))
// here i tried to insert the second condition like that
//: streets[index].toLowerCase().contains(filter.toLowerCase()) ?
// ....
: new Container();
}))
]));
小部件构建(构建上下文){
退回新材料(
子项:新列(子项:[
新填料(
填充:仅限新边缘组(顶部:20.0),
),
新扩展(
子项:新建ListView.builder(
itemCount:shops.length,
itemBuilder:(构建上下文,int索引){
返回筛选器==null | |筛选器==“”
?新卡(
孩子:ListTile(
前导:约束框(
约束:BoxConstraints(
最小宽度:115,
身高:44,
最大宽度:115,
最大高度:64,
),
子项:Image.asset(图像[索引],适合:BoxFit.cover),
),
标题:文本(商店[索引]),
字幕:文字(街道[索引]),
尾随:图标(图标。更多垂直),
onTap:(){
导航器。推(
上下文
材料路线(
生成器:(上下文)=>BarberHome()),
);
},
))
:shops[index].toLowerCase().contains(filter.toLowerCase())?//第一个条件
新卡(
孩子:ListTile(
前导:约束框(
约束:BoxConstraints(
最小宽度:115,
身高:44,
最大宽度:115,
最大高度:64,
),
儿童:
Image.asset(图像[索引],适合:BoxFit.cover),
),
标题:文本(商店[索引]),
字幕:文字(街道[索引]),
尾随:图标(图标。更多垂直),
onTap:(){
导航器。推(
上下文
材料路线(
生成器:(上下文)=>BarberHome()),
);
},
))
//在这里,我试着插入第二个条件
//:streets[index].toLowerCase().contains(filter.toLowerCase())?
// ....
:新容器();
}))
]));
}
}您不必在一次返回中完成,您可以像这样使用if和多个返回来分离复杂条件,或者将其提取到函数中
代码片段
itemBuilder: (context, index) {
if(index.isEven){
return ListTile(
title: Text('even ${items[index]}'),
);
} else {
return ListTile(
title: Text('odd ${items[index]}'),
);
}
},
完整代码
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
void main() {
runApp(MyApp(
items: List<String>.generate(10000, (i) => "Item $i"),
));
}
class MyApp extends StatelessWidget {
final List<String> items;
MyApp({Key key, @required this.items}) : super(key: key);
@override
Widget build(BuildContext context) {
final title = 'Long List';
return MaterialApp(
title: title,
home: Scaffold(
appBar: AppBar(
title: Text(title),
),
body: ListView.builder(
itemCount: items.length,
itemBuilder: (context, index) {
if(index.isEven){
return ListTile(
title: Text('even ${items[index]}'),
);
} else {
return ListTile(
title: Text('odd ${items[index]}'),
);
}
},
),
),
);
}
}
导入“包:flift/foundation.dart”;
进口“包装:颤振/材料.省道”;
void main(){
runApp(MyApp(
项目:列表。生成(10000,(i)=>“项目$i”),
));
}
类MyApp扩展了无状态小部件{
最后清单项目;
MyApp({Key-Key,@required this.items}):超级(Key:Key);
@凌驾
小部件构建(构建上下文){
最终标题='长列表';
返回材料PP(
标题:标题,,
家:脚手架(
appBar:appBar(
标题:文本(标题),
),
正文:ListView.builder(
itemCount:items.length,
itemBuilder:(上下文,索引){
如果(索引isEven){
返回列表块(
标题:Text('偶数${items[index]}'),
);
}否则{
返回列表块(
标题:Text('odd${items[index]}'),
);
}
},
),
),
);
}
}