Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions lib/navigation/view/vertical_reading_tab_strip.dart
Original file line number Diff line number Diff line change
Expand Up @@ -268,14 +268,15 @@ class _VerticalTabRow extends StatelessWidget {
)
: Row(
children: [
if (leading != null) ...[
leading,
const SizedBox(width: 6),
],
// הנעץ לפני אייקון הסוג — אותו סדר כמו ברצועה העליונה.
if (tab.isPinned) ...[
const Icon(FluentIcons.pin_24_filled, size: 14),
const SizedBox(width: 4),
],
if (leading != null) ...[
leading,
const SizedBox(width: 6),
],
Expanded(
child: TabTitleTooltip(
message: tab.title,
Expand Down
33 changes: 33 additions & 0 deletions test/navigation/reading_tabs_side_panel_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_settings_screens/flutter_settings_screens.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:fluentui_system_icons/fluentui_system_icons.dart';
import 'package:otzaria/history/bloc/history_bloc.dart';
Expand All @@ -20,10 +21,13 @@ import 'package:otzaria/settings/engine/settings_state.dart';
import 'package:otzaria/tabs/bloc/tabs_bloc.dart';
import 'package:otzaria/tabs/bloc/tabs_event.dart';
import 'package:otzaria/tabs/bloc/tabs_state.dart';
import 'package:otzaria/models/books.dart';
import 'package:otzaria/tabs/models/combined_tab.dart';
import 'package:otzaria/tabs/models/pdf_tab.dart';
import 'package:otzaria/tabs/models/tab.dart';
import 'package:otzaria/workspaces/bloc/workspace_bloc.dart';
import 'package:otzaria/workspaces/bloc/workspace_state.dart';
import '../helpers/memory_settings_cache.dart';

class _StubTab extends OpenedTab {
_StubTab(super.title);
Expand All @@ -33,6 +37,10 @@ class _StubTab extends OpenedTab {
}

void main() {
setUpAll(() async {
await Settings.init(cacheProvider: MemorySettingsCache());
});

late _TestTabsBloc tabsBloc;
late _TestSettingsBloc settingsBloc;
late _TestHistoryBloc historyBloc;
Expand Down Expand Up @@ -403,6 +411,31 @@ void main() {
expect(tabsBloc.addedEvents.whereType<SetCurrentTab>(), isEmpty);
});

testWidgets(
'בכרטיסיית PDF מוצמדת הנעץ קודם לאייקון הסוג, כמו ברצועה העליונה',
(
tester,
) async {
final pdfTab = PdfBookTab(
book: PdfBook(title: 'ספר PDF', path: '/tmp/book.pdf'),
pageNumber: 1,
)..isPinned = true;
addTearDown(pdfTab.dispose);
await pumpPanel(tester, withTabs: [pdfTab, _StubTab('ספר ב')]);

final pin = tester.getCenter(find.byIcon(FluentIcons.pin_24_filled));
final pdfIcon = tester.getCenter(
find.byIcon(FluentIcons.document_pdf_16_regular),
);
// RTL: הפריט הראשון בשורה הוא הימני ביותר.
expect(
pin.dx,
greaterThan(pdfIcon.dx),
reason: 'הנעץ צריך להופיע לפני אייקון ה-PDF (issue #1134)',
);
},
);

testWidgets('לחיצה ימנית על כרטיסיה פותחת את תפריט ההקשר', (tester) async {
await pumpPanel(tester);

Expand Down
35 changes: 35 additions & 0 deletions test_results/2026-09-03-side-tabs-pin-order.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# issue #1134 — כרטיסיות בצד: הנעץ אחרי אייקון ה-PDF

תאריך: 2026-09-03 | ענף: `fix/side-tabs-pin-before-type-icon-1134` | קומיט אימות: `b5a6d193`

## הבאג שאומת

ברצועת הכרטיסיות האנכית (`VerticalReadingTabStrip`) שורת הכרטיסייה בנתה את
אייקון סוג הכרטיסייה (PDF / כלי) ואחריו את הנעץ, ולכן בכרטיסיית PDF מוצמדת
הנעץ נדחק אחרי אייקון ה-PDF. ברצועה העליונה (`CustomTitleBar`) הסדר הפוך:
נעץ, אייקון סוג, כותרת. אומת בקוד ובבדיקה (ב-RTL: pin.dx 759 < pdf.dx 780).

## הפתרון

החלפת סדר שני הבלוקים בשורה — נעץ לפני אייקון הסוג — כמו ברצועה העליונה.

## בדיקות

`test/navigation/reading_tabs_side_panel_test.dart` — בדיקה חדשה: כרטיסיית PDF
מוצמדת בעמודה ← מרכז הנעץ מימין למרכז אייקון ה-PDF. נכשלה על `dev` ועוברת עם
התיקון. הקובץ קיבל `Settings.init` (PdfBookTab דורש אותו).

בדיקות ממוקדות `test/navigation/` + `test/tabs/`: **612 עברו, 0 נכשלו**.

## אימות ויזואלי

לא צולם חי: המשתמש עבד על המחשב בזמן האימות והאוטומציה הופסקה. ההוכחה היא
בדיקת הווידג'ט על העמודה האנכית המלאה (מיקומי הנעץ ואייקון ה-PDF נמדדים
בפיקסלים), והשינוי עצמו הוא החלפת סדר של שני בלוקים בשורה.

## סוויטה מלאה

`flutter test`: **11,632 עברו, 9 נכשלו, 9 דולגו**. הכשלים: הבסיס הסביבתי המוכר
(release_packaging, ‏3×file_sync_compaction, ‏personal_notes_file_backed_book,
‏plugin_spec_freshness, ‏search_scope_menu flake, ‏change_location_dialog)
ו-`hebrew_book_download_test` — flake תחת עומס שעובר בהרצה מבודדת. אפס רגרסיות.