Flutter如何使用列表小部件进行内部for循环?

时间:2019-05-28 10:44:25

标签: flutter android-widget flutter-layout flutter-sliver

我需要在小部件内进行for for循环。我创建了两个小部件,我称它为另一个小部件。它说“不在0..6范围内,包括7:”

代码:

List<Widget> ListMyClips(i) {
    List<Widget> list = new List();
    var lengthItems = widget.data["recommended"][7]["blocks"][i]["items"].length;
    for (var c = 0; c <= lengthItems; i++) {
        list.add(
            ClipRRect(
                borderRadius: new BorderRadius.circular(100.0),
                child: Image.network(
                    first[widget.data["recommended"][7]["blocks"][i]["items"][c]
                        ["id"]]["image"]["full"],
                    width: 56,
                ),
            ),
        );
    }

    return list;
}

List <Widget> ListMyWidgets() {
    var lengthBlocks = widget.data["recommended"][7]["blocks"].length;
    List <Widget> list = new List();
    for (var i = 0; i <= lengthBlocks; i++) {
        list.add(ListTile(
            trailing: Icon(FontAwesomeIcons.chevronRight),
            title: Row(
                children: ListMyClips(i),
            ),
        ));
    }
    return list;
}

我需要的是动态地在for循环内创建列表磁贴列表。

2 个答案:

答案 0 :(得分:0)

有了Dart 2.3的新功能,您可以在collections内部使用for,以最大程度地减少样板代码并使其更清晰。

在Dart 2.3之前

Row(
 children: <Widget>[
   europeanCountries
   .map((country) => Text("New $country"))
   .toList();
  ],
)

使用Dart 2.3

Row(
 children: <Widget>[
  for (var country in europeanCountries) Text("New ${country.data}")
  ],
)

在此处查看更多可为您提供帮助的功能:What's new in Dart 2.3

PS::将函数名称更改为camelCase形式。这样,您应该创建一个类而不是方法

答案 1 :(得分:0)

var list = ["one", "two", "three", "four"]; 

您可以使用文本小部件在屏幕上并排呈现值。我尝试使用以下代码来尝试此

for (var name in list) {
   return new Text(name);
}

基本上,当您在函数上点击“返回”时,该函数将停止并且不会继续您的迭代,因此您需要做的是将其全部放在一个列表中,然后将其添加为小部件的子项

你可以这样做:

  Widget getTextWidgets(List<String> strings)
  {
    List<Widget> list = List<Widget>();
    for(var i = 0; i < strings.length; i++){
        list.add(Text(strings[i]));
    }
    return Row(children: list);
  }

或者更好的是,您可以使用 .map() 运算符并执行以下操作:

 Widget getTextWidgets(List<String> strings)
  {
    return Row(children: strings.map((item) => Text(item)).toList());
  }