باعتبارنا مطورين لـ Flutter، فإننا نهدف إلى جودة الكود في تطبيقات Flutter الخاصة بنا من خلال كتابة كود نظيف وقابل للصيانة ويتبع أفضل الممارسات. إحدى الطرق لتحقيق ذلك هي استخدام أدوات تحلل الكود الخاص بنا وتساعدنا في تحديد المشكلات المحتملة. في حين أن Flutter لديه مجموعة قواعد خاصة به للتحقق من الكود الخاص بنا، فهناك حزم إضافية يمكن أن تساعدنا في تحسين جودة الكود بشكل أكبر.
تحليل كود مشروعك
عند بدء مشروع جديد، يتم تضمين حزمة Flutter Lints بالفعل في مشروعك. تتضمن حزمة Flutter Lints https://pub.dev/packages/flutter_lints مجموعة مقترحة من قواعد التدقيق لتطبيقات Flutter والحزم والمكونات الإضافية لتعزيز أفضل الممارسات.
التدقيق هو عملية تشغيل برنامج يعمل على تحليل الكود بحثًا عن أخطاء محتملة.
لتحليل مشروعك بحثًا عن أي أخطاء في التدقيق، يمكنك تنفيذ الأمر التالي:
--devسيضمن العلم تثبيت الحزمة أسفل . dev_dependenciesالحزم المدرجة أدناه dev_dependenciesمتاحة فقط أثناء التطوير، وهو ما نحتاجه على وجه التحديد نظرًا لأن الحزمة ليست مطلوبة في الإنتاج.
بمجرد تنفيذ الأمر، تحقق من pubspec.yaml ملفك بحثًا عن التبعيات المضافة. يجب أن ترى حزمة Very Good Analysis المضمنة في القسم dev_dependencies ، مثل هذا:
dev_dependencies:
very_good_analysis: ^6.0.0
إزالة Lints من Flutter
نظرًا لأننا نستخدم الآن حزمة Very Good Analysis، فيمكننا إزالة حزمة Flutter Lints من خلال تنفيذ الأمر التالي:
flutter pub remove flutter_lints
يمكنك التأكد من إزالة حزمة Flutter Lints عندما لم تعد موجودة أسفل dev_dependenciesقسم ملفك pubspec.yaml.
import 'dart:math';
void main() {
int myVariable= 10;
print('The value of myVariable is $myVariable');
void complexMethod() {
for (int i = 0; i < 100; i++) {
if (i % 2 == 0) {
print(i);
}
}
}
void calculateTotalPrice(double price, int quantity) {
dynamic total = price * quantity;
print('Total price: $total');
}
}
class myClass {
late String first_name;
void displayMessage() {
print('Hello, World!');
}
}
بمجرد تشغيل البرنامج flutter analyzeنحصل على أخطاء التدقيق التالية:
كما ترى، حددت حزمة Very Good Analysis 18 خطأً في التدقيق. وذلك لأنها تحتوي على عدد أكبر من قواعد التدقيق مقارنة بحزمة Flutter Lints.
قد يبدو عدد أخطاء التدقيق أمرًا شاقًا في البداية، ولكن من السهل حلها. إذا كنت تستخدم بيئة تطوير متكاملة، فسوف تبرز أخطاء التدقيق لك. وكما ترى، فإن الرسائل واضحة بذاتها، بل إنها تعرض الملف ورقم السطر.
لإصلاح المشكلات، أجرينا التغييرات التالية:الاستيراد غير المستخدم: لقد قمنا بإزالة عبارة الاستيراد غير المستخدمة 'dart:math'لأنها لم تكن مستخدمة في الكود الخاص بنا.تفضيل المحليات النهائية: لقد قمنا بتغيير إعلان myVariablefrom int myVariable = 10;إلى const myVariable = 10;. هذا التغيير يجعله متغيرًا ثابتًا، مما يشير إلى أن قيمته لن تتغير.حذف أنواع المتغيرات المحلية:for (int i = 0; i < 100; i++) تم استبدال التعليق الصريح للنوع في بـ var، مما يسمح لاستنتاج نوع Dart بتحديد النوع.تجنب الطباعة: اقترح المحلل تجنب استخدام printالكود في الإنتاج. نظرًا لأن printالعبارات الموجودة داخل mainالوظيفة كانت لأغراض العرض التوضيحي، فقد تجاهلنا تحذير الوبر باستخدام // ignore_for_file: avoid_print.العنصر غير المستخدم: نقوم الآن باستدعاء الوظائف غير المستخدمة complexMethodلحل calculateTotalPriceالتحذير.استخدم isEven بدلاً من % 2: أوصى المحلل باستخدام isEvenالخاصية بدلاً من عامل modulo % 2في ifالشرط. لقد قمنا بتحديث الشرط من if (i % 2 == 0)إلى if (i.isEven).الوثائق المفقودة واتفاقيات التسمية: لقد عالجنا مشكلات الوثائق المفقودة واتفاقيات التسمية للفئة MyClass. لقد أضفنا تعليقات على الوثائق /// My classو /// firstnameو و /// displayMessage. كما قمنا بتغيير اسم المتغير first_nameإلى firstNameليتبع lowerCamelCaseاتفاقية التسمية.انتهاء الصلاحية في نهاية الملف: أوصى المحلل بإضافة سطر جديد في نهاية الملف، لذا أضفنا سطرًا فارغًا لتلبية هذا المطلب.تذكر، إذا كنت تستخدم IDE، فسوف يسلط الضوء على أخطاء التدقيق هذه، مما يجعل من السهل عليك التعرف عليها وحلها.تعطيل قواعد معينةهناك طرق متعددة لتعطيل قاعدة معينة، ويمكن تعطيل القواعد حسب السطر، أو حسب الملف (كما هو موضح في القسم السابق)، أو على مستوى المشروع.1. تجاهل سطر واحد: استخدم // ignore:التعليق لتعطيل قاعدة معينة لسطر واحد من التعليمات البرمجية. يمكنك تحديد اسم القاعدة بعد // ignore:التعليق. على سبيل المثال:// ignore: avoid_print2. تجاهل الملف بالكامل: استخدم // ignore_for_file:التعليق لتعطيل قاعدة معينة للملف بالكامل. يمكنك تحديد اسم القاعدة بعد التعليق // ignore_for_file:. على سبيل المثال: