2

Myoozik

A feature-rich offline and online music player for Android with 1000+ active users, built with Flutter 1.0

Screenshot 1Screenshot 2Screenshot 3Screenshot 4Screenshot 5Screenshot 6Screenshot 7
1 / 7

Myoozik: Play & Share Music

Comprehensive Android Music Player & Radio Streaming App

Project Overview

Myoozik is a comprehensive Android music player application that provided users with a unified platform for both local music playback and online radio streaming. Built during my second year of BSc Computer Science, the app reached 1000+ active users on the Google Play Store before being suspended due to maintenance challenges during academic commitments and the evolution of the Flutter framework from version 1.0.

The application combined a sleek, customizable interface with powerful audio management capabilities, offering advanced features like metadata editing, playlist management, and multi-language support. Developed as a solo project, Myoozik demonstrated the ability to build production-ready mobile applications with sophisticated features including native Android integration, database design, and real-time audio playback.

Main Purpose: Create a feature-rich music player that unifies local library management, advanced metadata editing, and online radio streaming in a single, beautiful application.

Problem Addressed:

  • Fragmented music experience requiring multiple apps for local playback and streaming
  • Limited metadata editing capabilities in existing players
  • Complex interfaces that prioritized features over user experience
  • Lack of multi-language support for African markets
  • Poor playlist management in free music players

Status: Suspended (2020) - Transitioned to more serious projects after reaching 1000+ users. The app was built on Flutter 1.0 which had significant breaking changes in later versions, making maintenance difficult during academic studies with no financial incentive.

Technology Stack

Mobile Framework

  • Flutter 1.0 - Cross-platform mobile framework (Android deployment)
  • Dart >=2.12.0 <3.0.0 - Programming language with null safety
  • Native Android Integration - Custom platform channels for audio playback

Backend & Data Layer

  • SQLite (sqflite ^2.2.0+3) - Local database for music metadata, playlists, favorites, play history
  • Shared Preferences (shared_preferences ^2.0.15) - User settings and app state persistence
  • Path Provider (path_provider ^2.0.11) - File system access for local storage

Architecture & State Management

  • BLoC Pattern - Custom implementation with 7 dedicated blocs:
    • songBloc - Songs management
    • albumBloc - Albums organization
    • artistBloc - Artists browsing
    • genreBloc - Genre filtering
    • playlistBloc - Playlist management
    • radioBloc - Radio streaming
    • singleArtistBloc - Artist detail views

Native Audio Integration

  • Flutter Method Channel - Custom platform channel (com.mawiraike.myoozik.app)
  • Native Android Service (AppPlayer) - Background audio playback
  • Media Session API - Lockscreen controls and hardware button integration
  • Foreground Service - Persistent music playback

Key Libraries

Audio & Media:

  • Custom native Android service for background playback
  • Media button receiver integration
  • Lockscreen controls

UI/UX:

  • cached_network_image (^3.2.2) - Optimized image loading and caching
  • flutter_typeahead (^4.1.1) - Search autocomplete
  • flutter_time_picker_spinner (^2.0.0) - Music timer/sleep timer

Internationalization:

  • flutter_localizations - Multi-language support
  • intl (^0.17.0) - Internationalization and formatting
  • Supported languages: English, French, German

Additional Features:

  • share_plus (^6.3.0) - Music sharing
  • url_launcher (^6.1.6) - External link handling
  • launch_review (^3.0.1) - In-app review prompts
  • image_downloader (^0.31.0) - Album artwork downloading
  • permission_handler (^10.2.0) - Runtime permissions
  • html (^0.15.1) - HTML parsing for radio data
  • package_info (^2.0.2) - App version information

Design System

  • Custom Fonts:
    • PT Sans (Regular, Bold)
    • Product Sans (Regular, Bold, Italic, Bold Italic)
    • Google Sans (Regular)
  • Material Design with custom dark theme
  • Glassmorphism effects with backdrop filters
  • Dynamic Color Extraction from album artwork for adaptive theming

Build Configuration

  • Flutter SDK >=2.12.0 <3.0.0 with null safety
  • Version: 4.0.0+12000 (build 12000)
  • Android SDK with native Kotlin/Java integration
  • Package Name: com.mawiraike.myoozik

Key Features

1. Local Music Library Management

Automatic Music Indexing:

  • Automatic scanning and indexing of device music files
  • Metadata extraction (title, artist, album, genre, year, track number)
  • Recently played tracks with play count tracking
  • Favorite/liked songs management
  • Album artwork extraction and caching

