audio_player_handler.dart 2.5 KB
import 'package:appframe/bloc/web_cubit.dart';
import 'package:appframe/services/dispatcher.dart';

class AudioPlayHandler extends MessageHandler {
  late WebCubit? _webCubit;

  @override
  void setCubit(WebCubit cubit) {
    this._webCubit = cubit;
  }

  void _unfollowCubit() {
    this._webCubit = null;
  }

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

      final url = params['url'] as String;

      bool result = await _webCubit!.playAudio(url);
      return result;
    } finally {
      _unfollowCubit();
    }
  }
}

class AudioPauseHandler extends MessageHandler {
  late WebCubit? _webCubit;

  @override
  void setCubit(WebCubit cubit) {
    this._webCubit = cubit;
  }

  void _unfollowCubit() {
    this._webCubit = null;
  }

  @override
  Future<dynamic> handleMessage(dynamic params) async {
    bool result = await _webCubit!.pauseAudio();
    return result;
  }
}

class AudioResumeHandler extends MessageHandler {
  late WebCubit? _webCubit;

  @override
  void setCubit(WebCubit cubit) {
    this._webCubit = cubit;
  }

  void _unfollowCubit() {
    this._webCubit = null;
  }

  @override
  Future<dynamic> handleMessage(dynamic params) async {
    bool result = await _webCubit!.resumeAudio();
    return result;
  }
}

class AudioSeekHandler extends MessageHandler {
  late WebCubit? _webCubit;

  @override
  void setCubit(WebCubit cubit) {
    this._webCubit = cubit;
  }

  void _unfollowCubit() {
    this._webCubit = null;
  }

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

    final seek = params['seek'] as int;
    bool result = await _webCubit!.seekAudio(seek);
    return result;
  }
}

class AudioStopHandler extends MessageHandler {
  late WebCubit? _webCubit;

  @override
  void setCubit(WebCubit cubit) {
    this._webCubit = cubit;
  }

  void _unfollowCubit() {
    this._webCubit = null;
  }

  @override
  Future<dynamic> handleMessage(dynamic params) async {
    bool result = await _webCubit!.stopAudio();
    return result;
  }
}

class AudioClearHandler extends MessageHandler {
  late WebCubit? _webCubit;

  @override
  void setCubit(WebCubit cubit) {
    this._webCubit = cubit;
  }

  void _unfollowCubit() {
    this._webCubit = null;
  }

  @override
  Future<dynamic> handleMessage(dynamic params) async {
    await _webCubit!.clearAudio();
    return true;
  }
}