Listview 我可以向列表视图生成器添加更多条件吗?

Listview 我可以向列表视图生成器添加更多条件吗?,listview,flutter,filter,Listview,Flutter,Filter,我有一个Flitter中的ListView生成器。我使用它作为搜索功能。如果列表中的项目包含输入字段中的字母,它将使用特定索引构建该项目。一切正常。 问题是,我希望用户能够找到一个包含多个关键字的项目。因此,我认为增加一些条件会很好。如果第一个关键字列表搜索不正确,请查看下一个列表中是否有关键字。不同列表中的索引引用同一对象。如何添加此条件。我尝试了复制和过去,但在第一个条件后,只是监督第二个条件 Widget build(BuildContext context) { return new

我有一个Flitter中的ListView生成器。我使用它作为搜索功能。如果列表中的项目包含输入字段中的字母,它将使用特定索引构建该项目。一切正常。 问题是,我希望用户能够找到一个包含多个关键字的项目。因此,我认为增加一些条件会很好。如果第一个关键字列表搜索不正确,请查看下一个列表中是否有关键字。不同列表中的索引引用同一对象。如何添加此条件。我尝试了复制和过去,但在第一个条件后,只是监督第二个条件

 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]}'),
);
}
},
),
),
);
}
}