~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.
36d4743f
—
pyrossh 2 years ago
add play button
bible_app/lib/components/play_button.dart
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import "package:flutter/material.dart";
|
|
2
|
+
import "package:flutter_reactive_value/flutter_reactive_value.dart";
|
|
3
|
+
import "package:just_audio/just_audio.dart";
|
|
4
|
+
import "../domain/kannada_gen.dart";
|
|
5
|
+
import "../state.dart";
|
|
6
|
+
import "../utils/dialog.dart";
|
|
7
|
+
|
|
8
|
+
class PlayButton extends StatelessWidget {
|
|
9
|
+
final int book;
|
|
10
|
+
final int chapter;
|
|
11
|
+
final player = AudioPlayer();
|
|
12
|
+
|
|
13
|
+
PlayButton({super.key, required this.book, 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
|
+
}
|
|
17
|
+
|
|
18
|
+
@override
|
|
19
|
+
Widget build(BuildContext context) {
|
|
20
|
+
final icon = isPlaying.reactiveValue(context) ? Icons.pause_circle_filled : Icons.play_circle_fill;
|
|
21
|
+
return IconButton(
|
|
22
|
+
icon: Icon(icon, size: 36),
|
|
23
|
+
onPressed: () async {
|
|
24
|
+
if (isPlaying.value) {
|
|
25
|
+
await player.pause();
|
|
26
|
+
onPause();
|
|
27
|
+
} else {
|
|
28
|
+
try {
|
|
29
|
+
onPlay();
|
|
30
|
+
final verses = kannadaBible[book].chapters[chapter].verses;
|
|
31
|
+
final filteredVerses =
|
|
32
|
+
verses.asMap().keys.where((it) => selectedVerses.value.contains(it)).map((it) => verses[it]);
|
|
33
|
+
for (final v in filteredVerses) {
|
|
34
|
+
await player.setClip(
|
|
35
|
+
start: Duration(milliseconds: (v.audioRange.start * 1000).toInt()),
|
|
36
|
+
end: Duration(milliseconds: (v.audioRange.end * 1000).toInt()),
|
|
37
|
+
);
|
|
38
|
+
await player.play();
|
|
39
|
+
await player.pause();
|
|
40
|
+
}
|
|
41
|
+
} catch (err) {
|
|
42
|
+
showError(context, "Could not play audio");
|
|
43
|
+
} finally {
|
|
44
|
+
await player.pause();
|
|
45
|
+
onPause();
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
}
|