شرح تخزين اي نوع بيانات من الانترنت في cache داخل تطبيقك في Flutter
في هذه المقالة سوف نشارك معكم طريقة لتخزين البيانات التي يتم الحصول عليها من الانترنت سواء كنت تستخدم firebase او api فيمكنك من خلال هذه المكتبة تخزين البيانات التي ترغب بها بمختلفف الاشكال في الذاكرة المؤقته في جهازك حتى تتمكن من فتحها في حالة عدم وجود الانترنت بسهوله , يوجد اكثر من طريقة تستطيع من خلالها تنفيذ هذه العملية ولكن هذه الطريقة تعد الابسط حيث انها عباره عن مكتبة كل ما تحتاجه فقط هو الرابط وبعدها سوف يتم التعامل معه وايضا يمكنك وضع مده معينه للتحميل وبعدها يتم حذف الملف من الذاكرة المؤقته من جهاز المستخدم .
Native ARM هي إحدى ميزات Flutter المفيدة للشركات الناشئة والشركات التقنية. يمكّنك من تنفيذ فكرتك وجني ثمارها الكاملة لمشاريعك اللاحقة. سيجد المستخدمون أنه من الأسهل قراءة مواد الويب في تطبيقات الهاتف بفضل هذه الخصائص. يسهل Flutter أيضًا تثبيت التطبيق والتنقل. ثم تبين أن أحدث ترقية لـ Dart.2.2 قد غيرت قواعد اللعبة. تحسين أداء التعليمات البرمجية المترجمة AOT. يتوفر أيضًا عدد من فئات المجموعات في مكتبة dart لنمذجة الخرائط والقوائم ومجموعات الكائنات. تتيح الميزة إمكانية متابعة المعاملة في تطبيقك عندما يبدأ المستخدم واحدة في متجر التطبيقات.
add package :
media_cache_manager: ^0.0.2+1
better_player: ^0.0.83
How to cache any medi in Flutter
يمكنك استخدام الاكواد التاليه حتى تستطيع استخدام المكتبة بسهوله وهذه الاكواد توضح العملية التي تتم خلال تحميل الملفات وتثبيتها في الذاكرة المؤقته في جهاز المستخدم حتى يتمكن للوصول اليها في اي وقت , في الجزء الاول قمنا بتحميل فيديو ولهذا يمكنك اعطاء رابط الفيديو للمكتبة وفي حالة التحميل سوف يظهر ايقونه للانتظار وعند الانتهاء سوف يكون جاهز لكي تشغله من خلال مكتبة اخرى تحصل على البيانات من الجهاز الخاص بك وتقوم بعرضها بدون مشاكل وفي الكود الاخر نفس الطريقة ولكن كانت على صورة وللحصول على صورة من داخل الجهاز يمكنك استخدام file حتى تتمكن من الوصول الى المسار وعرض ما بداخله بدون مشاكل .
code.dart
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await DownloadCacheManager.setExpireDate(daysToExpire: 5);
runApp(const MyApp());
}
// ------------ code
class CacheUrls extends StatefulWidget {
const CacheUrls({Key? key}) : super(key: key);
@override
State<CacheUrls> createState() => _CacheUrlsState();
}
class _CacheUrlsState extends State<CacheUrls> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
DownloadMediaBuilder(
url: '###VIDEO',
builder: (context, snapshot) {
if (snapshot.status == DownloadMediaStatus.loading) {
return LinearProgressIndicator(value: snapshot.progress);
}
if (snapshot.status == DownloadMediaStatus.success) {
return BetterPlayer.file(snapshot.filePath!);
}
return const Text('Error!');
},
),
SizedBox(height: 20),
DownloadMediaBuilder(
url: '##IMG',
builder: (context, snapshot) {
if (snapshot.status == DownloadMediaStatus.success) {
return Image.file(File(snapshot.filePath!),height: 200,width: 200,fit: BoxFit.cover,);
}
return null;
},
)
],
),
),
);
}
}