Янки в представлении списка из API?

#flutter #dart

Вопрос:

У меня есть некоторые проблемы со списком флаттера. Я написал свой собственный API для этого приложения. Это дает мне объект, в котором есть «URL», «текст» и другие поля. Я не знаю почему, но этот список такой странный! Это не всегда так, это похоже на заикание в играх. Эта красная линия(на скриншоте ниже) отображается, когда я немного заикаюсь, но иногда они больше. На самом деле, я много пытался его оптимизировать. Вот GitHub для этого проекта clck. У некоторых новостных провайдеров даже нет «фото», но и без этого тоже нехорошо. Кроме того, когда я загружаю все больше и больше статей, он начинает заикаться все больше и больше.

Инструменты разработки:

Растр макс мс — ~13 мс/кадр в среднем ~5 мс/кадр

devtools1

devtools2

devtools3

янкс1

янкс2

Я был бы признателен, если бы вы могли мне помочь. Спасибо.

Комментарии:

1. Можете ли вы указать мне точное местоположение ListView объекта, о котором идет речь? Файл в репозитории, в котором вы заметили проблему?

2. Он находится в библиотеке/новости/компоненты/тело

Ответ №1:

  1. В приведенном выше коде виджет использует ListView попробуйте использовать ListView.builder вариант ListView , при котором будут создаваться только те элементы, которые в данный момент видны на экране.
  2. Также избегайте shrinkWrap , если это возможно, так как это дорогостоящая операция, дополнительная информация указана в документах
 ListView.builder(
  controller: _controller,
  itemCount: c.newsList.lenght,
  itemBuilder: (_, index) => NewCard(
            article: element,
            isLoading: false,
          )
  physics: const AlwaysScrollableScrollPhysics(),
);
 

Комментарии:

1. ОК. Я скоро попробую и дам вам отзыв, потому что сейчас я собираюсь лечь спать. В общем, спасибо вам.

2.Я уже пробовал это сделать. Проверьте это на моем github, пожалуйста! Тем не менее, все еще есть некоторые янки. imgur.com/zuMFzLx imgur.com/YTNWcka

3. Мне понадобится больше контекста, чтобы понять, что еще нужно оптимизировать дальше.