Я пытаюсь реализовать список, в котором я покажу вопросы викторины, и каждый вопрос будет иметь 4 переключателя. Но когда список становится больше, например, 30-50 элементов, прокрутка списка становится очень неаккуратной и тормозной. без радио, а только прокрутка текста работает плавно. Пожалуйста, помогите мне, если вы столкнулись с подобной проблемой.
Я пытался использовать SingleChildScrollview поверх Listview, но не получил никаких решений. Думаю проблема в радио. Я не знаю, почему этот виджет такой тяжелый.
во-первых: ПЛОХАЯ ПРАКТИКА - оборачивать ListView в SingleChildScrollView. прочитайте эту статью, я просто резюмирую об этом: статья
для лучшей производительности используйте ListView.buildder. Я также объясняю в этой статье
но для получения дополнительной информации вы можете прочитать эту официальную документацию: https://docs.flutter.dev/cookbook/lists/long-lists
другие советы:
установите значение itemExtent для ListView. Это улучшит производительность флаттер-приложений.
ListView(
children: widgets,
itemExtent: 200,
слева: без itemExtend (около 10 секунд, чтобы получить индекс 999),
справа: с itemExtend (очень быстрый переход к индексу 999)
прочитайте эту статью для другой реализации: ссылка
Использование itemExtend действительно повышает производительность списка, но мне это не подходит. Свойство itemExtend определяет высоту каждого элемента в списке, что можно применить, когда мы знаем высоту дочерних элементов в списке. Но, в моем случае, рост детей динамичен и зависит от содержания каждого ребенка.
это приведет к дорогому
Да, мне нужно найти стратегии, чтобы уменьшить размер списка. Но я должен держать рост детей в динамике.
Я удалил компоненты ListTile/RadioListTile/Radio из своих дочерних элементов ListView и создал радио с помощью IconButton, что сделало мой ListView более плавным. Я думаю, что Radio по умолчанию сделало мои ListItems более сложными, поскольку у них есть свои собственные состояния, которые могут быть дорогими. Я хотел бы использовать itemExtent, который делает прокрутку намного быстрее, чем сейчас.
Я попробую этот пунктExtent и дам вам знать.