Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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
省道/颤振如何基于列表中的值以编程方式筛选ListBuilder_List_Flutter_Dart - Fatal编程技术网

省道/颤振如何基于列表中的值以编程方式筛选ListBuilder

省道/颤振如何基于列表中的值以编程方式筛选ListBuilder,list,flutter,dart,List,Flutter,Dart,我认为有几种不同的方法可以做到这一点,但在Flutter中,我需要从列表中筛选出值。这些值是sts[index].type。我看到此生成器正确显示了所有记录: return ListView.builder( itemCount: sts == null ? 0 : sts.length, itemBuilder: (BuildContext context, int index) { return Card(

我认为有几种不同的方法可以做到这一点,但在Flutter中,我需要从列表中筛选出值。这些值是sts[index].type。我看到此生成器正确显示了所有记录:

return ListView.builder(
        itemCount: sts == null ? 0 : sts.length,
        itemBuilder: (BuildContext context, int index) {
            return Card(
              child: Container(
                child: InkWell(
                    onTap: () {
                      Navigator.push(
                        context,
                        MaterialPageRoute(
                          builder: (context) => DetailsDaily(site: sts[index]),
                        ),
                      );
                    },
                    child: Column(
                      crossAxisAlignment: CrossAxisAlignment.stretch,
                      children: <Widget>[
                        Text(
                          sts[index].name,
                          style: TextStyle(fontSize: 20.0, color: Colors.black),
                        ),
                      ],
                    )),
                padding: const EdgeInsets.all(15.0),
              ),
            );
          }
        });
然而,我有一个问题,需要显示回报。。。然而,我只想让SNTL的作品展示。。。不知道为什么那张支票不起作用

我在我的futurebuilder中尝试:

FutureBuilder(
                future: DefaultAssetBundle.of(context)
                    .loadString('assets/stations-strings.json'),
                builder: (context, snapshot) {
                  if (snapshot.hasData) {
                    List<SnoTelSiteModel> sites =
                        parseJson(snapshot.data.toString());
                    for(var s in sites){
                      if(s.type == "SNTL"){
                        return SnotelList(sts: sites);
                      }
                    }
                  }
                  return CircularProgressIndicator();
                }),
FutureBuilder(
未来:DefaultAssetBundle.of(上下文)
.loadString('assets/stations strings.json'),
生成器:(上下文,快照){
if(snapshot.hasData){
列出网站=
parseJson(snapshot.data.toString());
对于(站点中的var s){
如果(s.type==“SNTL”){
返回SnotelList(sts:站点);
}
}
}
返回循环ProgressIndicator();
}),
但是,它会返回我的所有结果

我最后一次尝试是返回一个已经过滤掉的值的列表,但我不希望这样,因为我想控制将来屏幕上显示的类型


我在if/else中犯了什么错误,而这些错误没有显示出来?

有一种更简单的语法,可以使用
where
过滤列表,例如:

  List<SnoTelSiteModel> sites;
  return sites.where((site) => site.type == 'SNTL').toList();
列出站点;
返回sites.where((site)=>site.type=='SNTL').toList();

您可以在将来使用不同的类型(当然,也可以动态地)按不同的类型筛选列表。

有一种更简单的语法可以使用
筛选列表,其中
,例如:

  List<SnoTelSiteModel> sites;
  return sites.where((site) => site.type == 'SNTL').toList();
列出站点;
返回sites.where((site)=>site.type=='SNTL').toList();

您以后可以使用不同的类型(当然也可以动态地)按不同的类型筛选列表。

为什么不将筛选后的
sts
传递给
ListView.builder
?i、 e.
final sntlList=sts.where((i)=>i.type=='SNTL').toList()。使用此
sntlist
而不是
sts
来构造ListView为什么不将过滤后的
sts
传递给
ListView.builder
?i、 e.
final sntlList=sts.where((i)=>i.type=='SNTL').toList()。使用此
sntlist
而不是
sts
构建ListView感谢您的回复。昨晚我尝试了一下,但得到了这个错误:返回类型“List”不是匿名闭包定义的“Widget”。实际上,这在我的jsonparse返回语句中是有效的。。。我错了:返回jsonList.where((site)=>site.type=='SNTL').toList();我想我可以把我想要的字体传过去。谢谢你的回复。昨晚我尝试了一下,但得到了这个错误:返回类型“List”不是匿名闭包定义的“Widget”。实际上,这在我的jsonparse返回语句中是有效的。。。我错了:返回jsonList.where((site)=>site.type=='SNTL').toList();我想我可以通过我想要的类型。