ตัวอักษรแบบอักษรที่ใช้งานง่ายและใช้งานง่ายเพื่อใช้งานแบบอักษรเว็บ
ตัวอย่าง: 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 . Family Constructor
ยอมรับรายการ URL ชี้ไปที่แบบอักษรที่แตกต่างกันในตระกูลเดียวกันเช่น urls
DynamicCachedFonts . family (
urls : < String > [
fontFamilyNameBoldUrl,
fontFamilyNameItalicUrl,
fontFamilyNameRegularUrl,
fontFamilyNameThinUrl,
],
fontFamily : fontFamilyName,
); แพ็คเกจยังรองรับการโหลดแบบอักษรเป็น Stream ! loadStream ส่งคืน สตรีมการสมัครสมาชิกครั้งเดียว ซึ่งปล่อยไฟล์ตัวอักษร
loadStream ยอมรับการโทรกลับ, downloadProgressListener ที่เรียกว่าทุกครั้งที่ได้รับเหตุการณ์ DownloadProgress สิ่งนี้จะเกิดขึ้นเฉพาะเมื่อตัวอักษรถูกดาวน์โหลดจาก URL ที่ให้ไว้ คำขอที่ตามมาซึ่งมักจะให้บริการจากแคชอย่าปล่อยเหตุการณ์ความคืบหน้าใด ๆ หากไฟล์ตัวอักษรหมดอายุไฟล์จะถูกดาวน์โหลดอีกครั้งซึ่งเหตุการณ์ความคืบหน้าจะถูกสตรีมไปยัง 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 ถูกใช้เพื่อโหลดตระกูล Font ทั้งหมด 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 ที่ให้ไว้ คำขอที่ตามมาซึ่งมักจะให้บริการจากแคชอย่าปล่อยเหตุการณ์ความคืบหน้าใด ๆ หากไฟล์ตัวอักษรหมดอายุไฟล์จะถูกดาวน์โหลดอีกครั้งซึ่งเหตุการณ์ความคืบหน้าจะถูกสตรีมไปยัง downloadProgressListener
DynamicCachedFonts . cacheFontStream (
fontUrl,
progressListener : ( DownloadProgress progress) {},
);loadCachedFamilyStream ใช้ canLoadFont เพื่อตรวจสอบว่าฟอนต์มีอยู่ในแคชหรือไม่
loadCachedFamilyStream ใช้ในการโหลดแบบอักษรหลายตัวลงในเครื่องยนต์ Flutter เป็นตระกูลตัวอักษรเดียว วิธีนี้คล้ายกับ loadCachedFamily แต่ส่งคืนสตรีม
เมื่อ loadCachedFamilyStream ถูกเรียกด้วย URL แบบอักษรเดียว progressListener จะถูกเรียกเพียงครั้งเดียวเมื่อตัวอักษรถูกโหลดลงในเครื่องยนต์
และเมื่อ loadCachedFamilyStream ถูกใช้เพื่อโหลดตระกูล Font ทั้งหมด 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 Constructor! ยอมรับตำแหน่งที่เก็บข้อมูลของ Google Cloud ซึ่งเป็น URL ที่เริ่มต้นด้วย gs:// นอกเหนือจากนั้นมันคล้ายกับตัวสร้างเริ่มต้น
เคล็ดลับ: ใช้
DynamicCachedFonts.toggleVerboseLoggingเพื่อบันทึกสถานะโดยละเอียดและการกำหนดค่าสำหรับการดีบัก
หากคุณพบข้อผิดพลาดโปรดเปิดปัญหาเกี่ยวกับ GitHub หรือหากคุณต้องการความช่วยเหลือใด ๆ ให้พูดคุยเกี่ยวกับการอภิปรายของ GitHub!
เพื่อให้สิ่งต่าง ๆ ง่ายขึ้นคุณสามารถใช้ Docker Compose เพื่อตั้งค่าสภาพแวดล้อม dev เพียงเรียกใช้ docker compose run linux เพื่อตั้งค่าสภาพแวดล้อม linux dev หรือเรียกใช้ docker compose run windows เพื่อตั้งค่าสภาพแวดล้อม Linux Dev
คุณต้องอยู่บนเครื่อง Windows เพื่อให้สามารถตั้งค่าสภาพแวดล้อม Windows Docker
หากต้องการมีส่วนร่วมในแพ็คเกจให้แยกที่เก็บและเปิดคำขอดึง!