Skip to content

davidcreated/streamvybe-mobile

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

35 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

StreamVybe - Music Streaming App

A Flutter music streaming application built with Clean Architecture and Provider state management.

πŸ—οΈ Architecture Overview

This project follows Clean Architecture principles, separating the codebase into three main layers:

1. Domain Layer (Business Logic)

  • Entities: Plain Dart objects representing core business models
  • Repositories: Abstract interfaces defining data operations
  • Use Cases: Single-purpose classes containing business logic

2. Data Layer (Data Management)

  • Data Sources: Remote (API) and Local (Cache) data sources
  • Models: Data transfer objects with JSON serialization
  • Repository Implementations: Concrete implementations of domain repositories

3. Presentation Layer (UI)

  • Pages: Full-screen widgets representing app screens
  • Widgets: Reusable UI components
  • Providers: State management using Provider/ChangeNotifier

πŸ“ Project Structure

lib/
β”œβ”€β”€ core/                          # Core app functionality
β”‚   β”œβ”€β”€ constants/                 # App-wide constants
β”‚   β”‚   β”œβ”€β”€ api_constants.dart
β”‚   β”‚   └── app_constants.dart
β”‚   β”œβ”€β”€ di/                        # Dependency Injection
β”‚   β”‚   └── injection_container.dart
β”‚   β”œβ”€β”€ errors/                    # Error handling
β”‚   β”‚   β”œβ”€β”€ exceptions.dart
β”‚   β”‚   └── failures.dart
β”‚   β”œβ”€β”€ navigation/                # Routing
β”‚   β”‚   └── app_router.dart
β”‚   β”œβ”€β”€ network/                   # Network layer
β”‚   β”‚   β”œβ”€β”€ api_client.dart
β”‚   β”‚   └── network_info.dart
β”‚   β”œβ”€β”€ themes/                    # App themes
β”‚   β”‚   └── app_theme.dart
β”‚   β”œβ”€β”€ usecases/                  # Base use case
β”‚   β”‚   └── usecase.dart
β”‚   β”œβ”€β”€ utils/                     # Utility functions
β”‚   β”‚   β”œβ”€β”€ date_formatter.dart
β”‚   β”‚   β”œβ”€β”€ permission_helper.dart
β”‚   β”‚   └── validators.dart
β”‚   └── widgets/                   # Shared widgets
β”‚
β”œβ”€β”€ features/                      # Feature modules
β”‚   β”œβ”€β”€ auth/                      # Authentication feature
β”‚   β”‚   β”œβ”€β”€ data/
β”‚   β”‚   β”‚   β”œβ”€β”€ datasources/
β”‚   β”‚   β”‚   β”œβ”€β”€ models/
β”‚   β”‚   β”‚   └── repositories/
β”‚   β”‚   β”œβ”€β”€ domain/
β”‚   β”‚   β”‚   β”œβ”€β”€ entities/         # user.dart
β”‚   β”‚   β”‚   β”œβ”€β”€ repositories/     # auth_repository.dart
β”‚   β”‚   β”‚   └── usecases/         # login_usecase.dart
β”‚   β”‚   └── presentation/
β”‚   β”‚       β”œβ”€β”€ pages/
β”‚   β”‚       β”œβ”€β”€ providers/        # auth_provider.dart
β”‚   β”‚       └── widgets/
β”‚   β”‚
β”‚   β”œβ”€β”€ onboarding/               # Onboarding feature
β”‚   β”œβ”€β”€ home/                     # Home feature
β”‚   β”œβ”€β”€ player/                   # Music player feature
β”‚   β”œβ”€β”€ search/                   # Search feature
β”‚   └── library/                  # Library feature
β”‚
└── main.dart                     # App entry point

🎨 Design Principles

  • Font: Manrope (official app font)
  • Theme: Dark mode optimized for music streaming
  • Responsive: Uses flutter_screenutil for responsive sizing
  • Colors: Custom color palette inspired by modern music apps

πŸ“¦ Key Dependencies

State Management

  • provider - State management solution

Navigation

  • go_router - Declarative routing

