Flutter, как сделать внутри цикла 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, который создаст список плиток списка.


person lgn Turta CrazyPie    schedule 28.05.2019    source источник


Ответы (2)


Благодаря новым функциям Dart 2.3 вы можете использовать for внутри коллекций, чтобы минимизировать шаблонный код и сделать его более разборчивым.

До Dart 2.3

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

Дарт 2.3

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

Ознакомьтесь с дополнительными функциями, которые могут вам помочь, здесь: Что нового в Дарт 2.3

PS: измените имя своей функции на форму camelCase. Таким образом, вы должны создавать класс вместо метода

person Fellipe Malta    schedule 28.05.2019
comment
Предпочитайте фрагменты кода вместо изображений. Мы можем легко копировать/редактировать изображения, и это плохо для людей с плохим зрением. - person Rémi Rousselet; 28.05.2019
comment
но это только один цикл for. это работает с циклом for внутри цикла for? - person lgn Turta CrazyPie; 28.05.2019
comment
Да, потому что он будет зацикливаться в зависимости от того, сколько у вас будет индексов. Попробуйте, если не получится, будем искать другой выход - person Fellipe Malta; 28.05.2019
comment
проверьте это решение, мне было проще список для отображения нескольких виджетов во флаттере"> stackoverflow.com/questions/50441168/ - person Shady Mohamed Sherif; 23.06.2020

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());
  }
person Paresh Mangukiya    schedule 05.05.2021