Skip to content

v0.9.1

Choose a tag to compare

@jeromexiong jeromexiong released this 14 Aug 10:24
· 12 commits to master since this release

What's Changed

Major playback, notification, and platform-compatibility improvements across Android, iOS, and Web.

✨ New Features

  • Web support rebuilt — migrated from deprecated dart:html to package:web (HTMLAudioElement); fixed the web runtime crash, added full event forwarding (progress, play status, auto-advance on track end), and resolved local assets through ui_web.assetManager so bundled audio plays in release builds
  • Android 12+ compatibilityPendingIntent flags, foreground service type, and MediaSession/MediaStyle-based notification & lock-screen controls
  • Android 13+ runtime notification permission — requests POST_NOTIFICATIONS before playback and re-posts the playback card once granted
  • updateInfo — update title, description, and cover while playing without restarting
  • currentState — query native playback state from any context
  • Configurable notification title line and previous/next/stop button visibility
  • Support loading covers from the app's data directory on Android
  • Use AVURLAsset with a User-Agent for stream URLs on iOS

🐛 Bug Fixes

  • iOS: fix pause being ineffective, volume not syncing, and notification display; migrate to UIScene lifecycle
  • Android: fix notification cover not showing and stop leaking through release builds
  • Clear the leftover playback card when the app exits and sync the track index on switch
  • Fix cover-load failure stopping playback
  • Fix shuffle mode so every track is visited before the sequence repeats
  • Guard native events after the Flutter engine detaches
  • Request Android audio focus; avoid iOS background audio mixing
  • Fix timeupdate clearing the error state and clamp setVolume arguments
  • Surface native start errors and clear stale loading state
  • Sync iOS playback state with the real AVPlayer state

🛠 Engineering & Example

  • Migrate package and example to Dart 3
  • Modernize Android tooling; drop the unused ExoPlayer dependency; upgrade build chain to compileSdk/targetSdk 36 and Gradle 8.14.5
  • Add CI workflows and pub publish automation
  • Refactor the example into a layered controller-and-screen structure
  • Use a reliable HTTPS cover in the example

🔗 Issues Closed

#98, #99, #84, #75, #97, #93, #85, #58, #60, #62, #63, #73, #86, #87, #92, #77, #78