You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
125 lines
3.5 KiB
125 lines
3.5 KiB
import 'package:get/get.dart';
|
|
import '../controllers/music_controller.dart';
|
|
import '../../../data/services/music_manager.dart';
|
|
|
|
/// 音乐服务门面
|
|
/// 作为音乐功能的统一入口,简化模块间的交互
|
|
class MusicServiceFacade {
|
|
// 单例实现
|
|
static final MusicServiceFacade _instance = MusicServiceFacade._internal();
|
|
|
|
factory MusicServiceFacade() => _instance;
|
|
|
|
MusicServiceFacade._internal();
|
|
|
|
// 获取音乐控制器实例
|
|
MusicController get musicController => Get.find<MusicController>();
|
|
|
|
// 获取音乐管理器实例
|
|
MusicManager get musicManager => Get.find<MusicManager>();
|
|
|
|
/// 播放音乐
|
|
Future<void> musicPlay(Map<String, dynamic> song) async {
|
|
await musicController.musicPlay(song);
|
|
}
|
|
|
|
/// 暂停音乐
|
|
Future<void> musicPause() async {
|
|
await musicController.musicPause();
|
|
}
|
|
|
|
/// 恢复播放
|
|
Future<void> musicResume() async {
|
|
await musicController.musicResume();
|
|
}
|
|
|
|
/// 播放音乐(兼容旧接口)
|
|
Future<void> playMusic(Map<String, dynamic> song) async {
|
|
await musicPlay(song);
|
|
}
|
|
|
|
/// 暂停音乐(兼容旧接口)
|
|
Future<void> pauseMusic() async {
|
|
await musicPause();
|
|
}
|
|
|
|
/// 恢复播放(兼容旧接口)
|
|
Future<void> resumeMusic() async {
|
|
await musicResume();
|
|
}
|
|
|
|
/// 播放/暂停切换
|
|
Future<void> togglePlayPause() async {
|
|
if (musicController.isPlaying.value) {
|
|
await musicPause();
|
|
} else {
|
|
await musicResume();
|
|
}
|
|
}
|
|
|
|
/// 播放上一曲
|
|
Future<void> playPrevious() async {
|
|
await musicController.playPrevious();
|
|
}
|
|
|
|
/// 播放下一曲
|
|
Future<void> playNext() async {
|
|
await musicController.playNext();
|
|
}
|
|
|
|
/// 播放音乐列表
|
|
Future<void> playPlaylist(List<Map<String, dynamic>> playlist) async {
|
|
await musicController.playPlaylist(playlist);
|
|
}
|
|
|
|
/// 跳转到指定位置
|
|
Future<void> seekToPosition(int positionMs) async {
|
|
await musicController.seekToPosition(positionMs);
|
|
}
|
|
|
|
/// 获取当前播放状态
|
|
bool get isPlayingValue => musicController.isPlaying.value;
|
|
|
|
/// 获取当前播放歌曲ID
|
|
int get currentIdValue => musicController.currentId.value;
|
|
|
|
/// 获取当前播放位置(毫秒)
|
|
int get currentPositionValue => musicController.currentPosition.value;
|
|
|
|
/// 获取当前歌曲总时长(毫秒)
|
|
int get durationValue => musicController.duration.value;
|
|
|
|
/// 获取当前播放进度(0.0-1.0)
|
|
double get progressValue => musicController.progress.value;
|
|
|
|
/// 获取响应式播放状态(用于Obx)
|
|
get isPlaying => musicController.isPlaying;
|
|
|
|
/// 获取响应式当前播放歌曲ID(用于Obx)
|
|
get currentId => musicController.currentId;
|
|
|
|
/// 获取响应式当前播放位置(用于Obx)
|
|
get currentPosition => musicController.currentPosition;
|
|
|
|
/// 获取响应式当前歌曲总时长(用于Obx)
|
|
get duration => musicController.duration;
|
|
|
|
/// 获取响应式当前播放进度(用于Obx)
|
|
get progress => musicController.progress;
|
|
|
|
/// 获取当前播放列表
|
|
List<Map<String, dynamic>> get currentPlaylist => musicController.currentPlaylist;
|
|
|
|
/// 获取当前播放索引
|
|
int get currentPlaylistIndex => musicController.currentPlaylistIndex.value;
|
|
|
|
/// 设置加载状态
|
|
void setLoadingMusic(String id, bool loading) {
|
|
musicController.setLoadingMusic(id, loading);
|
|
}
|
|
|
|
/// 更新当前播放列表上下文
|
|
void updateCurrentPlaylistContext(List<Map<String, dynamic>> playlist, int songId) {
|
|
musicController.updateCurrentPlaylistContext(playlist, songId);
|
|
}
|
|
}
|