【问题标题】:How to use localized MediaItem title and album using audio_service on Flutter如何在 Flutter 上使用 audio_service 使用本地化的 MediaItem 标题和专辑
【发布时间】:2020-12-29 13:56:34
【问题描述】:

我在我的 Flutter 应用程序中使用 audio_service 包。 在所有示例中,MediaItems 要么出现在从 BackgroundAudioTask 扩展的类中,要么从另一个类传递,但它们最后是硬编码的..

在我的项目中,我只有一个MediaItem(无论播放的声音如何),我想在那个MediaItem 中使用本地化字符串。

问题是BackgroundAudioTask 不会给您BuildContext,因此您无法从BackgroundAudioTask 获取本地化字符串。

到目前为止,我尝试在 BackgroundAudioTask 中覆盖 onUpdateMediaItem,如下所示:

@override
onUpdateMediaItem(MediaItem mediaItem) async {
  AudioServiceBackground.setMediaItem(mediaItem);
}

并将 MediaItem 设置在 BackgroundAudioTask 之外,如下所示:

final mediaItem = MediaItem(
    id: "my-fixed-id",
    album: AppLocalizations.of(context).translate('media_item_album'),
    title: AppLocalizations.of(context).translate('media_item_title'),
);
AudioService.updateMediaItem(mediaItem);

问题是我不知道将第二个代码块放在哪里。我不能把它放在我的 App 类中,因为本地化还没有在那里初始化,我不确定把它放在页面屏幕中是否有意义,因为这个 MediaItems 是用于服务的,不应该假设绑定在屏幕上。

您能帮我为MediaItems 使用本地化字符串吗?

提前致谢!

【问题讨论】:

    标签: flutter audio


    【解决方案1】:

    我是这样解决的:

    在我的后台任务中:

    @override
    Future<void> onUpdateMediaItem(MediaItem mediaItem) async {
      AudioServiceBackground.setMediaItem(mediaItem);
    }
    

    在我的HomePage我听running事件流,获取字符串值然后设置媒体项:

    @override
    void initState() {
      super.initState();
      _setMediaItem();
    }
    
    void _setMediaItem() {
      AudioService.runningStream.listen((bool isRunning) {
        if (isRunning) {
          AudioService.updateMediaItem(
            MediaItem(
              id: "ambiance-sound-mix",
              album: AppLocalizations.of(context).getString("media_item_album"),
              title: AppLocalizations.of(context).getString("media_item_title"),
            ),
          );
        }
      });
    }
    

    PS: 我还尝试切换到easy_localization,认为这可以解决问题,因为它不需要BuildContext 来查找字符串值。但这不起作用,因为当您尝试从 audio_service 的 BackgroundAudioTask 获取字符串值时,EasyLocalization 失败,因为它无法使用加载的字符串访问其 instance 并尝试从空字符串映射中获取字符串..

    【讨论】:

      猜你喜欢
      • 2021-10-21
      • 2021-10-13
      • 1970-01-01
      • 2011-05-25
      • 1970-01-01
      • 2020-12-17
      • 2021-03-18
      • 2013-03-04
      • 2020-05-17
      相关资源
      最近更新 更多