An offline, ad-free music player for Android, built with Flutter. It plays a local music library and can sync tracks (audio + covers) from a self-hosted Resonance backend over the local network.
This is an anonymized portfolio copy. The bundled music library is replaced with three placeholder demo entries; no real audio or covers are included.
- Offline playback - plays from a local library stored on the device.
- Background audio - media-style notification with play/pause/next/previous,
shuffle and repeat, powered by
just_audio+just_audio_background. - Library screen - browse tracks, like/unlike, search.
- Player screen - full-screen player with cover art and transport controls.
- Server sync - point the app at a Resonance backend URL (Settings) and pull the library, downloading missing audio/cover files locally.
- Flutter (Dart SDK >= 3.3), Material 3
just_audio/just_audio_backgroundfor playback and the media sessionaudio_session,path_provider,shared_preferences,http- A small vendored copy of
just_audio_backgroundunderpackages/(path dependency)
flutter pub get
flutter runTo sync from a backend, open Settings in the app and enter the server URL
(e.g. http://192.168.1.50:5050), then run sync from the library screen.
lib/
main.dart # app entry, background audio init
models/track.dart # Track model (local + server JSON)
screens/ # library, player, settings
services/ # library (local store), player, sync (server pull)
assets/
tracks.json # demo library manifest (3 placeholder tracks)
music/ covers/ # local media (gitignored; .gitkeep only)
android/ # Android host project (package com.example.cadence)
packages/just_audio_background/ # vendored path dependency
- Application id / namespace:
com.example.cadence. android/local.propertiesis intentionally not included (machine-specific SDK paths); Flutter regenerates it on first build.