Блог · Пост
Я выпустил woff2 для Flutter
Я выпустил woff2 для Flutter, чтобы закрыть частую проблему: шрифты, которые приходят не в .ttf или .otf, а в .woff или .woff2. Особенно часто так бывает в вебе.
FontLoader во Flutter рассчитан на несжатые SFNT-шрифты, то есть на байты TTF/OTF. Если скормить ему WOFF2 напрямую, начнутся проблемы. Поэтому я сделал пакет, с которым во Flutter можно использовать шрифты .woff и .woff2: он декодирует их в байты SFNT и регистрирует через стандартный пайплайн шрифтов Flutter.
Что умеет woff2:
- Декодирование WOFF1 и WOFF2
- Загрузка шрифтов из ассетов и из байтов
- Обёртка над FontLoader из Flutter
- Парсинг CSS @font-face
- Поддержка шрифтов, встроенных через data: URL
- Пакетная регистрация нескольких начертаний и стилей
- Никакого нативного кода плагина в вашем приложении
Пакет вырос из моей работы над рендерингом анимированного SVG, где шрифты часто встраивают через CSS. Без нормальной поддержки WOFF/WOFF2 отрисовка может сломаться, даже если сам SVG распарсен правильно.
Он нужен не каждому Flutter-приложению, но пригодится там, где приложение работает с внешним контентом: SVG, HTML, EPUB, превью документов, экспорты из дизайн-инструментов, рендеринг писем или пайплайны rich text. Там он может избавить от раздражающего шага конвертации.
Пакет пока на ранней стадии, но основная функциональность уже готова.
Посмотреть можно здесь: pub.dev/packages/woff2 (откроется в новой вкладке)
Буду рад фидбеку от Flutter-разработчиков, у которых есть опыт работы с кастомными шрифтами, рендерингом SVG и документов или приложениями с насыщенной типографикой.