Цикл for в списке потомков в Flutter
Если однотипные элементы нужно повторить
много раз, список children можно
наполнить циклом for прямо в
литерале - это collection for.
Каждая итерация добавляет один или несколько
виджетов в Column
или Row
без отдельного метода и без мутации списка:
import 'package:flutter/material.dart';
void main() {
runApp(const MaterialApp(home: HomePage()));
}
class HomePage extends StatelessWidget {
const HomePage({super.key});
@override
Widget build(BuildContext context) {
const labels = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri'];
return Scaffold(
body: Center(
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
for (final label in labels)
Padding(
padding: const EdgeInsets.symmetric(horizontal: 6),
child: Text(label),
),
],
),
),
);
}
}
Работают и классические циклы с индексом:
for (var i = 0; i < n; i++). Удобно
нумеровать строки или брать данные из
списка по позиции. Переменные цикла должны
быть локальными в build или полями
виджета - не забывайте, что при будущем
setState изменение данных потребует
нового build:
Column(
children: [
for (var i = 1; i <= 5; i++)
Text('Item $i'),
],
)
Цикл collection for можно комбинировать с
collection if
в одном списке: сначала фиксированные потомки,
затем цикл, затем условный хвост. Порядок
в литерале - это порядок на экране:
children: [
const Text('Total'),
for (final n in [3, 7, 9])
Text('· $n'),
]
В Column выведите заголовок
'Grades', затем через for
пять строк 'Lesson 1' … 'Lesson 5'
(номер подставьте из цикла). Без ручного
копирования пяти Text.