Advanced Organization:

  • Browse by albums with album artwork
  • Browse by artists with dedicated artist pages
  • Filter by music genre with genre-specific views
  • All songs list with multiple sorting options
  • Recently played history with frequency tracking

2. Music Playback Engine

Native Audio Integration:

  • Custom platform channel bridge to native Android media player
  • Background playback with foreground service
  • Lockscreen media controls integration
  • Hardware button support (headphone controls)
  • System media session API integration

Playback Features:

  • Play/pause, next/previous track controls
  • Seek/scrub functionality with position tracking
  • Repeat modes: single track, all tracks, shuffle
  • Playback queue management
  • Dynamic album artwork color extraction for adaptive UI theming
  • Gapless playback for continuous listening

3. Online Radio Streaming

Radio Features:

  • Stream online radio stations
  • Radio genre categorization and filtering
  • Radio station search with autocomplete
  • Radio history tracking
  • Scheduled radio playback with notifications
  • Radio metadata display (station info, current playing)

Radio Organization:

  • Genre-based browsing
  • Favorite radio stations
  • Recently played radio history
  • Search functionality for finding stations

4. Advanced Metadata Editing

In-App ID3 Tag Editor:

  • Edit title, artist, album, genre, year
  • Track number and CD number editing
  • Persistent edited metadata storage in SQLite
  • Batch tag editing capabilities for multiple files
  • Cover art editing and replacement

Smart Metadata Management:

  • Automatic metadata detection and extraction
  • Conflict resolution for duplicate metadata
  • Metadata persistence across app restarts
  • Non-destructive editing (original files preserved)

5. Playlist Management

Custom Playlists:

  • Create user-defined playlists
  • Add/remove songs from playlists
  • Edit playlist details and tags
  • Playlist tag editing system
  • Return playlist functionality for context-based music selection
  • Playlist artwork management

Smart Organization:

  • Multiple playlist support
  • Drag-and-drop reordering
  • Quick add to playlist from any view
  • Playlist duplication and merging

6. Playback Queue Management

Queue Features:

  • View current playback queue
  • Reorder queue items with drag-and-drop
  • Clear queue functionality
  • Add songs to queue from any view
  • Queue persistence across app restarts
  • Visual queue position indicator

7. Search & Discovery

Global Search:

  • Search across songs, albums, artists, genres
  • Type-ahead suggestions with autocomplete
  • Filtered search results by category
  • Recent searches history
  • Search result previews

Smart Suggestions:

  • Recently played suggestions
  • Favorite songs quick access
  • Genre-based recommendations
  • Artist-based discovery

8. Settings & Customization

Look & Feel Settings:

  • Theme customization (Light/Dark modes)
  • Background selection and customization
  • Color scheme preferences
  • UI density options

Music Playback Settings:

  • Audio preferences and equalizer access
  • Playback behavior customization
  • Gapless playback toggle
  • Crossfade settings

Radio Settings:

  • Radio-specific configurations
  • Streaming quality preferences
  • Notification preferences

Language Selection:

  • English, French, German support
  • Automatic language detection
  • In-app language switcher

Additional Settings:

  • Full-screen mode toggle
  • Permission management
  • Storage preferences
  • Cache management

9. Music Timer / Sleep Timer

Timer Features:

  • Set timer to stop playback after specified duration
  • Time picker spinner interface
  • Notification when timer is active
  • Cancel timer functionality
  • Timer presets for common durations

10. Social Features

Sharing:

  • Share music tracks with other apps
  • Share playlists
  • Share currently playing song

Community:

  • In-app review prompts
  • Bug reporting via email
  • About app information
  • Version tracking and update notifications

11. Additional Features

System Integration:

  • System equalizer integration
  • Media controls in notification shade
  • Widget support (planned)
  • Audio focus management

Performance:

  • Album artwork caching and downloading
  • Efficient memory management
  • Background resource optimization
  • Low battery mode optimization

User Experience:

  • Empty state handling across all views
  • Loading states and progress indicators
  • Error handling with user-friendly messages
  • Smooth animations and transitions
  • Haptic feedback on key actions

Project Structure

myoozik/
├── android/                      # Android native code
│   ├── app/
│   │   └── src/main/
│   │       ├── kotlin/          # Native audio player service (AppPlayer)
│   │       ├── res/             # App icons, drawables, notification icons
│   │       │   ├── mipmap-*/    # App icons (multiple densities)
│   │       │   └── drawable/    # Notification icons
│   │       └── AndroidManifest.xml

├── ios/                          # iOS configuration (cross-platform ready)
├── web/                          # Web platform assets

├── lib/                          # Main Flutter/Dart codebase
│   ├── blocs/                   # BLoC state management (7 blocs)
│   │   ├── albumBloc.dart
│   │   ├── artistBloc.dart
│   │   ├── genreBloc.dart
│   │   ├── playlistBloc.dart
│   │   ├── radioBloc.dart
│   │   ├── singleArtistBloc.dart
│   │   └── songBloc.dart
│   │
│   ├── functions/               # Core business logic
│   │   ├── eight08/            # Database and data models
│   │   │   ├── audioTrack.dart
│   │   │   └── databaseClient.dart
│   │   ├── play.dart           # Playback management
│   │   └── utilities.dart
│   │
│   ├── platform/               # Platform channel integration
│   │   └── appChannel.dart     # Bridge to native Android audio
│   │
│   ├── services/               # App services
│   │   ├── connectionStatusSingleton.dart
│   │   ├── keys.dart
│   │   ├── menu.dart
│   │   ├── networkSong.dart
│   │   └── theme.dart
│   │
│   ├── shared/                 # Reusable UI components
│   │   ├── animations.dart
│   │   ├── appBuilder.dart
│   │   ├── background.dart
│   │   ├── bottomAppBar.dart
│   │   ├── buttons.dart
│   │   ├── customAppBar.dart
│   │   ├── dialogs.dart
│   │   ├── gridTile.dart
│   │   ├── simpleTile.dart
│   │   ├── translations.dart
│   │   └── [other shared widgets]
│   │
│   ├── views/                  # Screen components (25 views)
│   │   ├── homePage.dart
│   │   ├── player.dart
│   │   ├── albums.dart / album.dart
│   │   ├── artists.dart / artist.dart
│   │   ├── genres.dart / genre.dart
│   │   ├── playlists.dart / playlist.dart / userPlaylist.dart
│   │   ├── tracks.dart
│   │   ├── radio.dart
│   │   ├── queue.dart
│   │   ├── search.dart
│   │   ├── settings.dart
│   │   ├── lookAndFeelSettings.dart
│   │   ├── musicPlayBackSettings.dart
│   │   ├── radioSettings.dart
│   │   ├── musicTimer.dart
│   │   ├── singleTagEdit.dart
│   │   ├── playlistTagsEdit.dart
│   │   ├── aboutApp.dart
│   │   └── [other views]
│   │
│   └── main.dart               # App entry point

├── assets/
│   └── images/
│       ├── logo.png                    # App logo
│       └── artwork_default.png         # Default album artwork

├── locale/                     # Internationalization files
│   ├── i18n_en.json           # English
│   ├── i18n_fr.json           # French
│   └── i18n_de.json           # German

├── fonts/                      # Custom font files
└── pubspec.yaml               # Project dependencies

Key Directories Explained

  • lib/blocs/: State management using BLoC pattern, each bloc manages a specific domain
  • lib/functions/eight08/: Core data layer with SQLite database client and AudioTrack model
  • lib/platform/: Platform-specific integrations via method channels
  • lib/services/: App-wide services (theming, network status, menu configurations)
  • lib/shared/: Reusable UI components and widgets
  • lib/views/: 25 screen components representing different app pages
  • android/app/src/main/kotlin/: Native Android code for background audio service

Technical Implementation Highlights

Custom Platform Channel Architecture

Engineered a sophisticated bridge between Flutter and native Android using Method Channels, enabling seamless communication between Dart and Kotlin/Java code:

Channel Implementation:

  • Custom platform channel identifier: com.mawiraike.myoozik.app
  • Bi-directional communication for play/pause/skip/seek commands
  • Callback system for playback state updates
  • Native audio session management for system integration

Native Audio Service:

  • Custom AppPlayer service in Kotlin for background playback
  • Foreground service ensuring playback persists during navigation
  • Media session integration for lockscreen controls
  • Hardware button event handling (headphone controls)
  • Audio focus management for proper interaction with other apps

Database Architecture

Designed a comprehensive SQLite database schema managing multiple interconnected tables:

