Android 音频播放完成后如何更改播放图标按钮
如何在音频播放完毕后更改图标按钮图标我显示了一个简单的代码,模拟正在播放的音乐10秒钟,然后停止播放,图标更改Android 音频播放完成后如何更改播放图标按钮,android,dart,flutter,Android,Dart,Flutter,如何在音频播放完毕后更改图标按钮图标我显示了一个简单的代码,模拟正在播放的音乐10秒钟,然后停止播放,图标更改 void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp(home: SOM()); /* return MaterialApp(in
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(home: SOM());
/*
return MaterialApp(initialRoute: 'home', routes: <String, WidgetBuilder>{
'home': (context) => SOMain(),
'/secondPage': (context) => DefaultScaffold("Second Screen", SOSecond()),
'/thirdPage': (context) => DefaultScaffold("Third Screen", SOThird()),
});
*/
}
}
class SOM extends StatefulWidget {
@override
_SOMState createState() => _SOMState();
}
class _SOMState extends State<SOM> {
bool isPlaying = false;
IconData musicIcon = Icons.play_arrow;
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: IconButton(
icon: Icon(musicIcon),
onPressed: toggleMusic,
)),
);
}
void toggleMusic() {
if (!isPlaying) {
startPlayingMusic();
}
}
void startPlayingMusic() {
setState(() {
isPlaying = true;
musicIcon = Icons.pause;
});
// faking music play for 10 seconds
Timer(Duration(seconds: 10), () {
setState(() {
isPlaying = false;
musicIcon = Icons.play_arrow;
});
});
}
}
注:如果音乐已经播放,当前工作状态不会改变,只需在点击按钮并结束后播放模拟音乐播放10秒即可。没有其他内容。创建如下播放事件:
enum PlayerEvent {
onStartPlaying, onStopPlaying, onPausePlaying
}
final playerBloc = PlayerBloc();
class PlayerBloc {
StreamController<PlayerEvent> _playerEventStreamController = StreamController.broadcast();
Stream<PlayerEvent> get playerEventStream => _playerEventStreamController.stream;
dispatch(PlayerEvent event) {
_playerEventStreamController.sink.add(event);
}
dispose(){
_playerEventStreamController.close();
}
}
StreamBuilder<PlayerEvent>(
stream: playerBloc.playerEventStream,
initialData: PlayerEvent.onStopPlaying,
builder: (context, snapshot) {
switch(snapshot.data) {
case PlayerEvent.onStopPlaying:
return Icon(Icons.play_arrow);
case PlayerEvent.onStartPlaying:
return Icon(Icons.pause);
case PlayerEvent.onPausePlaying:
return Icon(Icons.play_arrow);
}
}
),
创建这样一个集团:
enum PlayerEvent {
onStartPlaying, onStopPlaying, onPausePlaying
}
final playerBloc = PlayerBloc();
class PlayerBloc {
StreamController<PlayerEvent> _playerEventStreamController = StreamController.broadcast();
Stream<PlayerEvent> get playerEventStream => _playerEventStreamController.stream;
dispatch(PlayerEvent event) {
_playerEventStreamController.sink.add(event);
}
dispose(){
_playerEventStreamController.close();
}
}
StreamBuilder<PlayerEvent>(
stream: playerBloc.playerEventStream,
initialData: PlayerEvent.onStopPlaying,
builder: (context, snapshot) {
switch(snapshot.data) {
case PlayerEvent.onStopPlaying:
return Icon(Icons.play_arrow);
case PlayerEvent.onStartPlaying:
return Icon(Icons.pause);
case PlayerEvent.onPausePlaying:
return Icon(Icons.play_arrow);
}
}
),
或
您的图标将根据您的音乐而变化。新代码显示音乐播放的模拟行为,持续10秒