إذا أردنا بناء التطبيق بطريقة احترافية وقابلة للتوسع، فهذه هي الخطة فقط بدون تفاصيل إضافية.
1. المتطلبات الوظيفية (Functional Requirements)
الصفحة الرئيسية
- عرض المدينة الحالية
- عرض التاريخ واليوم
- عرض درجة الحرارة الحالية
- وصف الحالة (مشمس – غائم – ممطر…)
- أيقونة الطقس
- درجة الحرارة العظمى والصغرى
- سرعة الرياح
- الرطوبة
- الضغط الجوي
- نسبة الرؤية
- وقت الشروق
- وقت الغروب
توقعات الأسبوع
عرض 7 أيام تحتوي على:
- اسم اليوم
- أيقونة الحالة
- أعلى درجة
- أقل درجة
البحث
- البحث عن مدينة
- حفظ آخر مدينة
- إمكانية اختيار مدينة أخرى
الإعدادات
- الوضع الليلي
- الوضع النهاري
- لغة التطبيق (حالياً العربية فقط مع دعم التوسعة)
- وحدة الحرارة (مئوية)
2. المتطلبات
- Clean Architecture
- Cubit
- Repository Pattern
- Responsive UI
- Material 3
- RTL كامل
- Dark Mode
- Light Mode
- Local Storage
- API
- Error Handling
- Loading States
- Empty States
3. التقنيات
- Flutter
- flutter_bloc
- equatable
- dio
- get_it
- injectable (اختياري)
- go_router
- shared_preferences
- intl
- geolocator
- permission_handler
- cached_network_image
- shimmer
- flutter_svg
4. مزود بيانات الطقس
أفضل خيار
OpenWeatherMap
أو
WeatherAPI
5. هيكل المشروع
lib
│
├── core
│ ├── constants
│ ├── network
│ ├── errors
│ ├── services
│ ├── theme
│ ├── widgets
│ ├── utils
│ └── localization
│
├── features
│ │
│ └── weather
│ │
│ ├── data
│ │ ├── datasource
│ │ ├── models
│ │ └── repositories
│ │
│ ├── domain
│ │ ├── entities
│ │ ├── repositories
│ │ └── usecases
│ │
│ └── presentation
│ ├── cubit
│ ├── pages
│ └── widgets
│
└── main.dartDart6. الـ Cubits
ThemeCubit
WeatherCubit
SearchCubit
SettingsCubitDart7. حالات WeatherCubit
Initial
Loading
Loaded
Empty
ErrorDart8. الشاشات
Splash
Home
Search
SettingsDart9. Widgets
CurrentWeatherCard
ForecastCard
WeatherInfoItem
SearchBar
ThemeSwitch
LoadingWidget
ErrorWidgetDart10. Entity
WeatherDartالحقول
city
country
temperature
minTemperature
maxTemperature
description
icon
humidity
pressure
windSpeed
visibility
sunrise
sunset
date
forecastDart11. Forecast Entity
day
date
icon
minTemp
maxTemp
descriptionDart12. UseCases
GetCurrentWeather
GetWeeklyForecast
SearchCity
SaveLastCity
GetLastCityDart13. Repository
WeatherRepositoryDartالدوال
getCurrentWeather()
getWeeklyForecast()
searchCity()
saveLastCity()
getLastCity()Dart14. DataSource
WeatherRemoteDataSource
WeatherLocalDataSourceDart15. الخدمات
ApiService
LocationService
StorageServiceDart16. الثيم
Light Theme
Dark ThemeDartمع دعم:
- Material 3
- Dynamic Colors
- RTL
17. الترجمة
arb files
arDartويكون التطبيق مهيأ لإضافة الإنجليزية لاحقًا دون تعديل في الكود.
18. سير العمل (Workflow)
Home Page
│
▼
WeatherCubit
│
▼
GetCurrentWeather
│
▼
Repository
│
▼
RemoteDataSource
│
▼
API
│
▼
Model
│
▼
Entity
│
▼
Cubit State
│
▼
UIDart19. ترتيب التنفيذ
- إنشاء المشروع.
- إعداد Clean Architecture.
- إعداد الثيم (فاتح/داكن).
- إعداد الترجمة العربية.
- إعداد Dio.
- إعداد API.
- إنشاء Models.
- إنشاء Entities.
- إنشاء Repository.
- إنشاء Use Cases.
- إنشاء Cubits.
- بناء شاشة Home.
- بناء بطاقات الطقس الحالية.
- بناء قائمة توقعات الأسبوع.
- إضافة البحث عن المدن.
- حفظ آخر مدينة محليًا.
- إضافة شاشة الإعدادات.
- اختبار جميع الحالات (نجاح، تحميل، خطأ، عدم وجود بيانات).
- تحسين واجهة المستخدم وإضافة الرسوم المتحركة البسيطة.
هذه البنية مناسبة لمشروع احترافي، وقابلة للتوسع لاحقًا لإضافة ميزات مثل توقعات كل ساعة، الخرائط، التنبيهات الجوية، دعم لغات متعددة، وويدجت للشاشة الرئيسية دون الحاجة لإعادة هيكلة المشروع.