Простой, простой в использовании, но настраиваемый загрузчик шрифта для использования веб -шрифтов.
Демо: https://sidrao2006.github.io/dynamic_cached_fonts
Динамические кэшированные шрифты позволяют динамически загружать шрифт с любого URL -адреса и кэшировать его. Таким образом, вы можете уменьшить размер пакета и загрузить шрифт, если и когда это требуется.
Еще одно преимущество динамической загрузки шрифтов заключается в том, что теперь вы можете легко предоставить варианту варианту выбора шрифта приложения. Это обеспечивает больший уровень настройки.
Кэширование - это дополнительное обновление производительности, так как шрифт будет загружен только один раз и используется несколько раз, уменьшая использование сети и батареи.
Чтобы использовать пакет, добавьте dynamic_cached_fonts в качестве зависимости.
Например, вы можете загрузить шрифт по требованию - когда страница загружается
@override
void initState () {
final DynamicCachedFonts dynamicCachedFont = DynamicCachedFonts (
fontFamily : fontFamilyName, // The font family name to be passed to TextStyle.fontFamily
url : fontUrl, // A valid url pointing to a font file (.ttf or .otf files only)
);
dynamicCachedFont. load (); // Downloads the font, caches and loads it.
super . initState ();
}
...
Text (
'Some Text' ,
style : TextStyle (fontFamily : fontFamilyName),
)Или когда кнопка нажимается
ElevatedButton (
onPressed : () {
final DynamicCachedFonts dynamicCachedFont = DynamicCachedFonts (
fontFamily : fontFamilyName,
url : fontUrl,
);
dynamicCachedFont. load ();
},
child : const Text ( 'Load Font' ),
), Если вы хотите изменить, насколько большим может быть кэш, или, может быть, как долго шрифт остается в кэше, пройдите в maxCacheObjects и cacheStalePeriod .
DynamicCachedFonts (
fontFamily : fontFamilyName,
url : fontUrl,
maxCacheObjects : 150 ,
cacheStalePeriod : const Duration (days : 100 ),
); TextStyle.fontFamily S применяется только после вызова load() .
Вызов
load()более одного раза бросаетStateError
Что, если вам нужно загрузить несколько шрифтов с различными весами и стилями, как одному семью ... для этого вы можете использовать конструктор DynamicCachedFonts.family .
Он принимает список URL -адресов, указывающий на разные шрифты в одной и той же семье, как urls .
DynamicCachedFonts . family (
urls : < String > [
fontFamilyNameBoldUrl,
fontFamilyNameItalicUrl,
fontFamilyNameRegularUrl,
fontFamilyNameThinUrl,
],
fontFamily : fontFamilyName,
); Пакет также поддерживает загрузку шрифтов в качестве Stream ! loadStream возвращает один поток подписки , который издает файлы шрифтов.
loadStream принимает обратный вызов, downloadProgressListener , который называется каждый раз, когда получается событие DownloadProgress . Это происходит только тогда, когда шрифт фактически загружается с предоставленного URL. Последующие запросы, которые обычно обслуживаются из кэша, не испускают никаких событий прогресса. Если файл шрифта истек, то файл будет загружен снова, для которого события Progress будут переданы на downloadProgressListener .
Когда loadStream вызывается одним URL -адресом с одним шрифтом, то itemCountProgressListener будет вызвана только один раз, когда шрифт был загружен в двигатель.
final DynamicCachedFonts dynamicCachedFont = DynamicCachedFonts (
fontFamily : fontFamilyName,
url : fontUrl,
);
dynamicCachedFont. loadStream (
itemCountProgressListener : ( double progress, int totalItems, int downloadedItems) {},
downloadProgressListener : ( DownloadProgress progress) {},
); А когда loadStream используется для загрузки всего семейства шрифтов, itemCountProgressListener будет вызван один раз для каждого шрифта в семье. В приведенном ниже примере, itemCountProgressListener будет называться 4 раза, один раз после того, как каждый шрифт будет загружен в двигатель Flutter.
final DynamicCachedFonts dynamicCachedFont = DynamicCachedFonts . family (
urls : < String > [
fontFamilyNameBoldUrl,
fontFamilyNameItalicUrl,
fontFamilyNameRegularUrl,
fontFamilyNameThinUrl,
],
fontFamily : fontFamilyName,
);
dynamicCachedFont. loadStream (
itemCountProgressListener : ( double progress, int totalItems, int downloadedItems) {},
downloadProgressListener : ( DownloadProgress progress) {},
);Вызов
loadStreamболее одного раза бросаетStateError
Если вам нужно больше контроля, используйте статические методы!
cacheFont onPressed : () {
DynamicCachedFonts . cacheFont (fontUrl);
},
child : const Text ( 'Download font' ), Вы также можете пройти в maxCacheObjects и cacheStalePeriod .
canLoadFont , loadCachedFont , loadCachedFamily canLoadFont используется для проверки того, доступен ли шрифт в кэше. Обычно он используется в сочетании с методами loadCached* .
Во -первых, проверьте, находится ли шрифт в кеше. Если это так, загрузите шрифт.
if ( DynamicCachedFonts . canLoadFont (fontUrl)) {
// To load a single font...
DynamicCachedFonts . loadCachedFont (
fontUrl,
fontFamily : fontFamilyName,
);
// Or if you want to load multiple fonts as a family...
DynamicCachedFonts . loadCachedFamily (
< String > [
fontFamilyNameBoldUrl,
fontFamilyNameItalicUrl,
fontFamilyNameRegularUrl,
fontFamilyNameThinUrl,
],
fontFamily : fontFamilyName,
);
}Теперь, если шрифт недоступен в кэше, загрузите его!
if ( DynamicCachedFonts . canLoadFont (fontUrl)) {
...
} else {
DynamicCachedFonts . cacheFont (fontUrl);
}cacheFontStream cacheFontStream используется для загрузки и кэширования шрифта. Этот метод похож на cacheFont , но возвращает один Stream подписки , который издает прогресс загрузки. Загрузка передается на обратный вызов progressListener , который называется каждый раз, когда получается событие DownloadProgress . Это происходит только тогда, когда шрифт фактически загружается с предоставленного URL. Последующие запросы, которые обычно обслуживаются из кэша, не испускают никаких событий прогресса. Если файл шрифта истек, то файл будет загружен снова, для которого события Progress будут переданы на downloadProgressListener .
DynamicCachedFonts . cacheFontStream (
fontUrl,
progressListener : ( DownloadProgress progress) {},
);loadCachedFamilyStream Используйте canLoadFont , чтобы проверить, доступен ли шрифт в кэше.
loadCachedFamilyStream используется для загрузки нескольких шрифтов в двигатель Flutter, в качестве одного семейства шрифтов. Этот метод похож на loadCachedFamily , но возвращает поток.
Когда loadCachedFamilyStream вызывается с одним URL -адресом шрифта, progressListener будет вызван только один раз, когда шрифт был загружен в двигатель.
И когда loadCachedFamilyStream используется для загрузки всей семьи шрифтов, progressListener будет вызоваться один раз для каждого шрифта в семье. В приведенном ниже примере progressListener будет называться 4 раза, один раз после того, как каждый шрифт был загружен в двигатель Flutter.
DynamicCachedFonts . loadCachedFamilyStream (
< String > [
fontFamilyNameBoldUrl,
fontFamilyNameItalicUrl,
fontFamilyNameRegularUrl,
fontFamilyNameThinUrl,
],
fontFamily : fontFamilyName,
progressListener : ( double progress, int totalItems, int downloadedItems) {},
);removeCachedFont Чтобы навсегда удалить шрифт из кэша, используйте removeCachedFont .
Примечание - это не изменяет шрифт сразу до полного приложения.
Наконец, если вы хотите настроить их реализацию, расширить RawDynamicCachedFonts и переопределить статические методы.
У вас есть пользовательский шрифт для загрузки из облачного хранилища Firebase? Перейти за DynamicCachedFonts.fromFirebase конструктором. Он принимает местоположение Google Cloud Storage, которое представляет собой URL, начиная с gs:// . Кроме этого, это похоже на конструктор по умолчанию.
Совет: используйте
DynamicCachedFonts.toggleVerboseLoggingдля регистрации подробных статусов и конфигураций для отладки.
Если вы найдете ошибку, откройте проблему на GitHub или если вам нужна помощь, давайте обсудим обсуждения GitHub!
Чтобы облегчить ситуацию, вы можете использовать Docker Compose для настройки среды Dev. Просто запустите docker compose run linux , чтобы настроить среду Linux Dev или запустить docker compose run windows , чтобы настроить среду Linux Dev.
Вы должны быть на машине Windows, чтобы иметь возможность настроить среду Docker Windows.
Чтобы внести свой вклад в упаковку, разделите хранилище и откройте запрос на вытягивание!