动态缓存字体
一个可定制的Flutter动态字体加载器,支持缓存。也支持Firebase Cloud Storage!

简介
动态缓存字体允许您从任何URL动态加载字体并进行缓存。这样,您可以减小包大小,并在需要时加载字体。
动态加载字体的另一个优点是,您现在可以轻松地为用户提供选择应用字体的选项。这提供了更高的定制性。
缓存是额外的性能升级,因为字体只会下载一次并多次使用,从而减少了网络和电池的使用。
开始使用
要使用该包,请在pubspec.yaml文件中将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仅在调用load()后应用。
多次调用
load()会抛出StateError
如果您需要加载多个不同粗细和样式的字体,作为单个字体系列,该怎么办?为此,您可以使用DynamicCachedFonts.family构造函数。
它接受一个指向同一字体系列中不同字体的URL列表,作为urls。
DynamicCachedFonts.family(
urls: <String>[
fontFamilyNameBoldUrl,
fontFamilyNameItalicUrl,
fontFamilyNameRegularUrl,
fontFamilyNameThinUrl,
],
fontFamily: fontFamilyName,
);

如果您需要更多控制,请使用静态方法!
cacheFont
onPressed: () {
DynamicCachedFonts.cacheFont(fontUrl);
},
child: const Text('Download font'),
您也可以在此处传入maxCacheObjects和cacheStalePeriod。
canLoadFont, loadCachedFont, loadCachedFamily
canLoadFont用于检查字体是否在缓存中可用。它通常与加载器结合使用。
首先,检查字体是否已在缓存中。如果在,则加载字体。
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);
}
removeCachedFont
要从缓存中永久删除字体,请使用removeCachedFont。
注意-在应用完全重启之前,这不会立即更改字体。

最后,如果您想自定义实现,可以扩展RawDynamicCachedFonts并覆盖静态方法。
想从Firebase Cloud Storage加载自定义字体?选择DynamicCachedFonts.fromFirebase构造函数!它接受一个以gs://开头的Google Cloud Storage位置URL。除此之外,它与默认构造函数类似。
提示:除了
load()之外,所有方法都有一个名为verboseLog的参数,用于记录详细的状态和配置以进行调试。
