تغليف الودجات كمكتبة مشتركة
تغليف الودجات كمكتبة مشتركة
مع نمو مشاريع Flutter الخاصة بك، ستبني حتماً ودجات قابلة لإعادة الاستخدام تستحق أن تعيش في حزمة مستقلة بدلاً من تكرارها عبر تطبيقات متعددة. تتيح لك حزمة Dart استخراج تلك الودجات إلى وحدة ذات إصدار قابلة للاختبار بشكل مستقل مع واجهة برمجية عامة نظيفة. يمكن لأي تطبيق Flutter بعد ذلك الإعلان عنها كاعتمادية واستيرادها تماماً مثل أي حزمة على pub.dev.
إنشاء هيكل الحزمة
استخدم واجهة سطر أوامر Flutter لتوليد الكود التمهيدي. يُنتج الإعلام --template=package حزمة Dart خالصة؛ بينما --template=plugin يضيف قنوات أصلية بدلاً من ذلك.
إنشاء حزمة جديدة
# إنشاء حزمة باسم "my_ui_kit" في مجلد شقيق
flutter create --template=package my_ui_kit
# الهيكل الناتج:
# my_ui_kit/
# lib/
# my_ui_kit.dart <-- ملف البرميل الرئيسي
# test/
# pubspec.yaml
# README.md
# CHANGELOG.md
# LICENSE
إعداد pubspec.yaml
يُعلن ملف pubspec.yaml عن هوية الحزمة، وقيود SDK، والاعتماديات. احتفظ بالإصدار وفق Semantic Versioning (MAJOR.MINOR.PATCH). اضبط publish_to: none إذا كانت الحزمة خاصة وغير مخصصة لـ pub.dev.
نموذج pubspec.yaml لمكتبة ودجات
name: my_ui_kit
description: A shared Flutter widget library for ESB apps.
version: 1.0.0
publish_to: none # احذف هذا السطر للنشر على pub.dev
environment:
sdk: '>=3.0.0 <4.0.0'
flutter: '>=3.10.0'
dependencies:
flutter:
sdk: flutter
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^3.0.0
flutter:
uses-material-design: true
تنظيم ملفات مصدر المكتبة
ضع كل ودجت في ملفه الخاص تحت lib/src/. دليل src/ هو اتفاقية تشير إلى تفاصيل التنفيذ الخاصة. الملفات داخل src/ لا يمكن استيرادها مباشرة من قِبل المستهلكين — يجب أن تمر عبر ملف البرميل.
تخطيط المكتبة الموصى به
lib/
my_ui_kit.dart <-- البرميل العام (الملف الوحيد الذي يستورده المستهلكون)
src/
widgets/
primary_button.dart
avatar_badge.dart
status_chip.dart
theme/
app_colors.dart
app_text_styles.dart
utils/
responsive_helper.dart
كتابة ملف برميل نظيف
ملف البرميل (lib/my_ui_kit.dart) هو نقطة الدخول الوحيدة للمستهلكين. يُعيد تصدير كل رمز عام باستخدام توجيهات export. يُفضَّل استخدام جمل show أو hide المُسماة للتحكم الدقيق في المعرِّفات المرئية.
lib/my_ui_kit.dart — ملف البرميل
/// My UI Kit — shared Flutter widget library.
library my_ui_kit;
export 'src/widgets/primary_button.dart';
export 'src/widgets/avatar_badge.dart';
export 'src/widgets/status_chip.dart' show StatusChip, StatusType;
export 'src/theme/app_colors.dart';
export 'src/theme/app_text_styles.dart';
src/utils/ ما لم يحتجهم المستهلكون فعلاً. الاحتفاظ بالأدوات الداخلية غير مُصدَّرة يتيح لك إعادة الهيكلة بحرية دون كسر الواجهة البرمجية العامة.استهلاك الحزمة في تطبيق Flutter
هناك ثلاث طرق للاعتماد على حزمة محلية: اعتمادية مسار (للمستودعات المتجاورة)، واعتمادية git (تشير إلى commit أو فرع محدد)، واعتمادية مستضافة (منشورة على pub.dev أو سجل خاص). اعتماديات المسار هي الأكثر شيوعاً أثناء التطوير.
الإشارة إلى الحزمة في pubspec.yaml للتطبيق المستهلك
dependencies:
flutter:
sdk: flutter
# اعتمادية مسار محلي (مستودع مُدمج / مجلدات متجاورة)
my_ui_kit:
path: ../my_ui_kit
# أو — اعتمادية git (فرع محدد)
# my_ui_kit:
# git:
# url: https://github.com/yourorg/my_ui_kit.git
# ref: main
بعد تحديث pubspec.yaml، شغِّل flutter pub get. يمكنك الآن استيراد واستخدام أي ودجت مُصدَّر باستيراد واحد فقط:
استخدام الودجات من المكتبة المشتركة
import 'package:my_ui_kit/my_ui_kit.dart';
class HomeScreen extends StatelessWidget {
const HomeScreen({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: [
AvatarBadge(
imageUrl: 'https://example.com/user.jpg',
isOnline: true,
),
const SizedBox(height: 16),
StatusChip(status: StatusType.active),
const SizedBox(height: 24),
PrimaryButton(
label: 'Get Started',
onPressed: () => Navigator.pushNamed(context, '/onboarding'),
),
],
),
);
}
}
انضباط الإصدار وسجل التغييرات
في كل مرة تُغيِّر فيها الواجهة البرمجية العامة، ارفع الإصدار في pubspec.yaml وأضف إدخالاً إلى CHANGELOG.md. اتبع Semantic Versioning:
- PATCH (1.0.0 → 1.0.1) — إصلاح أخطاء، لا تغييرات في الواجهة البرمجية
- MINOR (1.0.0 → 1.1.0) — واجهة برمجية جديدة متوافقة مع الإصدارات السابقة
- MAJOR (1.0.0 → 2.0.0) — تغييرات كاسرة (صادرات محذوفة أو مُعادة تسميتها)
pub get التالي. احرص دائماً على إيصال التغييرات الكاسرة بوضوح في CHANGELOG ورفع الإصدار الرئيسي.الخلاصة
يتضمن تغليف الودجات في مكتبة Dart مشتركة أربع خطوات رئيسية: الهيكلة بـ flutter create --template=package، والإعداد عبر pubspec.yaml بقيود SDK صحيحة واعتماديات، والتنظيم بوضع الملفات تحت lib/src/ مع ملف برميل نظيف كنقطة دخول عامة وحيدة، والاستهلاك عبر اعتمادية مسار أو git أو مستضافة. يُنتج اتباع هذا النمط مكتبات ودجات قابلة لإعادة الاستخدام والاختبار المستقل وتتوسع بسلاسة عبر تطبيقات Flutter متعددة.