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, который создаст список плиток списка.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
0
15 755
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

До Дарта 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. Таким образом, вы должны создавать класс вместо метода

Предпочитайте фрагменты кода вместо изображений. Мы можем легко копировать/редактировать изображения, и это плохо для людей с плохим зрением.

Rémi Rousselet 28.05.2019 13:11

но это только один цикл for. это работает с циклом for внутри цикла for?

Yusuf Ersoy 28.05.2019 13:27

Да, потому что он будет зацикливаться в зависимости от того, сколько у вас будет "индексов". Попробуйте, если не получится, будем искать другой выход

Fellipe Malta 28.05.2019 13:30

проверить это решение мне было проще stackoverflow.com/questions/50441168/…

Shady Mohamed Sherif 23.06.2020 15:29
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());
  }

Другие вопросы по теме