flutter - id3 包返回空值 - Dart
问题描述
我正在尝试在 Flutter 中制作一个音乐播放器,它正在使用id3 包从给定的媒体文件中读取元数据。但由于某种原因,它只是读取第一个字符或返回null
字段。
这是代码
import 'package:id3/id3.dart';
Map<String, dynamic> meta = {'': ''};
void getMetadata(String path) {
MP3Instance mp3instance = new MP3Instance(path);
if (mp3instance.parseTagsSync()) {
meta = mp3instance.getMetaTags();
print(meta);
}
}
String getTitle() {
return meta["Title"];
}
String getArtist() {
return meta["Artist"];
}
String getAlbum() {
return meta["Album"];
}
String getAPIC() {
String apic = meta["APIC"].toString();
int index = apic.indexOf('base64:');
int indexEnd = apic.indexOf('}');
if (index != -1) {
return apic.substring((index + 8), indexEnd);
} else {
return apic;
}
}
我正在使用 initState() 中的值来扩展列表视图,如下所示
void initState() {
_returnedSongs = returnMusicList();
for (FileSystemEntity entity in _returnedSongs) {
path.add(entity.path);
}
for (String str in path) {
getMetadata(str);
title = getTitle();
artist = getTitle();
album = getAlbum();
apic = getAPIC();
listMusic.add(Music(title, artist, album, apic));
}
super.initState();
}
解决方案
这个问题似乎是插件中的一个错误,建议之一是使用flutter_audio_query
一个 Flutter 插件,目前仅适用于 Android,它允许您查询有关设备存储上可用的艺术家、专辑、歌曲音频文件和流派的音频元数据信息。所有工作都是使用带有 ContentResolver API 的 Android 原生 MediaStore API 完成的,查询方法在后台线程中运行。AndroidX支持就OK了!
推荐阅读
- java - 如何修复“无法调用”java.awt.Point.getX()”,因为“this.p”为空”
- zsh - 我不能在 archlinux 中调用 riscv64-unknown-elf-gcc
- javascript - jQuery bootstrap modal 和 bootbox with modal-backdrop
- kubernetes - docker 官方镜像 hello-world 使用 kubectl 命令不断报告“Back-off restarting failed container”
- python - 如何使用 Raspberry Pi 4 (Python) 对 atMega328p MCU 进行编程
- c# - ASP.Net MVC 如何操作配置文件中的自定义条目
- javascript - 如何获得定义
- amazon-eks - 服务类型=负载均衡器未更新 ELB 实例端口
- typescript - 使用带有 typeScript 的 redux
- keil - 调试器显示在全局变量限制处截断