Database Tables:

  • Songs Library: Complete music metadata with file paths
  • Favorite Tracks: User favorites with timestamps
  • Recently Played: Play history with play count tracking
  • User Playlists: Custom playlist definitions
  • Playlist Tracks: Many-to-many relationship between playlists and songs
  • Edited Metadata: Persistent storage for user-edited ID3 tags
  • Radio History: Radio station play history
  • Radio Favorites: Saved radio stations

Performance Optimizations:

  • Indexed columns for fast queries (artist, album, genre)
  • Efficient JOIN operations for playlist retrieval
  • Cached queries for frequently accessed data
  • Background database operations preventing UI blocking

BLoC State Management Architecture

Implemented the BLoC (Business Logic Component) pattern with 7 specialized blocs providing reactive state management:

Architecture Benefits:

  • Clear separation between business logic and UI
  • Reactive streams for automatic UI updates
  • Centralized state management preventing prop drilling
  • Testable business logic independent of Flutter widgets

Bloc Responsibilities:

  • songBloc: Song data fetching, filtering, and state
  • albumBloc: Album organization and artwork management
  • playlistBloc: Playlist CRUD operations and track management
  • radioBloc: Radio streaming state and station management
  • Each bloc uses ValueNotifiers for reactive state updates

Multi-Language Internationalization System

Built a comprehensive internationalization system supporting English, French, and German:

Implementation:

  • JSON-based translation files (i18n_*.json)
  • flutter_localizations integration for date/number formatting
  • Browser language detection for automatic language selection
  • In-app language switcher with persistent user preference
  • Context-aware translations with plural support
  • RTL (Right-to-Left) layout ready for future Arabic support

Translation Coverage:

  • UI labels, buttons, and navigation elements
  • Error messages and user notifications
  • Settings screens and help text
  • Metadata field labels

Dynamic UI Theming System

Developed an advanced theming system with dynamic color extraction:

Color Extraction:

  • Album artwork analysis to extract dominant colors
  • Dynamic theme generation based on currently playing song
  • Smooth color transitions between tracks
  • Glassmorphism effects with backdrop blur
  • Custom Material Design implementation

Theme Features:

  • Light and dark mode support
  • User-customizable color schemes
  • Background selection options
  • UI density preferences
  • Consistent design language across 25+ screens

My Role & Contributions

As the sole developer of Myoozik during my second year of BSc Computer Science, I was responsible for every aspect of the application:

1. Architecture & System Design

  • Designed and implemented BLoC architecture pattern for state management
  • Created custom platform channel bridge between Flutter and native Android
  • Designed SQLite database schema for music metadata, playlists, and history
  • Implemented modular component structure with reusable widgets

2. Native Android Development

  • Built custom native Android service (AppPlayer) for background audio
  • Implemented foreground service for persistent music playback
  • Integrated Media Session API for lockscreen controls
  • Created method channel communication protocol

3. Core Feature Implementation

Audio Playback Engine:

  • Comprehensive playback system with play/pause/seek/skip
  • Playlist queue management with shuffle and repeat modes
  • Position tracking and duration monitoring with real-time UI updates
  • Dynamic color extraction from album artwork

Data Management:

  • SQLite database with multiple tables (songs, favorites, playlists, radio history)
  • Database synchronization for device music library changes
  • Metadata persistence and retrieval systems
  • Efficient caching strategies

Music Organization:

  • Browsing interfaces for albums, artists, genres, playlists
  • Search functionality with autocomplete
  • ID3 tag/metadata editor for in-app editing
  • Album artwork caching system

Online Radio Integration:

  • Radio streaming capabilities
  • Radio station categorization and search
  • Radio history and favorites system
  • Scheduled playback with notifications

4. UI/UX Development

  • Designed and implemented 25+ screen components
  • Custom animations and transitions
  • Material Design with custom dark theme
  • Responsive layouts and adaptive components
  • Custom app bar, bottom navigation, floating action buttons
  • Glassmorphism effects with backdrop filters

5. State Management

  • Reactive state management using ValueNotifiers
  • BLoC pattern across 7 different domain blocs
  • Event-driven communication between components
  • App lifecycle state management and persistence

6. Internationalization

  • Multi-language support (English, French, German)
  • Translation system with locale switching
  • Locale-specific formatting for dates and numbers

7. Permissions & System Integration

  • Runtime permissions handling for storage access
  • System equalizer integration
  • Share functionality for music files
  • App settings and preferences management

8. Quality & User Experience

  • Empty state handling across all views
  • Error handling and exception management
  • Loading states and progress indicators
  • In-app review prompts and bug reporting

