action_with_music_controller.dart 916 Bytes
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<void> 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();
  // }
}