5.1 KiB
5.1 KiB
قابلیت انتخاب نوع تقویم - Calendar Type Selection Feature
خلاصه
این قابلیت امکان انتخاب نوع تقویم (میلادی یا شمسی) را در کل برنامه فراهم میکند. کاربران میتوانند از طریق ویجت مخصوص، نوع تقویم مورد نظر خود را انتخاب کنند و تمام تاریخها در برنامه بر اساس انتخاب آنها نمایش داده میشود.
ویژگیهای پیادهسازی شده
Backend (FastAPI)
- ✅ Middleware تقویم: پردازش هدر
X-Calendar-Typeدر درخواستها - ✅ تبدیل تاریخ: تبدیل خودکار تاریخها بین میلادی و شمسی
- ✅ Response Formatting: فرمتبندی پاسخها بر اساس نوع تقویم انتخابی
- ✅ کتابخانه jdatetime: استفاده از کتابخانه jdatetime برای تبدیل تاریخها
Frontend (Flutter)
- ✅ CalendarController: مدیریت نوع تقویم انتخابی کاربر
- ✅ CalendarSwitcher Widget: ویجت تغییر نوع تقویم در AppBar
- ✅ ApiClient Integration: ارسال هدر
X-Calendar-Typeدر درخواستها - ✅ ترجمهها: ترجمههای فارسی و انگلیسی برای قابلیت تقویم
نحوه استفاده
برای کاربران
- در صفحه اصلی برنامه، کنار دکمه تغییر زبان، دکمه انتخاب نوع تقویم را مشاهده کنید
- روی دکمه کلیک کنید و نوع تقویم مورد نظر (میلادی یا شمسی) را انتخاب کنید
- تمام تاریخها در برنامه بر اساس انتخاب شما نمایش داده میشوند
برای توسعهدهندگان
Backend
# استفاده از CalendarConverter
from app.core.calendar import CalendarConverter
# تبدیل تاریخ میلادی به شمسی
jalali_date = CalendarConverter.to_jalali(datetime.now())
# تبدیل تاریخ میلادی به فرمت استاندارد
gregorian_date = CalendarConverter.to_gregorian(datetime.now())
# فرمتبندی بر اساس نوع تقویم
formatted_date = CalendarConverter.format_datetime(datetime.now(), "jalali")
Frontend
// استفاده از CalendarController
final calendarController = CalendarController.load();
// تغییر نوع تقویم
await calendarController.setCalendarType(CalendarType.jalali);
// بررسی نوع تقویم فعلی
if (calendarController.isJalali) {
// منطق برای تقویم شمسی
}
فایلهای تغییر یافته
Backend
app/core/calendar.py- ابزارهای تبدیل تاریخapp/core/calendar_middleware.py- middleware پردازش هدر تقویمapp/core/responses.py- فرمتبندی پاسخهاapp/main.py- اضافه کردن middlewareadapters/api/v1/auth.py- استفاده از فرمتبندی تقویمpyproject.toml- اضافه کردن jdatetime
Frontend
lib/core/calendar_controller.dart- مدیریت نوع تقویمlib/widgets/calendar_switcher.dart- ویجت تغییر تقویمlib/core/api_client.dart- ارسال هدر تقویمlib/main.dart- یکپارچهسازی CalendarControllerlib/pages/home_page.dart- اضافه کردن CalendarSwitcherlib/l10n/app_*.arb- ترجمههای مربوط به تقویم
تست کردن
Backend
cd hesabixAPI
pip install jdatetime
python3 -c "import jdatetime; print('jdatetime imported successfully')"
Frontend
cd hesabixUI/hesabix_ui
flutter analyze
flutter run
نکات مهم
- پیشفرض: تقویم شمسی به عنوان پیشفرض برای کاربران فارسی تنظیم شده است
- ذخیرهسازی: انتخاب کاربر در SharedPreferences ذخیره میشود
- هماهنگی: تغییر نوع تقویم به صورت سراسری در کل برنامه اعمال میشود
- سازگاری: تمام تاریخها همچنان به صورت UTC میلادی در دیتابیس ذخیره میشوند
مراحل بعدی (اختیاری)
برای تکمیل کامل قابلیت، میتوانید موارد زیر را اضافه کنید:
- CalendarDelegate: پیادهسازی CalendarDelegate برای تقویم شمسی
- Date Picker: استفاده از Date Picker شمسی در فرمها
- Time Picker: پیادهسازی Time Picker شمسی
- Localization: اضافه کردن نام ماهها و روزهای هفته شمسی
پشتیبانی
در صورت بروز مشکل، لطفاً موارد زیر را بررسی کنید:
- نصب صحیح کتابخانه jdatetime در Backend
- اجرای
flutter pub getدر Frontend - بررسی تنظیمات SharedPreferences
- بررسی هدرهای ارسالی در درخواستهای API