如何将 BLoC 与 just_audio 结合使用

问题描述 投票:0回答:1

我正在构建一个聊天应用程序,并且正在添加一个语音消息小部件。我需要使用带有消息 ID 的 BLoC 来仅更新该消息。我尝试了以下方法:

  1. 为每条具有音频类型的消息添加 AudioPlayer 到 Map 并将其键设置为其消息 id。

  2. 构建音频消息时,我在该 Map 中搜索 id 并获取其 AudioPlayer 并为其分配一个名为

    player
    的变量。

  3. 在我的 BLoC 中,我有一个名为

    id
    的 var,这样我就知道当前小部件的 id 是什么。

  4. BlocBuilder
    中,我在
    buildWhen
    中写下以下内容:

    buildWhen: (previous, current) {
        return id == current.id;
     },
    

    这会检查此小部件的 id 是否与任何小部件触发的 id 相同,例如:

    context.read<ChatMsgBloc>().add(AudioMsgEvent(id: widget.id));
    

这应该只会重建具有与当前状态 id 相同的 id 的小部件,并且它可以工作。每个玩家都可以播放和停止。但问题是,如果有一个玩家在玩,而用户在没有停止第一个玩家的情况下玩另一个玩家。这将使两个音频继续播放,并且第一个小部件将被重建两次。我知道这真的是错过了,我不知道我的逻辑会怎样,有人可以帮助我吗?

flutter audio audio-player flutter-audioplayers
1个回答
0
投票

我发现最好、最有效的方法就是使用

ValueListenableBuilder
ValueNotifier
而不是 BLoC,并在 blocbuilder 重建时被迫处理。每个 ValueListenableBuilder 只监听它的
ValueNotifier

© www.soinside.com 2019 - 2024. All rights reserved.