Skip to content

Commit e605bb5

Browse files
Implement toggle special markings, closes #8
1 parent 5b6fa45 commit e605bb5

11 files changed

Lines changed: 116 additions & 43 deletions

File tree

lib/models/bibles/kjv_bible.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ class KJVBibleImpl extends JsonToBible {
99
KJVBibleImpl(Map<String, dynamic> json) : super(json: json);
1010

1111
@override
12-
String getBook(Area readerArea, String bookCode, List<String> bookmarks, ViewBy viewBy) {
12+
String getBook(Area readerArea, String bookCode, List<String> bookmarks, bool showSpecialMarks) {
1313
String htmlText = '';
1414
String chapterNumber = '';
1515
List<dynamic> chapterContents = [];

lib/models/bibles/oet_lv_bible.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ class OETLiteralBibleImpl extends JsonToBible {
99

1010
// TODO: currently replaces all ' marks with ’.
1111
@override
12-
String getBook(Area readerArea, String bookCode, List<String> bookmarks, ViewBy viewBy) {
12+
String getBook(Area readerArea, String bookCode, List<String> bookmarks, bool showSpecialMarks) {
1313
String htmlText = '';
1414
String chapterNumberHtml = '';
1515

@@ -65,6 +65,11 @@ class OETLiteralBibleImpl extends JsonToBible {
6565
.replaceAll('>', ' ')
6666
.replaceAll('=', ' ');
6767

68+
// Remove OET-LV special markings like _.
69+
if (showSpecialMarks == false) {
70+
verseText = verseText.replaceAll('_', ' ');
71+
}
72+
6873
htmlText += " ${verseText.replaceAll("'", "’")}</span>";
6974
}
7075
}

lib/models/bibles/oet_rv_bible.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ class OETReadersBibleImpl extends JsonToBible {
1111

1212
// TODO: currently replaces all ' marks with ’.
1313
@override
14-
String getBook(Area readerArea, String bookCode, List<String> bookmarks, ViewBy viewBy) {
14+
String getBook(Area readerArea, String bookCode, List<String> bookmarks, bool showSpecialMarks) {
1515
String htmlText = '';
1616
String chapterNumberHtml = '';
1717

lib/models/json_to_bible.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ abstract class JsonToBible {
3131
return svg;
3232
}
3333

34-
String getBook(Area readerArea, String bookCode, List<String> bookmarks, ViewBy viewBy) {
34+
String getBook(Area readerArea, String bookCode, List<String> bookmarks, bool showSpecialMarks) {
3535
return '~';
3636
}
3737
}

lib/services/reader_service.dart

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ class ReaderService {
1212
Map<String, dynamic> get secondaryAreaJson => _biblesService.secondaryAreaJson;
1313

1414
/// An "Area" is the area in the reader where bible text is displayed and scrolled.
15-
String getReaderBookHTML(Area area, ViewBy viewBy, String bibleCode, String bookCode, List<String> bookmarks) {
15+
String getReaderBookHTML(
16+
Area area, ViewBy viewBy, String bibleCode, String bookCode, List<String> bookmarks, bool showMarks) {
1617
Map<String, dynamic> json;
1718
if (area == Area.primary) {
1819
json = primaryAreaJson;
@@ -22,13 +23,13 @@ class ReaderService {
2223

2324
if (bibleCode == 'OET-LV') {
2425
var bibleImpl = OETLiteralBibleImpl(json);
25-
return bibleImpl.getBook(area, bookCode, bookmarks, viewBy);
26+
return bibleImpl.getBook(area, bookCode, bookmarks, showMarks);
2627
} else if (bibleCode == 'OET-RV') {
2728
var bibleImpl = OETReadersBibleImpl(json);
28-
return bibleImpl.getBook(area, bookCode, bookmarks, viewBy);
29+
return bibleImpl.getBook(area, bookCode, bookmarks, showMarks);
2930
} else if (bibleCode == 'KJV') {
3031
var bibleImpl = KJVBibleImpl(json);
31-
return bibleImpl.getBook(area, bookCode, bookmarks, viewBy);
32+
return bibleImpl.getBook(area, bookCode, bookmarks, showMarks);
3233
} else {
3334
return 'Invalid bibleCode.';
3435
}

lib/ui/views/reader/reader_viewmodel.dart

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ class ReaderViewModel extends ReactiveViewModel {
3232
ViewBy get viewBy => _biblesService.viewBy;
3333

3434
double get textScaling => _settingsService.textScaling;
35+
bool get showMarks => _settingsService.showMarks;
3536
bool get showSecondaryArea => _settingsService.showSecondaryArea;
3637
bool get linkReaderAreaScrolling => _settingsService.linkReaderAreaScrolling;
3738

@@ -56,6 +57,7 @@ class ReaderViewModel extends ReactiveViewModel {
5657
primaryAreaBible,
5758
bookCode,
5859
bookmarks,
60+
showMarks,
5961
);
6062

6163
String secondaryAreaHTML = _readerService.getReaderBookHTML(
@@ -64,6 +66,7 @@ class ReaderViewModel extends ReactiveViewModel {
6466
secondaryAreaBible,
6567
bookCode,
6668
bookmarks,
69+
showMarks,
6770
);
6871

6972
await initilizeReaderWebview(
@@ -503,11 +506,11 @@ class ReaderViewModel extends ReactiveViewModel {
503506
await _biblesService.reloadBiblesJson();
504507

505508
String primaryAreaHTML =
506-
_readerService.getReaderBookHTML(Area.primary, viewBy, primaryAreaBible, bookCode, bookmarks);
509+
_readerService.getReaderBookHTML(Area.primary, viewBy, primaryAreaBible, bookCode, bookmarks, showMarks);
507510
await updateReaderAreaHTMLContent(Area.primary, primaryAreaHTML);
508511
if (showSecondaryArea == true) {
509512
String secondaryAreaHTML =
510-
_readerService.getReaderBookHTML(Area.secondary, viewBy, secondaryAreaBible, bookCode, bookmarks);
513+
_readerService.getReaderBookHTML(Area.secondary, viewBy, secondaryAreaBible, bookCode, bookmarks, showMarks);
511514
await updateReaderAreaHTMLContent(Area.secondary, secondaryAreaHTML);
512515
}
513516

lib/ui/views/settings/settings_view.dart

Lines changed: 17 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import 'settings_viewmodel.dart';
1010
import 'widgets/settings_category_title/settings_category_title.dart';
1111
import 'widgets/settings_text_preview/settings_text_preview.dart';
1212
import 'widgets/settings_theme_item/settings_theme_item.dart';
13+
import 'widgets/toggle_item/toggle_item.dart';
1314

1415
class SettingsView extends StackedView<SettingsViewModel> {
1516
const SettingsView({super.key});
@@ -146,37 +147,12 @@ class SettingsView extends StackedView<SettingsViewModel> {
146147
height: 0,
147148
color: context.theme.appColors.divider,
148149
),
149-
// // Show special markings
150-
// Padding(
151-
// padding: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 4.0),
152-
// child: Row(
153-
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
154-
// children: [
155-
// Text(
156-
// 'Show OET-LV special markings',
157-
// style: TextStyle(
158-
// color: context.theme.appColors.primary,
159-
// fontSize: 16.0,
160-
// fontWeight: FontWeight.w500,
161-
// ),
162-
// ),
163-
// Switch(
164-
// activeColor: context.theme.appColors.background,
165-
// activeTrackColor: context.theme.appColors.switchBackground,
166-
// inactiveThumbColor: context.theme.appColors.primary,
167-
// inactiveTrackColor: context.theme.appColors.background,
168-
// trackOutlineColor: MaterialStateProperty.resolveWith((states) {
169-
// if (states.contains(MaterialState.selected)) {
170-
// return context.theme.appColors.switchBackground;
171-
// }
172-
// return context.theme.appColors.primary;
173-
// }),
174-
// value: viewModel.showMarks,
175-
// onChanged: viewModel.changeShowMarks,
176-
// ),
177-
// ],
178-
// ),
179-
// ),
150+
// Show special markings
151+
ToggleItem(
152+
label: 'Show OET-LV special markings',
153+
value: viewModel.showMarks,
154+
onChanged: viewModel.changeShowMarks,
155+
),
180156
// Divider(
181157
// height: 0,
182158
// color: context.theme.appColors.divider,
@@ -288,7 +264,7 @@ class SettingsView extends StackedView<SettingsViewModel> {
288264
height: 0,
289265
color: context.theme.appColors.divider,
290266
),
291-
267+
// Share feedback
292268
InkWell(
293269
onTap: viewModel.shareFeedback,
294270
child: Padding(
@@ -322,6 +298,11 @@ class SettingsView extends StackedView<SettingsViewModel> {
322298
),
323299
),
324300

301+
Divider(
302+
height: 0,
303+
color: context.theme.appColors.divider,
304+
),
305+
// Visit website
325306
InkWell(
326307
onTap: viewModel.visitWebsite,
327308
child: Padding(
@@ -354,7 +335,10 @@ class SettingsView extends StackedView<SettingsViewModel> {
354335
),
355336
),
356337
),
357-
338+
Divider(
339+
height: 0,
340+
color: context.theme.appColors.divider,
341+
),
358342
// App version
359343
Padding(
360344
padding: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 16.0),
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:stacked/stacked.dart';
3+
4+
import '../../../../../common/themes.dart';
5+
import 'toggle_item_model.dart';
6+
7+
class ToggleItem extends StackedView<ToggleItemModel> {
8+
const ToggleItem({
9+
super.key,
10+
required this.label,
11+
required this.value,
12+
required this.onChanged,
13+
});
14+
15+
final String label;
16+
final bool value;
17+
final Function(bool) onChanged;
18+
19+
@override
20+
Widget builder(
21+
BuildContext context,
22+
ToggleItemModel viewModel,
23+
Widget? child,
24+
) {
25+
return Padding(
26+
padding: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 4.0),
27+
child: Row(
28+
mainAxisAlignment: MainAxisAlignment.spaceBetween,
29+
children: [
30+
Text(
31+
label,
32+
style: TextStyle(
33+
color: context.theme.appColors.primary,
34+
fontSize: 16.0,
35+
fontWeight: FontWeight.w500,
36+
),
37+
),
38+
Switch(
39+
activeColor: context.theme.appColors.background,
40+
activeTrackColor: context.theme.appColors.switchBackground,
41+
inactiveThumbColor: context.theme.appColors.primary,
42+
inactiveTrackColor: context.theme.appColors.background,
43+
trackOutlineColor: WidgetStateProperty.resolveWith((states) {
44+
if (states.contains(WidgetState.selected)) {
45+
return context.theme.appColors.switchBackground;
46+
}
47+
return context.theme.appColors.primary;
48+
}),
49+
value: value,
50+
onChanged: onChanged,
51+
),
52+
],
53+
),
54+
);
55+
}
56+
57+
@override
58+
ToggleItemModel viewModelBuilder(
59+
BuildContext context,
60+
) =>
61+
ToggleItemModel();
62+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import 'package:stacked/stacked.dart';
2+
3+
class ToggleItemModel extends BaseViewModel {}

test/helpers/test_helpers.mocks.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1472,6 +1472,7 @@ class MockReaderService extends _i1.Mock implements _i11.ReaderService {
14721472
String? bibleCode,
14731473
String? bookCode,
14741474
List<String>? bookmarks,
1475+
bool? showMarks,
14751476
) =>
14761477
(super.noSuchMethod(
14771478
Invocation.method(
@@ -1482,6 +1483,7 @@ class MockReaderService extends _i1.Mock implements _i11.ReaderService {
14821483
bibleCode,
14831484
bookCode,
14841485
bookmarks,
1486+
showMarks,
14851487
],
14861488
),
14871489
returnValue: _i3.dummyValue<String>(
@@ -1494,6 +1496,7 @@ class MockReaderService extends _i1.Mock implements _i11.ReaderService {
14941496
bibleCode,
14951497
bookCode,
14961498
bookmarks,
1499+
showMarks,
14971500
],
14981501
),
14991502
),
@@ -1507,6 +1510,7 @@ class MockReaderService extends _i1.Mock implements _i11.ReaderService {
15071510
bibleCode,
15081511
bookCode,
15091512
bookmarks,
1513+
showMarks,
15101514
],
15111515
),
15121516
),

0 commit comments

Comments
 (0)