Audio

  • just_audio - Audio playback
  • audio_service - Background audio service
  • audio_session - Audio session management

Network

  • dio - HTTP client
  • http - Additional HTTP support

Storage

  • shared_preferences - Simple key-value storage
  • flutter_secure_storage - Secure storage for tokens
  • hive - NoSQL database

UI/UX

  • flutter_screenutil - Responsive sizing
  • google_fonts - Manrope font family
  • cached_network_image - Image caching
  • shimmer - Loading skeleton
  • lottie - Animations

Utilities

  • permission_handler - Runtime permissions
  • connectivity_plus - Network connectivity
  • path_provider - File system paths
  • get_it - Dependency injection
  • dartz - Functional programming
  • equatable - Value equality
  • logger - Logging

πŸ” Permissions

Android

  • Internet & Network access
  • Storage (Read/Write)
  • Audio & Media playback
  • Foreground service
  • Notifications
  • Camera (for profile pictures)

iOS

  • Camera access
  • Photo library access
  • Media library access
  • Notifications
  • Background audio playback

πŸš€ Getting Started

Prerequisites

  • Flutter SDK (^3.10.4)
  • Dart SDK
  • Android Studio / Xcode

Installation

  1. Clone the repository

    git clone <repository-url>
    cd streamvybe
  2. Install dependencies

    flutter pub get
  3. Run code generation (if needed)

    flutter pub run build_runner build --delete-conflicting-outputs
  4. Run the app

    flutter run

πŸ› οΈ Development Workflow

Adding a New Feature

  1. Create feature folder structure:

    lib/features/your_feature/
    β”œβ”€β”€ data/
    β”‚   β”œβ”€β”€ datasources/
    β”‚   β”œβ”€β”€ models/
    β”‚   └── repositories/
    β”œβ”€β”€ domain/
    β”‚   β”œβ”€β”€ entities/
    β”‚   β”œβ”€β”€ repositories/
    β”‚   └── usecases/
    └── presentation/
        β”œβ”€β”€ pages/
        β”œβ”€β”€ providers/
        └── widgets/
    
  2. Domain Layer First:

    • Define entities
    • Create repository interface
    • Implement use cases
  3. Data Layer:

    • Create data models
    • Implement data sources
    • Implement repository
  4. Presentation Layer:

    • Create providers
    • Build UI pages
    • Create reusable widgets
  5. Register in DI:

    • Add dependencies to injection_container.dart

State Management Pattern

This project uses Provider for state management:

// 1. Create Provider
class YourProvider with ChangeNotifier {
  // State and methods
  void updateState() {
    notifyListeners();
  }
}

// 2. Register in main.dart
MultiProvider(
  providers: [
    ChangeNotifierProvider(create: (_) => YourProvider()),
  ],
  child: YourApp(),
)

// 3. Use in UI
Consumer<YourProvider>(
  builder: (context, provider, child) {
    return YourWidget();
  },
)

🎯 Milestone 1 Checklist

  • Flutter project setup with clean structure
  • Package dependencies configured
  • Environment setup (Android & iOS)
  • Navigation setup (GoRouter)
  • State management setup (Provider)
  • Auth feature skeleton
  • Onboarding structure
  • API integration templates
  • Error handling structure
  • Permissions configuration
  • Build auth screens (Login, Signup, Onboarding)
  • Implement UI from Figma
  • Wire up API services
  • Test auth flow

πŸ“ Next Steps

  1. Implement Auth UI

    • Login page
    • Signup page
    • Forgot password page
  2. Implement Onboarding

    • Create onboarding screens
    • Implement page indicators
  3. Build Core Screens

    • Home page
    • Search page
    • Library page
    • Player page
  4. API Integration

    • Implement data sources
    • Wire up repositories
    • Connect to backend

🀝 Contributing

  1. Follow the clean architecture structure
  2. Use Manrope font for all text
  3. Maintain responsive design with ScreenUtil
  4. Write meaningful commit messages
  5. Test your changes thoroughly

πŸ“„ License

This project is private and confidential.


Built with ❀️ using Flutter and Clean Architecture

About

StreamVybe mobile application built with Flutter.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors