【发布时间】:2021-11-10 03:47:43
【问题描述】:
我正在使用这个包: https://pub.dev/packages/audioplayers
我有 2 个问题,首先是代码,当我按下 play 时音乐开始,但当我按下 stop 时它什么也不做,就好像我正在发出一个没有击中同一个 audioPlayer 的状态. 其次,我不知道如何更改 PlayerState,pad 中的播放器状态显示为 null,我认为我发出这些状态是错误的,有人可以以实际的方式告诉我这是正确的方式吗所以我学会了吗?因为我对flutter_bloc比较陌生。
集团
import 'dart:async';
import 'package:audioplayers/audioplayers.dart';
import 'package:bloc/bloc.dart';
import 'package:meta/meta.dart';
part 'audioplayersbloc_event.dart';
part 'audioplayersbloc_state.dart';
class AudioPlayersBloc
extends Bloc<AudioPlayersBlocEvent, AudioPlayersBlocState> {
AudioPlayersBloc() : super(AudioPlayersBlocState());
String URL =
'******'; // i put "***" because private url but its a mp3 file
@override
Stream<AudioPlayersBlocState> mapEventToState(
AudioPlayersBlocEvent event,
) async* {
if (event is OnPlayPlayerRemote) {
PlayerState plyState;
audioPlayersBloc.state.audioPlayer.onPlayerStateChanged.listen((event)
{
plyState = event;
});
yield this.state.copyWith(audioPlayer: await this.playMusic(),
playerState: plyState);
} else if (event is OnStopPlayer) {
await this.stopMusic();
yield this.state.copyWith(audioPlayer: await this.stopMusic());
}
}
playMusic() async {
await this.state.audioPlayer.play(URL);
}
pauseMusic() async {
await this.state.audioPlayer.pause();
}
stopMusic() async {
await this.state.audioPlayer.stop();
}
}
状态
part of 'audioplayersbloc_bloc.dart';
class AudioPlayersBlocState {
final AudioPlayer audioPlayer = AudioPlayer();
final PlayerState playerState = PlayerState.PAUSED;
final AudioCache audioCache = AudioCache();
AudioPlayersBlocState(
{AudioPlayer? audioPlayer,
PlayerState? playerState,
AudioCache? audioCache});
AudioPlayersBlocState copyWith(
{AudioPlayer? audioPlayer,
PlayerState? playerState,
AudioCache? audioCache}) =>
AudioPlayersBlocState(
audioPlayer: audioPlayer ?? this.audioPlayer,
playerState: playerState ?? this.playerState,
audioCache: audioCache ?? this.audioCache);
}
活动
part of 'audioplayersbloc_bloc.dart';
@immutable
abstract class AudioPlayersBlocEvent {}
class OnPlayPlayerRemote extends AudioPlayersBlocEvent {}
class OnStopPlayer extends AudioPlayersBlocEvent {}
我在首页播放音乐的按钮,只是一个按钮,是一个简单的播放器
IconButton(
icon: Icon(Icons.play_arrow),
onPressed: () {
context.read<AudioPlayersBloc>().add(OnPlayPlayerRemote());
},
),
IconButton(
icon: Icon(Icons.stop),
onPressed: () {
context.read<AudioPlayersBloc>().add(OnStopPlayer());
},
),
【问题讨论】:
标签: flutter audio flutter-bloc