Использование расширенного MediaItem в audio_service v18

Я хочу расширить MediaItem, чтобы я мог легко добавлять дополнительные метаданные с помощью настраиваемых классов, чего я не могу сделать с помощью свойства extras (использование дополнительных функций также более неудобно, чем если бы моя дополнительная информация была просто частью класса). Я пробовал расширить MediaItem, но когда я меняю аргументы функции в моем BaseAudioHandler, он говорит, что это недопустимое переопределение. Вот пример моего класса. Большая часть его скопирована из MediaItem:

      class CustomMediaItem extends MediaItem {
  final CustomClass customValue;

  CustomMediaItem({
    /// A unique id.
    required final String id,

    /// The title of this media item.
    required final String title,

    /// The album this media item belongs to.
    final String? album,

    /// The artist of this media item.
    final String? artist,

    /// The genre of this media item.
    final String? genre,

    /// The duration of this media item.
    final Duration? duration,

    /// The artwork for this media item as a uri.
    final Uri? artUri,

    /// Whether this is playable (i.e. not a folder).
    final bool? playable = true,

    /// Override the default title for display purposes.
    final String? displayTitle,

    /// Override the default subtitle for display purposes.
    final String? displaySubtitle,

    /// Override the default description for display purposes.
    final String? displayDescription,

    /// The rating of the media item.
    final Rating? rating,

    /// A map of additional metadata for the media item.
    ///
    /// The values must be of type `int`, `String`, `bool` or `double`.
    final Map<String, dynamic>? extras,
    required this.customClass,
  }) : super(
          id: id,
          title: title,
          album: album,
          artist: artist,
          genre: genre,
          duration: duration,
          artUri: artUri,
          playable: playable,
          displayTitle: displayTitle,
          displaySubtitle: displaySubtitle,
          displayDescription: displayDescription,
          rating: rating,
          extras: extras,
        );
}

Когда я пытаюсь заменить аргумент в моем BaseAudioHandler, я получаю следующее:

      'MusicPlayerBackgroundTask.addQueueItem' ('Future<void> Function(CustomMediaItem)') isn't a valid override of 'BaseAudioHandler.addQueueItem' ('Future<void> Function(MediaItem)').dart(invalid_override)

Я также попытался создать свой собственный AudioHandler, но он дал ту же ошибку.

1 ответ

Используйте собственность, предназначенную для этой цели. Из документации по MediaItem:

дополнительная собственность

Map<String, dynamic>? extras окончательный

Карта дополнительных метаданных для медиа-элемента.

Значения должны быть типа int, String, bool или double.

Итак, если вы хотите сохранить дополнительные логические метаданные с именем isPreview, вы бы сделали что-то вроде:

      final item = MediaItem(
  id: 'id1',
  title: 'Song title',
  album: 'Album title',
  extras: {
    'isPreview': true,
  },
);

Нет ограничений на количество дополнительных свойств, которые вы можете хранить в extras карта.

Другие вопросы по тегам