flutter_audio_tagger
Um plugin Flutter para leitura e edição de metadados (tags) de arquivos de áudio com suporte a múltiplos formatos de áudio.
vrtkarim/flutter_audio_tagger open-source repository details.
{"sdk":"flutter"}^2.0.2{"sdk":"flutter"}^5.0.0Texto original em inglês. Visite o GitHub para a versão atual.
A Flutter plugin for reading and editing audio file metadata (ID3 tags) on Android. The plugin reads tag data from audio files and returns edited files as raw bytes (Uint8List), giving your app full control over where and how the resulting file is saved.
| Platform | Supported |
|---|---|
| Android | Yes |
| iOS | No |
| Web | No |
| Desktop | No |
Uint8List) along with the file extension, so your app decides where to write itMP3, MP4/M4A/M4P, OGG Vorbis, FLAC, WAV, AIF, DSF, WMA.
| Field | Description |
|---|---|
artist |
Artist name |
title |
Track title |
album |
Album name |
year |
Release year |
genre |
Music genre |
language |
Language of the track |
composer |
Composer name |
country |
Country of origin |
quality |
Audio quality descriptor |
lyrics |
Song lyrics |
artwork |
Album cover image bytes |
Add the dependency to your pubspec.yaml:
dependencies:
flutter_audio_tagger: ^5.1.1
In your android/app/build.gradle, disable minification and resource shrinking for the release build:
buildTypes {
release {
minifyEnabled false
shrinkResources false
}
}
import 'package:flutter_audio_tagger/flutter_audio_tagger.dart';
import 'package:flutter_audio_tagger/tag.dart';
import 'package:flutter_audio_tagger/audiofiledata.dart';
final tagger = FlutterAudioTagger();
| Method | Returns | Description |
|---|---|---|
getAllTags(String path) |
Future<Tag?> |
All metadata fields including artwork |
getTags(String path) |
Future<Map?> |
Metadata fields only (no artwork) |
getArtWork(String path) |
Future<Uint8List?> |
Artwork bytes only |
All editing methods return Future<AudioFileData>. The AudioFileData object contains:
musicData (Uint8List) -- the full modified audio file as bytesfileExtension (String) -- the original file extension (e.g. mp3, flac)| Method | Description |
|---|---|
editTags(Tag tag, String path) |
Edit metadata only (no artwork) |
setArtWork(Uint8List? imageData, String path) |
Edit artwork only |
editTagsAndArtwork(Tag tag, String path) |
Edit both metadata and artwork |
// Read all tags including artwork
Tag? tag = await tagger.getAllTags('/path/to/file.mp3');
print(tag?.artist);
print(tag?.title);
// Read tags without artwork
Map<dynamic, dynamic>? tags = await tagger.getTags('/path/to/file.mp3');
// Read artwork only
Uint8List? artwork = await tagger.getArtWork('/path/to/file.mp3');
Always pass a Tag object, even when updating a single field.
null to leave it unchanged."" to clear it.Tag updatedTag = Tag(
artist: 'New Artist',
title: 'New Title',
album: null, // unchanged
year: '2025',
genre: '', // cleared
language: null,
composer: null,
country: null,
quality: null,
lyrics: 'New lyrics',
artwork: null, // not used by editTags; pass artwork to editTagsAndArtwork
);
AudioFileData result = await tagger.editTags(updatedTag, '/path/to/file.mp3');
import 'dart:io';
File imageFile = File('/path/to/cover.jpg');
Uint8List imageData = await imageFile.readAsBytes();
// Set artwork only
AudioFileData result = await tagger.setArtWork(imageData, '/path/to/file.mp3');
Tag tagWithArtwork = Tag(
artist: 'Artist',
title: 'Title',
album: 'Album',
year: '2025',
genre: 'Pop',
language: null,
composer: null,
country: null,
quality: null,
lyrics: null,
artwork: imageData,
);
AudioFileData result = await tagger.editTagsAndArtwork(tagWithArtwork, '/path/to/file.mp3');
Every editing method returns an AudioFileData object. The plugin does not write the file to disk. Your app receives the raw bytes and is responsible for saving them. Use dart:io to write the bytes to any path your app has access to.
import 'dart:io';
// Edit tags
AudioFileData editedFile = await tagger.editTags(updatedTag, originalFilePath);
// Write the bytes to a file
String savePath = '/storage/emulated/0/Download/edited.${editedFile.fileExtension}';
File outputFile = File(savePath);
await outputFile.writeAsBytes(editedFile.musicData);
You can save to any writable location: the app's documents directory, the downloads folder, an external storage path, or overwrite the original file. The fileExtension field tells you the format of the audio data so you can construct the correct filename.
import 'package:path_provider/path_provider.dart';
// Save to app documents directory
Directory appDir = await getApplicationDocumentsDirectory();
String fileName = 'my_song.${editedFile.fileExtension}';
File file = File('${appDir.path}/$fileName');
await file.writeAsBytes(editedFile.musicData);
// Or overwrite the original file
File original = File(originalFilePath);
await original.writeAsBytes(editedFile.musicData);
MIT License. See the LICENSE file for details.