Списки в flutter
Для отображения списков в flutter используется виджет ListView. В свойство children нужно передать массив элементов списка
body: ListView(children: <Widget>[ ListTile(title: Text('test 1')), ListTile(title: Text('test 2')), ListTile(title: Text('test 3')) ])
Выглядеть такой виджет будет вот так:
Содержимым ListView могут быть любые виджеты, не только ListTile. ListTile всего лишь подготовленный виджет, хорошо выглядящий в списке и имеющий много полезных свойств, например
ListTile( leading: Icon(Icons.work), title: Text('test 1'), trailing: Icon(Icons.star), subtitle: Text('subtitle text'), isThreeLine: true, )
получится такой виджет:
Динамические списки в flutter
Чаще всего содержимое списка не известно заранее. Например данные загружаются с сервера или вводятся пользователем. Для таких ситуаций используется ListView.builder.
Создадим для примера тестовый массив данных
_data = new List<String>(); for (var i = 1; i <= 100; i++) { _data.add('test ' + i.toString()); }
Теперь отобразим эти данные в списке
new Expanded( child: ListView.builder( itemCount: _data.length, itemBuilder: (context, index) { return ListTile(title: Text('${_data[index]}')); }, ) )
В itemBuilder передается функция, создающая виджет для каждого объекта данных. Единственная проблема здесь — количество элементов нужно знать заранее.
Вот так выглядит получившийся список:
Виртуальность списка в flutter
Если бы для всего массива данных виджеты генерировались бы сразу — приложение бы сильно тормозило на больших объемах данных. flutter поступает умнее и генерирует виджеты только для видимой части списка + несколько невидимых сверху и снизу. Например для скриншота выше в flutter inspector видно, что созданы виджеты для элементов от test 8 до test 27.