Ответ
Skia — это высокопроизводительная кроссплатформенная 2D-графическая библиотека с открытым исходным кодом, разработанная Google. Flutter использует Skia в качестве движка для рендеринга всего пользовательского интерфейса.
Роль Skia во Flutter:
- Отрисовка: Каждый виджет Flutter в конечном итоге преобразуется в набор графических примитивов (рисунков, текста, теней), которые отрисовываются с помощью Skia.
- Аппаратное ускорение: Skia использует GPU (через OpenGL, Vulkan, Metal или DirectX) для быстрой отрисовки, что обеспечивает плавную анимацию в 60/120 FPS.
- Кроссплатформенность: Поскольку Flutter сам рисует UI, а не использует нативные компоненты, Skia позволяет иметь идентичный внешний вид и поведение на iOS, Android, Web и Desktop.
Прямая работа с Skia во Flutter:
Вы можете использовать низкоуровневый API рисования через класс CustomPainter:
class MyCirclePainter extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
// Canvas предоставляется движком Skia
final paint = Paint()
..color = Colors.blue
..style = PaintingStyle.fill;
// Рисуем круг, используя примитивы Skia
canvas.drawCircle(Offset(size.width / 2, size.height / 2), 50.0, paint);
}
@override
bool shouldRepaint(covariant CustomPainter oldDelegate) => false;
}
// Использование в UI
CustomPaint(
size: const Size(200, 200),
painter: MyCirclePainter(),
)
Благодаря Skia, Flutter обеспечивает полный контроль над пикселями на экране и высокую производительность графики.
Ответ 18+ 🔞
Давай разберём, как эта штука работает, а то звучит как какая-то магия, но на самом деле всё, блядь, логично.
Представь себе, что Skia — это невероятно прокачанный, ебать мои старые костыли, художник-робот. Его наняли в Flutter на одну-единственную работу: брать инструкции и нихуя не философствуя, с овердохуищной скоростью, переносить их на экран. Не через системные кисточки, а напрямую, своим лазерным глазом.
Зачем он вообще нужен, этот Skia?
- Он рисует ВСЁ. Абсолютно каждый пиксель, который ты видишь в приложении на Flutter — кнопка, тень, закруглённый уголчик, анимированная иконка — это его рук дело. Flutter говорит: "Нарисуй вот эту хрень здесь", а Skia отвечает: "Уже сделано, ёпта".
- Он жрёт железо. В хорошем смысле. Вместо того чтобы ковыряться процессором, он скидывает всю тяжёлую работу на видеокарту (GPU). Поэтому интерфейс и летает как угорелый на 60 кадрах, а то и на 120. Без этого был бы слайд-шоу, а не приложение.
- Он — главный по тарелочкам. Хочешь, чтобы приложение выглядело и работало абсолютно одинаково на айфоне, андроиде, в браузере и на маке? Вот именно для этого. Поскольку рисует он сам, а не просит систему: "Эй, дай мне свою стандартную кнопку", то и выглядит везде оно как близнецы-братья. Никаких сюрпризов.
А можно с ним пообщаться напрямую?
Конечно, можно! Для этого есть штука под названием CustomPainter. Это как если бы ты дал нашему художнику-роботу чистый холст и сказал: "Вот тебе кисть (Canvas от Skia), вот краски (Paint), давай, твори, я доверяю".
Вот смотри, простейший пример, как нарисовать хуй с горы, то есть, прости, синий круг:
class MyCirclePainter extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
// Кисть (Paint) — это понятия Skia
final paint = Paint()
..color = Colors.blue
..style = PaintingStyle.fill;
// А это команда роботу-художнику: "Нарисуй круг вот тут"
canvas.drawCircle(Offset(size.width / 2, size.height / 2), 50.0, paint);
}
@override
bool shouldRepaint(covariant CustomPainter oldDelegate) => false;
}
// И вешаем этот холст в интерфейс
CustomPaint(
size: const Size(200, 200),
painter: MyCirclePainter(),
)
Короче, вся фишка Flutter в том, что он не просит систему нарисовать ему кнопку. Он сам, через своего личного терминатора Skia, говорит каждому пикселю на экране, каким цветом ему гореть. Поэтому и контроль полный, и производительность — ядрёна вошь. Вот и вся магия, без всякого ёперного театра.