|
|
|
@ -228,8 +228,8 @@ class MusicPlaylistView extends StatelessWidget { |
|
|
|
}; |
|
|
|
|
|
|
|
return GestureDetector( |
|
|
|
onTap: () { |
|
|
|
_playSelectedSong(controller, song, Get.arguments ?? []); |
|
|
|
onTap: () async { |
|
|
|
await _playSelectedSong(controller, song, Get.arguments ?? []); |
|
|
|
}, |
|
|
|
child: Container( |
|
|
|
margin: EdgeInsets.only(bottom: 10.h), |
|
|
|
@ -512,7 +512,7 @@ class MusicPlaylistView extends StatelessWidget { |
|
|
|
mainAxisAlignment: MainAxisAlignment.center, |
|
|
|
children: [ |
|
|
|
IconButton( |
|
|
|
onPressed: () => _playPrevious(controller, playlist), |
|
|
|
onPressed: () async => await _playPrevious(controller, playlist), |
|
|
|
iconSize: 32.w, |
|
|
|
padding: EdgeInsets.all(8.w), // 增大触摸区域 |
|
|
|
icon: Icon( |
|
|
|
@ -548,7 +548,7 @@ class MusicPlaylistView extends StatelessWidget { |
|
|
|
), |
|
|
|
SizedBox(width: 16.w), |
|
|
|
IconButton( |
|
|
|
onPressed: () => _playNext(controller, playlist), |
|
|
|
onPressed: () async => await _playNext(controller, playlist), |
|
|
|
iconSize: 32.w, |
|
|
|
padding: EdgeInsets.all(8.w), // 增大触摸区域 |
|
|
|
icon: Icon( |
|
|
|
@ -580,26 +580,71 @@ class MusicPlaylistView extends StatelessWidget { |
|
|
|
} |
|
|
|
|
|
|
|
// 播放上一曲 |
|
|
|
void _playPrevious( |
|
|
|
AgentController controller, List<Map<String, dynamic>> playlist) { |
|
|
|
controller.updateCurrentPlaylistContext( |
|
|
|
playlist, controller.currentId.value); |
|
|
|
controller.playPrevious(); |
|
|
|
Future<void> _playPrevious( |
|
|
|
AgentController controller, List<Map<String, dynamic>> playlist) async { |
|
|
|
// 防止重复点击导致的状态混乱 |
|
|
|
if (controller.isLoadingMusic.value) { |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
try { |
|
|
|
// 设置加载状态,防止重复操作 |
|
|
|
controller.isLoadingMusic.value = true; |
|
|
|
|
|
|
|
// 更新播放列表上下文 |
|
|
|
controller.updateCurrentPlaylistContext( |
|
|
|
playlist, controller.currentId.value); |
|
|
|
|
|
|
|
// 执行上一曲操作 |
|
|
|
await controller.playPrevious(); |
|
|
|
} finally { |
|
|
|
// 确保加载状态被重置 |
|
|
|
controller.isLoadingMusic.value = false; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 播放下一曲 |
|
|
|
void _playNext( |
|
|
|
AgentController controller, List<Map<String, dynamic>> playlist) { |
|
|
|
controller.updateCurrentPlaylistContext( |
|
|
|
playlist, controller.currentId.value); |
|
|
|
controller.playNext(); |
|
|
|
Future<void> _playNext( |
|
|
|
AgentController controller, List<Map<String, dynamic>> playlist) async { |
|
|
|
// 防止重复点击导致的状态混乱 |
|
|
|
if (controller.isLoadingMusic.value) { |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
try { |
|
|
|
// 设置加载状态,防止重复操作 |
|
|
|
controller.isLoadingMusic.value = true; |
|
|
|
|
|
|
|
// 更新播放列表上下文 |
|
|
|
controller.updateCurrentPlaylistContext( |
|
|
|
playlist, controller.currentId.value); |
|
|
|
|
|
|
|
// 执行下一曲操作 |
|
|
|
await controller.playNext(); |
|
|
|
} finally { |
|
|
|
// 确保加载状态被重置 |
|
|
|
controller.isLoadingMusic.value = false; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 播放选中的歌曲 |
|
|
|
void _playSelectedSong(AgentController controller, Map<String, dynamic> song, |
|
|
|
List<Map<String, dynamic>> playlist) { |
|
|
|
final songId = song['id'] ?? 0; |
|
|
|
controller.updateCurrentPlaylistContext(playlist, songId); |
|
|
|
controller.musicPlay(song); |
|
|
|
Future<void> _playSelectedSong(AgentController controller, Map<String, dynamic> song, |
|
|
|
List<Map<String, dynamic>> playlist) async { |
|
|
|
// 防止重复点击导致的状态混乱 |
|
|
|
if (controller.isLoadingMusic.value) { |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
try { |
|
|
|
// 设置加载状态,防止重复操作 |
|
|
|
controller.isLoadingMusic.value = true; |
|
|
|
|
|
|
|
final songId = song['id'] ?? 0; |
|
|
|
controller.updateCurrentPlaylistContext(playlist, songId); |
|
|
|
await controller.musicPlay(song); |
|
|
|
} finally { |
|
|
|
// 确保加载状态被重置 |
|
|
|
controller.isLoadingMusic.value = false; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|