- بواسطة x32x01 ||
لو شغال تطوير تطبيقات موبايل باستخدام Flutter، فالموضوع ده مهم جدًا ليك…
زمان كنا بنستخدم طرق تقليدية لرفع الصور زي باكدج
📌 الحقيقة ببساطة: طلب صلاحيات الصور بقى خطر ممكن يسبب رفض التطبيق من Google Play.
خليني أوضحلك الصورة كاملة 👇
الباكدج دي بتعتمد على حاجة اسمها Android Photo Picker (واجهة النظام الرسمية لاختيار الصور).
📌 لأنهم ببساطة بيعتمدوا على نفس الفكرة: استخدام واجهة النظام بدل الوصول المباشر للملفات
تقدر تستخدم الطريقة الحديثة (مفهوميًا):
📌 النتيجة:
ولو لسه بتستخدم الطريقة القديمة… ممكن تكون بتغامر فعلًا برفض تطبيقك 😅
زمان كنا بنستخدم طرق تقليدية لرفع الصور زي باكدج
image_picker، لكن دلوقتي الموضوع بقى مختلف تمامًا بسبب تحديثات سياسات Google.📌 الحقيقة ببساطة: طلب صلاحيات الصور بقى خطر ممكن يسبب رفض التطبيق من Google Play.
خليني أوضحلك الصورة كاملة 👇
ليه طلب صلاحيات الصور بقى مشكلة؟ 🤔
الطريقة القديمة كانت بتعتمد على إنك تطلب صلاحيات زي:READ_EXTERNAL_STORAGE- أو الوصول الكامل للملفات
- لازم تبرر سبب طلب الصلاحيات
- لازم يكون عندك Use Case واضح
- أي استخدام غير مبرر = رفض التطبيق ❌
المشكلة في الطريقة التقليدية (image_picker) ❌
باكدجimage_picker كانت الحل الأشهر، لكنها دلوقتي فيها مشاكل:- بتطلب صلاحيات من المستخدم
- بتفتح معرض خاص جوه التطبيق
- ممكن تتعارض مع سياسات Google الحديثة
- تجربة المستخدم مش الأفضل
الحل الجديد: system_asset_picker 🚀
ظهر حل ذكي جدًا اسمه: 👈system_asset_pickerالباكدج دي بتعتمد على حاجة اسمها Android Photo Picker (واجهة النظام الرسمية لاختيار الصور).
يعني إيه الكلام ده؟ 👇
- المستخدم بيختار الصورة من واجهة الموبايل نفسها
- انت بتستلم الصورة مباشرة
- من غير أي Permissions! 🔥
الفرق بين الطريقة القديمة والجديدة ⚖️
❌ الطريقة التقليدية
- تحتاج Permissions
- مخاطرة رفض التطبيق
- UI مخصص داخل التطبيق
- إعدادات أكتر وتعقيد
✅ الطريقة الحديثة
- بدون أي صلاحيات
- استخدام واجهة النظام (Native)
- متوافقة مع سياسات Google
- تجربة مستخدم أفضل
ليه تطبيقات كبيرة بقت تستخدم الطريقة دي؟ 😎
لو لاحظت، تطبيقات زي:- ChatGPT
- Google Gemini
📌 لأنهم ببساطة بيعتمدوا على نفس الفكرة: استخدام واجهة النظام بدل الوصول المباشر للملفات
مثال عملي في Flutter 💻
بدل ما تستخدم الطريقة القديمة: Dart:
final pickedFile = await ImagePicker().pickImage(source: ImageSource.gallery); Dart:
final result = await SystemAssetPicker.pick(); - كود أبسط
- أمان أعلى
- متوافق مع السياسات
ملاحظات مهمة قبل ما تستخدم الباكدج ⚠️
- الباكدج حاليًا Android فقط
- مش مناسبة لو محتاج تبني Custom Gallery بالكامل
- الأفضل للاستخدامات البسيطة والسريعة
إمتى تستخدم كل طريقة؟ 🤓
استخدم system_asset_picker لو:
- عايز ترفع صور/فيديو بس
- عايز تتجنب أي مشاكل مع Google
- عايز تجربة مستخدم بسيطة وسريعة
استخدم image_picker لو:
- محتاج تحكم كامل في المعرض
- بتبني تجربة مخصصة جدًا
الخلاصة 💡
📌 مستقبل التعامل مع الصور في التطبيقات رايح ناحية: عدم طلب صلاحيات + استخدام واجهة النظامولو لسه بتستخدم الطريقة القديمة… ممكن تكون بتغامر فعلًا برفض تطبيقك 😅