import 'package:flutter/material.dart'; import '../../utils/audio_player_util.dart'; /// action前播放音乐控制类,维护状态做防抖处理 /// todo 需要结合生命周期,尤其是在声明周期结束后及时中断,避免action泄漏 class ActionWithMusicController { ActionWithMusicController._privateConstructor(); static final ActionWithMusicController _instance = ActionWithMusicController._privateConstructor(); factory ActionWithMusicController() { return _instance; } bool _isPlaying = false; Future playMusicAndPerformAction(BuildContext context, AudioPlayerUtilType audioType, Function action) async { if (_isPlaying) return; _isPlaying = true; // Play the music await AudioPlayerUtil.getInstance() .playAudio(audioType); action(); _isPlaying = false; } // void dispose() { // _audioPlayer.dispose(); // } }