محمل خط بسيط وسهل الاستخدام ولكنه قابل للتخصيص لاستخدام خطوط الويب.
العرض التوضيحي: 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 المقدم. الطلبات اللاحقة ، التي يتم تقديمها عادة من ذاكرة التخزين المؤقت ، لا تنبعث منها أي أحداث تقدم. إذا انتهت صلاحية ملف FONT ، فسيتم تنزيل الملف مرة أخرى والتي سيتم دفق أحداث التقدم من أجل 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 مرات ، مرة واحدة بعد تحميل كل خط في محرك الرفرفة.
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 المقدم. الطلبات اللاحقة ، التي يتم تقديمها عادة من ذاكرة التخزين المؤقت ، لا تنبعث منها أي أحداث تقدم. إذا انتهت صلاحية ملف FONT ، فسيتم تنزيل الملف مرة أخرى والتي سيتم دفق أحداث التقدم من أجل downloadProgressListener .
DynamicCachedFonts . cacheFontStream (
fontUrl,
progressListener : ( DownloadProgress progress) {},
);loadCachedFamilyStream استخدم canLoadFont للتحقق مما إذا كان الخط متاحًا في ذاكرة التخزين المؤقت.
يتم استخدام loadCachedFamilyStream لتحميل خطوط متعددة في محرك الرفرفة ، كعائلة خط واحد. تشبه هذه الطريقة loadCachedFamily ولكنها تُرجع دفقًا.
عندما يتم استدعاء loadCachedFamilyStream بعنوان URL خط واحد ، سيتم استدعاء progressListener مرة واحدة فقط عندما يتم تحميل الخط في المحرك.
وعندما يتم استخدام loadCachedFamilyStream لتحميل عائلة الخط بأكمله ، سيتم استدعاء progressListener مرة واحدة لكل خط في الأسرة. في المثال الوارد أدناه ، سيتم استدعاء progressListener 4 مرات ، مرة واحدة بعد تحميل كل خط في محرك الرفرفة.
DynamicCachedFonts . loadCachedFamilyStream (
< String > [
fontFamilyNameBoldUrl,
fontFamilyNameItalicUrl,
fontFamilyNameRegularUrl,
fontFamilyNameThinUrl,
],
fontFamily : fontFamilyName,
progressListener : ( double progress, int totalItems, int downloadedItems) {},
);removeCachedFont لإزالة خط من ذاكرة التخزين المؤقت بشكل دائم ، استخدم removeCachedFont .
ملاحظة - هذا لا يغير الخط فورًا حتى إعادة تشغيل التطبيق الكامل.
أخيرًا ، إذا كنت ترغب في تخصيص تنفيذها ، وتوسيع RawDynamicCachedFonts وتجاوز الأساليب الثابتة.
هل لديك خط مخصص للتحميل من Firebase Cloud Storage؟ اذهب إلى DynamicCachedFonts.fromFirebase Constructor! إنه يقبل موقع Google Cloud Storage وهو عنوان URL يبدأ بـ gs:// . بخلاف ذلك ، فهو يشبه المُنشئ الافتراضي.
نصيحة: استخدم
DynamicCachedFonts.toggleVerboseLoggingلتسجيل الحالات والتكوينات التفصيلية للتصحيح.
إذا وجدت خطأ ، فيرجى فتح مشكلة على Github أو إذا كنت بحاجة إلى أي مساعدة ، فلنناقش في مناقشات GitHub!
لتسهيل الأمور ، يمكنك استخدام Docker Compens لإعداد بيئة DEV. ما عليك سوى تشغيل docker compose run linux لإعداد بيئة Dev Linux أو تشغيل docker compose run windows لإعداد بيئة Dev Linux.
يجب أن تكون على جهاز Windows لتتمكن من إعداد بيئة Windows Docker.
للمساهمة في الحزمة ، شوك المستودع وفتح طلب سحب!