Что такое RenderBox в Flutter?

«Что такое RenderBox в Flutter?» — вопрос из категории Рендеринг и производительность, который задают на 29% собеседований Flutter Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

RenderBox — это конкретная реализация RenderObject в Flutter, которая использует декартову систему координат (прямоугольники) для рендеринга. Это основа всей системы компоновки и отрисовки виджетов.

Ключевые обязанности:

  1. Layout (компоновка): Определяет размер и положение через performLayout()
  2. Painting (отрисовка): Рисует содержимое через paint()
  3. Hit testing: Обрабатывает пользовательские взаимодействия

Иерархия:

RenderObject (абстрактный)
    ↓
RenderBox (базовый для прямоугольных элементов)
    ↓
RenderStack, RenderFlex, RenderImage и т.д.

Пример кастомного RenderBox:

class CustomCirclePainter extends SingleChildRenderObjectWidget {
  @override
  RenderObject createRenderObject(BuildContext context) {
    return RenderCustomCircle();
  }
}

class RenderCustomCircle extends RenderBox {
  @override
  void performLayout() {
    // Фиксированный размер 100x100
    size = constraints.constrain(Size(100, 100));
  }

  @override
  void paint(PaintingContext context, Offset offset) {
    final canvas = context.canvas;
    final paint = Paint()
      ..color = Colors.blue
      ..style = PaintingStyle.fill;

    // Рисуем круг в центре
    final center = offset + size.center(Offset.zero);
    canvas.drawCircle(center, 50, paint);
  }
}

Когда использовать:

  • Кастомная анимация с высокой производительностью
  • Специфичные требования к отрисовке
  • Оптимизация критичных по производительности элементов
  • Создание собственных виджетов с нестандартным поведением