【问题标题】:Flutter how to do for inside for loop with list widget?Flutter 如何使用列表小部件进行 for inside for 循环?
【发布时间】:2019-10-13 21:05:54
【问题描述】:

我需要在小部件内部进行 for inside 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 循环内部动态创建列表图块列表。

【问题讨论】:

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


    【解决方案1】:

    借助 Dart 2.3 的新功能,您可以在集合中使用 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:把你的函数名改成驼峰式。这样,您应该创建一个类而不是方法

    【讨论】:

    • 更喜欢代码片段而不是图片。我们可以轻松地复制/编辑图片,这对视力不好的人来说很糟糕。
    • 但它只有一个 for 循环。这是在 for 循环中使用 for 循环吗?
    • 是的,因为它会根据您拥有的“索引”数量而循环。试试看,如果不行,我们再想办法
    • 检查这个解决方案对我来说更容易stackoverflow.com/questions/50441168/…
    【解决方案2】:
    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());
      }
    

    【讨论】:

      猜你喜欢
      • 2019-11-18
      • 1970-01-01
      • 2020-10-17
      • 2022-06-14
      • 1970-01-01
      • 2022-10-13
      • 2021-07-25
      • 2020-09-07
      • 2017-02-26
      相关资源
      最近更新 更多