Ответ
RenderBox — это конкретная реализация RenderObject в Flutter, которая использует декартову систему координат (прямоугольники) для рендеринга. Это основа всей системы компоновки и отрисовки виджетов.
Ключевые обязанности:
- Layout (компоновка): Определяет размер и положение через
performLayout() - Painting (отрисовка): Рисует содержимое через
paint() - 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);
}
}
Когда использовать:
- Кастомная анимация с высокой производительностью
- Специфичные требования к отрисовке
- Оптимизация критичных по производительности элементов
- Создание собственных виджетов с нестандартным поведением