~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.
7326f716
—
pyrossh 2 years ago
improve book/chapter select
- bible_app/analysis_options.yaml +3 -2
- bible_app/lib/components/book_selector.dart +93 -114
- bible_app/lib/components/header.dart +18 -18
- bible_app/lib/components/sidebar.dart +12 -17
- bible_app/lib/components/verse.dart +10 -38
- bible_app/lib/main.dart +109 -12
- bible_app/lib/screens/home.dart +28 -27
- bible_app/lib/state.dart +13 -6
- bible_app/lib/utils/assets.dart +6 -6
- bible_app/lib/utils/dialog.dart +135 -0
- bible_app/lib/utils/text.dart +0 -12
- bible_app/macos/Flutter/GeneratedPluginRegistrant.swift +2 -0
- bible_app/macos/Podfile.lock +7 -0
- bible_app/pubspec.lock +333 -0
- bible_app/pubspec.yaml +5 -0
bible_app/analysis_options.yaml
CHANGED
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
# The following line activates a set of recommended lints for Flutter apps,
|
|
9
9
|
# packages, and plugins designed to encourage good coding practices.
|
|
10
10
|
include: package:flutter_lints/flutter.yaml
|
|
11
|
-
|
|
11
|
+
plugins:
|
|
12
|
+
- custom_lint
|
|
12
13
|
linter:
|
|
13
14
|
# The lint rules applied to this project can be customized in the
|
|
14
15
|
# section below to disable rules from the `package:flutter_lints/flutter.yaml`
|
|
@@ -23,7 +24,7 @@ linter:
|
|
|
23
24
|
# producing the lint.
|
|
24
25
|
rules:
|
|
25
26
|
# avoid_print: false # Uncomment to disable the `avoid_print` rule
|
|
26
|
-
|
|
27
|
+
|
|
27
28
|
|
|
28
29
|
# Additional information about this file can be found at
|
|
29
30
|
# https://dart.dev/guides/language/analysis-options
|
bible_app/lib/components/book_selector.dart
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import 'dart:async';
|
|
2
|
-
|
|
3
|
-
import
|
|
1
|
+
import "package:flutter/material.dart";
|
|
2
|
+
import "package:flutter_solidart/flutter_solidart.dart";
|
|
4
|
-
import
|
|
3
|
+
import "package:flutter_reactive_value/flutter_reactive_value.dart";
|
|
5
|
-
import
|
|
4
|
+
import "../domain/book.dart";
|
|
6
|
-
import
|
|
5
|
+
import "../domain/kannada_gen.dart";
|
|
7
|
-
import '../state.dart';
|
|
8
6
|
|
|
9
7
|
final tabIndex = ValueNotifier(0);
|
|
10
8
|
final tabBookIndex = ValueNotifier(0);
|
|
@@ -14,17 +12,20 @@ onTabBookChange(int i) {
|
|
|
14
12
|
tabBookIndex.value = i;
|
|
15
13
|
}
|
|
16
14
|
|
|
17
|
-
onTabChapterChange(int i) {
|
|
18
|
-
selectedVerses.value.clear();
|
|
19
|
-
onBookChange(tabBookIndex.value);
|
|
20
|
-
onChapterChange(i);
|
|
21
|
-
Timer(const Duration(seconds: 1), () {
|
|
22
|
-
tabIndex.value = 0;
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
|
|
26
15
|
class BookSelector extends StatelessWidget {
|
|
27
|
-
|
|
16
|
+
BookSelector({super.key});
|
|
17
|
+
|
|
18
|
+
final counter = createSignal(0);
|
|
19
|
+
|
|
20
|
+
// @override
|
|
21
|
+
// Widget build(BuildContext context) {
|
|
22
|
+
// return SignalBuilder(
|
|
23
|
+
// signal: counter,
|
|
24
|
+
// builder: (context, value, child) {
|
|
25
|
+
// return Text('$value');
|
|
26
|
+
// },
|
|
27
|
+
// );
|
|
28
|
+
// }
|
|
28
29
|
|
|
29
30
|
@override
|
|
30
31
|
Widget build(BuildContext context) {
|
|
@@ -32,55 +33,39 @@ class BookSelector extends StatelessWidget {
|
|
|
32
33
|
if (tab == 1) {
|
|
33
34
|
final book = kannadaBible[tabBookIndex.reactiveValue(context)];
|
|
34
35
|
return Container(
|
|
35
|
-
|
|
36
|
+
margin: const EdgeInsets.symmetric(vertical: 15, horizontal: 30),
|
|
36
|
-
padding: const EdgeInsets.all(15),
|
|
37
|
-
color: Colors.white,
|
|
38
|
-
child: Column(
|
|
39
|
-
crossAxisAlignment: CrossAxisAlignment.start,
|
|
40
|
-
children: [
|
|
41
|
-
Container(
|
|
42
|
-
margin: const EdgeInsets.only(bottom: 10),
|
|
43
|
-
child: Text(book.name,
|
|
44
|
-
style: TextStyle(
|
|
45
|
-
fontWeight: FontWeight.w600,
|
|
46
|
-
fontSize: 22,
|
|
47
|
-
)),
|
|
48
|
-
),
|
|
49
|
-
const Expanded(flex: 1, child: ChaptersList()),
|
|
50
|
-
],
|
|
51
|
-
));
|
|
52
|
-
}
|
|
53
|
-
return Container(
|
|
54
|
-
margin: const EdgeInsets.symmetric(vertical: 50, horizontal: 300),
|
|
55
|
-
padding: const EdgeInsets.all(15),
|
|
56
37
|
color: Colors.white,
|
|
57
38
|
child: Column(
|
|
58
39
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
59
40
|
children: [
|
|
60
41
|
Container(
|
|
61
|
-
margin: EdgeInsets.only(bottom: 10),
|
|
42
|
+
margin: const EdgeInsets.only(bottom: 10),
|
|
62
|
-
child: Text(
|
|
43
|
+
child: Text(book.name, style: Theme.of(context).textTheme.headlineMedium),
|
|
63
|
-
style: TextStyle(
|
|
64
|
-
fontStyle: FontStyle.italic,
|
|
65
|
-
fontWeight: FontWeight.w400,
|
|
66
|
-
fontSize: 20,
|
|
67
|
-
color: Colors.grey,
|
|
68
|
-
)),
|
|
69
44
|
),
|
|
70
|
-
Expanded(flex: 1, child: BooksList(offset: 0, books: oldTestament)),
|
|
71
|
-
Container(
|
|
72
|
-
|
|
45
|
+
const Expanded(child: ChaptersList()),
|
|
73
|
-
child: Text("New Testament",
|
|
74
|
-
style: TextStyle(
|
|
75
|
-
fontStyle: FontStyle.italic,
|
|
76
|
-
fontWeight: FontWeight.w400,
|
|
77
|
-
fontSize: 20,
|
|
78
|
-
color: Colors.grey,
|
|
79
|
-
)),
|
|
80
|
-
),
|
|
81
|
-
Expanded(flex: 1, child: BooksList(offset: 39, books: newTestament)),
|
|
82
46
|
],
|
|
47
|
+
),
|
|
83
|
-
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
return Container(
|
|
51
|
+
margin: const EdgeInsets.symmetric(vertical: 15, horizontal: 30),
|
|
52
|
+
color: Colors.white,
|
|
53
|
+
child: Column(
|
|
54
|
+
crossAxisAlignment: CrossAxisAlignment.start,
|
|
55
|
+
children: [
|
|
56
|
+
Container(
|
|
57
|
+
margin: const EdgeInsets.only(bottom: 10),
|
|
58
|
+
child: Text("Old Testament", style: Theme.of(context).textTheme.headlineMedium),
|
|
59
|
+
),
|
|
60
|
+
Expanded(child: BooksList(offset: 0, books: oldTestament)),
|
|
61
|
+
Container(
|
|
62
|
+
margin: const EdgeInsets.symmetric(vertical: 15),
|
|
63
|
+
child: Text("New Testament", style: Theme.of(context).textTheme.headlineMedium),
|
|
64
|
+
),
|
|
65
|
+
Expanded(child: BooksList(offset: 39, books: newTestament)),
|
|
66
|
+
],
|
|
67
|
+
),
|
|
68
|
+
);
|
|
84
69
|
}
|
|
85
70
|
}
|
|
86
71
|
|
|
@@ -93,36 +78,31 @@ class BooksList extends StatelessWidget {
|
|
|
93
78
|
@override
|
|
94
79
|
Widget build(BuildContext context) {
|
|
95
80
|
return GridView.extent(
|
|
96
|
-
primary: false,
|
|
97
|
-
padding: const EdgeInsets.all(0),
|
|
98
|
-
|
|
81
|
+
crossAxisSpacing: 10.0,
|
|
99
|
-
|
|
82
|
+
mainAxisSpacing: 10.0,
|
|
100
|
-
|
|
83
|
+
maxCrossAxisExtent: 80.0,
|
|
101
|
-
|
|
84
|
+
children: List.generate(books.length, (index) {
|
|
85
|
+
final name = books[index].replaceAll(" ", "").substring(0, 3).toUpperCase();
|
|
102
|
-
|
|
86
|
+
return GestureDetector(
|
|
103
|
-
|
|
87
|
+
onTap: () {
|
|
104
|
-
|
|
88
|
+
onTabBookChange(offset + index);
|
|
105
|
-
|
|
89
|
+
},
|
|
106
|
-
|
|
90
|
+
child: Container(
|
|
107
|
-
|
|
91
|
+
margin: const EdgeInsets.all(3),
|
|
108
|
-
|
|
92
|
+
decoration: const BoxDecoration(
|
|
109
|
-
|
|
93
|
+
color: Color(0xFFC8C5C5),
|
|
110
|
-
|
|
94
|
+
),
|
|
111
|
-
|
|
95
|
+
child: Center(
|
|
112
|
-
|
|
96
|
+
child: Text(
|
|
113
|
-
books[index]
|
|
114
|
-
.replaceAll(" ", "")
|
|
115
|
-
.substring(0, 3)
|
|
116
|
-
|
|
97
|
+
name,
|
|
117
|
-
|
|
98
|
+
textAlign: TextAlign.center,
|
|
118
|
-
|
|
99
|
+
style: Theme.of(context).textTheme.labelMedium,
|
|
119
|
-
fontSize: 20,
|
|
120
|
-
fontWeight: FontWeight.w500,
|
|
121
|
-
)),
|
|
122
100
|
),
|
|
123
101
|
),
|
|
102
|
+
),
|
|
124
|
-
|
|
103
|
+
);
|
|
125
|
-
|
|
104
|
+
}),
|
|
105
|
+
);
|
|
126
106
|
}
|
|
127
107
|
}
|
|
128
108
|
|
|
@@ -131,35 +111,34 @@ class ChaptersList extends StatelessWidget {
|
|
|
131
111
|
|
|
132
112
|
@override
|
|
133
113
|
Widget build(BuildContext context) {
|
|
134
|
-
final
|
|
114
|
+
final bookIndex = tabBookIndex.reactiveValue(context);
|
|
135
|
-
|
|
115
|
+
final book = kannadaBible[bookIndex];
|
|
136
116
|
return GridView.extent(
|
|
137
|
-
|
|
117
|
+
primary: false,
|
|
138
|
-
|
|
118
|
+
padding: const EdgeInsets.all(0),
|
|
139
|
-
|
|
119
|
+
crossAxisSpacing: 10.0,
|
|
140
|
-
|
|
120
|
+
mainAxisSpacing: 10.0,
|
|
141
|
-
|
|
121
|
+
maxCrossAxisExtent: 80.0,
|
|
142
|
-
|
|
122
|
+
children: List.generate(book.chapters.length, (index) {
|
|
143
|
-
|
|
123
|
+
return GestureDetector(
|
|
144
|
-
|
|
124
|
+
onTap: () {
|
|
145
|
-
|
|
125
|
+
Navigator.of(context).pop((bookIndex, index));
|
|
146
|
-
onTabChapterChange(index);
|
|
147
|
-
|
|
126
|
+
},
|
|
148
|
-
|
|
127
|
+
child: Container(
|
|
149
|
-
|
|
128
|
+
margin: const EdgeInsets.all(3),
|
|
150
|
-
|
|
129
|
+
decoration: const BoxDecoration(
|
|
151
|
-
|
|
130
|
+
color: Color(0xFFC8C5C5),
|
|
152
|
-
|
|
131
|
+
),
|
|
153
|
-
|
|
132
|
+
child: Center(
|
|
133
|
+
child: Text(
|
|
154
|
-
|
|
134
|
+
"${index + 1}",
|
|
155
|
-
|
|
135
|
+
textAlign: TextAlign.center,
|
|
156
|
-
|
|
136
|
+
style: Theme.of(context).textTheme.labelMedium,
|
|
157
|
-
fontSize: 20,
|
|
158
|
-
fontWeight: FontWeight.w500,
|
|
159
|
-
)),
|
|
160
137
|
),
|
|
161
138
|
),
|
|
139
|
+
),
|
|
162
|
-
|
|
140
|
+
);
|
|
163
|
-
|
|
141
|
+
}),
|
|
142
|
+
);
|
|
164
143
|
}
|
|
165
144
|
}
|
bible_app/lib/components/header.dart
CHANGED
|
@@ -1,15 +1,10 @@
|
|
|
1
|
+
import "dart:math";
|
|
1
|
-
import
|
|
2
|
+
import "package:bible_app/components/book_selector.dart";
|
|
2
|
-
import
|
|
3
|
+
import "package:bible_app/state.dart";
|
|
3
|
-
import
|
|
4
|
+
import "package:flutter/material.dart";
|
|
4
|
-
import
|
|
5
|
+
import "package:flutter/scheduler.dart";
|
|
5
|
-
|
|
6
|
-
import
|
|
6
|
+
import "package:flutter_reactive_value/flutter_reactive_value.dart";
|
|
7
|
-
|
|
8
|
-
const headingStyle = TextStyle(
|
|
9
|
-
fontSize: 20,
|
|
10
|
-
|
|
7
|
+
import "../utils/dialog.dart";
|
|
11
|
-
letterSpacing: 0.5,
|
|
12
|
-
);
|
|
13
8
|
|
|
14
9
|
class Header extends StatelessWidget {
|
|
15
10
|
final String bookName;
|
|
@@ -30,16 +25,21 @@ class Header extends StatelessWidget {
|
|
|
30
25
|
children: [
|
|
31
26
|
InkWell(
|
|
32
27
|
onTap: () {
|
|
33
|
-
showDialog<void>(
|
|
34
|
-
context: context,
|
|
35
|
-
|
|
28
|
+
tabBookIndex.value = 0;
|
|
29
|
+
showCustomDialog<(int, int)>(context, BookSelector()).then((rec) {
|
|
36
|
-
|
|
30
|
+
if (rec != null) {
|
|
37
|
-
|
|
31
|
+
selectedVerses.value.clear();
|
|
32
|
+
onBookChange(rec.$1);
|
|
33
|
+
onChapterChange(rec.$2);
|
|
34
|
+
SchedulerBinding.instance.addPostFrameCallback((duration) {
|
|
35
|
+
tabIndex.value = 0;
|
|
38
36
|
});
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
39
|
},
|
|
40
40
|
child: Row(
|
|
41
41
|
children: [
|
|
42
|
-
Text("$
|
|
42
|
+
Text("$bookName ${chapter+1}", style: Theme.of(context).textTheme.headlineLarge),
|
|
43
43
|
Container(
|
|
44
44
|
margin: const EdgeInsets.only(left: 3),
|
|
45
45
|
child: Transform.rotate(
|
bible_app/lib/components/sidebar.dart
CHANGED
|
@@ -1,10 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import "package:flutter/material.dart";
|
|
2
|
-
|
|
3
|
-
const logoStyle = TextStyle(
|
|
4
|
-
fontSize: 38,
|
|
5
|
-
fontWeight: FontWeight.w700,
|
|
6
|
-
color: Color(0xFFFFB441),
|
|
7
|
-
);
|
|
8
2
|
|
|
9
3
|
class Sidebar extends StatelessWidget {
|
|
10
4
|
const Sidebar({super.key});
|
|
@@ -33,15 +27,15 @@ class Sidebar extends StatelessWidget {
|
|
|
33
27
|
height: height,
|
|
34
28
|
child: Container(
|
|
35
29
|
margin: const EdgeInsets.only(bottom: 50),
|
|
36
|
-
child:
|
|
30
|
+
child: Column(
|
|
37
31
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
38
32
|
crossAxisAlignment: CrossAxisAlignment.center,
|
|
39
33
|
children: [
|
|
40
34
|
Flexible(
|
|
41
|
-
child: Text("KANNADA", style:
|
|
35
|
+
child: Text("KANNADA", style: Theme.of(context).textTheme.labelLarge),
|
|
42
36
|
),
|
|
43
37
|
Flexible(
|
|
44
|
-
child: Text("BIBLE", style:
|
|
38
|
+
child: Text("BIBLE", style: Theme.of(context).textTheme.labelLarge),
|
|
45
39
|
),
|
|
46
40
|
],
|
|
47
41
|
),
|
|
@@ -97,16 +91,17 @@ class Bookmark extends StatelessWidget {
|
|
|
97
91
|
Container(
|
|
98
92
|
width: 30.0,
|
|
99
93
|
height: 80.0,
|
|
100
|
-
decoration:
|
|
94
|
+
decoration: BoxDecoration(
|
|
101
|
-
|
|
95
|
+
color: Theme.of(context).secondaryHeaderColor,
|
|
102
|
-
|
|
96
|
+
borderRadius: const BorderRadius.only(
|
|
103
|
-
|
|
97
|
+
topLeft: Radius.circular(4),
|
|
104
|
-
|
|
98
|
+
topRight: Radius.circular(4),
|
|
105
|
-
|
|
99
|
+
),
|
|
100
|
+
),
|
|
106
101
|
),
|
|
107
102
|
CustomPaint(
|
|
108
103
|
painter: TrianglePainter(
|
|
109
|
-
color:
|
|
104
|
+
color: Theme.of(context).secondaryHeaderColor,
|
|
110
105
|
),
|
|
111
106
|
),
|
|
112
107
|
],
|
bible_app/lib/components/verse.dart
CHANGED
|
@@ -1,28 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import "package:flutter/material.dart";
|
|
2
|
+
import "package:flutter_reactive_value/flutter_reactive_value.dart";
|
|
2
|
-
import
|
|
3
|
+
import "../state.dart";
|
|
3
|
-
|
|
4
|
-
const highlightColor = Color(0xAAF8D0DC);
|
|
5
|
-
|
|
6
|
-
class VerseNo extends StatelessWidget {
|
|
7
|
-
final int index;
|
|
8
|
-
|
|
9
|
-
const VerseNo({super.key, required this.index});
|
|
10
|
-
|
|
11
|
-
@override
|
|
12
|
-
Widget build(BuildContext context) {
|
|
13
|
-
return Transform.translate(
|
|
14
|
-
offset: const Offset(0, 2),
|
|
15
|
-
child: Text(
|
|
16
|
-
style: const TextStyle(
|
|
17
|
-
fontSize: 12,
|
|
18
|
-
fontWeight: FontWeight.w800,
|
|
19
|
-
color: Color(0xFF9A1111),
|
|
20
|
-
),
|
|
21
|
-
"${index + 1}",
|
|
22
|
-
),
|
|
23
|
-
);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
4
|
|
|
27
5
|
class Verse extends StatelessWidget {
|
|
28
6
|
final int index;
|
|
@@ -32,7 +10,7 @@ class Verse extends StatelessWidget {
|
|
|
32
10
|
|
|
33
11
|
@override
|
|
34
12
|
Widget build(BuildContext context) {
|
|
35
|
-
var selected =
|
|
13
|
+
var selected = selectedVerses.reactiveValue(context).contains(index);
|
|
36
14
|
onTap() {
|
|
37
15
|
onVerseSelected(index);
|
|
38
16
|
}
|
|
@@ -42,26 +20,20 @@ class Verse extends StatelessWidget {
|
|
|
42
20
|
onTap: onTap,
|
|
43
21
|
child: Container(
|
|
44
22
|
decoration: BoxDecoration(
|
|
45
|
-
color: selected ? highlightColor : Colors.white,
|
|
23
|
+
color: selected ? Theme.of(context).highlightColor : Colors.white,
|
|
46
24
|
),
|
|
47
25
|
child: Row(
|
|
48
26
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
49
27
|
children: [
|
|
50
28
|
Container(
|
|
51
29
|
margin: const EdgeInsets.only(right: 4),
|
|
52
|
-
child:
|
|
30
|
+
child: Transform.translate(
|
|
31
|
+
offset: const Offset(0, 2),
|
|
32
|
+
child: Text("${index + 1}", style: Theme.of(context).textTheme.labelSmall),
|
|
33
|
+
),
|
|
53
34
|
),
|
|
54
35
|
Flexible(
|
|
55
|
-
child: Text(
|
|
56
|
-
style: const TextStyle(
|
|
57
|
-
color: Color(0xFF010101),
|
|
58
|
-
fontSize: 16,
|
|
59
|
-
|
|
36
|
+
child: Text(text, style: Theme.of(context).textTheme.bodyMedium),
|
|
60
|
-
fontWeight: FontWeight.w500,
|
|
61
|
-
// letterSpacing: 0.5,
|
|
62
|
-
),
|
|
63
|
-
text,
|
|
64
|
-
),
|
|
65
37
|
)
|
|
66
38
|
],
|
|
67
39
|
),
|
bible_app/lib/main.dart
CHANGED
|
@@ -1,27 +1,124 @@
|
|
|
1
|
+
import "package:flutter/material.dart";
|
|
1
|
-
import
|
|
2
|
+
import "package:bible_app/screens/home.dart";
|
|
2
|
-
import
|
|
3
|
+
import "package:flutter_persistent_value_notifier/flutter_persistent_value_notifier.dart";
|
|
3
4
|
|
|
4
|
-
final List<int> selectedVerses = [];
|
|
5
|
-
|
|
6
|
-
void main() {
|
|
5
|
+
void main() async {
|
|
6
|
+
WidgetsFlutterBinding.ensureInitialized();
|
|
7
|
+
await initPersistentValueNotifier();
|
|
7
8
|
runApp(const App());
|
|
8
9
|
}
|
|
9
10
|
|
|
11
|
+
const lightColorScheme = ColorScheme(
|
|
12
|
+
brightness: Brightness.light,
|
|
13
|
+
primary: Color(0xFF4C2323),
|
|
14
|
+
onPrimary: Color(0xFF4C2323),
|
|
15
|
+
secondary: Colors.white,
|
|
16
|
+
onSecondary: Colors.white,
|
|
17
|
+
error: Colors.red,
|
|
18
|
+
onError: Colors.red,
|
|
19
|
+
background: Colors.white,
|
|
20
|
+
onBackground: Colors.white,
|
|
21
|
+
surface: Colors.white,
|
|
22
|
+
onSurface: Colors.white,
|
|
23
|
+
);
|
|
24
|
+
|
|
10
25
|
class App extends StatelessWidget {
|
|
11
26
|
const App({super.key});
|
|
12
27
|
|
|
13
28
|
@override
|
|
14
29
|
Widget build(BuildContext context) {
|
|
15
30
|
return MaterialApp(
|
|
16
|
-
title: 'Flutter Demo',
|
|
17
31
|
theme: ThemeData(
|
|
32
|
+
brightness: Brightness.light,
|
|
33
|
+
primaryColor: const Color(0xFF4C2323),
|
|
34
|
+
secondaryHeaderColor: const Color(0xFFFFB341),
|
|
35
|
+
highlightColor: const Color(0xAAF8D0DC),
|
|
18
|
-
|
|
36
|
+
fontFamily: "SanFranciscoPro",
|
|
19
|
-
colorScheme:
|
|
37
|
+
colorScheme: lightColorScheme,
|
|
38
|
+
textTheme: const TextTheme(
|
|
39
|
+
bodyMedium: TextStyle(
|
|
40
|
+
color: Color(0xFF010101),
|
|
41
|
+
fontSize: 16,
|
|
42
|
+
fontFamily: "SanFranciscoPro",
|
|
43
|
+
fontWeight: FontWeight.w400,
|
|
44
|
+
// letterSpacing: 0.5,
|
|
45
|
+
),
|
|
46
|
+
headlineLarge: TextStyle(
|
|
47
|
+
color: Colors.black,
|
|
48
|
+
fontSize: 20,
|
|
49
|
+
fontWeight: FontWeight.w500,
|
|
20
|
-
|
|
50
|
+
letterSpacing: 0.5,
|
|
51
|
+
),
|
|
52
|
+
headlineMedium: TextStyle(
|
|
53
|
+
color: Colors.black,
|
|
54
|
+
fontWeight: FontWeight.w600,
|
|
55
|
+
fontSize: 20,
|
|
56
|
+
),
|
|
57
|
+
labelMedium: TextStyle(
|
|
58
|
+
fontFamily: "SanFrancisco",
|
|
59
|
+
fontSize: 20,
|
|
60
|
+
fontWeight: FontWeight.w600,
|
|
61
|
+
color: Color(0xFF9A1111),
|
|
62
|
+
letterSpacing: 0.5,
|
|
63
|
+
),
|
|
64
|
+
labelSmall: TextStyle(
|
|
65
|
+
fontFamily: "SanFrancisco",
|
|
66
|
+
fontSize: 12,
|
|
67
|
+
fontWeight: FontWeight.w800,
|
|
68
|
+
color: Color(0xFF9A1111),
|
|
69
|
+
letterSpacing: 0.5,
|
|
70
|
+
),
|
|
71
|
+
labelLarge: TextStyle(
|
|
72
|
+
fontSize: 38,
|
|
73
|
+
fontWeight: FontWeight.w700,
|
|
74
|
+
color: Color(0xFFFFB341),
|
|
75
|
+
),
|
|
76
|
+
),
|
|
77
|
+
),
|
|
78
|
+
darkTheme: ThemeData(
|
|
79
|
+
brightness: Brightness.light,
|
|
80
|
+
primaryColor: const Color(0xFF4C2323),
|
|
81
|
+
secondaryHeaderColor: const Color(0xFFFFB341),
|
|
82
|
+
highlightColor: const Color(0xAAF8D0DC),
|
|
83
|
+
fontFamily: "SanFranciscoPro",
|
|
21
84
|
textTheme: const TextTheme(
|
|
22
|
-
bodyMedium: TextStyle(
|
|
85
|
+
bodyMedium: TextStyle(
|
|
86
|
+
color: Color(0xFF010101),
|
|
87
|
+
fontSize: 16,
|
|
88
|
+
fontFamily: "SanFranciscoPro",
|
|
89
|
+
fontWeight: FontWeight.w400,
|
|
90
|
+
// letterSpacing: 0.5,
|
|
91
|
+
),
|
|
92
|
+
headlineLarge: TextStyle(
|
|
23
|
-
|
|
93
|
+
color: Colors.black,
|
|
94
|
+
fontSize: 20,
|
|
95
|
+
fontWeight: FontWeight.w500,
|
|
96
|
+
letterSpacing: 0.5,
|
|
97
|
+
),
|
|
98
|
+
headlineMedium: TextStyle(
|
|
24
|
-
|
|
99
|
+
color: Colors.black,
|
|
100
|
+
fontWeight: FontWeight.w600,
|
|
101
|
+
fontSize: 20,
|
|
102
|
+
),
|
|
103
|
+
labelMedium: TextStyle(
|
|
104
|
+
fontFamily: "SanFrancisco",
|
|
105
|
+
fontSize: 20,
|
|
106
|
+
fontWeight: FontWeight.w600,
|
|
107
|
+
color: Color(0xFF9A1111),
|
|
108
|
+
letterSpacing: 0.5,
|
|
109
|
+
),
|
|
110
|
+
labelSmall: TextStyle(
|
|
111
|
+
fontFamily: "SanFrancisco",
|
|
112
|
+
fontSize: 12,
|
|
113
|
+
fontWeight: FontWeight.w800,
|
|
114
|
+
color: Color(0xFF9A1111),
|
|
115
|
+
letterSpacing: 0.5,
|
|
116
|
+
),
|
|
117
|
+
labelLarge: TextStyle(
|
|
118
|
+
fontSize: 38,
|
|
119
|
+
fontWeight: FontWeight.w700,
|
|
120
|
+
color: Color(0xFFFFB341),
|
|
121
|
+
),
|
|
25
122
|
),
|
|
26
123
|
),
|
|
27
124
|
home: const HomeScreen(),
|
bible_app/lib/screens/home.dart
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import
|
|
1
|
+
import "package:bible_app/components/header.dart";
|
|
2
|
-
import
|
|
2
|
+
import "package:bible_app/domain/kannada_gen.dart";
|
|
3
|
-
import
|
|
3
|
+
import "package:flutter/material.dart";
|
|
4
|
-
import
|
|
4
|
+
import "package:flutter_reactive_value/flutter_reactive_value.dart";
|
|
5
|
-
import
|
|
5
|
+
import "../components/sidebar.dart";
|
|
6
|
-
import
|
|
6
|
+
import "../components/verse.dart";
|
|
7
|
-
import
|
|
7
|
+
import "../state.dart";
|
|
8
8
|
|
|
9
9
|
class HomeScreen extends StatelessWidget {
|
|
10
10
|
const HomeScreen({super.key});
|
|
@@ -20,27 +20,28 @@ class HomeScreen extends StatelessWidget {
|
|
|
20
20
|
children: [
|
|
21
21
|
const Sidebar(),
|
|
22
22
|
Flexible(
|
|
23
|
-
|
|
23
|
+
child: Column(
|
|
24
|
-
|
|
24
|
+
children: [
|
|
25
|
-
|
|
25
|
+
Header(bookName: book.name),
|
|
26
|
-
|
|
26
|
+
Flexible(
|
|
27
|
-
|
|
27
|
+
child: ListView.builder(
|
|
28
|
-
|
|
28
|
+
padding: const EdgeInsets.symmetric(
|
|
29
|
-
|
|
29
|
+
vertical: 20,
|
|
30
|
-
|
|
30
|
+
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
|
+
},
|
|
31
40
|
),
|
|
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
|
-
|
|
41
|
+
)
|
|
39
|
-
|
|
42
|
+
],
|
|
40
|
-
|
|
43
|
+
),
|
|
41
|
-
|
|
44
|
+
)
|
|
42
|
-
],
|
|
43
|
-
))
|
|
44
45
|
],
|
|
45
46
|
));
|
|
46
47
|
}
|
bible_app/lib/state.dart
CHANGED
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
import 'package:flutter/material.dart';
|
|
2
2
|
import 'package:flutter_reactive_value/flutter_reactive_value.dart';
|
|
3
|
+
import "package:flutter_persistent_value_notifier/flutter_persistent_value_notifier.dart";
|
|
3
4
|
|
|
4
|
-
final bookIndex =
|
|
5
|
+
final bookIndex = PersistentValueNotifier(
|
|
6
|
+
sharedPreferencesKey: "bookIndex",
|
|
7
|
+
initialValue: 0,
|
|
8
|
+
);
|
|
5
|
-
final chapterIndex =
|
|
9
|
+
final chapterIndex = PersistentValueNotifier(
|
|
10
|
+
sharedPreferencesKey: "chapterIndex",
|
|
11
|
+
initialValue: 0,
|
|
12
|
+
);
|
|
6
13
|
final selectedVerses = ValueNotifier([]);
|
|
7
14
|
|
|
8
15
|
onBookChange(int i) {
|
|
@@ -18,9 +25,9 @@ isVerseSelected(BuildContext context, int i) {
|
|
|
18
25
|
}
|
|
19
26
|
|
|
20
27
|
onVerseSelected(int i) {
|
|
21
|
-
if(selectedVerses.value.contains(i)) {
|
|
28
|
+
if (selectedVerses.value.contains(i)) {
|
|
22
|
-
selectedVerses.value.
|
|
29
|
+
selectedVerses.value = [...selectedVerses.value.where((it) => it != i)];
|
|
23
30
|
} else {
|
|
24
|
-
selectedVerses.value.
|
|
31
|
+
selectedVerses.value = [...selectedVerses.value, i];
|
|
25
32
|
}
|
|
26
|
-
}
|
|
33
|
+
}
|
bible_app/lib/utils/assets.dart
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import
|
|
1
|
+
import "dart:convert";
|
|
2
|
-
import
|
|
2
|
+
import "dart:io";
|
|
3
|
-
import
|
|
3
|
+
import "package:flutter/material.dart";
|
|
4
|
-
import
|
|
4
|
+
import "package:path_provider/path_provider.dart";
|
|
5
5
|
|
|
6
6
|
class Utils {
|
|
7
7
|
static Future<String> loadAsset(BuildContext context) async {
|
|
8
8
|
return await DefaultAssetBundle.of(context)
|
|
9
|
-
.loadString(
|
|
9
|
+
.loadString("assets/kannada.csv");
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
Future<String> get _localPath async {
|
|
@@ -17,7 +17,7 @@ class Utils {
|
|
|
17
17
|
|
|
18
18
|
Future<File> get _localFile async {
|
|
19
19
|
final path = await _localPath;
|
|
20
|
-
return File(
|
|
20
|
+
return File("$path/counter.txt");
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
Future<List<String>> readCounter() async {
|
bible_app/lib/utils/dialog.dart
ADDED
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import "package:flutter/material.dart";
|
|
2
|
+
|
|
3
|
+
Future<T?> showCustomDialog<T>(BuildContext context, Widget child) {
|
|
4
|
+
return showGeneralDialog<T>(
|
|
5
|
+
context: context,
|
|
6
|
+
barrierLabel: MaterialLocalizations.of(context).modalBarrierDismissLabel,
|
|
7
|
+
barrierDismissible: true,
|
|
8
|
+
barrierColor: Colors.black.withOpacity(0.5),
|
|
9
|
+
transitionDuration: const Duration(milliseconds: 0),
|
|
10
|
+
transitionBuilder: (_, anim, __, child) {
|
|
11
|
+
return FadeTransition(
|
|
12
|
+
opacity: anim,
|
|
13
|
+
child: child,
|
|
14
|
+
);
|
|
15
|
+
},
|
|
16
|
+
pageBuilder: (_, __, ___) {
|
|
17
|
+
return Container(
|
|
18
|
+
// width: MediaQuery.of(context).size.width - 10,
|
|
19
|
+
// height: MediaQuery.of(context).size.height - 80,
|
|
20
|
+
color: Colors.white,
|
|
21
|
+
margin: const EdgeInsets.symmetric(horizontal: 250, vertical: 0),
|
|
22
|
+
child: child,
|
|
23
|
+
);
|
|
24
|
+
},
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
class DialogUtils {
|
|
29
|
+
static DialogUtils _instance = new DialogUtils.internal();
|
|
30
|
+
|
|
31
|
+
DialogUtils.internal();
|
|
32
|
+
|
|
33
|
+
factory DialogUtils() => _instance;
|
|
34
|
+
|
|
35
|
+
static void showCustomDialog(BuildContext context,
|
|
36
|
+
{required String title,
|
|
37
|
+
String okBtnText = "Ok",
|
|
38
|
+
String cancelBtnText = "Cancel",
|
|
39
|
+
required Function okBtnFunction}) {
|
|
40
|
+
showDialog(
|
|
41
|
+
context: context,
|
|
42
|
+
builder: (_) {
|
|
43
|
+
return AlertDialog(
|
|
44
|
+
title: Text(title),
|
|
45
|
+
// content:
|
|
46
|
+
actions: <Widget>[
|
|
47
|
+
TextButton(
|
|
48
|
+
child: Text(okBtnText),
|
|
49
|
+
onPressed: () {},
|
|
50
|
+
),
|
|
51
|
+
TextButton(child: Text(cancelBtnText), onPressed: () => Navigator.pop(context))
|
|
52
|
+
],
|
|
53
|
+
);
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
class PlaceholderDialog extends StatelessWidget {
|
|
59
|
+
const PlaceholderDialog({
|
|
60
|
+
this.icon,
|
|
61
|
+
this.title,
|
|
62
|
+
this.message,
|
|
63
|
+
this.actions = const [],
|
|
64
|
+
Key? key,
|
|
65
|
+
}) : super(key: key);
|
|
66
|
+
|
|
67
|
+
final Widget? icon;
|
|
68
|
+
final String? title;
|
|
69
|
+
final String? message;
|
|
70
|
+
final List<Widget> actions;
|
|
71
|
+
|
|
72
|
+
@override
|
|
73
|
+
Widget build(BuildContext context) {
|
|
74
|
+
return AlertDialog(
|
|
75
|
+
shape: RoundedRectangleBorder(
|
|
76
|
+
borderRadius: BorderRadius.circular(20.0),
|
|
77
|
+
),
|
|
78
|
+
icon: icon,
|
|
79
|
+
title: title == null
|
|
80
|
+
? null
|
|
81
|
+
: Text(
|
|
82
|
+
title!,
|
|
83
|
+
textAlign: TextAlign.center,
|
|
84
|
+
),
|
|
85
|
+
// titleTextStyle: AppStyle.bodyBlack,
|
|
86
|
+
content: message == null
|
|
87
|
+
? null
|
|
88
|
+
: Text(
|
|
89
|
+
message!,
|
|
90
|
+
textAlign: TextAlign.center,
|
|
91
|
+
),
|
|
92
|
+
// contentTextStyle: AppStyle.textBlack,
|
|
93
|
+
actionsAlignment: MainAxisAlignment.center,
|
|
94
|
+
actionsOverflowButtonSpacing: 8.0,
|
|
95
|
+
actions: actions,
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
void showSlideCustomDialog(BuildContext context) {
|
|
102
|
+
showGeneralDialog(
|
|
103
|
+
context: context,
|
|
104
|
+
barrierLabel: "Barrier",
|
|
105
|
+
barrierDismissible: true,
|
|
106
|
+
barrierColor: Colors.black.withOpacity(0.5),
|
|
107
|
+
transitionDuration: Duration(milliseconds: 700),
|
|
108
|
+
pageBuilder: (_, __, ___) {
|
|
109
|
+
return Center(
|
|
110
|
+
child: Container(
|
|
111
|
+
height: 240,
|
|
112
|
+
child: SizedBox.expand(child: FlutterLogo()),
|
|
113
|
+
margin: EdgeInsets.symmetric(horizontal: 20),
|
|
114
|
+
decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(40)),
|
|
115
|
+
),
|
|
116
|
+
);
|
|
117
|
+
},
|
|
118
|
+
transitionBuilder: (_, anim, __, child) {
|
|
119
|
+
Tween<Offset> tween;
|
|
120
|
+
if (anim.status == AnimationStatus.reverse) {
|
|
121
|
+
tween = Tween(begin: Offset(-1, 0), end: Offset.zero);
|
|
122
|
+
} else {
|
|
123
|
+
tween = Tween(begin: Offset(1, 0), end: Offset.zero);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
return SlideTransition(
|
|
127
|
+
position: tween.animate(anim),
|
|
128
|
+
child: FadeTransition(
|
|
129
|
+
opacity: anim,
|
|
130
|
+
child: child,
|
|
131
|
+
),
|
|
132
|
+
);
|
|
133
|
+
},
|
|
134
|
+
);
|
|
135
|
+
}
|
bible_app/lib/utils/text.dart
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import 'package:flutter/material.dart';
|
|
2
|
-
|
|
3
|
-
class TextUtils {
|
|
4
|
-
static error(String msg) {
|
|
5
|
-
return Text(
|
|
6
|
-
style: const TextStyle(
|
|
7
|
-
color: Colors.red,
|
|
8
|
-
),
|
|
9
|
-
msg,
|
|
10
|
-
);
|
|
11
|
-
}
|
|
12
|
-
}
|
bible_app/macos/Flutter/GeneratedPluginRegistrant.swift
CHANGED
|
@@ -6,7 +6,9 @@ import FlutterMacOS
|
|
|
6
6
|
import Foundation
|
|
7
7
|
|
|
8
8
|
import path_provider_foundation
|
|
9
|
+
import shared_preferences_foundation
|
|
9
10
|
|
|
10
11
|
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
|
11
12
|
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
|
|
13
|
+
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
|
|
12
14
|
}
|
bible_app/macos/Podfile.lock
CHANGED
|
@@ -3,20 +3,27 @@ PODS:
|
|
|
3
3
|
- path_provider_foundation (0.0.1):
|
|
4
4
|
- Flutter
|
|
5
5
|
- FlutterMacOS
|
|
6
|
+
- shared_preferences_foundation (0.0.1):
|
|
7
|
+
- Flutter
|
|
8
|
+
- FlutterMacOS
|
|
6
9
|
|
|
7
10
|
DEPENDENCIES:
|
|
8
11
|
- FlutterMacOS (from `Flutter/ephemeral`)
|
|
9
12
|
- path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`)
|
|
13
|
+
- shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`)
|
|
10
14
|
|
|
11
15
|
EXTERNAL SOURCES:
|
|
12
16
|
FlutterMacOS:
|
|
13
17
|
:path: Flutter/ephemeral
|
|
14
18
|
path_provider_foundation:
|
|
15
19
|
:path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin
|
|
20
|
+
shared_preferences_foundation:
|
|
21
|
+
:path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin
|
|
16
22
|
|
|
17
23
|
SPEC CHECKSUMS:
|
|
18
24
|
FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
|
|
19
25
|
path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943
|
|
26
|
+
shared_preferences_foundation: 5b919d13b803cadd15ed2dc053125c68730e5126
|
|
20
27
|
|
|
21
28
|
PODFILE CHECKSUM: 236401fc2c932af29a9fcf0e97baeeb2d750d367
|
|
22
29
|
|
bible_app/pubspec.lock
CHANGED
|
@@ -1,6 +1,38 @@
|
|
|
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: a36ec4843dc30ea6bf652bf25e3448db6c5e8bcf4aa55f063a5d1dad216d8214
|
|
9
|
+
url: "https://pub.dev"
|
|
10
|
+
source: hosted
|
|
11
|
+
version: "58.0.0"
|
|
12
|
+
analyzer:
|
|
13
|
+
dependency: transitive
|
|
14
|
+
description:
|
|
15
|
+
name: analyzer
|
|
16
|
+
sha256: cc4242565347e98424ce9945c819c192ec0838cb9d1f6aa4a97cc96becbc5b27
|
|
17
|
+
url: "https://pub.dev"
|
|
18
|
+
source: hosted
|
|
19
|
+
version: "5.10.0"
|
|
20
|
+
analyzer_plugin:
|
|
21
|
+
dependency: transitive
|
|
22
|
+
description:
|
|
23
|
+
name: analyzer_plugin
|
|
24
|
+
sha256: c1d5f167683de03d5ab6c3b53fc9aeefc5d59476e7810ba7bbddff50c6f4392d
|
|
25
|
+
url: "https://pub.dev"
|
|
26
|
+
source: hosted
|
|
27
|
+
version: "0.11.2"
|
|
28
|
+
args:
|
|
29
|
+
dependency: transitive
|
|
30
|
+
description:
|
|
31
|
+
name: args
|
|
32
|
+
sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596
|
|
33
|
+
url: "https://pub.dev"
|
|
34
|
+
source: hosted
|
|
35
|
+
version: "2.4.2"
|
|
4
36
|
async:
|
|
5
37
|
dependency: transitive
|
|
6
38
|
description:
|
|
@@ -25,6 +57,30 @@ packages:
|
|
|
25
57
|
url: "https://pub.dev"
|
|
26
58
|
source: hosted
|
|
27
59
|
version: "1.3.0"
|
|
60
|
+
checked_yaml:
|
|
61
|
+
dependency: transitive
|
|
62
|
+
description:
|
|
63
|
+
name: checked_yaml
|
|
64
|
+
sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff
|
|
65
|
+
url: "https://pub.dev"
|
|
66
|
+
source: hosted
|
|
67
|
+
version: "2.0.3"
|
|
68
|
+
ci:
|
|
69
|
+
dependency: transitive
|
|
70
|
+
description:
|
|
71
|
+
name: ci
|
|
72
|
+
sha256: "145d095ce05cddac4d797a158bc4cf3b6016d1fe63d8c3d2fbd7212590adca13"
|
|
73
|
+
url: "https://pub.dev"
|
|
74
|
+
source: hosted
|
|
75
|
+
version: "0.1.0"
|
|
76
|
+
cli_util:
|
|
77
|
+
dependency: transitive
|
|
78
|
+
description:
|
|
79
|
+
name: cli_util
|
|
80
|
+
sha256: b8db3080e59b2503ca9e7922c3df2072cf13992354d5e944074ffa836fba43b7
|
|
81
|
+
url: "https://pub.dev"
|
|
82
|
+
source: hosted
|
|
83
|
+
version: "0.4.0"
|
|
28
84
|
clock:
|
|
29
85
|
dependency: transitive
|
|
30
86
|
description:
|
|
@@ -41,6 +97,22 @@ packages:
|
|
|
41
97
|
url: "https://pub.dev"
|
|
42
98
|
source: hosted
|
|
43
99
|
version: "1.17.1"
|
|
100
|
+
convert:
|
|
101
|
+
dependency: transitive
|
|
102
|
+
description:
|
|
103
|
+
name: convert
|
|
104
|
+
sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592"
|
|
105
|
+
url: "https://pub.dev"
|
|
106
|
+
source: hosted
|
|
107
|
+
version: "3.1.1"
|
|
108
|
+
crypto:
|
|
109
|
+
dependency: transitive
|
|
110
|
+
description:
|
|
111
|
+
name: crypto
|
|
112
|
+
sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab
|
|
113
|
+
url: "https://pub.dev"
|
|
114
|
+
source: hosted
|
|
115
|
+
version: "3.0.3"
|
|
44
116
|
cupertino_icons:
|
|
45
117
|
dependency: "direct main"
|
|
46
118
|
description:
|
|
@@ -49,6 +121,38 @@ packages:
|
|
|
49
121
|
url: "https://pub.dev"
|
|
50
122
|
source: hosted
|
|
51
123
|
version: "1.0.5"
|
|
124
|
+
custom_lint:
|
|
125
|
+
dependency: "direct dev"
|
|
126
|
+
description:
|
|
127
|
+
name: custom_lint
|
|
128
|
+
sha256: e87176016465263daf10c209df1f50a52e9e46e7612fab7462da1e6d984638f6
|
|
129
|
+
url: "https://pub.dev"
|
|
130
|
+
source: hosted
|
|
131
|
+
version: "0.3.4"
|
|
132
|
+
custom_lint_builder:
|
|
133
|
+
dependency: transitive
|
|
134
|
+
description:
|
|
135
|
+
name: custom_lint_builder
|
|
136
|
+
sha256: "6b5e20a249f2f7f15d098f802fe736b72cac14cddccdfcb46027e1b401deec9f"
|
|
137
|
+
url: "https://pub.dev"
|
|
138
|
+
source: hosted
|
|
139
|
+
version: "0.3.4"
|
|
140
|
+
custom_lint_core:
|
|
141
|
+
dependency: transitive
|
|
142
|
+
description:
|
|
143
|
+
name: custom_lint_core
|
|
144
|
+
sha256: f42f688bc26bdf4c081e011ba27a00439f17c20d9aeca4312f8022e577f8363f
|
|
145
|
+
url: "https://pub.dev"
|
|
146
|
+
source: hosted
|
|
147
|
+
version: "0.3.4"
|
|
148
|
+
dart_style:
|
|
149
|
+
dependency: transitive
|
|
150
|
+
description:
|
|
151
|
+
name: dart_style
|
|
152
|
+
sha256: f4f1f73ab3fd2afcbcca165ee601fe980d966af6a21b5970c6c9376955c528ad
|
|
153
|
+
url: "https://pub.dev"
|
|
154
|
+
source: hosted
|
|
155
|
+
version: "2.3.1"
|
|
52
156
|
fake_async:
|
|
53
157
|
dependency: transitive
|
|
54
158
|
description:
|
|
@@ -65,6 +169,14 @@ packages:
|
|
|
65
169
|
url: "https://pub.dev"
|
|
66
170
|
source: hosted
|
|
67
171
|
version: "2.0.2"
|
|
172
|
+
file:
|
|
173
|
+
dependency: transitive
|
|
174
|
+
description:
|
|
175
|
+
name: file
|
|
176
|
+
sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d"
|
|
177
|
+
url: "https://pub.dev"
|
|
178
|
+
source: hosted
|
|
179
|
+
version: "6.1.4"
|
|
68
180
|
flutter:
|
|
69
181
|
dependency: "direct main"
|
|
70
182
|
description: flutter
|
|
@@ -78,6 +190,14 @@ packages:
|
|
|
78
190
|
url: "https://pub.dev"
|
|
79
191
|
source: hosted
|
|
80
192
|
version: "2.0.2"
|
|
193
|
+
flutter_persistent_value_notifier:
|
|
194
|
+
dependency: "direct main"
|
|
195
|
+
description:
|
|
196
|
+
name: flutter_persistent_value_notifier
|
|
197
|
+
sha256: ed949e8081346f9bb2f709a3dd1f71bdf842e5bfed332650c046321ec935013a
|
|
198
|
+
url: "https://pub.dev"
|
|
199
|
+
source: hosted
|
|
200
|
+
version: "1.0.2"
|
|
81
201
|
flutter_reactive_value:
|
|
82
202
|
dependency: "direct main"
|
|
83
203
|
description:
|
|
@@ -86,11 +206,56 @@ packages:
|
|
|
86
206
|
url: "https://pub.dev"
|
|
87
207
|
source: hosted
|
|
88
208
|
version: "1.0.4"
|
|
209
|
+
flutter_solidart:
|
|
210
|
+
dependency: "direct main"
|
|
211
|
+
description:
|
|
212
|
+
name: flutter_solidart
|
|
213
|
+
sha256: "627b82582492c2290e8b07d2c744ea801b1d24b16b2c64170525c4b00765ba45"
|
|
214
|
+
url: "https://pub.dev"
|
|
215
|
+
source: hosted
|
|
216
|
+
version: "0.4.2"
|
|
217
|
+
flutter_staggered_grid_view:
|
|
218
|
+
dependency: "direct main"
|
|
219
|
+
description:
|
|
220
|
+
name: flutter_staggered_grid_view
|
|
221
|
+
sha256: "1312314293acceb65b92754298754801b0e1f26a1845833b740b30415bbbcf07"
|
|
222
|
+
url: "https://pub.dev"
|
|
223
|
+
source: hosted
|
|
224
|
+
version: "0.6.2"
|
|
89
225
|
flutter_test:
|
|
90
226
|
dependency: "direct dev"
|
|
91
227
|
description: flutter
|
|
92
228
|
source: sdk
|
|
93
229
|
version: "0.0.0"
|
|
230
|
+
flutter_web_plugins:
|
|
231
|
+
dependency: transitive
|
|
232
|
+
description: flutter
|
|
233
|
+
source: sdk
|
|
234
|
+
version: "0.0.0"
|
|
235
|
+
freezed_annotation:
|
|
236
|
+
dependency: transitive
|
|
237
|
+
description:
|
|
238
|
+
name: freezed_annotation
|
|
239
|
+
sha256: c3fd9336eb55a38cc1bbd79ab17573113a8deccd0ecbbf926cca3c62803b5c2d
|
|
240
|
+
url: "https://pub.dev"
|
|
241
|
+
source: hosted
|
|
242
|
+
version: "2.4.1"
|
|
243
|
+
glob:
|
|
244
|
+
dependency: transitive
|
|
245
|
+
description:
|
|
246
|
+
name: glob
|
|
247
|
+
sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63"
|
|
248
|
+
url: "https://pub.dev"
|
|
249
|
+
source: hosted
|
|
250
|
+
version: "2.1.2"
|
|
251
|
+
hotreloader:
|
|
252
|
+
dependency: transitive
|
|
253
|
+
description:
|
|
254
|
+
name: hotreloader
|
|
255
|
+
sha256: "728c0613556c1d153f7e7f4a367cffacc3f5a677d7f6497a1c2b35add4e6dacf"
|
|
256
|
+
url: "https://pub.dev"
|
|
257
|
+
source: hosted
|
|
258
|
+
version: "3.0.6"
|
|
94
259
|
js:
|
|
95
260
|
dependency: transitive
|
|
96
261
|
description:
|
|
@@ -99,6 +264,14 @@ packages:
|
|
|
99
264
|
url: "https://pub.dev"
|
|
100
265
|
source: hosted
|
|
101
266
|
version: "0.6.7"
|
|
267
|
+
json_annotation:
|
|
268
|
+
dependency: transitive
|
|
269
|
+
description:
|
|
270
|
+
name: json_annotation
|
|
271
|
+
sha256: b10a7b2ff83d83c777edba3c6a0f97045ddadd56c944e1a23a3fdf43a1bf4467
|
|
272
|
+
url: "https://pub.dev"
|
|
273
|
+
source: hosted
|
|
274
|
+
version: "4.8.1"
|
|
102
275
|
lints:
|
|
103
276
|
dependency: transitive
|
|
104
277
|
description:
|
|
@@ -107,6 +280,14 @@ packages:
|
|
|
107
280
|
url: "https://pub.dev"
|
|
108
281
|
source: hosted
|
|
109
282
|
version: "2.1.1"
|
|
283
|
+
logging:
|
|
284
|
+
dependency: transitive
|
|
285
|
+
description:
|
|
286
|
+
name: logging
|
|
287
|
+
sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340"
|
|
288
|
+
url: "https://pub.dev"
|
|
289
|
+
source: hosted
|
|
290
|
+
version: "1.2.0"
|
|
110
291
|
matcher:
|
|
111
292
|
dependency: transitive
|
|
112
293
|
description:
|
|
@@ -131,6 +312,14 @@ packages:
|
|
|
131
312
|
url: "https://pub.dev"
|
|
132
313
|
source: hosted
|
|
133
314
|
version: "1.9.1"
|
|
315
|
+
package_config:
|
|
316
|
+
dependency: transitive
|
|
317
|
+
description:
|
|
318
|
+
name: package_config
|
|
319
|
+
sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd"
|
|
320
|
+
url: "https://pub.dev"
|
|
321
|
+
source: hosted
|
|
322
|
+
version: "2.1.0"
|
|
134
323
|
path:
|
|
135
324
|
dependency: transitive
|
|
136
325
|
description:
|
|
@@ -203,11 +392,107 @@ packages:
|
|
|
203
392
|
url: "https://pub.dev"
|
|
204
393
|
source: hosted
|
|
205
394
|
version: "2.1.5"
|
|
395
|
+
pub_semver:
|
|
396
|
+
dependency: transitive
|
|
397
|
+
description:
|
|
398
|
+
name: pub_semver
|
|
399
|
+
sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c"
|
|
400
|
+
url: "https://pub.dev"
|
|
401
|
+
source: hosted
|
|
402
|
+
version: "2.1.4"
|
|
403
|
+
pubspec_parse:
|
|
404
|
+
dependency: transitive
|
|
405
|
+
description:
|
|
406
|
+
name: pubspec_parse
|
|
407
|
+
sha256: c63b2876e58e194e4b0828fcb080ad0e06d051cb607a6be51a9e084f47cb9367
|
|
408
|
+
url: "https://pub.dev"
|
|
409
|
+
source: hosted
|
|
410
|
+
version: "1.2.3"
|
|
411
|
+
rxdart:
|
|
412
|
+
dependency: transitive
|
|
413
|
+
description:
|
|
414
|
+
name: rxdart
|
|
415
|
+
sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb"
|
|
416
|
+
url: "https://pub.dev"
|
|
417
|
+
source: hosted
|
|
418
|
+
version: "0.27.7"
|
|
419
|
+
shared_preferences:
|
|
420
|
+
dependency: transitive
|
|
421
|
+
description:
|
|
422
|
+
name: shared_preferences
|
|
423
|
+
sha256: "0344316c947ffeb3a529eac929e1978fcd37c26be4e8468628bac399365a3ca1"
|
|
424
|
+
url: "https://pub.dev"
|
|
425
|
+
source: hosted
|
|
426
|
+
version: "2.2.0"
|
|
427
|
+
shared_preferences_android:
|
|
428
|
+
dependency: transitive
|
|
429
|
+
description:
|
|
430
|
+
name: shared_preferences_android
|
|
431
|
+
sha256: fe8401ec5b6dcd739a0fe9588802069e608c3fdbfd3c3c93e546cf2f90438076
|
|
432
|
+
url: "https://pub.dev"
|
|
433
|
+
source: hosted
|
|
434
|
+
version: "2.2.0"
|
|
435
|
+
shared_preferences_foundation:
|
|
436
|
+
dependency: transitive
|
|
437
|
+
description:
|
|
438
|
+
name: shared_preferences_foundation
|
|
439
|
+
sha256: f39696b83e844923b642ce9dd4bd31736c17e697f6731a5adf445b1274cf3cd4
|
|
440
|
+
url: "https://pub.dev"
|
|
441
|
+
source: hosted
|
|
442
|
+
version: "2.3.2"
|
|
443
|
+
shared_preferences_linux:
|
|
444
|
+
dependency: transitive
|
|
445
|
+
description:
|
|
446
|
+
name: shared_preferences_linux
|
|
447
|
+
sha256: "71d6806d1449b0a9d4e85e0c7a917771e672a3d5dc61149cc9fac871115018e1"
|
|
448
|
+
url: "https://pub.dev"
|
|
449
|
+
source: hosted
|
|
450
|
+
version: "2.3.0"
|
|
451
|
+
shared_preferences_platform_interface:
|
|
452
|
+
dependency: transitive
|
|
453
|
+
description:
|
|
454
|
+
name: shared_preferences_platform_interface
|
|
455
|
+
sha256: "23b052f17a25b90ff2b61aad4cc962154da76fb62848a9ce088efe30d7c50ab1"
|
|
456
|
+
url: "https://pub.dev"
|
|
457
|
+
source: hosted
|
|
458
|
+
version: "2.3.0"
|
|
459
|
+
shared_preferences_web:
|
|
460
|
+
dependency: transitive
|
|
461
|
+
description:
|
|
462
|
+
name: shared_preferences_web
|
|
463
|
+
sha256: "7347b194fb0bbeb4058e6a4e87ee70350b6b2b90f8ac5f8bd5b3a01548f6d33a"
|
|
464
|
+
url: "https://pub.dev"
|
|
465
|
+
source: hosted
|
|
466
|
+
version: "2.2.0"
|
|
467
|
+
shared_preferences_windows:
|
|
468
|
+
dependency: transitive
|
|
469
|
+
description:
|
|
470
|
+
name: shared_preferences_windows
|
|
471
|
+
sha256: f95e6a43162bce43c9c3405f3eb6f39e5b5d11f65fab19196cf8225e2777624d
|
|
472
|
+
url: "https://pub.dev"
|
|
473
|
+
source: hosted
|
|
474
|
+
version: "2.3.0"
|
|
206
475
|
sky_engine:
|
|
207
476
|
dependency: transitive
|
|
208
477
|
description: flutter
|
|
209
478
|
source: sdk
|
|
210
479
|
version: "0.0.99"
|
|
480
|
+
solidart:
|
|
481
|
+
dependency: transitive
|
|
482
|
+
description:
|
|
483
|
+
name: solidart
|
|
484
|
+
sha256: "329ad04942decbc899189242e31a651c7172472f70a12325f2f81769356a6c20"
|
|
485
|
+
url: "https://pub.dev"
|
|
486
|
+
source: hosted
|
|
487
|
+
version: "0.3.0"
|
|
488
|
+
solidart_lint:
|
|
489
|
+
dependency: "direct dev"
|
|
490
|
+
description:
|
|
491
|
+
name: solidart_lint
|
|
492
|
+
sha256: "9d93a7a5f5696d18af0229d65449c609c55a040745152902fbf343c4461c111a"
|
|
493
|
+
url: "https://pub.dev"
|
|
494
|
+
source: hosted
|
|
495
|
+
version: "0.2.0"
|
|
211
496
|
source_span:
|
|
212
497
|
dependency: transitive
|
|
213
498
|
description:
|
|
@@ -232,6 +517,14 @@ packages:
|
|
|
232
517
|
url: "https://pub.dev"
|
|
233
518
|
source: hosted
|
|
234
519
|
version: "2.1.1"
|
|
520
|
+
stream_transform:
|
|
521
|
+
dependency: transitive
|
|
522
|
+
description:
|
|
523
|
+
name: stream_transform
|
|
524
|
+
sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f"
|
|
525
|
+
url: "https://pub.dev"
|
|
526
|
+
source: hosted
|
|
527
|
+
version: "2.1.0"
|
|
235
528
|
string_scanner:
|
|
236
529
|
dependency: transitive
|
|
237
530
|
description:
|
|
@@ -256,6 +549,22 @@ packages:
|
|
|
256
549
|
url: "https://pub.dev"
|
|
257
550
|
source: hosted
|
|
258
551
|
version: "0.5.1"
|
|
552
|
+
typed_data:
|
|
553
|
+
dependency: transitive
|
|
554
|
+
description:
|
|
555
|
+
name: typed_data
|
|
556
|
+
sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c
|
|
557
|
+
url: "https://pub.dev"
|
|
558
|
+
source: hosted
|
|
559
|
+
version: "1.3.2"
|
|
560
|
+
uuid:
|
|
561
|
+
dependency: transitive
|
|
562
|
+
description:
|
|
563
|
+
name: uuid
|
|
564
|
+
sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313"
|
|
565
|
+
url: "https://pub.dev"
|
|
566
|
+
source: hosted
|
|
567
|
+
version: "3.0.7"
|
|
259
568
|
vector_math:
|
|
260
569
|
dependency: transitive
|
|
261
570
|
description:
|
|
@@ -264,6 +573,22 @@ packages:
|
|
|
264
573
|
url: "https://pub.dev"
|
|
265
574
|
source: hosted
|
|
266
575
|
version: "2.1.4"
|
|
576
|
+
vm_service:
|
|
577
|
+
dependency: transitive
|
|
578
|
+
description:
|
|
579
|
+
name: vm_service
|
|
580
|
+
sha256: ada49637c27973c183dad90beb6bd781eea4c9f5f955d35da172de0af7bd3440
|
|
581
|
+
url: "https://pub.dev"
|
|
582
|
+
source: hosted
|
|
583
|
+
version: "11.8.0"
|
|
584
|
+
watcher:
|
|
585
|
+
dependency: transitive
|
|
586
|
+
description:
|
|
587
|
+
name: watcher
|
|
588
|
+
sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8"
|
|
589
|
+
url: "https://pub.dev"
|
|
590
|
+
source: hosted
|
|
591
|
+
version: "1.1.0"
|
|
267
592
|
win32:
|
|
268
593
|
dependency: transitive
|
|
269
594
|
description:
|
|
@@ -280,6 +605,14 @@ packages:
|
|
|
280
605
|
url: "https://pub.dev"
|
|
281
606
|
source: hosted
|
|
282
607
|
version: "1.0.1"
|
|
608
|
+
yaml:
|
|
609
|
+
dependency: transitive
|
|
610
|
+
description:
|
|
611
|
+
name: yaml
|
|
612
|
+
sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5"
|
|
613
|
+
url: "https://pub.dev"
|
|
614
|
+
source: hosted
|
|
615
|
+
version: "3.1.2"
|
|
283
616
|
sdks:
|
|
284
617
|
dart: ">=3.0.6 <4.0.0"
|
|
285
618
|
flutter: ">=3.7.0"
|
bible_app/pubspec.yaml
CHANGED
|
@@ -37,6 +37,9 @@ dependencies:
|
|
|
37
37
|
cupertino_icons: ^1.0.2
|
|
38
38
|
path_provider: ^2.0.15
|
|
39
39
|
flutter_reactive_value: ^1.0.4
|
|
40
|
+
flutter_staggered_grid_view: 0.6.2
|
|
41
|
+
flutter_solidart: ^0.4.2
|
|
42
|
+
flutter_persistent_value_notifier: ^1.0.2
|
|
40
43
|
|
|
41
44
|
dev_dependencies:
|
|
42
45
|
flutter_test:
|
|
@@ -48,6 +51,8 @@ dev_dependencies:
|
|
|
48
51
|
# package. See that file for information about deactivating specific lint
|
|
49
52
|
# rules and activating additional ones.
|
|
50
53
|
flutter_lints: ^2.0.0
|
|
54
|
+
solidart_lint: ^0.2.0
|
|
55
|
+
custom_lint: ^0.3.4
|
|
51
56
|
|
|
52
57
|
# For information on the generic Dart part of this file, see the
|
|
53
58
|
# following page: https://dart.dev/tools/pub/pubspec
|