import 'package:audioplayer/audioplayer.dart'; import 'package:chat/data/constants.dart'; import 'package:chat/utils/sp_utils.dart'; import 'package:flutter/widgets.dart'; class SoundUtils { // 工厂模式 factory SoundUtils() => _getInstance(); static SoundUtils get instance => _getInstance(); static SoundUtils _instance; String curSoundUrl; Map soundStateMap = {}; SoundUtils._internal() { // 初始化 audioPlugin = new AudioPlayer(); stateStream = audioPlugin.onPlayerStateChanged; } AudioPlayer audioPlugin; // AudioCache audioCache = AudioCache(); Stream stateStream; bool isPlaying(url) { return soundStateMap[url] ?? false; } static SoundUtils _getInstance() { if (_instance == null) { _instance = new SoundUtils._internal(); } return _instance; } initPlayMode() async { bool playMode = await SPUtils.getBool(Constants.SOUND_PLAY_MODE); if (playMode != null && playMode) { setReceiver(true); } else { setReceiver(false); } } savePlayModeConfig(bool playMode) async { await SPUtils.saveBool(Constants.SOUND_PLAY_MODE, playMode); setReceiver(playMode); } ///设置听筒true 设置外放false setReceiver(bool setReceiver) async { await audioPlugin.setReceiver(setReceiver); } play(url, {bool isLocal = true, VoidCallback onPlayed, VoidCallback complete}) async { if (curSoundUrl != null && curSoundUrl != url) { print('不是同一个音频文件'); await stop(); } print('播放url:$url'); await audioPlugin.play(url, isLocal: isLocal); curSoundUrl = url; stateStream.listen((state) { if (state == AudioPlayerState.PLAYING) { soundStateMap[curSoundUrl] = true; if (onPlayed != null) { onPlayed(); } } else { soundStateMap[curSoundUrl] = false; if (complete != null) { complete(); } } }); } pause() async { print('暂停播放'); if (curSoundUrl != null) { soundStateMap[curSoundUrl] = false; await audioPlugin.pause(); } } stop() async { if (curSoundUrl != null) { soundStateMap[curSoundUrl] = false; await audioPlugin.stop(); } } }