Skip to content

ShokhrukhbekYuldoshev/Meloplay

Repository files navigation

Meloplay

Meloplay is a local music player app that plays music from your device built with Flutter.

Platforms

  • Android only

Features

  • Play music from your device
  • Background audio
  • Notification controls
  • Lock screen controls
  • Play, pause, skip, previous, seek
  • Shuffle and repeat
  • Search for music, artists, albums, genres
  • Sort by (title, artist, album, duration, date, size, etc)
  • Order by (ascending, descending)
  • Playlists (Read, create, rename, delete, add songs, remove songs)
  • Queue (List, add songs, remove songs, change order)
  • Favorites (Add songs, remove songs)
  • Recently played
  • Most played
  • Artists
  • Albums
  • Genres
  • Lyrics
  • Equalizer
  • Sleep timer
  • Share music
  • Settings
  • Themes (multiple themes)
  • Localization

Screenshots

Songs Player Playlists
Songs Player Playlists
Artists Albums Genres
Artists Albums Genres
Settings Scan Themes
Settings Scan Themes

Dependencies

Name Description
auto_size_text Flutter widget that automatically resizes text to fit perfectly within its bounds.
bloc A predictable state management library.
flutter_bloc Flutter widgets that make it easy to implement BLoC design patterns.
flutter_cache_manager A Flutter plugin for caching images and other resources.
flutter_staggered_animations A plugin for adding staggered animations to your Flutter apps.
flutter_svg Flutter plugin for displaying SVG images.
fluttertoast Flutter plugin for displaying toast messages.
get_it Simple Service Locator for dependency injection.
hive A lightweight and blazing fast key-value database.
hive_flutter Hive database implementation for Flutter.
just_audio A feature-rich audio player for Flutter.
just_audio_background Plugin for playing audio in the background on Android and iOS.
lottie Library for rendering JSON-based Lottie animations natively.
marquee A Flutter widget that scrolls text infinitely.
on_audio_query A Flutter plugin to query songs on Android and iOS.
package_info_plus Plugin for querying information about the application package.
permission_handler Cross-platform permission handling plugin.
share_plus Plugin for sharing content via the platform share UI.
url_launcher Plugin for launching URLs on mobile platforms.
liquid_glass_renderer A Flutter plugin for rendering liquid glass effects.
device_info_plus Plugin for getting device information.

📦 Installation

Prerequisites

  • Flutter
  • Android Studio / Xcode

Setup

  1. Clone the repo

    git clone
  2. Install dependencies

    dart pub get
  3. Run the app

    flutter run

❗ Permissions

Inside AndroidManifest.xml we have the following permissions:

<!-- ADD xmlns:tools="http://schemas.android.com/tools" to the "manifest" element -->
<manifest xmlns:tools="http://schemas.android.com/tools" ...>
    <!-- url_launcher -->
    <queries>
        <intent>
            <action android:name="android.intent.action.VIEW" />
            <data android:scheme="https" />
        </intent>
    </queries>

    <!-- Android 12 and below -->
    <uses-permission
        android:name="android.permission.READ_EXTERNAL_STORAGE"
        android:maxSdkVersion="32" />

    <!-- Android 13+ -->
    <uses-permission
        android:name="android.permission.READ_MEDIA_AUDIO" />

    <!-- ADD THESE TWO PERMISSIONS -->
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
    <!-- ALSO ADD THIS PERMISSION IF TARGETING SDK 34 -->
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK"/>

    <application ...>

    ...

    <!-- EDIT THE android:name ATTRIBUTE IN YOUR EXISTING "ACTIVITY" ELEMENT -->
    <activity android:name="com.ryanheise.audioservice.AudioServiceActivity" ...>
      ...
    </activity>

    <!-- ADD THIS "SERVICE" element -->
    <service android:name="com.ryanheise.audioservice.AudioService"
        android:foregroundServiceType="mediaPlayback"
        android:exported="true" tools:ignore="Instantiatable">
      <intent-filter>
        <action android:name="android.media.browse.MediaBrowserService" />
      </intent-filter>
    </service>

    <!-- ADD THIS "RECEIVER" element -->
    <receiver android:name="com.ryanheise.audioservice.MediaButtonReceiver"
        android:exported="true" tools:ignore="Instantiatable">
      <intent-filter>
        <action android:name="android.intent.action.MEDIA_BUTTON" />
      </intent-filter>
    </receiver>
  </application>
</manifest>

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

License

Distributed under the Attribution-NonCommercial-ShareAlike 4.0 International License. See LICENSE for more information.

Contact

Show your support

Give a star if you like this project!