~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.


9ca5ae7a pyrossh

2 years ago
Add routes
bible_app/README.md CHANGED
@@ -2,15 +2,9 @@
2
2
 
3
3
  A new Flutter project.
4
4
 
5
- ## Getting Started
5
+ ## Setup
6
6
 
7
- This project is a starting point for a Flutter application.
7
+ ```agsl
8
-
9
- A few resources to get you started if this is your first Flutter project:
10
-
11
- - [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab)
12
- - [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook)
13
-
14
- For help getting started with Flutter development, view the
15
- [online documentation](https://docs.flutter.dev/), which offers tutorials,
16
- samples, guidance on mobile development, and a full API reference.
8
+ flutter pub global activate build_runner
9
+ flutter pub run build_runner build
10
+ ```
bible_app/lib/components/book_selector.dart CHANGED
@@ -1,5 +1,6 @@
1
1
  import "package:flutter/material.dart";
2
2
  import "package:flutter_reactive_value/flutter_reactive_value.dart";
3
+ import "package:kannada_bible_app/screens/home.dart";
3
4
  import "../domain/book.dart";
4
5
  import "../domain/kannada_gen.dart";
5
6
 
@@ -20,7 +21,7 @@ class BookSelector extends StatelessWidget {
20
21
  if (tab == 1) {
21
22
  final book = kannadaBible[tabBookIndex.reactiveValue(context)];
22
23
  return Container(
23
- margin: const EdgeInsets.symmetric(vertical: 15, horizontal: 30),
24
+ // margin: const EdgeInsets.symmetric(vertical: 15, horizontal: 30),
24
25
  color: Colors.white,
25
26
  child: Column(
26
27
  crossAxisAlignment: CrossAxisAlignment.start,
@@ -35,7 +36,7 @@ class BookSelector extends StatelessWidget {
35
36
  );
36
37
  }
37
38
  return Container(
38
- margin: const EdgeInsets.symmetric(vertical: 15, horizontal: 30),
39
+ // margin: const EdgeInsets.symmetric(vertical: 15, horizontal: 30),
39
40
  color: Colors.white,
40
41
  child: Column(
41
42
  crossAxisAlignment: CrossAxisAlignment.start,
@@ -70,7 +71,7 @@ class BooksList extends StatelessWidget {
70
71
  maxCrossAxisExtent: 80.0,
71
72
  children: List.generate(books.length, (index) {
72
73
  final name = books[index].replaceAll(" ", "").substring(0, 3).toUpperCase();
73
- return GestureDetector(
74
+ return InkWell(
74
75
  onTap: () {
75
76
  onTabBookChange(offset + index);
76
77
  },
@@ -107,9 +108,9 @@ class ChaptersList extends StatelessWidget {
107
108
  mainAxisSpacing: 10.0,
108
109
  maxCrossAxisExtent: 80.0,
109
110
  children: List.generate(book.chapters.length, (index) {
110
- return GestureDetector(
111
+ return InkWell(
111
112
  onTap: () {
112
- Navigator.of(context).pop((bookIndex, index));
113
+ HomeScreenRoute(book: book.name, chapter: index).go(context);
113
114
  },
114
115
  child: Container(
115
116
  margin: const EdgeInsets.all(3),
bible_app/lib/components/header.dart CHANGED
@@ -1,22 +1,22 @@
1
1
  import "dart:math";
2
2
  import "package:flutter/material.dart";
3
- import "package:flutter/scheduler.dart";
4
- import "package:flutter_reactive_value/flutter_reactive_value.dart";
5
3
  import "package:just_audio/just_audio.dart";
4
+ import "package:kannada_bible_app/screens/home.dart";
6
5
  import "../state.dart";
7
- import "../components/book_selector.dart";
8
- import "../utils/dialog.dart";
9
6
  import "../domain/kannada_gen.dart";
10
7
 
11
8
  class Header extends StatelessWidget {
12
9
  final String bookName;
10
+ final int chapter;
13
11
  final player = AudioPlayer();
14
12
 
15
- Header({super.key, required this.bookName});
13
+ Header({super.key, required this.bookName, required this.chapter}) {
14
+ player.setUrl("https://github.com/pyrossh/bible-app/raw/master/public/audio/output.mp3");
15
+ player.setUrl("asset:output.mp3");
16
+ }
16
17
 
17
18
  @override
18
19
  Widget build(BuildContext context) {
19
- final chapter = chapterIndex.reactiveValue(context);
20
20
  return Container(
21
21
  margin: const EdgeInsets.symmetric(horizontal: 40),
22
22
  padding: const EdgeInsets.symmetric(vertical: 15),
@@ -28,17 +28,7 @@ class Header extends StatelessWidget {
28
28
  children: [
29
29
  InkWell(
30
30
  onTap: () {
31
- tabBookIndex.value = 0;
32
- showCustomDialog<(int, int)>(context, const BookSelector()).then((rec) {
33
- if (rec != null) {
34
- selectedVerses.value.clear();
31
+ SelectScreenRoute().go(context);
35
- onBookChange(rec.$1);
36
- onChapterChange(rec.$2);
37
- SchedulerBinding.instance.addPostFrameCallback((duration) {
38
- tabIndex.value = 0;
39
- });
40
- }
41
- });
42
32
  },
43
33
  child: Row(
44
34
  crossAxisAlignment: CrossAxisAlignment.center,
@@ -62,16 +52,19 @@ class Header extends StatelessWidget {
62
52
  .chapters[chapterIndex.value]
63
53
  .verses
64
54
  .where((v) => selectedVerses.value.contains(v.index - 1));
55
+ // Todo: play/pause button
65
56
  for (final v in verses) {
66
- await player.setUrl("asset:output.mp3");
57
+ try {
67
- await player.setClip(
58
+ await player.setClip(
68
- start: Duration(milliseconds: (v.audioRange.start * 1000).toInt()),
59
+ start: Duration(milliseconds: (v.audioRange.start * 1000).toInt()),
69
- end: Duration(milliseconds: (v.audioRange.end * 1000).toInt()),
60
+ end: Duration(milliseconds: (v.audioRange.end * 1000).toInt()),
70
- );
61
+ );
71
- await player.play();
62
+ await player.play();
72
- await player.pause();
63
+ await player.pause();
64
+ } catch (err) {
65
+ // show
66
+ }
73
67
  }
74
- // "https://github.com/pyrossh/bible-app/raw/master/public/audio/output.mp3"
75
68
  },
76
69
  ),
77
70
  const Spacer(flex: 1),
bible_app/lib/main.dart CHANGED
@@ -1,6 +1,10 @@
1
1
  import "package:flutter/material.dart";
2
+ import 'package:go_router/go_router.dart';
2
3
  import "package:flutter_persistent_value_notifier/flutter_persistent_value_notifier.dart";
4
+ import "package:kannada_bible_app/components/book_selector.dart";
3
5
  import "./screens/home.dart";
6
+ import "components/header.dart";
7
+ import "components/sidebar.dart";
4
8
 
5
9
  void main() async {
6
10
  WidgetsFlutterBinding.ensureInitialized();
@@ -8,18 +12,44 @@ void main() async {
8
12
  runApp(const App());
9
13
  }
10
14
 
15
+ final _rootNavigatorKey = GlobalKey<NavigatorState>();
16
+ final _shellNavigatorKey = GlobalKey<NavigatorState>();
17
+ final _router = GoRouter(
18
+ navigatorKey: _rootNavigatorKey,
19
+ initialLocation: "/Genesis/1",
20
+ routes: [
21
+ ShellRoute(
22
+ navigatorKey: _shellNavigatorKey,
23
+ routes: $appRoutes,
24
+ builder: (context, state, child) {
25
+ return Scaffold(
26
+ backgroundColor: Colors.white,
27
+ body: Row(
28
+ children: [
29
+ const Sidebar(),
30
+ Flexible(
31
+ child: child,
32
+ ),
33
+ ],
34
+ ),
35
+ );
36
+ },
37
+ ),
38
+ ],
39
+ );
40
+
11
41
  const lightColorScheme = ColorScheme(
12
- brightness: Brightness.light,
42
+ brightness: Brightness.light,
13
- primary: Color(0xFF4C2323),
43
+ primary: Color(0xFF4C2323),
14
- onPrimary: Color(0xFF4C2323),
44
+ onPrimary: Color(0xFF4C2323),
15
- secondary: Colors.white,
45
+ secondary: Colors.white,
16
- onSecondary: Colors.white,
46
+ onSecondary: Colors.white,
17
- error: Colors.red,
47
+ error: Colors.red,
18
- onError: Colors.red,
48
+ onError: Colors.red,
19
- background: Colors.white,
49
+ background: Colors.white,
20
- onBackground: Colors.white,
50
+ onBackground: Colors.white,
21
- surface: Colors.white,
51
+ surface: Colors.white,
22
- onSurface: Colors.white,
52
+ onSurface: Colors.white,
23
53
  );
24
54
 
25
55
  class App extends StatelessWidget {
@@ -27,7 +57,8 @@ class App extends StatelessWidget {
27
57
 
28
58
  @override
29
59
  Widget build(BuildContext context) {
30
- return MaterialApp(
60
+ return MaterialApp.router(
61
+ routerConfig: _router,
31
62
  theme: ThemeData(
32
63
  brightness: Brightness.light,
33
64
  primaryColor: const Color(0xFF4C2323),
@@ -76,6 +107,11 @@ class App extends StatelessWidget {
76
107
  ),
77
108
  ),
78
109
  darkTheme: ThemeData(
110
+ pageTransitionsTheme: PageTransitionsTheme(
111
+ builders: {
112
+ TargetPlatform.macOS: CupertinoPageTransitionsBuilder(),
113
+ },
114
+ ),
79
115
  brightness: Brightness.light,
80
116
  primaryColor: const Color(0xFF4C2323),
81
117
  secondaryHeaderColor: const Color(0xFFFFB341),
@@ -121,7 +157,6 @@ class App extends StatelessWidget {
121
157
  ),
122
158
  ),
123
159
  ),
124
- home: const HomeScreen(),
125
160
  );
126
161
  }
127
162
  }
bible_app/lib/screens/home.dart CHANGED
@@ -1,48 +1,108 @@
1
1
  import "package:flutter/material.dart";
2
- import "package:flutter_reactive_value/flutter_reactive_value.dart";
2
+ import 'package:go_router/go_router.dart';
3
+ import "../components/book_selector.dart";
3
4
  import "../components/header.dart";
4
5
  import "../domain/kannada_gen.dart";
5
- import "../components/sidebar.dart";
6
6
  import "../components/verse.dart";
7
7
  import "../state.dart";
8
8
 
9
+ part 'home.g.dart';
10
+
11
+ @TypedGoRoute<HomeScreenRoute>(
12
+ path: "/:book/:chapter",
13
+ )
14
+ @immutable
9
- class HomeScreen extends StatelessWidget {
15
+ class HomeScreenRoute extends GoRouteData {
16
+ final String book;
17
+ final int chapter;
18
+
19
+ HomeScreenRoute({required this.book, required this.chapter}) {
10
- const HomeScreen({super.key});
20
+ selectedVerses.value.clear();
21
+ }
11
22
 
12
23
  @override
13
- Widget build(BuildContext context) {
24
+ Page buildPage(BuildContext context, GoRouterState state) {
14
- final book = kannadaBible[bookIndex.reactiveValue(context)];
25
+ final selectedBook = kannadaBible.firstWhere((it) => book == it.name);
15
- final items = book.chapters[chapterIndex.reactiveValue(context)].verses;
26
+ final verses = selectedBook.chapters[chapter].verses;
16
-
27
+
17
- return Scaffold(
28
+ return NoPageTransition(
18
- backgroundColor: Colors.white,
19
- body: Row(
29
+ child: Column(
20
- children: [
30
+ children: [
21
- const Sidebar(),
31
+ Header(bookName: selectedBook.name, chapter: chapter),
22
- Flexible(
32
+ Flexible(
23
- child: Column(
24
- children: [
25
- Header(bookName: book.name),
26
- Flexible(
27
- child: ListView.builder(
33
+ child: ListView.builder(
28
- padding: const EdgeInsets.symmetric(
34
+ padding: const EdgeInsets.symmetric(
29
- vertical: 20,
35
+ vertical: 20,
30
- horizontal: 40,
36
+ horizontal: 40,
31
- ),
32
- itemCount: items.length,
33
- itemBuilder: (BuildContext context, int index) {
34
- final v = items[index];
35
- return Container(
36
- margin: const EdgeInsets.symmetric(vertical: 6),
37
- child: Verse(index: v.index - 1, text: v.text),
38
- );
39
- },
40
- ),
41
- )
42
- ],
43
37
  ),
38
+ itemCount: verses.length,
39
+ itemBuilder: (BuildContext context, int index) {
40
+ final v = verses[index];
41
+ return Container(
42
+ margin: const EdgeInsets.symmetric(vertical: 6),
43
+ child: Verse(index: v.index - 1, text: v.text),
44
- )
44
+ );
45
+ },
46
+ ),
47
+ ),
45
- ],
48
+ ],
49
+ ),
46
- ));
50
+ );
47
51
  }
48
52
  }
53
+
54
+ @TypedGoRoute<SelectScreenRoute>(
55
+ path: "/select",
56
+ )
57
+ @immutable
58
+ class SelectScreenRoute extends GoRouteData {
59
+ SelectScreenRoute() {
60
+ tabIndex.value = 0;
61
+ }
62
+
63
+ @override
64
+ Page buildPage(BuildContext context, GoRouterState state) {
65
+ return NoPageTransition(
66
+ child: Column(
67
+ crossAxisAlignment: CrossAxisAlignment.start,
68
+ children: [
69
+ Header(bookName: "", chapter: 1),
70
+ Flexible(
71
+ child: Container(
72
+ margin: const EdgeInsets.only(left: 40, top: 20, right: 300),
73
+ child: const BookSelector(),
74
+ ),
75
+ ),
76
+ ],
77
+ ),
78
+ );
79
+ }
80
+ }
81
+
82
+ class NoPageTransition extends CustomTransitionPage {
83
+ NoPageTransition({required super.child})
84
+ : super(
85
+ transitionDuration: const Duration(milliseconds: 0),
86
+ reverseTransitionDuration: const Duration(milliseconds: 0),
87
+ transitionsBuilder: (context, animation, secondaryAnimation, child) {
88
+ return FadeTransition(
89
+ opacity: animation,
90
+ child: child,
91
+ );
92
+ });
93
+ }
94
+
95
+ // key: state.pageKey,
96
+ // barrierLabel: MaterialLocalizations.of(context).modalBarrierDismissLabel,
97
+ // barrierDismissible: true,
98
+ // barrierColor: Colors.black.withOpacity(0.7),
99
+ // transitionDuration: const Duration(milliseconds: 0),
100
+ // reverseTransitionDuration: const Duration(milliseconds: 0),
101
+ // transitionsBuilder: (context, animation, secondaryAnimation, child) {
102
+ // return FadeTransition(
103
+ // opacity: animation,
104
+ // child: child,
105
+ // );
106
+ // },
107
+ // opaque: false,
108
+ // fullscreenDialog: false,
bible_app/lib/utils/dialog.dart CHANGED
@@ -132,4 +132,15 @@ void showSlideCustomDialog(BuildContext context) {
132
132
  );
133
133
  },
134
134
  );
135
- }
135
+ }
136
+
137
+ // showCustomDialog<(int, int)>(context, const BookSelector()).then((rec) {
138
+ // if (rec != null) {
139
+ // selectedVerses.value.clear();
140
+ // onBookChange(rec.$1);
141
+ // onChapterChange(rec.$2);
142
+ // SchedulerBinding.instance.addPostFrameCallback((duration) {
143
+ // tabIndex.value = 0;
144
+ // });
145
+ // }
146
+ // });
bible_app/pubspec.lock CHANGED
@@ -1,6 +1,30 @@
1
1
  # Generated by pub
2
2
  # See https://dart.dev/tools/pub/glossary#lockfile
3
3
  packages:
4
+ _fe_analyzer_shared:
5
+ dependency: transitive
6
+ description:
7
+ name: _fe_analyzer_shared
8
+ sha256: ae92f5d747aee634b87f89d9946000c2de774be1d6ac3e58268224348cd0101a
9
+ url: "https://pub.dev"
10
+ source: hosted
11
+ version: "61.0.0"
12
+ analyzer:
13
+ dependency: transitive
14
+ description:
15
+ name: analyzer
16
+ sha256: ea3d8652bda62982addfd92fdc2d0214e5f82e43325104990d4f4c4a2a313562
17
+ url: "https://pub.dev"
18
+ source: hosted
19
+ version: "5.13.0"
20
+ args:
21
+ dependency: transitive
22
+ description:
23
+ name: args
24
+ sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596
25
+ url: "https://pub.dev"
26
+ source: hosted
27
+ version: "2.4.2"
4
28
  async:
5
29
  dependency: transitive
6
30
  description:
@@ -25,6 +49,78 @@ packages:
25
49
  url: "https://pub.dev"
26
50
  source: hosted
27
51
  version: "2.1.1"
52
+ build:
53
+ dependency: transitive
54
+ description:
55
+ name: build
56
+ sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0"
57
+ url: "https://pub.dev"
58
+ source: hosted
59
+ version: "2.4.1"
60
+ build_config:
61
+ dependency: transitive
62
+ description:
63
+ name: build_config
64
+ sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1
65
+ url: "https://pub.dev"
66
+ source: hosted
67
+ version: "1.1.1"
68
+ build_daemon:
69
+ dependency: transitive
70
+ description:
71
+ name: build_daemon
72
+ sha256: "5f02d73eb2ba16483e693f80bee4f088563a820e47d1027d4cdfe62b5bb43e65"
73
+ url: "https://pub.dev"
74
+ source: hosted
75
+ version: "4.0.0"
76
+ build_resolvers:
77
+ dependency: transitive
78
+ description:
79
+ name: build_resolvers
80
+ sha256: "6c4dd11d05d056e76320b828a1db0fc01ccd376922526f8e9d6c796a5adbac20"
81
+ url: "https://pub.dev"
82
+ source: hosted
83
+ version: "2.2.1"
84
+ build_runner:
85
+ dependency: "direct dev"
86
+ description:
87
+ name: build_runner
88
+ sha256: "10c6bcdbf9d049a0b666702cf1cee4ddfdc38f02a19d35ae392863b47519848b"
89
+ url: "https://pub.dev"
90
+ source: hosted
91
+ version: "2.4.6"
92
+ build_runner_core:
93
+ dependency: transitive
94
+ description:
95
+ name: build_runner_core
96
+ sha256: "6d6ee4276b1c5f34f21fdf39425202712d2be82019983d52f351c94aafbc2c41"
97
+ url: "https://pub.dev"
98
+ source: hosted
99
+ version: "7.2.10"
100
+ build_verify:
101
+ dependency: "direct dev"
102
+ description:
103
+ name: build_verify
104
+ sha256: abbb9b9eda076854ac1678d284c053a5ec608e64da741d0801f56d4bbea27e23
105
+ url: "https://pub.dev"
106
+ source: hosted
107
+ version: "3.1.0"
108
+ built_collection:
109
+ dependency: transitive
110
+ description:
111
+ name: built_collection
112
+ sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100"
113
+ url: "https://pub.dev"
114
+ source: hosted
115
+ version: "5.1.1"
116
+ built_value:
117
+ dependency: transitive
118
+ description:
119
+ name: built_value
120
+ sha256: "598a2a682e2a7a90f08ba39c0aaa9374c5112340f0a2e275f61b59389543d166"
121
+ url: "https://pub.dev"
122
+ source: hosted
123
+ version: "8.6.1"
28
124
  characters:
29
125
  dependency: transitive
30
126
  description:
@@ -33,6 +129,14 @@ packages:
33
129
  url: "https://pub.dev"
34
130
  source: hosted
35
131
  version: "1.3.0"
132
+ checked_yaml:
133
+ dependency: transitive
134
+ description:
135
+ name: checked_yaml
136
+ sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff
137
+ url: "https://pub.dev"
138
+ source: hosted
139
+ version: "2.0.3"
36
140
  clock:
37
141
  dependency: transitive
38
142
  description:
@@ -41,6 +145,14 @@ packages:
41
145
  url: "https://pub.dev"
42
146
  source: hosted
43
147
  version: "1.1.1"
148
+ code_builder:
149
+ dependency: transitive
150
+ description:
151
+ name: code_builder
152
+ sha256: "4ad01d6e56db961d29661561effde45e519939fdaeb46c351275b182eac70189"
153
+ url: "https://pub.dev"
154
+ source: hosted
155
+ version: "4.5.0"
44
156
  collection:
45
157
  dependency: transitive
46
158
  description:
@@ -49,6 +161,22 @@ packages:
49
161
  url: "https://pub.dev"
50
162
  source: hosted
51
163
  version: "1.17.1"
164
+ convert:
165
+ dependency: transitive
166
+ description:
167
+ name: convert
168
+ sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592"
169
+ url: "https://pub.dev"
170
+ source: hosted
171
+ version: "3.1.1"
172
+ coverage:
173
+ dependency: transitive
174
+ description:
175
+ name: coverage
176
+ sha256: "2fb815080e44a09b85e0f2ca8a820b15053982b2e714b59267719e8a9ff17097"
177
+ url: "https://pub.dev"
178
+ source: hosted
179
+ version: "1.6.3"
52
180
  crypto:
53
181
  dependency: transitive
54
182
  description:
@@ -65,6 +193,14 @@ packages:
65
193
  url: "https://pub.dev"
66
194
  source: hosted
67
195
  version: "1.0.5"
196
+ dart_style:
197
+ dependency: transitive
198
+ description:
199
+ name: dart_style
200
+ sha256: "1efa911ca7086affd35f463ca2fc1799584fb6aa89883cf0af8e3664d6a02d55"
201
+ url: "https://pub.dev"
202
+ source: hosted
203
+ version: "2.3.2"
68
204
  fake_async:
69
205
  dependency: transitive
70
206
  description:
@@ -89,6 +225,14 @@ packages:
89
225
  url: "https://pub.dev"
90
226
  source: hosted
91
227
  version: "6.1.4"
228
+ fixnum:
229
+ dependency: transitive
230
+ description:
231
+ name: fixnum
232
+ sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1"
233
+ url: "https://pub.dev"
234
+ source: hosted
235
+ version: "1.1.0"
92
236
  flutter:
93
237
  dependency: "direct main"
94
238
  description: flutter
@@ -136,6 +280,70 @@ packages:
136
280
  description: flutter
137
281
  source: sdk
138
282
  version: "0.0.0"
283
+ frontend_server_client:
284
+ dependency: transitive
285
+ description:
286
+ name: frontend_server_client
287
+ sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612"
288
+ url: "https://pub.dev"
289
+ source: hosted
290
+ version: "3.2.0"
291
+ glob:
292
+ dependency: transitive
293
+ description:
294
+ name: glob
295
+ sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63"
296
+ url: "https://pub.dev"
297
+ source: hosted
298
+ version: "2.1.2"
299
+ go_router:
300
+ dependency: "direct main"
301
+ description:
302
+ name: go_router
303
+ sha256: b3cadd2cd59a4103fd5f6bc572ca75111264698784e927aa471921c3477d5475
304
+ url: "https://pub.dev"
305
+ source: hosted
306
+ version: "10.0.0"
307
+ go_router_builder:
308
+ dependency: "direct dev"
309
+ description:
310
+ name: go_router_builder
311
+ sha256: df2034629637d0c7c380aba5daa2f91be4733f2d632e7dff0b082d5ff3155068
312
+ url: "https://pub.dev"
313
+ source: hosted
314
+ version: "2.2.4"
315
+ graphs:
316
+ dependency: transitive
317
+ description:
318
+ name: graphs
319
+ sha256: aedc5a15e78fc65a6e23bcd927f24c64dd995062bcd1ca6eda65a3cff92a4d19
320
+ url: "https://pub.dev"
321
+ source: hosted
322
+ version: "2.3.1"
323
+ http_multi_server:
324
+ dependency: transitive
325
+ description:
326
+ name: http_multi_server
327
+ sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b"
328
+ url: "https://pub.dev"
329
+ source: hosted
330
+ version: "3.2.1"
331
+ http_parser:
332
+ dependency: transitive
333
+ description:
334
+ name: http_parser
335
+ sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b"
336
+ url: "https://pub.dev"
337
+ source: hosted
338
+ version: "4.0.2"
339
+ io:
340
+ dependency: transitive
341
+ description:
342
+ name: io
343
+ sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e"
344
+ url: "https://pub.dev"
345
+ source: hosted
346
+ version: "1.0.4"
139
347
  js:
140
348
  dependency: transitive
141
349
  description:
@@ -144,6 +352,14 @@ packages:
144
352
  url: "https://pub.dev"
145
353
  source: hosted
146
354
  version: "0.6.7"
355
+ json_annotation:
356
+ dependency: transitive
357
+ description:
358
+ name: json_annotation
359
+ sha256: b10a7b2ff83d83c777edba3c6a0f97045ddadd56c944e1a23a3fdf43a1bf4467
360
+ url: "https://pub.dev"
361
+ source: hosted
362
+ version: "4.8.1"
147
363
  just_audio:
148
364
  dependency: "direct main"
149
365
  description:
@@ -176,6 +392,14 @@ packages:
176
392
  url: "https://pub.dev"
177
393
  source: hosted
178
394
  version: "2.1.1"
395
+ logging:
396
+ dependency: transitive
397
+ description:
398
+ name: logging
399
+ sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340"
400
+ url: "https://pub.dev"
401
+ source: hosted
402
+ version: "1.2.0"
179
403
  matcher:
180
404
  dependency: transitive
181
405
  description:
@@ -200,6 +424,30 @@ packages:
200
424
  url: "https://pub.dev"
201
425
  source: hosted
202
426
  version: "1.9.1"
427
+ mime:
428
+ dependency: transitive
429
+ description:
430
+ name: mime
431
+ sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e
432
+ url: "https://pub.dev"
433
+ source: hosted
434
+ version: "1.0.4"
435
+ node_preamble:
436
+ dependency: transitive
437
+ description:
438
+ name: node_preamble
439
+ sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db"
440
+ url: "https://pub.dev"
441
+ source: hosted
442
+ version: "2.0.2"
443
+ package_config:
444
+ dependency: transitive
445
+ description:
446
+ name: package_config
447
+ sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd"
448
+ url: "https://pub.dev"
449
+ source: hosted
450
+ version: "2.1.0"
203
451
  path:
204
452
  dependency: transitive
205
453
  description:
@@ -272,6 +520,30 @@ packages:
272
520
  url: "https://pub.dev"
273
521
  source: hosted
274
522
  version: "2.1.5"
523
+ pool:
524
+ dependency: transitive
525
+ description:
526
+ name: pool
527
+ sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a"
528
+ url: "https://pub.dev"
529
+ source: hosted
530
+ version: "1.5.1"
531
+ pub_semver:
532
+ dependency: transitive
533
+ description:
534
+ name: pub_semver
535
+ sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c"
536
+ url: "https://pub.dev"
537
+ source: hosted
538
+ version: "2.1.4"
539
+ pubspec_parse:
540
+ dependency: transitive
541
+ description:
542
+ name: pubspec_parse
543
+ sha256: c63b2876e58e194e4b0828fcb080ad0e06d051cb607a6be51a9e084f47cb9367
544
+ url: "https://pub.dev"
545
+ source: hosted
546
+ version: "1.2.3"
275
547
  rxdart:
276
548
  dependency: transitive
277
549
  description:
@@ -336,11 +608,75 @@ packages:
336
608
  url: "https://pub.dev"
337
609
  source: hosted
338
610
  version: "2.3.0"
611
+ shelf:
612
+ dependency: transitive
613
+ description:
614
+ name: shelf
615
+ sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4
616
+ url: "https://pub.dev"
617
+ source: hosted
618
+ version: "1.4.1"
619
+ shelf_packages_handler:
620
+ dependency: transitive
621
+ description:
622
+ name: shelf_packages_handler
623
+ sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e"
624
+ url: "https://pub.dev"
625
+ source: hosted
626
+ version: "3.0.2"
627
+ shelf_static:
628
+ dependency: transitive
629
+ description:
630
+ name: shelf_static
631
+ sha256: a41d3f53c4adf0f57480578c1d61d90342cd617de7fc8077b1304643c2d85c1e
632
+ url: "https://pub.dev"
633
+ source: hosted
634
+ version: "1.1.2"
635
+ shelf_web_socket:
636
+ dependency: transitive
637
+ description:
638
+ name: shelf_web_socket
639
+ sha256: "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1"
640
+ url: "https://pub.dev"
641
+ source: hosted
642
+ version: "1.0.4"
339
643
  sky_engine:
340
644
  dependency: transitive
341
645
  description: flutter
342
646
  source: sdk
343
647
  version: "0.0.99"
648
+ source_gen:
649
+ dependency: transitive
650
+ description:
651
+ name: source_gen
652
+ sha256: fc0da689e5302edb6177fdd964efcb7f58912f43c28c2047a808f5bfff643d16
653
+ url: "https://pub.dev"
654
+ source: hosted
655
+ version: "1.4.0"
656
+ source_helper:
657
+ dependency: transitive
658
+ description:
659
+ name: source_helper
660
+ sha256: "6adebc0006c37dd63fe05bca0a929b99f06402fc95aa35bf36d67f5c06de01fd"
661
+ url: "https://pub.dev"
662
+ source: hosted
663
+ version: "1.3.4"
664
+ source_map_stack_trace:
665
+ dependency: transitive
666
+ description:
667
+ name: source_map_stack_trace
668
+ sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae"
669
+ url: "https://pub.dev"
670
+ source: hosted
671
+ version: "2.1.1"
672
+ source_maps:
673
+ dependency: transitive
674
+ description:
675
+ name: source_maps
676
+ sha256: "708b3f6b97248e5781f493b765c3337db11c5d2c81c3094f10904bfa8004c703"
677
+ url: "https://pub.dev"
678
+ source: hosted
679
+ version: "0.10.12"
344
680
  source_span:
345
681
  dependency: transitive
346
682
  description:
@@ -365,6 +701,14 @@ packages:
365
701
  url: "https://pub.dev"
366
702
  source: hosted
367
703
  version: "2.1.1"
704
+ stream_transform:
705
+ dependency: transitive
706
+ description:
707
+ name: stream_transform
708
+ sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f"
709
+ url: "https://pub.dev"
710
+ source: hosted
711
+ version: "2.1.0"
368
712
  string_scanner:
369
713
  dependency: transitive
370
714
  description:
@@ -381,6 +725,14 @@ packages:
381
725
  url: "https://pub.dev"
382
726
  source: hosted
383
727
  version: "1.2.1"
728
+ test:
729
+ dependency: transitive
730
+ description:
731
+ name: test
732
+ sha256: "3dac9aecf2c3991d09b9cdde4f98ded7b30804a88a0d7e4e7e1678e78d6b97f4"
733
+ url: "https://pub.dev"
734
+ source: hosted
735
+ version: "1.24.1"
384
736
  test_api:
385
737
  dependency: transitive
386
738
  description:
@@ -389,6 +741,22 @@ packages:
389
741
  url: "https://pub.dev"
390
742
  source: hosted
391
743
  version: "0.5.1"
744
+ test_core:
745
+ dependency: transitive
746
+ description:
747
+ name: test_core
748
+ sha256: "5138dbffb77b2289ecb12b81c11ba46036590b72a64a7a90d6ffb880f1a29e93"
749
+ url: "https://pub.dev"
750
+ source: hosted
751
+ version: "0.5.1"
752
+ timing:
753
+ dependency: transitive
754
+ description:
755
+ name: timing
756
+ sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32"
757
+ url: "https://pub.dev"
758
+ source: hosted
759
+ version: "1.0.1"
392
760
  typed_data:
393
761
  dependency: transitive
394
762
  description:
@@ -413,6 +781,38 @@ packages:
413
781
  url: "https://pub.dev"
414
782
  source: hosted
415
783
  version: "2.1.4"
784
+ vm_service:
785
+ dependency: transitive
786
+ description:
787
+ name: vm_service
788
+ sha256: ada49637c27973c183dad90beb6bd781eea4c9f5f955d35da172de0af7bd3440
789
+ url: "https://pub.dev"
790
+ source: hosted
791
+ version: "11.8.0"
792
+ watcher:
793
+ dependency: transitive
794
+ description:
795
+ name: watcher
796
+ sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8"
797
+ url: "https://pub.dev"
798
+ source: hosted
799
+ version: "1.1.0"
800
+ web_socket_channel:
801
+ dependency: transitive
802
+ description:
803
+ name: web_socket_channel
804
+ sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b
805
+ url: "https://pub.dev"
806
+ source: hosted
807
+ version: "2.4.0"
808
+ webkit_inspection_protocol:
809
+ dependency: transitive
810
+ description:
811
+ name: webkit_inspection_protocol
812
+ sha256: "67d3a8b6c79e1987d19d848b0892e582dbb0c66c57cc1fef58a177dd2aa2823d"
813
+ url: "https://pub.dev"
814
+ source: hosted
815
+ version: "1.2.0"
416
816
  win32:
417
817
  dependency: transitive
418
818
  description:
@@ -429,6 +829,14 @@ packages:
429
829
  url: "https://pub.dev"
430
830
  source: hosted
431
831
  version: "1.0.1"
832
+ yaml:
833
+ dependency: transitive
834
+ description:
835
+ name: yaml
836
+ sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5"
837
+ url: "https://pub.dev"
838
+ source: hosted
839
+ version: "3.1.2"
432
840
  sdks:
433
841
  dart: ">=3.0.6 <4.0.0"
434
842
  flutter: ">=3.7.0"
bible_app/pubspec.yaml CHANGED
@@ -39,10 +39,15 @@ dependencies:
39
39
  flutter_persistent_value_notifier: ^1.0.2
40
40
  flutter_staggered_grid_view: ^0.6.2
41
41
  just_audio: ^0.9.34
42
+ go_router: ^10.0.0
42
43
 
43
44
  dev_dependencies:
44
45
  flutter_test:
45
46
  sdk: flutter
47
+ go_router_builder: any
48
+ build_runner: any
49
+ build_verify: any
50
+
46
51
 
47
52
  # The "flutter_lints" package below contains a set of recommended lints to
48
53
  # encourage good coding practices. The lint set provided by the package is
bible_app/test/widget_test.dart CHANGED
@@ -7,8 +7,7 @@
7
7
 
8
8
  import 'package:flutter/material.dart';
9
9
  import 'package:flutter_test/flutter_test.dart';
10
-
11
- import 'package:bible_app/main.dart';
10
+ import 'package:kannada_bible_app/main.dart';
12
11
 
13
12
  void main() {
14
13
  testWidgets('Counter increments smoke test', (WidgetTester tester) async {