'Flutter : Assets Audio Player

I have problem with assest audio player package when I try to play two songs inside one page both are playing ! The way I want when I press first button,first song play and when I press second button the first song stop and the second song start playing .

I used this code but it doesn't work

HomePage

import 'package:flutter/material.dart';
import 'package:mp3player/playpausebutton.dart';

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Mp3 Player'),
      ),
      body: Container(
        color: Colors.white,
        child: Column(
          children: [
            PlayPauseButton(
              mp3name: 'song1',
            ),
            PlayPauseButton(
              mp3name: 'song2',
            )
          ],
        ),
      ),
    );
  }
}

PlayPauseButton

class PlayPauseButton extends StatefulWidget {
  PlayPauseButton({this.mp3name});
  final String mp3name;
  @override
  _PlayPauseButtonState createState() => _PlayPauseButtonState();
}

class _PlayPauseButtonState extends State<PlayPauseButton> {
  final assetsAudioPlayer = AssetsAudioPlayer();
  bool ispresed = false;
  @override
  void dispose() {
    // TODO: implement dispose
    super.dispose();
    assetsAudioPlayer.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return FlatButton(
      child: Icon(ispresed ? Icons.pause : Icons.play_arrow),
      onPressed: () {
        assetsAudioPlayer.open(Audio("assets/audios/${widget.mp3name}.mp3"));
        setState(() {
          if (ispresed == false) {
            assetsAudioPlayer.play();
            ispresed = true;
          } else if (ispresed == false) {
            assetsAudioPlayer.pause();
            ispresed = false;
          }
        });
      },
    );
  }
}

I used this package for playing audio

https://pub.dev/packages/assets_audio_player

and also is there any way to toggle button Icon when player is finish ?



Solution 1:[1]

you can check if the player is done playing by adding listener to it.

assetsAudioPlayer.playlistAudioFinished.listen((event){if(event) {//carry out another action you want }  });  

the callback response is a bool type, return false when the audio start and return true when it finished

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Akindev