Скажем, я извлекаю некоторые данные из API и хочу поместить их в ListView.builder. Я хочу выполнить отложенную загрузку, потому что в любое время на экране будут отображаться только три элемента. Скажем, данные выглядят примерно так: нам не гарантировано получить все заголовки, и мы не знаем, сколько элементов в contents
.
header: HeaderOne
contents: [ItemOne, ItemTwo, ItemThree]
header: HeaderTwo
contents: [ItemOne]
header: HeaderThree // don't display this because contents is empty
contents: [] // don't display this because contents is empty
header: HeaderFour
contents: [ItemOne, ItemTwo]
. ListView в пользовательском интерфейсе выглядеть так, если вы прокручиваете:
HeaderOne
ItemOne
ItemTwo
ItemThree
HeaderTwo
ItemOne
HeaderFour
ItemOne
ItemTwo
Мое itemBuilder
свойство в ListView.builder () становится чем-то ужасным. Вот некоторый псевдокод:
itemBuilder: (BuildContext context, index i) {
if (i == 0 && data.hasHeaderOne) { return _buildHeaderOne(); }
else if (i == 0 && !data.hasHeaderOne) { return _buildHeaderTwo(); }
else if (i == 1 && data.hasHeaderOne { return _buildContents(headerOneContents[0]); }
else if (i == (1 + data.headerOneContents.length) && data.hasHeaderOne && data.hasHeaderTwo) { return _buildContents(headerTwoContents[i+someNumberIHaveToCalculate]); }
...
}
Определенно, есть лучший способ сделать это! Я рассмотрел вложение ListView.builder (), но не уверен, как это влияет на производительность или прокрутку.
Цель состоит в том, чтобы использовать конструктор, когда я не знаю, по какому индексу будет индекс каждого элемента. Я мог бы подсчитать общее количество элементов (в данном примере 9), но я не понимаю, как это поможет без написания сложного кода if-else.