Такие разные Slivers. Часть 2: базовые классы и делегаты

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Продолжаем серию статей о сливерах, в первой части были рассмотрены сливеры-списки: различные вариации SliverList и SliverGrid. В этом материале погрузимся чуть глубже и сосредоточимся на базовых классах и делегатах, которые определяют поведение и структуру сливеров-списков.

Первая часть "Такие разные Slivers: обзор и применение во Flutter" тут.

SliverMultiBoxAdaptorWidget —  абстрактный класс для сливеров, у которых множество элементов. Помогает подклассам создавать свои дочерние элементы лениво, используя SliverChildDelegate.
Наследует абстрактный класс SliverWithKeepAliveWidget, который позволяет отмечать элементы как нуждающиеся в сохранении состояния, даже если находятся в списках с отложенной инициализацией.
Наследниками класса являются SliverGrid, SliverList и другие их вариации.

SliverChildDelegate — абстрактный класс для делегатов, которые поставляют дочерние элементы для сливеров-списков. Есть два основных подкласса:

SliverChildListDelegate — делегат, который предоставляет дочерние элементы для сливеров, используя явный список. Подходит для небольших списков с фиксированными данными.

SliverList(
    delegate: SliverChildListDelegate(items),
),

SliverChildBuilderDelegate — делегат, который предоставляет дочерние элементы с помощью обратного вызова builder. Это позволяет создавать только те элементы, которые необходимы в данный момент, чтобы избежать создания бóльшего количества дочерних элементов, чем видно в окне просмотра, при этом делегат обеспечивает повторное использование виджетов — очень полезно, когда в списке большой набор данных.

SliverList(
  delegate: SliverChildBuilderDelegate(
    (BuildContext context, int index) {
      return ListTile(items[index]);
    },
    childCount: items.length,
  ),
),

SliverGridDelegate — абстрактный класс для делегатов, управляющих размещением элементов в сетке для SliverGrid. Тут также два основных подкласса:
SliverGridDelegateWithFixedCrossAxisCount — создает SliverGrid с фиксированным количеством элементов по поперечной оси.

SliverGrid(
  gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 3),
  delegate: SliverChildListDelegate(items),
),

SliverGridDelegateWithMaxCrossAxisExtent — определяет максимальный размер элементов по поперечной оси, полезен для адаптивных сеток.

SliverGrid(
  gridDelegate: const SliverGridDelegateWithMaxCrossAxisExtent(maxCrossAxisExtent: 200.0),
  delegate: SliverChildListDelegate(items),
),

У SliverGridDelegate есть также собственные параметры, которые можно использовать в SliverGridDelegateWithFixedCrossAxisCount и SliverGridDelegateWithMaxCrossAxisExtent:

  • childAspectRatio — соотношение сторон элементов внутри сетки, задаваемое как отношение ширины к высоте (по умолчанию = 1.0, то есть элементы квадратные);

  • crossAxisSpacing — расстояние между элементами по поперечной оси;

  • mainAxisSpacing — расстояние между элементами вдоль главной оси;

  • mainAxisExtent — задает фиксированный размер элементов по главной оси (не используется одновременно с childAspectRatio).

SliverGrid(
  gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
    crossAxisCount: 3,
    childAspectRatio: 2,
    crossAxisSpacing: 10,
    mainAxisSpacing: 10,
  ),
  delegate: SliverChildListDelegate(items),
),

На этом закончим со сливерами-списками. В следующей статье посмотрим на сливеры, которые помогают с позиционированием и компоновкой.

Источник: https://habr.com/ru/articles/877376/


Интересные статьи

Интересные статьи

В данной статье будет показана нестандартная реализация компонентов Vue + Bitrix, которую вряд ли кто то видел и использовал.Без NPM, без сборщиков и без костылей. Все "нативными" средствами
Пройдя много собеседований, выяснилось, что довольно приличная часть собеседующих, спрашивавших или как-то затрагивавших тему транзакций и их работы, не знают как работают транзакции и что означает дл...
Привет, Хабр! Давайте поговорим о проектном управлении в продуктах Озона. Меня зовут Андрей, я пришёл в компанию менеджером по продукту полгода назад. И первое, что бросилось мне в глаза, — отсутст...
Один из ключевых сценариев работы в CRM это общение с клиентом в удобном для него канале. По почте, по телефону, по SMS или в мессенджере. Особенно выделяется WhatsApp — интеграцию с ...
С версии 12.0 в Bitrix Framework доступно создание резервных копий в автоматическом режиме. Задание параметров автоматического резервного копирования производится в Административной части на странице ...