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.
157 lines
4.0 KiB
157 lines
4.0 KiB
import 'package:get/get.dart';
|
|
import 'package:qq_music/qq_music.dart';
|
|
|
|
/// QQ音乐服务适配器
|
|
class QqMusocService extends GetxService {
|
|
static QqMusocService get to => Get.find<QqMusocService>();
|
|
|
|
var isInitialized = false;
|
|
// 音乐服务实例
|
|
final QqMusic _qqMusic = QqMusic();
|
|
|
|
/// 初始化
|
|
@override
|
|
void onInit() {
|
|
super.onInit();
|
|
}
|
|
|
|
/// 登录QQ音乐
|
|
Future<Map<String, dynamic>> login() async {
|
|
try {
|
|
// 直接调用QQ音乐插件的登录方法
|
|
final result = await _qqMusic.login();
|
|
|
|
// 检查登录结果
|
|
if (result['success'] == true) {
|
|
isInitialized = true;
|
|
return result;
|
|
} else {
|
|
return {'success': false, 'error': result['error'] ?? '登录失败'};
|
|
}
|
|
} catch (e) {
|
|
return {'success': false, 'error': '登录异常: ${e.toString()}'};
|
|
}
|
|
}
|
|
|
|
/// 搜索歌曲
|
|
Future<Map<String, dynamic>> searchSongs({
|
|
required String keyword,
|
|
int searchType = 0, // SEARCH_TYPE_SONG
|
|
}) async {
|
|
try {
|
|
final result = await _qqMusic.searchSongs(
|
|
keyword: keyword,
|
|
searchType: searchType,
|
|
);
|
|
return result;
|
|
} catch (e) {
|
|
return {'success': false, 'error': '搜索失败: ${e.toString()}'};
|
|
}
|
|
}
|
|
|
|
/// 播放歌曲列表
|
|
Future<Map<String, dynamic>> playSongs({
|
|
required List<String> songMids,
|
|
int index = 0,
|
|
}) async {
|
|
try {
|
|
final result = await _qqMusic.playSongs(
|
|
songMids: songMids,
|
|
index: index,
|
|
);
|
|
return result;
|
|
} catch (e) {
|
|
return {'success': false, 'error': '播放失败: ${e.toString()}'};
|
|
}
|
|
}
|
|
|
|
/// 播放音乐
|
|
Future<Map<String, dynamic>> playMusic() async {
|
|
try {
|
|
final result = await _qqMusic.playMusic();
|
|
return result;
|
|
} catch (e) {
|
|
return {'success': false, 'error': '播放失败: ${e.toString()}'};
|
|
}
|
|
}
|
|
|
|
/// 暂停音乐
|
|
Future<Map<String, dynamic>> pauseMusic() async {
|
|
try {
|
|
final result = await _qqMusic.pauseMusic();
|
|
return result;
|
|
} catch (e) {
|
|
return {'success': false, 'error': '暂停失败: ${e.toString()}'};
|
|
}
|
|
}
|
|
|
|
/// 继续播放
|
|
Future<Map<String, dynamic>> resumeMusic() async {
|
|
try {
|
|
final result = await _qqMusic.resumeMusic();
|
|
return result;
|
|
} catch (e) {
|
|
return {'success': false, 'error': '继续播放失败: ${e.toString()}'};
|
|
}
|
|
}
|
|
|
|
/// 停止音乐
|
|
Future<Map<String, dynamic>> stopMusic() async {
|
|
try {
|
|
final result = await _qqMusic.stopMusic();
|
|
return result;
|
|
} catch (e) {
|
|
return {'success': false, 'error': '停止失败: ${e.toString()}'};
|
|
}
|
|
}
|
|
|
|
/// 下一首
|
|
Future<Map<String, dynamic>> skipToNext() async {
|
|
try {
|
|
final result = await _qqMusic.skipToNext();
|
|
return result;
|
|
} catch (e) {
|
|
return {'success': false, 'error': '下一首失败: ${e.toString()}'};
|
|
}
|
|
}
|
|
|
|
/// 上一首
|
|
Future<Map<String, dynamic>> skipToPrevious() async {
|
|
try {
|
|
final result = await _qqMusic.skipToPrevious();
|
|
return result;
|
|
} catch (e) {
|
|
return {'success': false, 'error': '上一首失败: ${e.toString()}'};
|
|
}
|
|
}
|
|
|
|
/// 获取播放状态
|
|
Future<Map<String, dynamic>> getPlaybackState() async {
|
|
try {
|
|
final result = await _qqMusic.getPlaybackState();
|
|
return result;
|
|
} catch (e) {
|
|
return {'success': false, 'error': '获取播放状态失败: ${e.toString()}'};
|
|
}
|
|
}
|
|
|
|
/// 获取当前播放歌曲
|
|
Future<Map<String, dynamic>> getCurrentSong() async {
|
|
try {
|
|
final result = await _qqMusic.getCurrentSong();
|
|
return result;
|
|
} catch (e) {
|
|
return {'success': false, 'error': '获取当前歌曲失败: ${e.toString()}'};
|
|
}
|
|
}
|
|
|
|
/// 获取播放时间
|
|
Future<Map<String, dynamic>> getPlayTime() async {
|
|
try {
|
|
final result = await _qqMusic.getPlayTime();
|
|
return result;
|
|
} catch (e) {
|
|
return {'success': false, 'error': '获取播放时间失败: ${e.toString()}'};
|
|
}
|
|
}
|
|
}
|
|
|