~repos /only-bible-app
git clone https://pyrossh.dev/repos/only-bible-app.git
The only bible app you will ever need. No ads. No in-app purchases. No distractions.
aa1a72b3
—
pyrossh 2 years ago
add more links
- README.md +2 -1
- assets/about-us.md +16 -0
- assets/privacy-policy.md +1 -1
- ios/Podfile.lock +6 -0
- ios/Runner.xcodeproj/project.pbxproj +1 -1
- ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +1 -1
- lib/main.dart +1 -0
- lib/providers/app_model.dart +50 -8
- lib/screens/about_us_screen.dart +34 -0
- lib/screens/privacy_policy_screen.dart +2 -2
- lib/utils.dart +19 -1
- lib/widgets/settings_sheet.dart +122 -77
- macos/Flutter/GeneratedPluginRegistrant.swift +2 -0
- pubspec.lock +47 -15
- pubspec.yaml +4 -1
README.md
CHANGED
|
@@ -73,4 +73,5 @@ Note:
|
|
|
73
73
|
## Todo
|
|
74
74
|
|
|
75
75
|
1. Figure out history
|
|
76
|
-
2. Add more text options compact/loose, line spacing
|
|
76
|
+
2. Add more text options compact/loose, line spacing
|
|
77
|
+
3. Backups (File, Google Drive)
|
assets/about-us.md
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
This app was created by me; Peter John, to be a minimally invasive Bible App as I got tired and fed up with the current trend
|
|
2
|
+
of bible apps in the App Stores. Most of these apps try to upsell various materials of the bible. Now days they
|
|
3
|
+
are also into the subscription business model else trying to get Ad revenue. This is all fueled more by the book publishers
|
|
4
|
+
who make huge profits from the original Bible manuscripts by translating them and selling it instead of giving it for free.
|
|
5
|
+
|
|
6
|
+
> And said unto them, It is written, My house shall be called the house of prayer; but ye have made it a den of thieves.
|
|
7
|
+
> Matthew 21:13
|
|
8
|
+
|
|
9
|
+
The word was given freely to all and is expected to be free even after processing/translation. But they have made it a
|
|
10
|
+
marketplace to take our God's word and make it den of thieves.
|
|
11
|
+
|
|
12
|
+
All the bibles used in this App are free and available in the public domain. Most of the text are sourced from
|
|
13
|
+
[The Word Project](https://www.wordproject.org/) and with the help and compilation done by the [Bible Database](https://github.com/godlytalias/Bible-Database) team,
|
|
14
|
+
|
|
15
|
+
I also agree and completely follow the [Copyrights declaration statement](https://www.wordproject.org/contact/new/copyrights.htm) of the Word project.
|
|
16
|
+
|
assets/privacy-policy.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
Peter John built the Only Bible App
|
|
1
|
+
Peter John built the Only Bible App as a Free app. This SERVICE is provided by Peter John at no cost and is intended
|
|
2
2
|
for use as is.
|
|
3
3
|
|
|
4
4
|
This page is used to inform visitors regarding my policies with the collection, use, and disclosure of Personal
|
ios/Podfile.lock
CHANGED
|
@@ -109,6 +109,8 @@ PODS:
|
|
|
109
109
|
- nanopb/encode (= 2.30909.0)
|
|
110
110
|
- nanopb/decode (2.30909.0)
|
|
111
111
|
- nanopb/encode (2.30909.0)
|
|
112
|
+
- package_info_plus (0.4.5):
|
|
113
|
+
- Flutter
|
|
112
114
|
- path_provider_foundation (0.0.1):
|
|
113
115
|
- Flutter
|
|
114
116
|
- FlutterMacOS
|
|
@@ -133,6 +135,7 @@ DEPENDENCIES:
|
|
|
133
135
|
- flutter_native_splash (from `.symlinks/plugins/flutter_native_splash/ios`)
|
|
134
136
|
- integration_test (from `.symlinks/plugins/integration_test/ios`)
|
|
135
137
|
- just_audio (from `.symlinks/plugins/just_audio/ios`)
|
|
138
|
+
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
|
|
136
139
|
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
|
|
137
140
|
- share_plus (from `.symlinks/plugins/share_plus/ios`)
|
|
138
141
|
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
|
|
@@ -179,6 +182,8 @@ EXTERNAL SOURCES:
|
|
|
179
182
|
:path: ".symlinks/plugins/integration_test/ios"
|
|
180
183
|
just_audio:
|
|
181
184
|
:path: ".symlinks/plugins/just_audio/ios"
|
|
185
|
+
package_info_plus:
|
|
186
|
+
:path: ".symlinks/plugins/package_info_plus/ios"
|
|
182
187
|
path_provider_foundation:
|
|
183
188
|
:path: ".symlinks/plugins/path_provider_foundation/darwin"
|
|
184
189
|
share_plus:
|
|
@@ -215,6 +220,7 @@ SPEC CHECKSUMS:
|
|
|
215
220
|
integration_test: 13825b8a9334a850581300559b8839134b124670
|
|
216
221
|
just_audio: baa7252489dbcf47a4c7cc9ca663e9661c99aafa
|
|
217
222
|
nanopb: b552cce312b6c8484180ef47159bc0f65a1f0431
|
|
223
|
+
package_info_plus: fd030dabf36271f146f1f3beacd48f564b0f17f7
|
|
218
224
|
path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943
|
|
219
225
|
PromisesObjC: c50d2056b5253dadbd6c2bea79b0674bd5a52fa4
|
|
220
226
|
PromisesSwift: 28dca69a9c40779916ac2d6985a0192a5cb4a265
|
ios/Runner.xcodeproj/project.pbxproj
CHANGED
|
@@ -219,7 +219,7 @@
|
|
|
219
219
|
97C146E61CF9000F007C117D /* Project object */ = {
|
|
220
220
|
isa = PBXProject;
|
|
221
221
|
attributes = {
|
|
222
|
-
LastUpgradeCheck =
|
|
222
|
+
LastUpgradeCheck = 1430;
|
|
223
223
|
ORGANIZATIONNAME = "";
|
|
224
224
|
TargetAttributes = {
|
|
225
225
|
331C8080294A63A400263BE5 = {
|
ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
2
|
<Scheme
|
|
3
|
-
LastUpgradeVersion = "
|
|
3
|
+
LastUpgradeVersion = "1430"
|
|
4
4
|
version = "1.3">
|
|
5
5
|
<BuildAction
|
|
6
6
|
parallelizeBuildables = "YES"
|
lib/main.dart
CHANGED
|
@@ -7,6 +7,7 @@ import "package:only_bible_app/firebase_options.dart";
|
|
|
7
7
|
import "package:flutter_native_splash/flutter_native_splash.dart";
|
|
8
8
|
import "package:only_bible_app/app.dart";
|
|
9
9
|
import "package:only_bible_app/providers/app_model.dart";
|
|
10
|
+
import "package:package_info_plus/package_info_plus.dart";
|
|
10
11
|
import "package:provider/provider.dart";
|
|
11
12
|
|
|
12
13
|
void main() async {
|
lib/providers/app_model.dart
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
// import "package:firebase_performance/firebase_performance.dart";
|
|
2
|
+
import "dart:ffi";
|
|
3
|
+
|
|
2
4
|
import "package:flutter/services.dart";
|
|
3
5
|
import "package:flutter/material.dart";
|
|
6
|
+
import "package:only_bible_app/screens/about_us_screen.dart";
|
|
4
7
|
import "package:only_bible_app/screens/bible_select_screen.dart";
|
|
5
8
|
import "package:only_bible_app/screens/book_select_screen.dart";
|
|
6
9
|
import "package:only_bible_app/models.dart";
|
|
@@ -9,7 +12,9 @@ import "package:only_bible_app/widgets/actions_sheet.dart";
|
|
|
9
12
|
import "package:only_bible_app/widgets/highlight_button.dart";
|
|
10
13
|
import "package:only_bible_app/widgets/note_sheet.dart";
|
|
11
14
|
import "package:only_bible_app/widgets/settings_sheet.dart";
|
|
15
|
+
import "package:package_info_plus/package_info_plus.dart";
|
|
12
16
|
import "package:provider/provider.dart";
|
|
17
|
+
import "package:share_plus/share_plus.dart";
|
|
13
18
|
import "package:shared_preferences/shared_preferences.dart";
|
|
14
19
|
import "package:get_storage/get_storage.dart";
|
|
15
20
|
import "package:only_bible_app/utils.dart";
|
|
@@ -23,6 +28,7 @@ class HistoryFrame {
|
|
|
23
28
|
}
|
|
24
29
|
|
|
25
30
|
class AppModel extends ChangeNotifier {
|
|
31
|
+
late PackageInfo packageInfo;
|
|
26
32
|
String languageCode = "en";
|
|
27
33
|
Bible bible = bibles.first;
|
|
28
34
|
bool darkMode = false;
|
|
@@ -51,6 +57,7 @@ class AppModel extends ChangeNotifier {
|
|
|
51
57
|
}
|
|
52
58
|
|
|
53
59
|
Future<(int, int)> loadData() async {
|
|
60
|
+
packageInfo = await PackageInfo.fromPlatform();
|
|
54
61
|
final prefs = await SharedPreferences.getInstance();
|
|
55
62
|
final bibleId = prefs.getInt("bibleId") ?? 1;
|
|
56
63
|
darkMode = prefs.getBool("darkMode") ?? false;
|
|
@@ -99,14 +106,6 @@ class AppModel extends ChangeNotifier {
|
|
|
99
106
|
);
|
|
100
107
|
}
|
|
101
108
|
|
|
102
|
-
void showPrivacyPolicy(BuildContext context) {
|
|
103
|
-
Navigator.of(context).push(
|
|
104
|
-
createNoTransitionPageRoute(
|
|
105
|
-
const PrivacyPolicyScreen(),
|
|
106
|
-
),
|
|
107
|
-
);
|
|
108
|
-
}
|
|
109
|
-
|
|
110
109
|
updateCurrentBible(BuildContext context, int id) async {
|
|
111
110
|
// TODO: maybe use a future as the bible needs to load
|
|
112
111
|
bible = await loadBible(id);
|
|
@@ -326,4 +325,47 @@ class AppModel extends ChangeNotifier {
|
|
|
326
325
|
Navigator.of(context).pop();
|
|
327
326
|
}
|
|
328
327
|
}
|
|
328
|
+
|
|
329
|
+
void shareAppLink(BuildContext context) {
|
|
330
|
+
if (isAndroid()) {
|
|
331
|
+
Share.share(
|
|
332
|
+
subject: "Only Bible App",
|
|
333
|
+
"https://play.google.com/store/apps/details?id=${packageInfo.packageName}",
|
|
334
|
+
);
|
|
335
|
+
} else if (isIOS()) {
|
|
336
|
+
Share.share(
|
|
337
|
+
subject: "Only Bible App",
|
|
338
|
+
"https://apps.apple.com/us/app/hare-pro/id123",
|
|
339
|
+
);
|
|
340
|
+
} else {
|
|
341
|
+
Share.share(
|
|
342
|
+
subject: "Only Bible App",
|
|
343
|
+
"https://onlybible.app",
|
|
344
|
+
);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
void rateApp(BuildContext context) {
|
|
349
|
+
if (isAndroid()) {
|
|
350
|
+
openUrl(context, "https://play.google.com/store/apps/details?id=${packageInfo.packageName}");
|
|
351
|
+
} else if (isIOS()) {
|
|
352
|
+
openUrl(context, "https://apps.apple.com/us/app/hare-pro/id123");
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
showPrivacyPolicy(BuildContext context) {
|
|
357
|
+
Navigator.of(context).push(
|
|
358
|
+
createNoTransitionPageRoute(
|
|
359
|
+
const PrivacyPolicyScreen(),
|
|
360
|
+
),
|
|
361
|
+
);
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
showAboutUs(BuildContext context) {
|
|
365
|
+
Navigator.of(context).push(
|
|
366
|
+
createNoTransitionPageRoute(
|
|
367
|
+
const AboutUsScreen(),
|
|
368
|
+
),
|
|
369
|
+
);
|
|
370
|
+
}
|
|
329
371
|
}
|
lib/screens/about_us_screen.dart
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import "package:flutter/material.dart";
|
|
2
|
+
import "package:flutter_markdown/flutter_markdown.dart";
|
|
3
|
+
import "package:only_bible_app/utils.dart";
|
|
4
|
+
|
|
5
|
+
class AboutUsScreen extends StatelessWidget {
|
|
6
|
+
const AboutUsScreen({super.key});
|
|
7
|
+
|
|
8
|
+
@override
|
|
9
|
+
Widget build(BuildContext context) {
|
|
10
|
+
return Scaffold(
|
|
11
|
+
appBar: AppBar(
|
|
12
|
+
title: const Text("About Us"),
|
|
13
|
+
),
|
|
14
|
+
body: SafeArea(
|
|
15
|
+
child: FutureBuilder(
|
|
16
|
+
future: DefaultAssetBundle.of(context).loadString("assets/about-us.md"),
|
|
17
|
+
builder: (context, snapshot) {
|
|
18
|
+
if (snapshot.hasData) {
|
|
19
|
+
return Markdown(
|
|
20
|
+
data: snapshot.data!,
|
|
21
|
+
onTapLink: (text, href, title) {
|
|
22
|
+
openUrl(context, href!);
|
|
23
|
+
},
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
return const Center(
|
|
27
|
+
child: CircularProgressIndicator(),
|
|
28
|
+
);
|
|
29
|
+
},
|
|
30
|
+
),
|
|
31
|
+
),
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
}
|
lib/screens/privacy_policy_screen.dart
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import "package:flutter/material.dart";
|
|
2
2
|
import "package:flutter_markdown/flutter_markdown.dart";
|
|
3
|
-
import "package:
|
|
3
|
+
import "package:only_bible_app/utils.dart";
|
|
4
4
|
|
|
5
5
|
class PrivacyPolicyScreen extends StatelessWidget {
|
|
6
6
|
const PrivacyPolicyScreen({super.key});
|
|
@@ -19,7 +19,7 @@ class PrivacyPolicyScreen extends StatelessWidget {
|
|
|
19
19
|
return Markdown(
|
|
20
20
|
data: snapshot.data!,
|
|
21
21
|
onTapLink: (text, href, title) {
|
|
22
|
-
|
|
22
|
+
openUrl(context, href!);
|
|
23
23
|
},
|
|
24
24
|
);
|
|
25
25
|
}
|
lib/utils.dart
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import "dart:convert";
|
|
2
|
+
import "package:only_bible_app/dialog.dart";
|
|
3
|
+
import "package:url_launcher/url_launcher.dart";
|
|
2
4
|
import 'package:flutter/gestures.dart';
|
|
3
5
|
import "package:flutter/foundation.dart" show defaultTargetPlatform, TargetPlatform;
|
|
4
6
|
import "package:flutter/material.dart";
|
|
5
7
|
import "package:flutter/services.dart";
|
|
6
8
|
import "package:only_bible_app/models.dart";
|
|
9
|
+
import "package:url_launcher/url_launcher_string.dart";
|
|
7
10
|
|
|
8
11
|
bool isDesktop() {
|
|
9
12
|
return defaultTargetPlatform == TargetPlatform.macOS ||
|
|
@@ -15,6 +18,10 @@ bool isIOS() {
|
|
|
15
18
|
return defaultTargetPlatform == TargetPlatform.iOS;
|
|
16
19
|
}
|
|
17
20
|
|
|
21
|
+
bool isAndroid() {
|
|
22
|
+
return defaultTargetPlatform == TargetPlatform.android;
|
|
23
|
+
}
|
|
24
|
+
|
|
18
25
|
bool isWide(BuildContext context) {
|
|
19
26
|
if (defaultTargetPlatform == TargetPlatform.android || defaultTargetPlatform == TargetPlatform.iOS) {
|
|
20
27
|
return false;
|
|
@@ -59,4 +66,15 @@ createSlideRoute({required BuildContext context, TextDirection? slideDir, requir
|
|
|
59
66
|
getBibleFromAsset(String languageCode, String file) async {
|
|
60
67
|
final bytes = await rootBundle.load("assets/bibles/$file.txt");
|
|
61
68
|
return getBibleFromText(languageCode, utf8.decode(bytes.buffer.asUint8List(), allowMalformed: false));
|
|
62
|
-
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
openUrl(BuildContext context, String url) async {
|
|
72
|
+
final uri = Uri.parse(url);
|
|
73
|
+
if (await canLaunchUrl(uri)) {
|
|
74
|
+
if (await launchUrl(uri)) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if (!context.mounted) return;
|
|
79
|
+
showError(context, "Could not open browser");
|
|
80
|
+
}
|
lib/widgets/settings_sheet.dart
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import "package:flutter/material.dart";
|
|
2
2
|
import "package:only_bible_app/providers/app_model.dart";
|
|
3
|
+
import "package:only_bible_app/utils.dart";
|
|
3
4
|
import "package:settings_ui/settings_ui.dart";
|
|
5
|
+
// import "package:toggle_switch/toggle_switch.dart";
|
|
4
6
|
|
|
5
7
|
class SettingsSheet extends StatelessWidget {
|
|
6
8
|
const SettingsSheet({super.key});
|
|
@@ -12,87 +14,130 @@ class SettingsSheet extends StatelessWidget {
|
|
|
12
14
|
final modeIcon = app.darkMode ? Icons.dark_mode : Icons.light_mode;
|
|
13
15
|
final modeIconColor = app.darkMode ? const Color(0xFF59EEFF) : const Color(0xFFE5B347);
|
|
14
16
|
final iconColor = Theme.of(context).textTheme.bodyMedium!.color;
|
|
15
|
-
return Column(
|
|
16
|
-
children: [
|
|
17
|
-
Padding(
|
|
18
|
-
padding: const EdgeInsets.only(bottom: 20),
|
|
19
|
-
child: Text(
|
|
20
|
-
|
|
17
|
+
return SettingsList(
|
|
18
|
+
contentPadding: EdgeInsets.zero,
|
|
19
|
+
platform: DevicePlatform.iOS,
|
|
21
|
-
|
|
20
|
+
lightTheme: const SettingsThemeData(
|
|
21
|
+
settingsListBackground: Color(0xFFF2F2F7),
|
|
22
|
-
|
|
22
|
+
),
|
|
23
|
+
darkTheme: const SettingsThemeData(
|
|
24
|
+
settingsListBackground: Color(0xFF141415),
|
|
23
|
-
|
|
25
|
+
),
|
|
24
|
-
|
|
26
|
+
sections: [
|
|
25
|
-
|
|
27
|
+
SettingsSection(
|
|
28
|
+
title: Text("Settings", style: Theme.of(context).textTheme.headlineMedium),
|
|
29
|
+
margin: const EdgeInsetsDirectional.symmetric(horizontal: 20),
|
|
30
|
+
tiles: [
|
|
26
|
-
|
|
31
|
+
SettingsTile.navigation(
|
|
32
|
+
leading: const Icon(Icons.language, color: Colors.green),
|
|
33
|
+
title: const Text("App Language"),
|
|
34
|
+
value: const Text("English"),
|
|
35
|
+
),
|
|
27
|
-
|
|
36
|
+
SettingsTile.navigation(
|
|
37
|
+
leading: const Icon(Icons.book_outlined, color: Colors.blueAccent),
|
|
28
|
-
|
|
38
|
+
title: const Text("Bible"),
|
|
39
|
+
value: Text(selectedBible.name),
|
|
40
|
+
onPressed: app.changeBible,
|
|
41
|
+
),
|
|
42
|
+
SettingsTile.switchTile(
|
|
43
|
+
onToggle: (value) {
|
|
44
|
+
app.toggleMode();
|
|
45
|
+
},
|
|
46
|
+
initialValue: app.darkMode,
|
|
29
|
-
|
|
47
|
+
leading: Icon(modeIcon, color: modeIconColor),
|
|
48
|
+
title: const Text("Dark mode"),
|
|
30
49
|
),
|
|
31
|
-
|
|
50
|
+
// SettingsTile.navigation(
|
|
51
|
+
// leading: Icon(Icons.color_lens_outlined, color: Colors.pink),
|
|
52
|
+
// title: const Text("Theme"),
|
|
53
|
+
// trailing: ToggleSwitch(
|
|
54
|
+
// // minWidth: 50.0,
|
|
55
|
+
// // minHeight: 50.0,
|
|
56
|
+
// initialLabelIndex: app.darkMode ? 1 : 0,
|
|
57
|
+
// cornerRadius: 20.0,
|
|
58
|
+
// borderWidth: 1,
|
|
59
|
+
// dividerColor: Colors.black,
|
|
60
|
+
// dividerMargin: 1,
|
|
61
|
+
// borderColor: [Color(0xFFE9E9EA), Color(0xFFE9E9EA)],
|
|
62
|
+
// activeFgColor: modeIconColor,
|
|
32
|
-
|
|
63
|
+
// inactiveBgColor: Color(0xFFEAEAEB),
|
|
64
|
+
// inactiveFgColor: Colors.grey,
|
|
65
|
+
// activeBgColors: [[Colors.white, Colors.white], [Color(0xFF39393D), Color(0xFF39393D)]],
|
|
66
|
+
// totalSwitches: 2,
|
|
67
|
+
// icons: const [
|
|
68
|
+
// Icons.light_mode,
|
|
69
|
+
// Icons.dark_mode,
|
|
70
|
+
// ],
|
|
71
|
+
// iconSize: 50.0,
|
|
72
|
+
// animate: true,
|
|
73
|
+
// onToggle: (index) {
|
|
74
|
+
// app.toggleMode();
|
|
75
|
+
// },
|
|
76
|
+
// ),
|
|
77
|
+
// ),
|
|
78
|
+
SettingsTile.switchTile(
|
|
79
|
+
onToggle: (value) {
|
|
80
|
+
app.toggleBold();
|
|
81
|
+
},
|
|
82
|
+
initialValue: app.fontBold,
|
|
83
|
+
leading: Icon(Icons.format_bold, color: iconColor),
|
|
84
|
+
title: const Text("Font Weight"),
|
|
85
|
+
// trailing: ToggleSwitch(
|
|
86
|
+
// minHeight: 35,
|
|
87
|
+
// minWidth: 70,
|
|
88
|
+
// cornerRadius: 20.0,
|
|
89
|
+
// initialLabelIndex: 0,
|
|
90
|
+
// totalSwitches: 2,
|
|
91
|
+
// labels: const ["Normal", "Bold"],
|
|
92
|
+
// onToggle: (index) {
|
|
93
|
+
// print('switched to: $index');
|
|
94
|
+
// },
|
|
95
|
+
// ),
|
|
96
|
+
),
|
|
97
|
+
SettingsTile(
|
|
98
|
+
title: const Text("Increase font size"),
|
|
99
|
+
leading: Icon(Icons.font_download, color: iconColor),
|
|
100
|
+
trailing: IconButton(
|
|
101
|
+
onPressed: app.increaseFont,
|
|
102
|
+
icon: const Icon(Icons.add_circle_outline, size: 32, color: Colors.redAccent),
|
|
103
|
+
),
|
|
33
104
|
),
|
|
34
|
-
sections: [
|
|
35
|
-
SettingsSection(
|
|
36
|
-
margin: const EdgeInsetsDirectional.symmetric(horizontal: 20),
|
|
37
|
-
tiles: [
|
|
38
|
-
SettingsTile.navigation(
|
|
39
|
-
leading: const Icon(Icons.language, color: Colors.green),
|
|
40
|
-
title: const Text("App Language"),
|
|
41
|
-
value: const Text("English"),
|
|
42
|
-
),
|
|
43
|
-
SettingsTile.navigation(
|
|
44
|
-
leading: const Icon(Icons.book_outlined, color: Colors.blueAccent),
|
|
45
|
-
title: const Text("Bible"),
|
|
46
|
-
value: Text(selectedBible.name),
|
|
47
|
-
onPressed: app.changeBible,
|
|
48
|
-
),
|
|
49
|
-
SettingsTile.switchTile(
|
|
50
|
-
onToggle: (value) {
|
|
51
|
-
app.toggleMode();
|
|
52
|
-
},
|
|
53
|
-
initialValue: app.darkMode,
|
|
54
|
-
leading: Icon(modeIcon, color: modeIconColor),
|
|
55
|
-
title: const Text("Dark mode"),
|
|
56
|
-
),
|
|
57
|
-
SettingsTile.switchTile(
|
|
58
|
-
onToggle: (value) {
|
|
59
|
-
app.toggleBold();
|
|
60
|
-
},
|
|
61
|
-
initialValue: app.fontBold,
|
|
62
|
-
leading: Icon(Icons.format_bold, color: iconColor),
|
|
63
|
-
title: const Text("Bold font"),
|
|
64
|
-
),
|
|
65
|
-
|
|
105
|
+
SettingsTile(
|
|
66
|
-
|
|
106
|
+
title: const Text("Decrease font size"),
|
|
67
|
-
|
|
107
|
+
leading: Icon(Icons.font_download, color: iconColor),
|
|
68
|
-
|
|
108
|
+
trailing: IconButton(
|
|
69
|
-
onPressed: app.increaseFont,
|
|
70
|
-
icon: const Icon(Icons.add_circle_outline, size: 32, color: Colors.redAccent),
|
|
71
|
-
),
|
|
72
|
-
),
|
|
73
|
-
SettingsTile(
|
|
74
|
-
title: const Text("Decrease font size"),
|
|
75
|
-
leading: Icon(Icons.font_download, color: iconColor),
|
|
76
|
-
trailing: IconButton(
|
|
77
|
-
|
|
109
|
+
onPressed: app.decreaseFont,
|
|
78
|
-
|
|
110
|
+
icon: const Icon(Icons.remove_circle_outline, size: 32, color: Colors.blueAccent),
|
|
79
|
-
),
|
|
80
|
-
),
|
|
81
|
-
],
|
|
82
111
|
),
|
|
112
|
+
),
|
|
113
|
+
],
|
|
114
|
+
),
|
|
83
|
-
|
|
115
|
+
SettingsSection(
|
|
116
|
+
// title: Text("About", style: Theme.of(context).textTheme.headlineMedium),
|
|
84
|
-
|
|
117
|
+
margin: const EdgeInsetsDirectional.symmetric(horizontal: 20, vertical: 20),
|
|
85
|
-
title: const Text("About"),
|
|
86
|
-
|
|
118
|
+
tiles: [
|
|
87
|
-
|
|
119
|
+
SettingsTile.navigation(
|
|
88
|
-
|
|
120
|
+
leading: const Icon(Icons.policy_outlined, color: Colors.grey),
|
|
89
|
-
|
|
121
|
+
title: const Text("Privacy Policy"),
|
|
90
|
-
|
|
122
|
+
onPressed: app.showPrivacyPolicy,
|
|
91
|
-
|
|
123
|
+
),
|
|
124
|
+
SettingsTile.navigation(
|
|
125
|
+
leading: const Icon(Icons.share_outlined, color: Colors.grey),
|
|
126
|
+
title: const Text("Share the app"),
|
|
127
|
+
onPressed: app.shareAppLink,
|
|
92
|
-
|
|
128
|
+
),
|
|
129
|
+
if (!isDesktop()) // TODO: mabe support OSx if we release in that store
|
|
130
|
+
SettingsTile.navigation(
|
|
131
|
+
leading: const Icon(Icons.star_border_outlined, color: Colors.grey),
|
|
132
|
+
title: const Text("Rate the app"),
|
|
133
|
+
onPressed: app.rateApp,
|
|
93
134
|
),
|
|
135
|
+
SettingsTile.navigation(
|
|
136
|
+
leading: const Icon(Icons.info_outline, color: Colors.grey),
|
|
137
|
+
title: const Text("About us"),
|
|
138
|
+
onPressed: app.showAboutUs,
|
|
139
|
+
),
|
|
94
|
-
|
|
140
|
+
],
|
|
95
|
-
),
|
|
96
141
|
),
|
|
97
142
|
],
|
|
98
143
|
);
|
macos/Flutter/GeneratedPluginRegistrant.swift
CHANGED
|
@@ -10,6 +10,7 @@ import firebase_core
|
|
|
10
10
|
import firebase_crashlytics
|
|
11
11
|
import firebase_storage
|
|
12
12
|
import just_audio
|
|
13
|
+
import package_info_plus
|
|
13
14
|
import path_provider_foundation
|
|
14
15
|
import share_plus
|
|
15
16
|
import shared_preferences_foundation
|
|
@@ -21,6 +22,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
|
|
21
22
|
FLTFirebaseCrashlyticsPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCrashlyticsPlugin"))
|
|
22
23
|
FLTFirebaseStoragePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseStoragePlugin"))
|
|
23
24
|
JustAudioPlugin.register(with: registry.registrar(forPlugin: "JustAudioPlugin"))
|
|
25
|
+
FLTPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FLTPackageInfoPlusPlugin"))
|
|
24
26
|
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
|
|
25
27
|
SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin"))
|
|
26
28
|
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
|
pubspec.lock
CHANGED
|
@@ -173,10 +173,10 @@ packages:
|
|
|
173
173
|
dependency: transitive
|
|
174
174
|
description:
|
|
175
175
|
name: collection
|
|
176
|
-
sha256:
|
|
176
|
+
sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687
|
|
177
177
|
url: "https://pub.dev"
|
|
178
178
|
source: hosted
|
|
179
|
-
version: "1.17.
|
|
179
|
+
version: "1.17.2"
|
|
180
180
|
convert:
|
|
181
181
|
dependency: transitive
|
|
182
182
|
description:
|
|
@@ -520,10 +520,10 @@ packages:
|
|
|
520
520
|
dependency: "direct main"
|
|
521
521
|
description:
|
|
522
522
|
name: intl
|
|
523
|
-
sha256:
|
|
523
|
+
sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d"
|
|
524
524
|
url: "https://pub.dev"
|
|
525
525
|
source: hosted
|
|
526
|
-
version: "0.18.
|
|
526
|
+
version: "0.18.1"
|
|
527
527
|
io:
|
|
528
528
|
dependency: transitive
|
|
529
529
|
description:
|
|
@@ -600,18 +600,18 @@ packages:
|
|
|
600
600
|
dependency: transitive
|
|
601
601
|
description:
|
|
602
602
|
name: matcher
|
|
603
|
-
sha256: "
|
|
603
|
+
sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e"
|
|
604
604
|
url: "https://pub.dev"
|
|
605
605
|
source: hosted
|
|
606
|
-
version: "0.12.
|
|
606
|
+
version: "0.12.16"
|
|
607
607
|
material_color_utilities:
|
|
608
608
|
dependency: transitive
|
|
609
609
|
description:
|
|
610
610
|
name: material_color_utilities
|
|
611
|
-
sha256:
|
|
611
|
+
sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41"
|
|
612
612
|
url: "https://pub.dev"
|
|
613
613
|
source: hosted
|
|
614
|
-
version: "0.
|
|
614
|
+
version: "0.5.0"
|
|
615
615
|
meta:
|
|
616
616
|
dependency: transitive
|
|
617
617
|
description:
|
|
@@ -644,6 +644,22 @@ packages:
|
|
|
644
644
|
url: "https://pub.dev"
|
|
645
645
|
source: hosted
|
|
646
646
|
version: "2.1.0"
|
|
647
|
+
package_info_plus:
|
|
648
|
+
dependency: "direct main"
|
|
649
|
+
description:
|
|
650
|
+
name: package_info_plus
|
|
651
|
+
sha256: "6ff267fcd9d48cb61c8df74a82680e8b82e940231bb5f68356672fde0397334a"
|
|
652
|
+
url: "https://pub.dev"
|
|
653
|
+
source: hosted
|
|
654
|
+
version: "4.1.0"
|
|
655
|
+
package_info_plus_platform_interface:
|
|
656
|
+
dependency: transitive
|
|
657
|
+
description:
|
|
658
|
+
name: package_info_plus_platform_interface
|
|
659
|
+
sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6"
|
|
660
|
+
url: "https://pub.dev"
|
|
661
|
+
source: hosted
|
|
662
|
+
version: "2.0.1"
|
|
647
663
|
path:
|
|
648
664
|
dependency: transitive
|
|
649
665
|
description:
|
|
@@ -885,10 +901,10 @@ packages:
|
|
|
885
901
|
dependency: transitive
|
|
886
902
|
description:
|
|
887
903
|
name: source_span
|
|
888
|
-
sha256:
|
|
904
|
+
sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
|
|
889
905
|
url: "https://pub.dev"
|
|
890
906
|
source: hosted
|
|
891
|
-
version: "1.
|
|
907
|
+
version: "1.10.0"
|
|
892
908
|
stack_trace:
|
|
893
909
|
dependency: transitive
|
|
894
910
|
description:
|
|
@@ -941,10 +957,10 @@ packages:
|
|
|
941
957
|
dependency: transitive
|
|
942
958
|
description:
|
|
943
959
|
name: test_api
|
|
944
|
-
sha256:
|
|
960
|
+
sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8"
|
|
945
961
|
url: "https://pub.dev"
|
|
946
962
|
source: hosted
|
|
947
|
-
version: "0.
|
|
963
|
+
version: "0.6.0"
|
|
948
964
|
timing:
|
|
949
965
|
dependency: transitive
|
|
950
966
|
description:
|
|
@@ -953,6 +969,14 @@ packages:
|
|
|
953
969
|
url: "https://pub.dev"
|
|
954
970
|
source: hosted
|
|
955
971
|
version: "1.0.1"
|
|
972
|
+
toggle_switch:
|
|
973
|
+
dependency: "direct main"
|
|
974
|
+
description:
|
|
975
|
+
name: toggle_switch
|
|
976
|
+
sha256: "9e6af1f0c5a97d9de41109dc7b9e1b3bbe73417f89b10e0e44dc834fb493d4cb"
|
|
977
|
+
url: "https://pub.dev"
|
|
978
|
+
source: hosted
|
|
979
|
+
version: "2.1.0"
|
|
956
980
|
typed_data:
|
|
957
981
|
dependency: transitive
|
|
958
982
|
description:
|
|
@@ -1053,10 +1077,10 @@ packages:
|
|
|
1053
1077
|
dependency: transitive
|
|
1054
1078
|
description:
|
|
1055
1079
|
name: vm_service
|
|
1056
|
-
sha256:
|
|
1080
|
+
sha256: c620a6f783fa22436da68e42db7ebbf18b8c44b9a46ab911f666ff09ffd9153f
|
|
1057
1081
|
url: "https://pub.dev"
|
|
1058
1082
|
source: hosted
|
|
1059
|
-
version: "11.
|
|
1083
|
+
version: "11.7.1"
|
|
1060
1084
|
watcher:
|
|
1061
1085
|
dependency: transitive
|
|
1062
1086
|
description:
|
|
@@ -1065,6 +1089,14 @@ packages:
|
|
|
1065
1089
|
url: "https://pub.dev"
|
|
1066
1090
|
source: hosted
|
|
1067
1091
|
version: "1.1.0"
|
|
1092
|
+
web:
|
|
1093
|
+
dependency: transitive
|
|
1094
|
+
description:
|
|
1095
|
+
name: web
|
|
1096
|
+
sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10
|
|
1097
|
+
url: "https://pub.dev"
|
|
1098
|
+
source: hosted
|
|
1099
|
+
version: "0.1.4-beta"
|
|
1068
1100
|
web_socket_channel:
|
|
1069
1101
|
dependency: transitive
|
|
1070
1102
|
description:
|
|
@@ -1114,5 +1146,5 @@ packages:
|
|
|
1114
1146
|
source: hosted
|
|
1115
1147
|
version: "3.1.2"
|
|
1116
1148
|
sdks:
|
|
1117
|
-
dart: ">=3.0.
|
|
1149
|
+
dart: ">=3.1.0-185.0.dev <4.0.0"
|
|
1118
1150
|
flutter: ">=3.10.0"
|
pubspec.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
name: only_bible_app
|
|
2
2
|
description: The only bible app you will ever need
|
|
3
3
|
publish_to: 'none'
|
|
4
|
-
version: 1.0.0
|
|
4
|
+
version: 1.0.0
|
|
5
5
|
|
|
6
6
|
environment:
|
|
7
7
|
sdk: '>=3.0.6 <4.0.0'
|
|
@@ -28,6 +28,8 @@ dependencies:
|
|
|
28
28
|
share_plus: ^7.1.0
|
|
29
29
|
flutter_markdown: ^0.6.17+1
|
|
30
30
|
url_launcher: ^6.1.12
|
|
31
|
+
toggle_switch: ^2.1.0
|
|
32
|
+
package_info_plus: ^4.1.0
|
|
31
33
|
|
|
32
34
|
dev_dependencies:
|
|
33
35
|
flutter_test:
|
|
@@ -45,6 +47,7 @@ flutter:
|
|
|
45
47
|
- assets/bibles/
|
|
46
48
|
- assets/fonts/
|
|
47
49
|
- assets/privacy-policy.md
|
|
50
|
+
- assets/about-us.md
|
|
48
51
|
fonts:
|
|
49
52
|
- family: Roboto
|
|
50
53
|
fonts:
|