assets_audio_player_plus_web
Web plugin for assets_audio_player_plus, play music/audio stored in assets files directly from Flutter.
What this package is like to depend on
Last release 4 months ago
15 Apr 2026
Too new to tell
only 1 dated releases
Nearly every release is documented
notes for 1 of 1 stable releases
Nothing withdrawn
no release was ever pulled
4 months old
1 releases · first in 2026
1 release in the last 12 months
see the full history below
Release timeline
1 releases · Apr 2026 to Apr 2026Releases
latest 1-
3.2.015 Apr 2026Release notes
Open source →First release of the
assets_audio_player_pluscontinuation fork. Published by Zakria Khan after the upstreamassets_audio_playerpackage was discontinued on pub.dev.Packaging
- Renamed
assets_audio_player→assets_audio_player_plus. - Renamed federated web implementation
assets_audio_player_web→assets_audio_player_plus_web, withimplements: assets_audio_player_pluscorrectly wired so Flutter's plugin resolver picks it up. - Updated
pubspec.yamlhomepage:URLs and all Dartpackage:...imports. example/pubspec.yaml: depends onassets_audio_player_plus: ^3.2.0with a localpath:override for development.- Native Android/iOS/macOS package paths (
com.github.florent37.*) left untouched — they're internal and don't affect pub.dev publishing.
Web platform — restored and modernized
- Restored the web plugin (previously deleted upstream because it used the
deprecated
dart:htmlAPI). - Migrated
dart:html→package:web+dart:js_interopso the plugin compiles to both JavaScript (flutter run -d chrome) and WebAssembly (flutter build web --wasm). WebPlayerHtml.stop()now fully detaches the old<audio>element (clearssrc, callsload(), nulls the reference). Fixes a bug where rapidopen()/replaceAt()calls could leave the previous element still playing, producing overlapping audio on web.findAssetPath()URL-encodes each path segment, so asset filenames with spaces or unicode no longer 404 in the browser.
Core plugin fixes
onAudioAddedAt/onAudioRemovedAtinlib/src/assets_audio_player.dartnow read the currentisPlayingstate and pass it asautoStart, instead of force-starting playback. Previously inserting an item at the current playlist index would always autoplay even if the player was paused.AudioWidget_totalDuration: changed fromlate DurationtoDuration _totalDuration = Duration.zeroso the position callback firing beforeonReadyToPlayno longer throwsLateInitializationError.Audio.copyWithnow acceptspitch— the field was declared on the private constructor but never surfaced oncopyWith.- Added analyzer-clean baseline:
flutter analyzereturns 0 issues across the plugin, web sub-package, and example.
Example app — full rewrite
- Removed the
flutter_neumorphic_plusdependency and the neumorphic look. Replaced with a clean Material 3 launcher + screens (seededColorScheme.fromSeed(Colors.deepPurple), light + dark). - Reorganized
example/lib/intomain.dart+demos/+widgets/+utils/(snake_case, one demo per file). - Dropped outdated
flutter_audio_queryandflutter_audio_recordergit dependencies (unmaintained, missing AGP 8 namespace). - Regenerated the Android scaffold via
flutter create --org=com.zakriakhanwith the declarative Gradle plugins block (modern AGP 8 requirement). AddedPOST_NOTIFICATIONS,WAKE_LOCK,FOREGROUND_SERVICE,FOREGROUND_SERVICE_MEDIA_PLAYBACKpermissions, plus the customassets.audio.player.notification.iconmetadata and drawables. - Added a shared
DemoScaffold(AppBar + info banner) so every demo is self-documenting.
Example demo improvements
- Playlist player: info banner, empty-state placeholders, error card when
open()throws, transport controls rendered unconditionally with stream defaults (no longer invisible before first emission). - Streams API / PlayerBuilder helpers: clarified descriptions; tap-to-play
now uses
autoStart: trueand auto-opens the playlist paused. - Insert / replace: completely redesigned. Live playlist card with
highlight for the current track, loader overlay during buffering or pending
mutations, explanation text under every action button, seek slider with
mm:sstimestamps. - Swap playlist source live (update_playlist): step-by-step UI — "Current source" card with icon + label that flips from "Network stream" to "Local file / blob URL (swapped)", real-time event log, seek progress maintained across the swap.
- Cache network audio: switched from unreliable
cacheDownloadInfosstream to explicitDio.onReceiveProgressdownload. Real percentage + MB counters on both web (blob URL) and Android (temp file). Plays from the cached copy on completion. - Local file: conditional imports — native path uses
dart:io+path_provider, web uses aDiodownload into apackage:webblob URL. - Live stream: replaced the dead BBC HTTP URL with HTTPS SomaFM Groove
Salad. Station card with cover, artist, live status indicator. Now-playing
card polls
somafm.com/songs/groovesalad.jsonevery 20 s with manual refresh button. Graceful fallback on CORS errors. - Update live stream metas: visible "Current metadata" card reflects
audio.updateMetas()viaplayer.current; play/pause button added. - AudioWidget demo: rotating vinyl-style cover, progress bar, explicit "Preparing..." loading card while the browser buffers the asset.
- Finish-event counters: renamed from "Counters test", now has a track card with progress bar, two color-coded counter cards, last-event log, and reset button.
- Multiple players: in-code gradient letter tiles (deterministic per track name) replace unreliable network thumbnails that were breaking on some Android emulators with SSL/cert errors.
Asset housekeeping
- Renamed
assets/audios/2 country.mp3→country2.mp3andpop test.mp3→pop.mp3to remove spaces that tripped the browser's<audio src="">. - Used
electronic.mp3andpop.mp3(≈4 MB each) instead ofcountry.mp3(11 MB) in theAudioWidgetandInsert / replacedemos for faster load times.
GitHub / CI / docs
.github/workflows/ci.yml—dart formatcheck,flutter analyzeon plugin + web + example,flutter test,flutter build web --releaseand--wasm,flutter build apk --debug. Runs on every PR..github/dependabot.yml— weekly pub updates across all three packages, monthly Gradle + Actions..github/CODEOWNERS— reviews routed to@cyclone-pk..github/pull_request_template.md— checklist covering formatter, analyze, tests, platforms, Flutter version, screenshots.CONTRIBUTING.md— full contributor guide (setup, testing expectations, web-specific DDC + WASM requirements, release process).README.md— added project-status banner, platform test checklist, "Hire me on Fiverr" button, refreshed screenshot strip (s1/s2/s3/s4.png).example/README.md— rewritten with accurate snippets using the real current API and a table mapping each demo to the APIs it exercises.
Platform test status at release
- ✅ Web (Chrome JS) — all 14 demos verified
- ✅ Web (WASM) —
flutter build web --wasmsucceeds - ✅ Android — tested on emulator SDK 36
- ⏳ iOS, macOS, Linux, Windows — pending
Release notes
Open source →First release of the web implementation under the
_plusname.- Renamed from
assets_audio_player_webtoassets_audio_player_plus_web. implements: assets_audio_player_plusso Flutter's federated plugin resolver wires it up automatically.- Migrated
dart:html→package:web+dart:js_interopso the plugin compiles to both JS (flutter run -d chrome) and WebAssembly (flutter build web --wasm). WebPlayerHtml.stop()now fully detaches the old<audio>element (clearssrc, callsload(), nulls the reference) — prevents overlapping audio on rapidopen()/replaceAt()calls.findAssetPath()URL-encodes each path segment, so asset filenames with spaces or unicode resolve correctly in the browser.- SDK / Flutter constraints bumped to Dart 3.3+, Flutter 3.16+.
- Renamed