Flame Audio 或 Audio Player 不停止声音

Flame Audio or Audio Player does not stop the sound

使用 Flame 和 Flame Audio,我无法解决问题。 FlameAudio 返回的 AudioPlayer 上的停止函数不会停止播放循环。不知道是我代码的问题,还是AudioPlayer的问题,还是FlameAudio的问题。

下面是一段在开始时启动声音的代码,应该在结束时停止或取消。使用单指针拖动它可以工作。但是,当使用带有多个指针的 multidrag 并一次释放所有声音时,声音会继续播放。当至少有一个拖动处于活动状态时,代码应该只播放一种声音。

任何人都可以告诉我,如果我做错了什么或者有错误。可在 https://github.com/markohrastovec/flame_audio_test.

找到最小工作示例,它在我的 phone 上展示了问题
  @override
  void onDragStart(int pointerId, DragStartInfo info) async {
    if (loopPlayer == null && activeDrag.isEmpty) {
      loopPlayer = await FlameAudio.audioCache.loop('sfx/flame.mp3');
    }
    activeDrag.add(pointerId);
  }

  @override
  void onDragEnd(int pointerId, DragEndInfo info) async {
    activeDrag.remove(pointerId);
    if (loopPlayer != null && activeDrag.isEmpty) {
      int result = await loopPlayer!.stop();
      loopPlayer = null;
    }
  }

  @override
  void onDragCancel(int pointerId) async {
    activeDrag.remove(pointerId);
    if (loopPlayer != null && activeDrag.isEmpty) {
      int result = await loopPlayer!.stop();
      loopPlayer = null;
    }
  }

我认为这是由于 onDragStart 方法是异步的,它实际上创建了多个播放器,并用变量中的新播放器替换了第一个创建的播放器。如果您在 onDragStart 中执行类似的操作,会发生这种情况吗:

  @override
  void onDragStart(int pointerId, DragStartInfo info) async {
    if (loopPlayer == null && activeDrag.isEmpty) {
      activeDrag.add(pointerId);
      loopPlayer = await FlameAudio.audioCache.loop('sfx/flame.mp3');
    } else {
      activeDrag.add(pointerId);
    }
  }