حل نهائي لمشكلة مكتبات Flutter التي تعمل على نظام واحد فقط
في عالم تطوير تطبيقات Flutter، يعتمد الكثير من المطورين على مكتبات خارجية جاهزة لتسريع عملية التطوير، خصوصًا المكتبات الموجودة على GitHub. لكن أحيانًا تظهر مشكلة مزعجة عند تشغيل المشروع أو بنائه على منصة معينة، حيث تعمل المكتبة على نظام تشغيل واحد فقط، مثل Android، بينما تسبب أخطاء عند محاولة تشغيل المشروع على iOS أو macOS.
هذه المشكلة شائعة جدًا مع مكتبات Flutter Plugins، لأن كل مكتبة قد تحدد المنصات التي تدعمها داخل ملف الإعدادات الخاص بها. فإذا كانت المكتبة تدعم Android فقط، وحاولت بناء المشروع على iOS، فقد تظهر لك أخطاء متعلقة بعدم دعم المنصة أو عدم وجود تنفيذ مناسب لها.
سبب مشكلة مكتبات Flutter التي تعمل على نظام واحد فقط
عند تثبيت مكتبة Flutter من GitHub عن طريق ملف pubspec.yaml، يقوم Flutter بتنزيل نسخة من المكتبة وتخزينها داخل مجلد الكاش الخاص به.
في أجهزة macOS، غالبًا يتم حفظ مكتبات GitHub داخل المسار التالي:
/Users/imac/.pub-cache/gitداخل هذا المجلد ستجد المكتبات التي تم تحميلها من GitHub. كل مكتبة تحتوي عادةً على ملف إعدادات رئيسي باسم:
pubspec.yamlهذا الملف يحدد معلومات المكتبة، والاعتمادات الخاصة بها، وكذلك المنصات التي يدعمها الـ Plugin.
فحص منصات التشغيل المدعومة داخل pubspec.yaml
لحل المشكلة، افتح ملف pubspec.yaml الخاص بالمكتبة التي تسبب الخطأ، ثم ابحث عن القسم التالي:
flutter:
plugin:
platforms:ستجد بداخله المنصات التي تدعمها المكتبة، مثل Android أو iOS أو macOS أو Windows.
مثال:
flutter:
plugin:
platforms:
android:
package: io.nearpay.flutter.plugin
pluginClass: NearpayPlugin
# ios:
# pluginClass: NearpayPluginفي هذا المثال نلاحظ أن منصة Android مفعلة، بينما منصة iOS معطلة لأنها مسبوقة بعلامة التعليق #.
هذا يعني أن المكتبة سيتم التعامل معها كمكتبة تدعم Android فقط، ولن يحاول Flutter تضمينها أو تشغيلها على iOS.
حل مشكلة تشغيل مكتبة Flutter على منصة غير مدعومة
إذا كانت المكتبة تسبب أخطاء عند بناء المشروع على منصة معينة، مثل iOS أو macOS، وأنت لا تحتاج إلى استخدامها على هذه المنصة، فيمكنك تعطيل هذه المنصة من ملف pubspec.yaml الخاص بالمكتبة.
على سبيل المثال، إذا كانت المشكلة تحدث بسبب iOS، يمكنك تعطيل قسم iOS بإضافة علامة # قبل الأسطر الخاصة به:
flutter:
plugin:
platforms:
android:
package: io.nearpay.flutter.plugin
pluginClass: NearpayPlugin
# ios:
# pluginClass: NearpayPluginبهذه الطريقة، لن يحاول Flutter تسجيل المكتبة كـ Plugin خاص بمنصة iOS، وبالتالي يمكن تجنب الكثير من أخطاء البناء المتعلقة بعدم دعم المنصة.
متى تحتاج إلى هذا الحل؟
هذا الحل يكون مفيدًا في الحالات التالية:
- عندما تستخدم مكتبة Flutter من GitHub وتعمل على Android فقط.
- عندما تظهر أخطاء أثناء بناء المشروع على iOS أو macOS.
- عندما لا تحتاج إلى استخدام المكتبة على المنصة التي تسبب المشكلة.
- عندما تكون المكتبة لا تحتوي على تنفيذ حقيقي للمنصة المطلوبة.
مثال على خطأ شائع
من الأخطاء التي قد تظهر عند وجود مشكلة في منصات تشغيل المكتبة:
Plugin does not implement platform interface for iOSأو قد تظهر رسائل مشابهة تشير إلى أن المكتبة لا تحتوي على تنفيذ مناسب لمنصة iOS أو macOS.
في أغلب الحالات، يكون السبب أن قسم platforms داخل ملف pubspec.yaml يحتوي على منصة غير مدعومة فعليًا داخل المكتبة.
تنفيذ أوامر Flutter بعد التعديل
بعد تعديل ملف pubspec.yaml داخل المكتبة، يجب تنظيف المشروع وإعادة تحميل الحزم حتى يتعرف Flutter على التغييرات الجديدة.
نفذ الأوامر التالية داخل مشروعك:
flutter cleanثم:
flutter pub getبعد ذلك حاول تشغيل المشروع أو بناء التطبيق مرة أخرى.
تنبيه مهم قبل تعديل ملفات .pub-cache
رغم أن تعديل ملفات المكتبات داخل مجلد .pub-cache قد يحل المشكلة سريعًا، إلا أنه ليس الحل الأفضل دائمًا.
السبب أن أي تعديل تقوم به داخل هذا المجلد قد يتم حذفه أو استبداله عند تحديث المكتبة أو إعادة تحميلها من جديد.
لذلك يُفضل استخدام هذا الحل عند الضرورة فقط، أو إنشاء نسخة Fork من المكتبة على GitHub وتعديلها هناك، ثم ربط مشروعك بالنسخة المعدلة.
الحل الأفضل: استخدام Fork من المكتبة
إذا كنت تعتمد على المكتبة في مشروع مهم أو طويل المدى، فمن الأفضل ألا تعدل الملفات مباشرة داخل .pub-cache.
بدلًا من ذلك، يمكنك عمل Fork للمكتبة على GitHub، ثم تعديل ملف pubspec.yaml داخل النسخة الخاصة بك، وبعدها استخدام رابط الـ Fork داخل مشروع Flutter.
مثال داخل ملف pubspec.yaml الخاص بمشروعك:
dependencies:
nearpay_flutter:
git:
url: https://github.com/username/nearpay_flutter.gitبهذه الطريقة ستكون التعديلات محفوظة لديك، ولن تضيع عند تحديث الكاش أو إعادة تثبيت الحزم.
نصائح مهمة للمطورين
- افحص دائمًا قسم platforms داخل ملف pubspec.yaml عند استخدام مكتبات من GitHub.
- لا تفعل منصة داخل المكتبة إلا إذا كانت تحتوي فعلًا على كود يدعم هذه المنصة.
- إذا كانت المكتبة تعمل على Android فقط، لا تحاول إجبارها على العمل على iOS إلا إذا كان لديها تنفيذ مناسب.
- بعد أي تعديل، نفذ دائمًا flutter clean ثم flutter pub get.
- تجنب تعديل مجلد .pub-cache مباشرة إلا عند الضرورة القصوى.
- للمشاريع المهمة، استخدم Fork من المكتبة بدلًا من تعديل نسخة الكاش.
الخلاصة
مشكلة مكتبات Flutter التي تعمل على نظام واحد فقط تحدث غالبًا بسبب إعدادات المنصات داخل ملف pubspec.yaml الخاص بالمكتبة. فإذا كانت المكتبة تدعم Android فقط، وتمت محاولة استخدامها على iOS أو macOS، فقد تظهر أخطاء أثناء البناء أو التشغيل.
الحل السريع هو فحص قسم flutter plugin platforms وتعطيل المنصة غير المدعومة عند عدم الحاجة إليها، ثم تنفيذ أوامر flutter clean و flutter pub get. أما الحل الأفضل للمشاريع طويلة المدى فهو عمل Fork للمكتبة وتعديلها بشكل دائم وآمن.
لمزيد من المقالات : تعلم البرمجة باستخدام Flutter وإضافة دعم متعدد اللغات لتطبيقاتك





