首页 > 解决方案 > 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();
  }

标签: flutterdart

解决方案


这个问题似乎是插件中的一个错误,建议之一是使用flutter_audio_query

一个 Flutter 插件,目前仅适用于 Android,它允许您查询有关设备存储上可用的艺术家、专辑、歌曲音频文件和流派的音频元数据信息。所有工作都是使用带有 ContentResolver API 的 Android 原生 MediaStore API 完成的,查询方法在后台线程中运行。AndroidX支持就OK了!


推荐阅读