Flutter动态缓存字体插件dynamic_cached_fonts的使用
Flutter动态缓存字体插件dynamic_cached_fonts的使用
Dynamic Cached Fonts
Dynamic Cached Fonts 是一个简单易用且可定制的字体加载器,用于加载网络字体。
🚀 演示
👋 介绍
Dynamic Cached Fonts 允许您从任何 URL 动态加载字体并缓存它。这样可以减少应用包大小,并在需要时加载字体。
另一个优势是您可以轻松提供用户选择应用字体的选项,从而实现更高的自定义程度。缓存是一个性能提升,因为字体只会下载一次并多次使用,减少了网络和电池消耗。
🏃 开始使用
要使用此插件,请将 dynamic_cached_fonts
添加为依赖项。
dependencies:
dynamic_cached_fonts: ^latest_version
⚒️ 使用方法
按需加载字体
页面加载时加载字体
@override
void initState() {
final DynamicCachedFonts dynamicCachedFont = DynamicCachedFonts(
fontFamily: fontFamilyName, // 字体家族名称
url: fontUrl, // 字体文件的URL (.ttf 或 .otf 文件)
);
dynamicCachedFont.load(); // 下载、缓存并加载字体
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'),
),
自定义缓存设置
DynamicCachedFonts(
fontFamily: fontFamilyName,
url: fontUrl,
maxCacheObjects: 150, // 设置最大缓存对象数量
cacheStalePeriod: const Duration(days: 100), // 设置缓存过期时间
);
加载多个字体(同一家族)
DynamicCachedFonts.family(
urls: <String>[
fontFamilyNameBoldUrl,
fontFamilyNameItalicUrl,
fontFamilyNameRegularUrl,
fontFamilyNameThinUrl,
],
fontFamily: fontFamilyName,
);
使用 Stream 加载字体
final DynamicCachedFonts dynamicCachedFont = DynamicCachedFonts(
fontFamily: fontFamilyName,
url: fontUrl,
);
dynamicCachedFont.loadStream(
itemCountProgressListener: (double progress, int totalItems, int downloadedItems) {},
downloadProgressListener: (DownloadProgress progress) {},
);
静态方法
缓存字体
onPressed: () {
DynamicCachedFonts.cacheFont(fontUrl);
},
child: const Text('Download font'),
检查字体是否已缓存
if(DynamicCachedFonts.canLoadFont(fontUrl)) {
DynamicCachedFonts.loadCachedFont(
fontUrl,
fontFamily: fontFamilyName,
);
}
删除缓存字体
DynamicCachedFonts.removeCachedFont(fontUrl);
Firebase Cloud Storage 加载字体
DynamicCachedFonts.fromFirebase(
fontFamily: fontFamilyName,
url: 'gs://your-bucket-name/path/to/font.ttf',
);
完整示例
import 'package:dynamic_cached_fonts/dynamic_cached_fonts.dart';
import 'package:flutter/material.dart';
void main() {
DynamicCachedFonts.toggleVerboseLogging(true);
runApp(
MaterialApp(
title: 'Dynamic Cached Fonts Demo',
home: const DynamicCachedFontsDemo(),
darkTheme: ThemeData.dark(),
),
);
}
class DynamicCachedFontsDemo extends StatefulWidget {
const DynamicCachedFontsDemo({Key? key}) : super(key: key);
@override
State<DynamicCachedFontsDemo> createState() => _DynamicCachedFontsDemoState();
}
class _DynamicCachedFontsDemoState extends State<DynamicCachedFontsDemo> {
final String fontFamilyName = 'CascadiaCode';
final String fontUrl = 'https://example.com/path/to/CascadiaCode.ttf';
@override
void initState() {
final DynamicCachedFonts dynamicCachedFont = DynamicCachedFonts(
fontFamily: fontFamilyName,
url: fontUrl,
);
dynamicCachedFont.load();
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Dynamic Cached Fonts Demo'),
),
body: Center(
child: Text(
'The text is being displayed in $fontFamilyName which is being dynamically loaded and cached',
style: TextStyle(fontFamily: fontFamilyName),
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
// 这里可以添加更多逻辑,例如加载其他字体或导航到其他页面
},
child: const Icon(Icons.navigate_next),
),
);
}
}
🐛 Bug 报告与帮助
如果您发现 bug,请在 GitHub 上提交问题。如果您需要帮助,可以在 GitHub Discussions 上讨论!
💁 贡献
欢迎贡献代码!请 fork 仓库并提交 pull request。更多信息请参考 贡献指南。
希望这些信息对您有所帮助!如果有任何问题,欢迎随时提问。
更多关于Flutter动态缓存字体插件dynamic_cached_fonts的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter动态缓存字体插件dynamic_cached_fonts的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用dynamic_cached_fonts
插件来动态缓存字体的示例代码。dynamic_cached_fonts
允许你在运行时下载和缓存字体,而无需在构建时将它们包含在应用程序中。
1. 添加依赖
首先,你需要在pubspec.yaml
文件中添加dynamic_cached_fonts
的依赖:
dependencies:
flutter:
sdk: flutter
dynamic_cached_fonts: ^x.y.z # 请使用最新版本号替换 x.y.z
然后运行flutter pub get
来安装依赖。
2. 初始化插件
在你的应用程序的入口点(通常是main.dart
)中,初始化DynamicCachedFonts
插件:
import 'package:flutter/material.dart';
import 'package:dynamic_cached_fonts/dynamic_cached_fonts.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
void initState() {
super.initState();
// 初始化插件
DynamicCachedFonts.init();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Dynamic Cached Fonts Demo'),
),
body: Center(
child: TextWithDynamicFont(),
),
);
}
}
3. 使用动态字体
接下来,我们创建一个TextWithDynamicFont
组件,它将从网络下载并缓存字体,然后使用该字体显示文本。
import 'package:flutter/material.dart';
import 'package:dynamic_cached_fonts/dynamic_cached_fonts.dart';
class TextWithDynamicFont extends StatefulWidget {
@override
_TextWithDynamicFontState createState() => _TextWithDynamicFontState();
}
class _TextWithDynamicFontState extends State<TextWithDynamicFont> {
String? _fontFamily;
@override
void initState() {
super.initState();
// 下载并缓存字体
_loadFont();
}
Future<void> _loadFont() async {
try {
// 替换为实际的字体URL
String fontUrl = 'https://example.com/path/to/your/font.ttf';
String fontFamily = await DynamicCachedFonts.loadFont(fontUrl);
setState(() {
_fontFamily = fontFamily;
});
} catch (e) {
print('Error loading font: $e');
}
}
@override
Widget build(BuildContext context) {
return Text(
'Hello, this text is using a dynamically cached font!',
style: TextStyle(
fontFamily: _fontFamily, // 使用下载的字体
fontSize: 24,
),
);
}
}
4. 运行应用
确保你的设备或模拟器已经连接到开发环境,然后运行应用:
flutter run
你应该能够看到文本使用了从网络下载并缓存的字体。
注意事项
- 确保你使用的字体URL是有效的,并且字体文件是
.ttf
或.otf
格式。 DynamicCachedFonts.loadFont
方法是异步的,因此需要在UI线程上正确管理状态更新。- 如果字体下载失败,请检查URL是否正确,以及设备是否有网络连接。
这样,你就成功地在Flutter应用中使用dynamic_cached_fonts
插件来动态缓存字体了。