~repos /only-bible-app

#kotlin#android#ios

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 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 app as a Free app. This SERVICE is provided by Peter John at no cost and is intended
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 = 1300;
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 = "1300"
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:url_launcher/url_launcher.dart";
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
- launchUrl(Uri.parse(href!));
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
- "Settings",
17
+ return SettingsList(
18
+ contentPadding: EdgeInsets.zero,
19
+ platform: DevicePlatform.iOS,
21
- style: Theme.of(context).textTheme.headlineMedium,
20
+ lightTheme: const SettingsThemeData(
21
+ settingsListBackground: Color(0xFFF2F2F7),
22
- ),
22
+ ),
23
+ darkTheme: const SettingsThemeData(
24
+ settingsListBackground: Color(0xFF141415),
23
- ),
25
+ ),
24
- Expanded(
26
+ sections: [
25
- child: SettingsList(
27
+ SettingsSection(
28
+ title: Text("Settings", style: Theme.of(context).textTheme.headlineMedium),
29
+ margin: const EdgeInsetsDirectional.symmetric(horizontal: 20),
30
+ tiles: [
26
- contentPadding: EdgeInsets.zero,
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
- platform: DevicePlatform.iOS,
36
+ SettingsTile.navigation(
37
+ leading: const Icon(Icons.book_outlined, color: Colors.blueAccent),
28
- lightTheme: const SettingsThemeData(
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
- settingsListBackground: Color(0xFFF2F2F7),
47
+ leading: Icon(modeIcon, color: modeIconColor),
48
+ title: const Text("Dark mode"),
30
49
  ),
31
- darkTheme: const SettingsThemeData(
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
- settingsListBackground: Color(0xFF141415),
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
- SettingsTile(
105
+ SettingsTile(
66
- title: const Text("Increase font size"),
106
+ title: const Text("Decrease font size"),
67
- leading: Icon(Icons.font_download, color: iconColor),
107
+ leading: Icon(Icons.font_download, color: iconColor),
68
- trailing: IconButton(
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
- onPressed: app.decreaseFont,
109
+ onPressed: app.decreaseFont,
78
- icon: const Icon(Icons.remove_circle_outline, size: 32, color: Colors.blueAccent),
110
+ icon: const Icon(Icons.remove_circle_outline, size: 32, color: Colors.blueAccent),
79
- ),
80
- ),
81
- ],
82
111
  ),
112
+ ),
113
+ ],
114
+ ),
83
- SettingsSection(
115
+ SettingsSection(
116
+ // title: Text("About", style: Theme.of(context).textTheme.headlineMedium),
84
- margin: const EdgeInsetsDirectional.symmetric(horizontal: 20, vertical: 20),
117
+ margin: const EdgeInsetsDirectional.symmetric(horizontal: 20, vertical: 20),
85
- title: const Text("About"),
86
- tiles: [
118
+ tiles: [
87
- SettingsTile.navigation(
119
+ SettingsTile.navigation(
88
- leading: const Icon(Icons.info_outline, color: Colors.grey),
120
+ leading: const Icon(Icons.policy_outlined, color: Colors.grey),
89
- title: const Text("Privacy Policy"),
121
+ title: const Text("Privacy Policy"),
90
- onPressed: app.showPrivacyPolicy,
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: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c"
176
+ sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687
177
177
  url: "https://pub.dev"
178
178
  source: hosted
179
- version: "1.17.1"
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: a3715e3bc90294e971cb7dc063fbf3cd9ee0ebf8604ffeafabd9e6f16abbdbe6
523
+ sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d"
524
524
  url: "https://pub.dev"
525
525
  source: hosted
526
- version: "0.18.0"
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: "6501fbd55da300384b768785b83e5ce66991266cec21af89ab9ae7f5ce1c4cbb"
603
+ sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e"
604
604
  url: "https://pub.dev"
605
605
  source: hosted
606
- version: "0.12.15"
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: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724
611
+ sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41"
612
612
  url: "https://pub.dev"
613
613
  source: hosted
614
- version: "0.2.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: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250
904
+ sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
889
905
  url: "https://pub.dev"
890
906
  source: hosted
891
- version: "1.9.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: eb6ac1540b26de412b3403a163d919ba86f6a973fe6cc50ae3541b80092fdcfb
960
+ sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8"
945
961
  url: "https://pub.dev"
946
962
  source: hosted
947
- version: "0.5.1"
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: f6deed8ed625c52864792459709183da231ebf66ff0cf09e69b573227c377efe
1080
+ sha256: c620a6f783fa22436da68e42db7ebbf18b8c44b9a46ab911f666ff09ffd9153f
1057
1081
  url: "https://pub.dev"
1058
1082
  source: hosted
1059
- version: "11.3.0"
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.6 <4.0.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+1
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: