audio_player_handler.dart 1.89 KB
import 'package:appframe/config/locator.dart';
import 'package:appframe/services/dispatcher.dart';
import 'package:appframe/services/player_service.dart';
import 'package:uuid/uuid.dart';

class AudioPlayHandler extends MessageHandler {
  @override
  Future<dynamic> handleMessage(dynamic params) async {
    if (params is! Map<String, dynamic>) {
      throw Exception('参数错误');
    }

    final url = params['url'] as String;
    final seek = params['seek'] as int? ?? 0;
    // 暂时忽略
    // final isBg = params['isBg'] as bool ?? false;
    var playId = params['playId'] as String? ?? '';
    if (playId.isEmpty) {
      playId = Uuid().v4();
    }

    var playerService = getIt.get<PlayerService>();
    var result = await playerService.playAudio(url, seek, playId);

    if (!result) {
      throw Exception('播放错误');
    }
    return {'playId': playId};
  }
}

class AudioPauseHandler extends MessageHandler {
  @override
  Future<dynamic> handleMessage(dynamic params) async {
    return await getIt.get<PlayerService>().pauseAudio();
  }
}

class AudioResumeHandler extends MessageHandler {
  @override
  Future<dynamic> handleMessage(dynamic params) async {
    return await getIt.get<PlayerService>().resumeAudio();
  }
}

class AudioSeekHandler extends MessageHandler {
  @override
  Future<dynamic> handleMessage(dynamic params) async {
    if (params is! Map<String, dynamic>) {
      throw Exception('参数错误');
    }

    final seek = params['seek'] as int;
    return await getIt.get<PlayerService>().seekAudio(seek);
  }
}

class AudioStopHandler extends MessageHandler {
  @override
  Future<dynamic> handleMessage(dynamic params) async {
    return await getIt.get<PlayerService>().stopAudio();
  }
}

class AudioClearHandler extends MessageHandler {
  @override
  Future<dynamic> handleMessage(dynamic params) async {
    await getIt.get<PlayerService>().clearAudio();
    return true;
  }
}