flutter - 如何在 Flutter 上使用 audio_service 使用本地化的 MediaItem 标题和专辑
问题描述
我在我的 Flutter 应用程序中使用audio_service包。在所有示例中,它们MediaItem
要么出现在从另一个类扩展BackgroundAudioTask
或从另一个类传递的类中,但它们最后是硬编码的。
在我的项目中,我只有一个MediaItem
(无论播放的声音如何),我想在其中使用本地化字符串MediaItem
。
问题是BackgroundAudioTask
不会给你一个BuildContext
,所以你不能从你的BackgroundAudioTask
.
到目前为止,我尝试过onUpdateMediaItem
像BackgroundAudioTask
这样覆盖:
@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 类中,因为本地化还没有在那里初始化,我不确定把它放在页面屏幕中是否有意义,因为这个MediaItem
s 是用于服务的,不应该被绑定到一个屏幕。
你能帮我使用MediaItem
s 的本地化字符串吗?
提前致谢!
解决方案
我是这样解决的:
在我的后台任务中:
@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's 获取字符串值时BackgroundAudioTask
,EasyLocalization 失败,因为它无法instance
使用加载的字符串访问它并尝试从空字符串映射中获取字符串。
推荐阅读
- mysql - 当我运行特定脚本以从 Moodle MySQL 数据库中查询各种内容时,SQL 语法出现错误
- c# - 如何解决winform用户控件不显示(工具箱)
- c# - 在 acumatica 中,如何使用数据库中可用联系人的名称填充 ComboBox?
- asp.net - 关于 Asp.net 核心的身份验证和反应
- docker - 无法将图像推送到 docker 容器注册表
- java - java.lang.NoClassDefFoundError: org/springframework/test/context/TestContextAnnotationUtils
- arrays - 为什么 MATLAB 说我的数组索引必须是正整数或逻辑值?
- reporting-services - SSRS 报表生成器快捷方式
- flutter-bloc - 缺少静态目标的未实现处理
- list - 使用 bind 和 wxpython 在列表中的位置