mirror of
https://github.com/Dr-Blank/Vaani.git
synced 2026-07-05 17:01:39 +00:00
iii
This commit is contained in:
parent
20a3b95edc
commit
4a7c592e41
9 changed files with 112 additions and 102 deletions
|
|
@ -8,48 +8,12 @@ PODS:
|
||||||
- Flutter
|
- Flutter
|
||||||
- device_info_plus (0.0.1):
|
- device_info_plus (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- DKImagePickerController/Core (4.3.9):
|
|
||||||
- DKImagePickerController/ImageDataManager
|
|
||||||
- DKImagePickerController/Resource
|
|
||||||
- DKImagePickerController/ImageDataManager (4.3.9)
|
|
||||||
- DKImagePickerController/PhotoGallery (4.3.9):
|
|
||||||
- DKImagePickerController/Core
|
|
||||||
- DKPhotoGallery
|
|
||||||
- DKImagePickerController/Resource (4.3.9)
|
|
||||||
- DKPhotoGallery (0.0.19):
|
|
||||||
- DKPhotoGallery/Core (= 0.0.19)
|
|
||||||
- DKPhotoGallery/Model (= 0.0.19)
|
|
||||||
- DKPhotoGallery/Preview (= 0.0.19)
|
|
||||||
- DKPhotoGallery/Resource (= 0.0.19)
|
|
||||||
- SDWebImage
|
|
||||||
- SwiftyGif
|
|
||||||
- DKPhotoGallery/Core (0.0.19):
|
|
||||||
- DKPhotoGallery/Model
|
|
||||||
- DKPhotoGallery/Preview
|
|
||||||
- SDWebImage
|
|
||||||
- SwiftyGif
|
|
||||||
- DKPhotoGallery/Model (0.0.19):
|
|
||||||
- SDWebImage
|
|
||||||
- SwiftyGif
|
|
||||||
- DKPhotoGallery/Preview (0.0.19):
|
|
||||||
- DKPhotoGallery/Model
|
|
||||||
- DKPhotoGallery/Resource
|
|
||||||
- SDWebImage
|
|
||||||
- SwiftyGif
|
|
||||||
- DKPhotoGallery/Resource (0.0.19):
|
|
||||||
- SDWebImage
|
|
||||||
- SwiftyGif
|
|
||||||
- file_picker (0.0.1):
|
|
||||||
- DKImagePickerController/PhotoGallery
|
|
||||||
- Flutter
|
|
||||||
- Flutter (1.0.0)
|
- Flutter (1.0.0)
|
||||||
- isar_flutter_libs (1.0.0):
|
- isar_flutter_libs (1.0.0):
|
||||||
- Flutter
|
- Flutter
|
||||||
- just_audio (0.0.1):
|
- just_audio (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- media_kit_libs_ios_audio (1.0.4):
|
|
||||||
- Flutter
|
|
||||||
- package_info_plus (0.4.5):
|
- package_info_plus (0.4.5):
|
||||||
- Flutter
|
- Flutter
|
||||||
- path_provider_foundation (0.0.1):
|
- path_provider_foundation (0.0.1):
|
||||||
|
|
@ -57,9 +21,6 @@ PODS:
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- permission_handler_apple (9.3.0):
|
- permission_handler_apple (9.3.0):
|
||||||
- Flutter
|
- Flutter
|
||||||
- SDWebImage (5.21.3):
|
|
||||||
- SDWebImage/Core (= 5.21.3)
|
|
||||||
- SDWebImage/Core (5.21.3)
|
|
||||||
- sensors_plus (0.0.1):
|
- sensors_plus (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- share_plus (0.0.1):
|
- share_plus (0.0.1):
|
||||||
|
|
@ -67,7 +28,6 @@ PODS:
|
||||||
- sqflite_darwin (0.0.4):
|
- sqflite_darwin (0.0.4):
|
||||||
- Flutter
|
- Flutter
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- SwiftyGif (5.4.5)
|
|
||||||
- url_launcher_ios (0.0.1):
|
- url_launcher_ios (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- vibration (3.0.0):
|
- vibration (3.0.0):
|
||||||
|
|
@ -78,11 +38,9 @@ DEPENDENCIES:
|
||||||
- audio_session (from `.symlinks/plugins/audio_session/ios`)
|
- audio_session (from `.symlinks/plugins/audio_session/ios`)
|
||||||
- background_downloader (from `.symlinks/plugins/background_downloader/ios`)
|
- background_downloader (from `.symlinks/plugins/background_downloader/ios`)
|
||||||
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
|
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
|
||||||
- file_picker (from `.symlinks/plugins/file_picker/ios`)
|
|
||||||
- Flutter (from `Flutter`)
|
- Flutter (from `Flutter`)
|
||||||
- isar_flutter_libs (from `.symlinks/plugins/isar_flutter_libs/ios`)
|
- isar_flutter_libs (from `.symlinks/plugins/isar_flutter_libs/ios`)
|
||||||
- just_audio (from `.symlinks/plugins/just_audio/darwin`)
|
- just_audio (from `.symlinks/plugins/just_audio/darwin`)
|
||||||
- media_kit_libs_ios_audio (from `.symlinks/plugins/media_kit_libs_ios_audio/ios`)
|
|
||||||
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
|
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
|
||||||
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
|
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
|
||||||
- permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`)
|
- permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`)
|
||||||
|
|
@ -92,13 +50,6 @@ DEPENDENCIES:
|
||||||
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
|
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
|
||||||
- vibration (from `.symlinks/plugins/vibration/ios`)
|
- vibration (from `.symlinks/plugins/vibration/ios`)
|
||||||
|
|
||||||
SPEC REPOS:
|
|
||||||
trunk:
|
|
||||||
- DKImagePickerController
|
|
||||||
- DKPhotoGallery
|
|
||||||
- SDWebImage
|
|
||||||
- SwiftyGif
|
|
||||||
|
|
||||||
EXTERNAL SOURCES:
|
EXTERNAL SOURCES:
|
||||||
audio_service:
|
audio_service:
|
||||||
:path: ".symlinks/plugins/audio_service/darwin"
|
:path: ".symlinks/plugins/audio_service/darwin"
|
||||||
|
|
@ -108,16 +59,12 @@ EXTERNAL SOURCES:
|
||||||
:path: ".symlinks/plugins/background_downloader/ios"
|
:path: ".symlinks/plugins/background_downloader/ios"
|
||||||
device_info_plus:
|
device_info_plus:
|
||||||
:path: ".symlinks/plugins/device_info_plus/ios"
|
:path: ".symlinks/plugins/device_info_plus/ios"
|
||||||
file_picker:
|
|
||||||
:path: ".symlinks/plugins/file_picker/ios"
|
|
||||||
Flutter:
|
Flutter:
|
||||||
:path: Flutter
|
:path: Flutter
|
||||||
isar_flutter_libs:
|
isar_flutter_libs:
|
||||||
:path: ".symlinks/plugins/isar_flutter_libs/ios"
|
:path: ".symlinks/plugins/isar_flutter_libs/ios"
|
||||||
just_audio:
|
just_audio:
|
||||||
:path: ".symlinks/plugins/just_audio/darwin"
|
:path: ".symlinks/plugins/just_audio/darwin"
|
||||||
media_kit_libs_ios_audio:
|
|
||||||
:path: ".symlinks/plugins/media_kit_libs_ios_audio/ios"
|
|
||||||
package_info_plus:
|
package_info_plus:
|
||||||
:path: ".symlinks/plugins/package_info_plus/ios"
|
:path: ".symlinks/plugins/package_info_plus/ios"
|
||||||
path_provider_foundation:
|
path_provider_foundation:
|
||||||
|
|
@ -140,21 +87,15 @@ SPEC CHECKSUMS:
|
||||||
audio_session: 19e9480dbdd4e5f6c4543826b2e8b0e4ab6145fe
|
audio_session: 19e9480dbdd4e5f6c4543826b2e8b0e4ab6145fe
|
||||||
background_downloader: a05c77d32a0d70615b9c04577aa203535fc924ff
|
background_downloader: a05c77d32a0d70615b9c04577aa203535fc924ff
|
||||||
device_info_plus: bf2e3232933866d73fe290f2942f2156cdd10342
|
device_info_plus: bf2e3232933866d73fe290f2942f2156cdd10342
|
||||||
DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c
|
|
||||||
DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60
|
|
||||||
file_picker: b159e0c068aef54932bb15dc9fd1571818edaf49
|
|
||||||
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
|
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
|
||||||
isar_flutter_libs: b69f437aeab9c521821c3f376198c4371fa21073
|
isar_flutter_libs: b69f437aeab9c521821c3f376198c4371fa21073
|
||||||
just_audio: a42c63806f16995daf5b219ae1d679deb76e6a79
|
just_audio: a42c63806f16995daf5b219ae1d679deb76e6a79
|
||||||
media_kit_libs_ios_audio: 8f39d96a9c630685dfb844c289bd1d114c486fb3
|
|
||||||
package_info_plus: c0502532a26c7662a62a356cebe2692ec5fe4ec4
|
package_info_plus: c0502532a26c7662a62a356cebe2692ec5fe4ec4
|
||||||
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
|
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
|
||||||
permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2
|
permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2
|
||||||
SDWebImage: 16309af6d214ba3f77a7c6f6fdda888cb313a50a
|
|
||||||
sensors_plus: 7229095999f30740798f0eeef5cd120357a8f4f2
|
sensors_plus: 7229095999f30740798f0eeef5cd120357a8f4f2
|
||||||
share_plus: 8b6f8b3447e494cca5317c8c3073de39b3600d1f
|
share_plus: 8b6f8b3447e494cca5317c8c3073de39b3600d1f
|
||||||
sqflite_darwin: 5a7236e3b501866c1c9befc6771dfd73ffb8702d
|
sqflite_darwin: 5a7236e3b501866c1c9befc6771dfd73ffb8702d
|
||||||
SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4
|
|
||||||
url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe
|
url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe
|
||||||
vibration: 3797858f8cbf53d841e189ef8bd533d96e4ca93c
|
vibration: 3797858f8cbf53d841e189ef8bd533d96e4ca93c
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@ abstract class AbsAudioPlayer {
|
||||||
final chapterStreamController = BehaviorSubject<BookChapter?>.seeded(null);
|
final chapterStreamController = BehaviorSubject<BookChapter?>.seeded(null);
|
||||||
|
|
||||||
BookExpanded? get book => _bookStreamController.nvalue;
|
BookExpanded? get book => _bookStreamController.nvalue;
|
||||||
|
AudioTrack? get currentTrack => book?.tracks[currentIndex];
|
||||||
BookChapter? get currentChapter => chapterStreamController.nvalue;
|
BookChapter? get currentChapter => chapterStreamController.nvalue;
|
||||||
AbsPlayerState get playerState => playerStateSubject.value;
|
AbsPlayerState get playerState => playerStateSubject.value;
|
||||||
Stream<MediaItem?> get mediaItemStream => _mediaItemController.stream;
|
Stream<MediaItem?> get mediaItemStream => _mediaItemController.stream;
|
||||||
|
|
@ -68,8 +69,8 @@ abstract class AbsAudioPlayer {
|
||||||
_mediaItemController.sink.add(item);
|
_mediaItemController.sink.add(item);
|
||||||
final playlist = book.tracks
|
final playlist = book.tracks
|
||||||
.map(
|
.map(
|
||||||
(track) => _getUri(currentTrack, downloadedUris,
|
(track) =>
|
||||||
baseUrl: baseUrl, token: token),
|
_getUri(track, downloadedUris, baseUrl: baseUrl, token: token),
|
||||||
)
|
)
|
||||||
.toList();
|
.toList();
|
||||||
await setPlayList(playlist, index: indexTrack, position: positionInTrack);
|
await setPlayList(playlist, index: indexTrack, position: positionInTrack);
|
||||||
|
|
|
||||||
|
|
@ -26,9 +26,13 @@ class AbsPlatformAudioPlayer extends AbsAudioPlayer {
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
player.positionStream.distinct().listen((position) {
|
player.positionStream.distinct().listen((position) {
|
||||||
final chapter = book?.findChapterAtTime(positionInBook);
|
final chapter = currentChapter;
|
||||||
if (chapter != currentChapter) {
|
if (positionInBook <= (chapter?.start ?? Duration.zero) ||
|
||||||
chapterStreamController.add(chapter);
|
positionInBook <= (chapter?.end ?? Duration.zero)) {
|
||||||
|
final chapter = book?.findChapterAtTime(positionInBook);
|
||||||
|
if (chapter != currentChapter) {
|
||||||
|
chapterStreamController.add(chapter);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -103,4 +107,10 @@ class AbsPlatformAudioPlayer extends AbsAudioPlayer {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
double get speed => player.speed;
|
double get speed => player.speed;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
super.dispose();
|
||||||
|
player.dispose();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,32 +1,34 @@
|
||||||
import 'package:audio_service/audio_service.dart';
|
// import 'package:audio_service/audio_service.dart';
|
||||||
import 'package:audio_session/audio_session.dart';
|
// import 'package:audio_session/audio_session.dart';
|
||||||
import 'package:vaani/features/player/core/abs_audio_handler.dart' as core;
|
// import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||||
import 'package:vaani/features/player/core/abs_audio_player.dart';
|
// import 'package:vaani/features/player/core/abs_audio_handler.dart' as core;
|
||||||
import 'package:vaani/globals.dart';
|
// import 'package:vaani/features/player/core/abs_audio_player.dart';
|
||||||
|
// import 'package:vaani/globals.dart';
|
||||||
|
|
||||||
/// 音频播放器 配置
|
// /// 音频播放器 配置
|
||||||
Future<void> configurePlayer(AbsAudioPlayer player) async {
|
// @Riverpod(keepAlive: true)
|
||||||
// for playing audio on windows, linux
|
// Future<void> configurePlayer(AbsAudioPlayer player) async {
|
||||||
|
// // for playing audio on windows, linux
|
||||||
|
|
||||||
// for configuring how this app will interact with other audio apps
|
// // for configuring how this app will interact with other audio apps
|
||||||
final session = await AudioSession.instance;
|
// final session = await AudioSession.instance;
|
||||||
await session.configure(const AudioSessionConfiguration.speech());
|
// await session.configure(const AudioSessionConfiguration.speech());
|
||||||
|
|
||||||
await AudioService.init(
|
// await AudioService.init(
|
||||||
builder: () => core.AbsAudioHandler(player),
|
// builder: () => core.AbsAudioHandler(player),
|
||||||
config: const AudioServiceConfig(
|
// config: const AudioServiceConfig(
|
||||||
androidNotificationChannelId: 'dr.blank.vaani.channel.audio',
|
// androidNotificationChannelId: 'dr.blank.vaani.channel.audio',
|
||||||
androidNotificationChannelName: 'ABSPlayback',
|
// androidNotificationChannelName: 'ABSPlayback',
|
||||||
androidNotificationChannelDescription:
|
// androidNotificationChannelDescription:
|
||||||
'Needed to control audio from lock screen',
|
// 'Needed to control audio from lock screen',
|
||||||
androidNotificationOngoing: false,
|
// androidNotificationOngoing: false,
|
||||||
androidStopForegroundOnPause: false,
|
// androidStopForegroundOnPause: false,
|
||||||
androidNotificationIcon: 'drawable/ic_stat_logo',
|
// androidNotificationIcon: 'drawable/ic_stat_logo',
|
||||||
preloadArtwork: true,
|
// preloadArtwork: true,
|
||||||
// fastForwardInterval: Duration(seconds: 20),
|
// // fastForwardInterval: Duration(seconds: 20),
|
||||||
// rewindInterval: Duration(seconds: 20),
|
// // rewindInterval: Duration(seconds: 20),
|
||||||
),
|
// ),
|
||||||
);
|
// );
|
||||||
|
|
||||||
appLogger.finer('created simple player');
|
// appLogger.finer('created simple player');
|
||||||
}
|
// }
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,48 @@
|
||||||
|
import 'package:audio_service/audio_service.dart';
|
||||||
|
import 'package:audio_session/audio_session.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
|
import 'package:logging/logging.dart';
|
||||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||||
import 'package:shelfsdk/audiobookshelf_api.dart' as api;
|
import 'package:shelfsdk/audiobookshelf_api.dart' as api;
|
||||||
import 'package:vaani/api/api_provider.dart';
|
import 'package:vaani/api/api_provider.dart';
|
||||||
|
import 'package:vaani/features/player/core/abs_audio_handler.dart';
|
||||||
import 'package:vaani/features/player/core/abs_audio_player.dart' as core;
|
import 'package:vaani/features/player/core/abs_audio_player.dart' as core;
|
||||||
import 'package:vaani/features/player/core/abs_audio_player_platform.dart';
|
import 'package:vaani/features/player/core/abs_audio_player_platform.dart';
|
||||||
|
|
||||||
part 'abs_provider.g.dart';
|
part 'abs_provider.g.dart';
|
||||||
|
|
||||||
// final _logger = Logger('AbsPlayerProvider');
|
final _logger = Logger('AbsPlayerProvider');
|
||||||
|
|
||||||
|
/// 音频播放器 配置
|
||||||
|
@Riverpod(keepAlive: true)
|
||||||
|
Future<AudioHandler> configurePlayer(Ref ref) async {
|
||||||
|
final player = ref.read(audioPlayerProvider);
|
||||||
|
// for playing audio on windows, linux
|
||||||
|
|
||||||
|
// for configuring how this app will interact with other audio apps
|
||||||
|
final session = await AudioSession.instance;
|
||||||
|
await session.configure(const AudioSessionConfiguration.speech());
|
||||||
|
|
||||||
|
final audioService = await AudioService.init(
|
||||||
|
builder: () => AbsAudioHandler(player),
|
||||||
|
config: const AudioServiceConfig(
|
||||||
|
androidNotificationChannelId: 'dr.blank.vaani.channel.audio',
|
||||||
|
androidNotificationChannelName: 'ABSPlayback',
|
||||||
|
androidNotificationChannelDescription:
|
||||||
|
'Needed to control audio from lock screen',
|
||||||
|
androidNotificationOngoing: false,
|
||||||
|
androidStopForegroundOnPause: false,
|
||||||
|
androidNotificationIcon: 'drawable/ic_stat_logo',
|
||||||
|
preloadArtwork: true,
|
||||||
|
// fastForwardInterval: Duration(seconds: 20),
|
||||||
|
// rewindInterval: Duration(seconds: 20),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
_logger.finer('created simple player');
|
||||||
|
return audioService;
|
||||||
|
}
|
||||||
|
|
||||||
/// 音频播放器 riverpod状态
|
/// 音频播放器 riverpod状态
|
||||||
@Riverpod(keepAlive: true)
|
@Riverpod(keepAlive: true)
|
||||||
class AudioPlayer extends _$AudioPlayer {
|
class AudioPlayer extends _$AudioPlayer {
|
||||||
|
|
@ -15,6 +50,7 @@ class AudioPlayer extends _$AudioPlayer {
|
||||||
core.AbsAudioPlayer build() {
|
core.AbsAudioPlayer build() {
|
||||||
// final player = AbsMpvAudioPlayer();
|
// final player = AbsMpvAudioPlayer();
|
||||||
final player = AbsPlatformAudioPlayer();
|
final player = AbsPlatformAudioPlayer();
|
||||||
|
ref.onDispose(player.dispose);
|
||||||
return player;
|
return player;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,25 @@ part of 'abs_provider.dart';
|
||||||
// RiverpodGenerator
|
// RiverpodGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
||||||
|
String _$configurePlayerHash() => r'7e7003c815e7d240a67cd581931839cc60346707';
|
||||||
|
|
||||||
|
/// 音频播放器 配置
|
||||||
|
///
|
||||||
|
/// Copied from [configurePlayer].
|
||||||
|
@ProviderFor(configurePlayer)
|
||||||
|
final configurePlayerProvider = FutureProvider<AudioHandler>.internal(
|
||||||
|
configurePlayer,
|
||||||
|
name: r'configurePlayerProvider',
|
||||||
|
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
|
||||||
|
? null
|
||||||
|
: _$configurePlayerHash,
|
||||||
|
dependencies: null,
|
||||||
|
allTransitiveDependencies: null,
|
||||||
|
);
|
||||||
|
|
||||||
|
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
||||||
|
// ignore: unused_element
|
||||||
|
typedef ConfigurePlayerRef = FutureProviderRef<AudioHandler>;
|
||||||
String _$isPlayerActiveHash() => r'71a24418ecf6c1a2d8160b0d0c8fc523d5679e76';
|
String _$isPlayerActiveHash() => r'71a24418ecf6c1a2d8160b0d0c8fc523d5679e76';
|
||||||
|
|
||||||
/// See also [isPlayerActive].
|
/// See also [isPlayerActive].
|
||||||
|
|
@ -58,7 +77,7 @@ final currentChaptersProvider =
|
||||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
||||||
// ignore: unused_element
|
// ignore: unused_element
|
||||||
typedef CurrentChaptersRef = AutoDisposeProviderRef<List<api.BookChapter>>;
|
typedef CurrentChaptersRef = AutoDisposeProviderRef<List<api.BookChapter>>;
|
||||||
String _$audioPlayerHash() => r'26387ece7f0d0c0cc21dc7641853e643866726f6';
|
String _$audioPlayerHash() => r'e0efa20f340adf3312a76e5ca9e0c8ab0273a22a';
|
||||||
|
|
||||||
/// 音频播放器 riverpod状态
|
/// 音频播放器 riverpod状态
|
||||||
///
|
///
|
||||||
|
|
|
||||||
|
|
@ -23,10 +23,13 @@ class SkipStartEnd {
|
||||||
player.chapterStream.listen((chapter) {
|
player.chapterStream.listen((chapter) {
|
||||||
if (chapter != null &&
|
if (chapter != null &&
|
||||||
player.positionInChapter < Duration(seconds: 1)) {
|
player.positionInChapter < Duration(seconds: 1)) {
|
||||||
Future.microtask(
|
// player.pause();
|
||||||
() => throttlerStart
|
player.seekInBook(chapter.start + start);
|
||||||
.call(() => player.seekInBook(chapter.start + start)),
|
// player.play();
|
||||||
);
|
// Future.microtask(
|
||||||
|
// () => throttlerStart
|
||||||
|
// .call(() => player.seekInBook(chapter.start + start)),
|
||||||
|
// );
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ class Framework extends ConsumerWidget {
|
||||||
ref.watch(simpleDownloadManagerProvider);
|
ref.watch(simpleDownloadManagerProvider);
|
||||||
if (Helper.isAndroid()) ref.watch(shakeDetectorProvider);
|
if (Helper.isAndroid()) ref.watch(shakeDetectorProvider);
|
||||||
ref.watch(sleepTimerProvider);
|
ref.watch(sleepTimerProvider);
|
||||||
// ref.watch(skipStartEndProvider);
|
ref.watch(skipStartEndProvider);
|
||||||
ref.watch(playbackReporterProvider);
|
ref.watch(playbackReporterProvider);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
debugPrintStack(stackTrace: StackTrace.current, label: e.toString());
|
debugPrintStack(stackTrace: StackTrace.current, label: e.toString());
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,6 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:vaani/api/server_provider.dart';
|
import 'package:vaani/api/server_provider.dart';
|
||||||
import 'package:vaani/db/storage.dart';
|
import 'package:vaani/db/storage.dart';
|
||||||
import 'package:vaani/features/logging/core/logger.dart';
|
import 'package:vaani/features/logging/core/logger.dart';
|
||||||
import 'package:vaani/features/player/core/init.dart';
|
|
||||||
import 'package:vaani/features/player/providers/abs_provider.dart';
|
import 'package:vaani/features/player/providers/abs_provider.dart';
|
||||||
import 'package:vaani/features/settings/api_settings_provider.dart';
|
import 'package:vaani/features/settings/api_settings_provider.dart';
|
||||||
import 'package:vaani/features/settings/app_settings_provider.dart';
|
import 'package:vaani/features/settings/app_settings_provider.dart';
|
||||||
|
|
@ -38,8 +37,7 @@ void main() async {
|
||||||
|
|
||||||
// initialize audio player
|
// initialize audio player
|
||||||
// await configurePlayer();
|
// await configurePlayer();
|
||||||
final player = container.read(audioPlayerProvider);
|
await container.read(configurePlayerProvider.future);
|
||||||
await configurePlayer(player);
|
|
||||||
// run the app
|
// run the app
|
||||||
runApp(
|
runApp(
|
||||||
UncontrolledProviderScope(
|
UncontrolledProviderScope(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue