Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 音频播放完成后如何更改播放图标按钮_Android_Dart_Flutter - Fatal编程技术网

Android 音频播放完成后如何更改播放图标按钮

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

如何在音频播放完毕后更改图标按钮图标我显示了一个简单的代码,模拟正在播放的音乐10秒钟,然后停止播放,图标更改

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秒