мне нужно сделать внутри для цикла внутри виджетов. я создаю два виджета, и я назвал его из другого виджета. он говорит: «Не в диапазоне 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, который создаст список плиток списка.
Благодаря новым функциям 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. Таким образом, вы должны создавать класс вместо метода
но это только один цикл for. это работает с циклом for внутри цикла for?
Да, потому что он будет зацикливаться в зависимости от того, сколько у вас будет "индексов". Попробуйте, если не получится, будем искать другой выход
проверить это решение мне было проще stackoverflow.com/questions/50441168/…
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());
}
Предпочитайте фрагменты кода вместо изображений. Мы можем легко копировать/редактировать изображения, и это плохо для людей с плохим зрением.