【问题标题】:Just Audio Flutter Plugin - How to catch song completion eventJust Audio Flutter Plugin - 如何捕捉歌曲完成事件
【发布时间】:2021-11-15 08:31:42
【问题描述】:

我正在使用 Ryan Heise 的 just_audio 插件进行颤振。我能够获得缓冲、准备、加载、完成等事件。

有没有办法让歌曲在播放列表中完成的事件?我似乎无法在文档中找到一个。我们需要更新 UI 以显示下一首正在播放的歌曲。

感谢您对此的帮助。

【问题讨论】:

    标签: flutter events plugins just-audio


    【解决方案1】:

    您应该能够使用StreamBuilder 来监听just_audiocurrentIndexStream。这样,将始终有最新的信息:如果状态更新,您的构建触发并且显示数据的小部件被重建。

    在 pub 的设置中,列出了可供您收听的不同可用流,其中包括 currentIndexStream,我认为它通过流当前值(与您的歌曲列表一起应该能够为您提供所需的信息)

    StreamBuilder(
      stream: player.currentIndexStream,
      builder: (context, AsyncSnapshot snapshot) {
        int currentIndex = snapshot.data ?? 0;
        print(currentIndex.toString());
        return MySongInfoWidget(song: mySongList[currentIndex]);
      }
    );
    

    上面的代码至少应该让您了解如何解决这个问题,请查看the StreamBuilder docs 了解更多信息。

    一个更完整的例子(展示如何在构建中使用流构建器):

    @override
    Widget build(BuildContext context) {
      return Scaffold(
        appBar: AppBar(...),
        body: Column(children: [
          myStaticWidget(...),
          StreamBuilder(
            stream: player.currentIndexStream,
            builder: (context, AsyncSnapshot snapshot) {
              int currentIndex = snapshot.data ?? 0;
              return Column(children: [
                Text('Current song #$currentIndex'),
                Text('Song name: ${mySongs[currentIndex].name}');
              ]);
            }
          ),
        ]),
      );
    }
    

    【讨论】:

    • 感谢您的回复。我现在能够正确获取歌曲的索引。播放列表中不断变化的歌曲正在正确触发索引更改。我现在有另一个问题。我正在使用流:_audioPlayer.playerStateStream,来获取缓冲、就绪状态,然后返回小部件。现在我需要做的就是将列表上的标签更改为新的歌曲标签。当我在另一个流中设置状态时:player.currentIndexStream,它当然会进入状态更改循环。有关如何更新此流中的标签的任何建议?
    • 我什至不会将状态用于索引:如果您将流构建器放在构建函数中,则使用流构建器并从那里构建应该立即构建小部件。如果您希望构建的小部件依赖于 2 个流,则可以将一个流构建器包装在另一个流构建器中。 (或者,使用multiple stream builder package 之类的东西使代码更简洁)。
    • 我刚刚添加了另一个示例,展示了如何立即在构建函数中使用 streambuilder。您应该记住,流一开始可能会返回一些意想不到的东西,所以在返回实际信息之前检查 snapshot.hasDatasnapshot.connectionStatus 是什么总是好的
    • 谢谢你。将尝试一些变化,看看它是如何工作的。
    猜你喜欢
    • 2020-05-26
    • 2021-08-07
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    • 2018-10-13
    • 2019-03-01
    相关资源
    最近更新 更多