9. Performance Optimization

  • Image caching for album artwork
  • Efficient database queries with proper indexing
  • Optimized list rendering with builder patterns
  • Memory management with proper resource disposal

10. Deployment & Maintenance

  • Google Play Store deployment and app listing
  • Version management and update releases
  • User feedback integration and bug fixes
  • App analytics and crash reporting

Skills Demonstrated

Mobile Development

  • Flutter Framework: Building production-ready cross-platform apps
  • Dart Language: Advanced Dart programming with null safety
  • Native Integration: Custom platform channels bridging Flutter and Android
  • Android Development: Native Kotlin/Java for audio service implementation

System Architecture

  • BLoC Pattern: Advanced state management architecture
  • Database Design: SQLite schema design and optimization
  • Service Architecture: Background services and foreground tasks
  • Component Architecture: Modular, reusable component design

Advanced Features

  • Platform Channels: Bi-directional communication between Flutter and native code
  • Background Services: Foreground services for persistent audio playback
  • Media Integration: System media controls and hardware button integration
  • Internationalization: Multi-language support with locale management

UI/UX Design

  • Material Design: Custom Material Design implementation
  • Dynamic Theming: Color extraction and adaptive theming
  • Animations: Smooth transitions and micro-interactions
  • Responsive Design: Adaptive layouts for various screen sizes

Data Management

  • SQLite: Complex database operations and optimization
  • State Persistence: Shared preferences and state management
  • Caching: Image caching and data caching strategies
  • File System: Local storage and file management

Production Deployment

  • Google Play Store: App publishing and distribution
  • User Acquisition: Reached 1000+ active users organically
  • App Maintenance: Version management and user support
  • Analytics: User behavior tracking and crash reporting

Historical Significance

First Serious Project

Myoozik was my first serious software project, marking the beginning of my journey as a software developer. The project provided foundational experience in:

  • Full-stack mobile development (Flutter + Native Android)
  • Production deployment and user management
  • Architecture design for maintainable codebases
  • Real-world problem-solving and debugging
  • User feedback integration and iteration

1000+ Users Achievement

Reaching 1000+ organic users on the Google Play Store as a second-year computer science student validated:

  • Product value proposition and user need
  • Technical execution and stability
  • UI/UX design decisions
  • Marketing and app store optimization (ASO)

Learning Foundation

The lessons learned from Myoozik directly influenced my later projects:

  • Importance of choosing stable, well-supported frameworks
  • Technical debt management and maintenance planning
  • Balancing feature development with code quality
  • Understanding user needs versus technical preferences
  • Deployment strategies and versioning

Why Suspended

The project was suspended in 2020 for several key reasons:

Technical Challenges

  • Flutter Framework Evolution: Built on Flutter 1.0, which had significant breaking changes in later versions (especially around dynamic classes)
  • Migration Complexity: Updating to Flutter 2.0+ would have required substantial refactoring
  • Maintenance Burden: Difficult to maintain during academic commitments

Strategic Decisions

  • No Financial Incentive: Free app with no monetization strategy
  • Academic Priorities: Focus on computer science curriculum and learning
  • Skill Evolution: Transitioned to more advanced projects and modern frameworks
  • Better Opportunities: Moved to serious commercial projects with real business value

Lessons Learned

The suspension taught valuable lessons about:

  • Framework selection and long-term maintainability
  • Importance of sustainable development practices
  • Balancing passion projects with academic/career priorities
  • When to sunset projects versus continuous maintenance

Key Takeaways

Myoozik represents a significant milestone in my development journey, demonstrating early proficiency in production mobile app development while providing critical lessons for future projects:

Technical Achievements

  • Successfully integrated Flutter with native Android for complex audio features
  • Implemented sophisticated state management using BLoC pattern
  • Built comprehensive database architecture for music management
  • Reached 1000+ users with stable, production-ready application

Product Learnings

  • User acquisition and retention strategies
  • Importance of feature prioritization
  • Balancing complexity with maintainability
  • Framework selection for long-term viability

Professional Growth

  • Solo Development: Managed entire development lifecycle independently
  • Production Deployment: Real-world app distribution and user support
  • Technical Decision-Making: Architecture and technology choices
  • Quality Focus: Maintained code quality despite aggressive feature development

Myoozik was instrumental in establishing my foundation as a software developer, providing invaluable experience with mobile development, native integration, database design, and production deployment. While suspended due to academic priorities and framework evolution, the project successfully validated my ability to build production-ready applications that serve real users at scale.