تعتبر حزمة path_provider واحدة من الحزم الأساسية والهامة في بيئة تطوير تطبيقات Flutter. تهدف هذه الحزمة إلى توفير واجهة سهلة الاستخدام للوصول إلى المسارات المختلفة على جهاز المستخدم، مثل المسارات المؤقتة والمسارات الدائمة ومسارات التخزين الخارجي. بفضل حزمة path_provider، يمكن للمطورين الوصول بسهولة إلى أماكن التخزين المحلية والخارجية والمشتركة على الجهاز بطريقة متوافقة مع مختلف أنظمة التشغيل.
أهمية حزمة path_provider:
تعد حزمة path_provider أداة قوية في Flutter تهدف إلى توفير واجهة برمجة التطبيقات للوصول إلى المسارات المختلفة على جهاز المستخدم. توفر الحزمة وظائف للوصول إلى المسارات الخاصة بالملفات المؤقتة والملفات الدائمة ومسارات التخزين الخارجي. بفضل هذه الحزمة، يمكن للمطورين الاستفادة من إمكانيات التخزين المحلي والخارجي لتخزين واسترجاع الملفات بطريقة فعالة وموثوقة.
“اقرأ أيضاً: شرح استخدام ويدجت TextFormField في فلاتر“
خصائص حزمة path_provider:
تحتوي حزمة path_provider على عدد من الخصائص الرئيسية التي يمكن استخدامها في تطبيقات Flutter. فيما يلي شرح لكل خاصية مع بعض الأكواد التوضيحية:
1. getTemporaryDirectory():
تستخدم هذه الخاصية للوصول إلى المسار الذي يتم فيه تخزين الملفات المؤقتة على الجهاز. يمكن استخدام هذا المسار لتخزين الملفات التي تحتاج إلى استخدامها لفترة مؤقتة فقط وتُحذف تلقائيًا بعد ذلك.
استخدام getTemporaryDirectory() يتطلب استيراد حزمة path_provider واستخدام كائن من نوع Directory للوصول إلى المسار كما يلي:
import 'dart:io'; import 'package:path_provider/path_provider.dart'; void main() async { Directory tempDir = await getTemporaryDirectory(); String tempPath = tempDir.path; print('Temporary Directory: $tempPath'); }
2. getApplicationSupportDirectory():
تستخدم هذه الخاصية للوصول إلى المسار الذي يتم فيه تخزين الملفات الداعمة (Support) المرتبطة بالتطبيق على الجهاز. يمكن استخدام هذا المسار لتخزين الملفات التي تحتاج إلى الاحتفاظ بها في مجلد الدعم، مثل الملفات المؤقتة أو السجلات.
استخدام getApplicationSupportDirectory() يتطلب استيراد حزمة path_provider واستخدام كائن من نوع Directory للوصول إلى المسار كما يلي:
import 'dart:io'; import 'package:path_provider/path_provider.dart'; void main() async { Directory appSubDir = await getApplicationSupportDirectory(); String appSubPath = appSubDir.path; print('Application Support Directory: $appSubPath'); }
3. getLibraryDirectory():
تستخدم هذه الخاصية للوصول إلى المسار الذي يتم فيه تخزين الملفات المكتبية (Library) المرتبطة بالتطبيق على الجهاز. يمكن استخدام هذا المسار لتخزين الملفات التي تحتاج إلى الاحتفاظ بها في مجلد المكتبة، مثل قواعد البيانات أو الملفات المؤقتة.
استخدام getLibraryDirectory() يتطلب استيراد حزمة path_provider واستخدام كائن من نوع Directory للوصول إلى المسار كما يلي:
import 'dart:io'; import 'package:path_provider/path_provider.dart'; void main() async { // getLibraryDirectory is not supported on Android Directory libraryDir = await getLibraryDirectory(); String libraryPath = libraryDir.path; print('Library Directory: $libraryPath'); }
4. getApplicationDocumentsDirectory():
تستخدم للوصول إلى المسار الذي يتم فيه تخزين مستندات التطبيق على الجهاز. يمثل هذا المسار المجلد الافتراضي الذي يتم فيه حفظ الملفات المرتبطة بالتطبيق.
استخدام getApplicationCacheDirectory() يتطلب استيراد حزمة path_provider واستخدام كائن من نوع Directory للوصول إلى المسار كما يلي:
import 'dart:io'; import 'package:path_provider/path_provider.dart'; void main() async { Directory appDocDir = await getApplicationDocumentsDirectory(); String appDocPath = appDocDir.path; print('Application Documents Directory: $appDocPath'); }
“اقرأ أيضاً: شرح استخدام SharedPreferences في Flutter“
5. getApplicationCacheDirectory():
تستخدم هذه الخاصية للوصول إلى المسار الذي يتم فيه تخزين ذاكرة التخزين المؤقتة المرتبطة بالتطبيق على الجهاز. يمكن استخدام هذا المسار لتخزين الملفات المؤقتة التي يحتاج إليها التطبيق لفترة قصيرة من الوقت. يتم حذف الملفات الموجودة في هذا المسار تلقائيًا بواسطة النظام بشكل دوري.
استخدام getApplicationCacheDirectory() يتطلب استيراد حزمة path_provider واستخدام كائن من نوع Directory للوصول إلى المسار كما يلي:
import 'dart:io'; import 'package:path_provider/path_provider.dart'; void main() async { Directory appCacheDir = await getApplicationCacheDirectory(); String appCachePath = appCacheDir.path; print('Application Cache Directory: $appCachePath'); }
6. getExternalStorageDirectory():
تستخدم هذه الخاصية للوصول إلى المسار الجذر للتخزين الخارجي على الجهاز. يتم تمثيل التخزين الخارجي على الجهاز بواسطة مجلدات مثل بطاقة SD، إذا كانت متاحة على الجهاز. يمكن استخدام هذا المسار للوصول إلى الملفات الموجودة في التخزين الخارجي والتعامل معها.
استخدام getExternalStorageDirectory() يتطلب استيراد حزمة path_provider واستخدام كائن من نوع Directory للوصول إلى المسار كما يلي:
import 'dart:io'; import 'package:path_provider/path_provider.dart'; void main() async { Directory? extDir = await getExternalStorageDirectory(); String extPath = extDir!.path; print('External Storage Directory: $extPath'); }
7. getExternalStorageDirectories():
تستخدم هذه الخاصية للوصول إلى قائمة بجميع المسارات المتاحة للتخزين الخارجي على الجهاز. يمكن استخدام هذه القائمة للوصول إلى الملفات الموجودة في مجلدات التخزين الخارجي المختلفة، مثل بطاقات SD المتعددة إذا كانت متاحة.
استخدام getExternalStorageDirectories() يتطلب استيراد حزمة path_provider واستخدام قائمة من أنواع Directory للوصول إلى المسارات كما يلي:
import 'dart:io'; import 'package:path_provider/path_provider.dart'; void main() async { List<Directory>? externalStorageDirs = await getExternalStorageDirectories(); for (Directory dir in externalStorageDirs!) { String externalStoragePath = dir.path; print('External Storage Directory: $externalStoragePath'); } }
8. getExternalCacheDirectories():
تستخدم هذه الخاصية للوصول إلى قائمة بجميع المسارات المتاحة للذاكرة المؤقتة الخارجية على الجهاز. يمكن استخدام هذه القائمة للوصول إلى الملفات الموجودة في مجلدات الذاكرة المؤقتة الخارجية المختلفة.
استخدام getExternalCacheDirectories() يتطلب استيراد حزمة path_provider واستخدام قائمة من أنواع Directory للوصول إلى المسارات كما يلي:
import 'dart:io'; import 'package:path_provider/path_provider.dart'; void main() async { List<Directory>? externalCacheDirs = await getExternalCacheDirectories(); for (Directory dir in externalCacheDirs!) { String externalCachePath = dir.path; print('External Cache Directory: $externalCachePath'); } }
9. getDownloadsDirectory():
تستخدم هذه الخاصية للوصول إلى المسار الذي يتم فيه تخزين مجلد التنزيلات على الجهاز. يمثل هذا المسار المجلد الافتراضي الذي يتم فيه حفظ الملفات التي تم تنزيلها من الإنترنت أو من التطبيقات الأخرى.
استخدام getDownloadsDirectory() يتطلب استيراد حزمة path_provider واستخدام كائن من نوع Directory للوصول إلى المسار كما يلي:
import 'dart:io'; import 'package:path_provider/path_provider.dart'; void main() async { Directory? downloadsDir = await getDownloadsDirectory(); String downloadsPath = downloadsDir!.path; print('Downloads Directory Path: $downloadsPath'); }
“اقرأ أيضاً: شرح استخدام ويدجت CircleAvatar في فلاتر“
مثال كامل لاستخدام حزمة path_provider:
لنلقِ نظرة على مثال يوضح كيفية استخدام حزمة path_provider في تطبيق Flutter للوصول إلى المسارات المختلفة.
أولا قم بإضافة الحزمة إلى ملف pubspec.yaml الخاص بتطبيقك:
dependencies: flutter: sdk: flutter path_provider: ^2.1.1
ثم قم باستدعاء الحزمة عن طريق تشغيل الأمر flutter pub get
في مجلد مشروعك. الآن يمكننا استخدام حزمة path_provider في التطبيق. قم بإنشاء ملف main.dart واستخدم الكود التالي:
import 'dart:io'; import 'package:flutter/material.dart'; import 'package:path_provider/path_provider.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( title: 'Path Provider Example', home: Scaffold( appBar: AppBar( title: const Text('Path Provider Example'), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ //1 ElevatedButton( onPressed: () async { Directory tempDir = await getTemporaryDirectory(); String tempPath = tempDir.path; print('Temporary Directory: $tempPath'); }, child: const Text('Get Temporary Directory'), ), //2 ElevatedButton( onPressed: () async { Directory appSubDir = await getApplicationSupportDirectory(); String appSubPath = appSubDir.path; print('Application Support Directory: $appSubPath'); }, child: const Text('Get Application Support Directory'), ), //3 // getLibraryDirectory is not supported on Android ElevatedButton( onPressed: () async { Directory libraryDir = await getLibraryDirectory(); String libraryPath = libraryDir.path; print('Library Directory: $libraryPath'); }, child: const Text('Get Library Directory Directory'), ), //4 ElevatedButton( onPressed: () async { Directory appDocDir = await getApplicationDocumentsDirectory(); String appDocPath = appDocDir.path; print('Application Documents Directory: $appDocPath'); }, child: const Text('Get Application Documents Directory'), ), //5 ElevatedButton( onPressed: () async { Directory appCacheDir = await getApplicationCacheDirectory(); String appCachePath = appCacheDir.path; print('Application Cache Directory: $appCachePath'); }, child: const Text('Get Application Cache Directory'), ), //6 ElevatedButton( onPressed: () async { Directory? extDir = await getExternalStorageDirectory(); String extPath = extDir!.path; print('External Storage Directory: $extPath'); }, child: const Text('Get External Storage Directory'), ), //7 ElevatedButton( onPressed: () async { List<Directory>? externalStorageDirs = await getExternalStorageDirectories(); for (Directory dir in externalStorageDirs!) { String externalStoragePath = dir.path; print('External Storage Directory: $externalStoragePath'); } }, child: const Text('Get External Storage Directories'), ), //8 ElevatedButton( onPressed: () async { List<Directory>? externalCacheDirs = await getExternalCacheDirectories(); for (Directory dir in externalCacheDirs!) { String externalCachePath = dir.path; print('External Cache Directory: $externalCachePath'); } }, child: const Text('Get Path Of External Cache Directories'), ), //9 ElevatedButton( onPressed: () async { Directory? downloadsDir = await getDownloadsDirectory(); String downloadsPath = downloadsDir!.path; print('Downloads Directory Path: $downloadsPath'); }, child: const Text('Get Downloads Directory'), ), ], ), ), ), ); } }
في هذا المثال، قمنا بإنشاء تطبيق يحتوي على عدة أزرار. عند النقر على كل زر، سيتم استدعاء الخاصية المناسبة من حزمة path_provider وطباعة المسار المسترد في وحدة التحكم.
“اقرأ أيضاً: شرح استخدام FlutterToast في Flutter“
تعد حزمة path_provider أداة قوية ومهمة في تطوير تطبيقات Flutter. توفر الحزمة واجهة سهلة الاستخدام للوصول إلى المسارات المختلفة على جهاز المستخدم، مما يتيح للمطورين تخزين واسترجاع الملفات بطريقة فعالة وموثوقة. من خلال الاستفادة من خصائص مثل getTemporaryDirectory()، getApplicationDocumentsDirectory()، getExternalStorageDirectory() وغيرهم.