-
Notifications
You must be signed in to change notification settings - Fork 56
UI Components
כל הרכיבים המשותפים יושבים ב־lib/widgets/, מאורגנים בתיקיות לפי תפקיד, עם barrel export ב־widgets_exports.dart. שימוש ברכיבים אלה הוא חובה — אין ליצור כפתורים/דיאלוגים/שדות טקסט חלופיים.
שדה הטקסט היחיד המותר בפרויקט. מתקן שורת באגים של Flutter Desktop ב־RTL: מקשי חיצים הפוכים, collapse של בחירה, נראות סמן, תפריט הקשר, autofocus באנדרואיד. מנהל את הבהוב הסמן בעצמו (חצי־מחזור 500ms, timeout 8 שניות) — לכן main.dart קובע EditableText.debugDeterministicCursor = true.
אייקון מודע־RTL: אייקונים כיווניים (חיצים, שברונים, פאנלים) מתהפכים אוטומטית כשהכיוון RTL. שלושה מנגנונים:
-
_fluentMirrorMap— החלפה לוריאנט הנגדי של FluentUI (chevron_right← chevron_left). -
_materialMirrorMap— אותו דבר לאייקוני Material בודדים מותרים. -
_flippableIcons— היפוך גאומטרי לאייקונים ללא וריאנט נגדי (book_24_filledוכו').
אייקון שאינו רשום — משתמשים ב־Icon רגיל. אסור Transform.flip ידני — רושמים במפות במקום.
רינדור תוכן הספרים: SmartText, SimpleInlineHtml, TextRendererService, RenderSettings — המרת HTML/טקסט של ספרים לתצוגה עם הגדרות (גופן, גודל, ניקוד).
כפתור אחיד עם בנאים ממוינים לפי תפקיד:
| בנאי | סגנון | שימוש |
|---|---|---|
.recommended |
FilledButton (primary) | פעולה מומלצת |
.neutral |
FilledButton.tonal | פעולה ניטרלית/מסוכנת |
.ghost |
TextButton שקוף | פעולת משנה (ביטול, סגירה) |
.warning |
TextButton בצבע error | אישור הרסני (מחיקה) |
תומך ב־icon, isLoading (מחוון טעינה), focusNode/autofocus. באותו קובץ גם SecondaryIconButton, PrimaryIconButton, ToolbarActionButton.
CustomSwitch, AppSegmentedControl + SegmentOption (בורר מקוטע ל־2–4 אפשרויות).
דיאלוג Material 3 עם ניווט מקלדת מלא (חיצים/Enter/Escape) והדגשת פוקוס. בנאים: .singleAction (אישור בלבד), .twoActions (ביטול+אישור), .warning (פעולה מסוכנת — כפתור הביטול הוא המומלץ). ה־onConfirm יכול לעצור סגירה לצורך ולידציה. פונקציות נוחות: showSingleActionDialog, showTwoActionsDialog, showWarningDialog.
דיאלוגים ייעודיים נוספים: קלט (input_dialog), אישור, סיסמה, בחירה, שליחת דוא"ל לדיווח שגיאה, התקדמות חילוץ ZIP.
lib/core/ui_snack.dart — מערכת ההתראות היחידה (לא SnackBar של Flutter!). מבוססת OverlayEntry על navigatorKey הגלובלי:
- API:
show, showError, showSuccess, showWarning, showQuick, showWithAction, hide. - עיצוב: אפקט זכוכית (blur), אנימציית scale+fade, החלקה לסגירה, haptic feedback.
-
כל הטקסטים מרוכזים ב־
lib/core/messages/— תשעה קטלוגים לפי תחום (CommonMessages, LibraryMessages, TextBookMessages, PdfMessages, SettingsMessages, NotesMessages, PluginMessages, ReportMessages, ToolsMessages). אסור להעביר מחרוזת קשיחה ל־UiSnack — מוסיפים לקטלוג המתאים.
lib/settings/widgets/settings_card.dart:
-
SettingsCard— כרטיס הגדרות עםtitle, subtitle, children(מפרידים אוטומטיים ביניהם), ו־cardIdהמשמש עוגן לחיפוש בהגדרות (גלילה + הבהוב). -
SettingsActionTile— שורות הגדרה: switchTile/ dropdownTile/ segmentedTile(בורר מקוטע בתוך שורה).
-
layout/— AppCard, ExpandableCard, AdaptiveSidePane, DualAdaptiveReaderPane(זוג חלוניות קורא אדפטיבי), ReaderSidePanelShell, ResizableDragHandle, FloatingPanel, ContextOverlayPanel(חלונית תצוגה מקדימה), CommentatorsFilterScreen. -
feedback/— AppFutureBuilder, LoadingIndicator, IndexingStatusOverlay, ToolEmptyState, ScrollablePositionedListScrollbar(סקרולבר לרשימות ממוקמות). -
lists/— ItemsListView, NavigationTreeTile, FilterChipsWidget, CommentatorsSelectionPanel. -
navigation/— AppTopBar, NavRailItem, BookViewActions, ResponsiveActionBar(סרגל פעולות שמתקפל לפי רוחב), ReaderNavCenter, SearchPaneBase. -
misc/— RestartWidget(אתחול מחדש של ה־runtime בלי לסגור את התהליך), AppContextMenu, AppPopupMenu, AppDropdownField, LinkPreviewOverlay, KeyboardDialogNavigation, ProgressiveScrolling.
📖 מדריך למשתמש
- התחלת העבודה
- הספרייה
- קריאת ספר
- קריאת PDF
- חיפוש
- איתור מקורות
- טאבים ושולחנות
- סימניות והערות
- ספרים אישיים
- הגדרות
- גיבוי ושחזור
- עדכונים
- תוספים
- כלים
- קישורי עומק
🛠️ למפתחים — יסודות
נתונים וספרייה
קריאה
חיפוש
אישי ומערכת
עיצוב ו־UI