setDisplayMode method

void setDisplayMode(
  1. QuranDisplayMode mode
)

تعيين وضع العرض مع الحفظ في التخزين المحلي Set display mode and persist to local storage

Implementation

void setDisplayMode(QuranDisplayMode mode) {
  if (state.displayMode.value == mode) return;

  // حفظ الصفحة الحالية قبل تغيير الوضع لمنع العودة للصفحة الأولى
  // Save current page before mode switch to prevent jumping to page 1
  int currentPage = state.currentPageNumber.value - 1;
  if (quranPagesController.hasClients) {
    final double? p = quranPagesController.page;
    if (p != null) currentPage = p.round();
  }
  currentPage = currentPage.clamp(0, 603);

  // تحديث رقم الصفحة وحفظه في التخزين لضمان عدم فقدانه عند إعادة إنشاء الـ controller
  state.currentPageNumber.value = currentPage + 1;
  saveLastPage(currentPage + 1);

  // إعادة إنشاء الـ controller بالصفحة الحالية
  final oldController = quranPagesController;
  quranPagesController = PreloadPageController(
    initialPage: currentPage,
    keepPage: true,
    viewportFraction: 1.0,
  );
  WidgetsBinding.instance.addPostFrameCallback((_) {
    try {
      if (oldController != quranPagesController) oldController.dispose();
    } catch (_) {}
  });

  state.displayMode.value = mode;
  GetStorage().write(_StorageConstants().displayMode, mode.storageIndex);
  update(['display_mode', 'quran_display_content']);
}