Conversation
add the new github basic workflow
Adds processingState mapping, prevents redundant duration updates, and ensures hardware play/pause actions are broadcasted.
Mocks shuffleModeEnabledStream, loopModeStream, playingStream, and processingStateStream to match updated handler logic.
…rom history Fixes a bug where songs played directly from the History/Analytics cards did not display artwork in the background notification. Symptoms resolved: - Missing notification album art. - Transparent notification background on cold start. - Stale artwork/colors when switching songs. - Updated AudioPlayerRepository to accept an optional artwork URI. - Constructs a reliable artwork URI in MusicPlayerBloc when playing single songs. - Updated MusicPlayerHandler to accept and apply duration in the legacy playSong method. - Refined the artwork URI fallback in the repository implementation to use the media ID.
…issing Fix issue notification artwork missing
Implements the new home screen design with 'Good Evening' header, Quick Resume grid, and Recently Played list. Introduces HomeBloc for managing home-specific state (greeting, track count). Refactors HomeDashboardPage to use MultiBlocProvider and separate widget components. Adds widget tests for new UI components.
Moves HomeTab enum to domain layer and updates navigation widgets to use the new entity, preparing for HomeCubit removal.
Deletes unused HomeCubit and HomeState as state management has been migrated to HomeBloc.
Splits monolithic local datasource into Recorder, Reader, and Aggregator for better separation of concerns and maintainability. Updates AnalyticsRepositoryImpl to use the new composed datasources.
Ignores 'designs/' and 'plans/' directories to keep the repository clean of non-code artifacts.
Resolves analysis errors by mapping outdated colors (hotPink, electricBlue, etc.) to the new Pulse theme colors (chart1-5, accent, surface). Updates charts and pages to use the new centralized color system.
Implements 'getArtistStats' in AnalyticsReader to aggregate duration, play count, and sessions for specific artists. Updates AnalyticsRepository to expose this new data source method.
Introduces the Artists feature module with Domain, Data, and Presentation layers. Registers new dependencies (DataSource, Repository, UseCases, BLoCs) in ServiceLocator. Adds 'ArtistsRoute', 'ArtistDetailRoute', and 'ArtistsTabShellRoute' to AppRouter. Updates HomeTab enum to include 'artists'.
Adds 'Artists' tab to PulseBottomNavBar, NeuralStringNavigation, and PrismKnobNavigation. Updates HomePage to include ArtistsTabShellRoute. Removes expensive gradient overlay from HomePage for better rendering performance. Disables 'extendBody' in HomePage Scaffold.
Wraps SongListTile in RepaintBoundary to isolate paint cycles. Optimizes QueryArtworkWidget usage in tiles and grids (removes shadows, simplifies structure). Updates SongOptionsSheet to use root navigator. Extracts _ExplicitBadge widget for better code readability.
Adds LibraryPage, LibraryTracksView, and LibraryPlaylistsView matching the design. Integrates LibraryRoute into AppRouter and PulseBottomNavBar. Updates NeuralStringNavigation and PrismKnobNavigation to support the new Library tab. Refactors SortOption and AppPallete for compatibility.
Replaces favorite button in SongListTile with duration and play count. Adds onLongPress to SongListTile to open AddToPlaylistSheet. Adds 'Toggle Favorite' option to AddToPlaylistSheet. Passes play count from LibraryTracksView to SongListTile.
Aligns sheet UI with visual design (sections, create button, header). Adds 'Remove from Playlist' section (visual only). Integrates Favorites Toggle into the sheet.
Implements DeleteSong UseCase: Removes file, playlist entries, and analytics logs. Implements EditSongMetadata UseCase (architecture only, file tagging mocked). Adds EditSongMetadataSheet UI with fields for Title, Artist, Album. Updates AddToPlaylistSheet to include 'Edit Info' and 'Delete' actions. Refactors Repositories to support deletion across domains.
Resolves infinite loading state by handling failure in BlocConsumer. Adds a retry button for better UX when errors occur (e.g. after deletion).
- Replaces full-screen page with a modal bottom sheet for smoother transitions. - Updates MiniPlayer to trigger sheet using showModalBottomSheet with safe area support. - Removes legacy MusicPlayerPage and updates router configuration.
- Implements high-res artwork loading (800x800) with JPEG format and quality tuning. - Optimizes UI responsiveness using RepaintBoundary and granular BlocSelectors. - Integrates GetAllSongPlayCounts use case to show dynamic play logs and genre info. - Adds 'Mysterious' placeholder for unknown genres to encourage metadata tagging.
…sheets - Refactors add_to_playlist_sheet.dart into SongActionsSheet and AddToPlaylistSheet. - Updates SongListTile to trigger full actions menu on right-swipe and long-press. - Optimizes left-swipe for immediate 'Add to Queue' action.
- Adds glassmorphic _SearchOverlay with blur effects and scale animations. - Implements direction-aware FloatingActionButton for quick search access. - Adds 'Clear Search' capability to AppBar and overlay for better UX flow. - Fixes overflow issues in sort bottom sheet on smaller screens.
- Converts LibraryTracksView and LibraryPlaylistsView to sliver-returning widgets. - Integrates content into a single CustomScrollView for natural AppBar/ToggleBar collapse. - Improves search results visibility with dynamic headers.
- Synchronizes pubspec.lock and Android/iOS/Desktop build configurations. - Includes minor cleanup in local music data source.
…nterruptions Switches from manual list management to just_audio's ConcatenatingAudioSource for seamless queue manipulation without playback interruptions. Also adds try-catch for 'Loading interrupted' errors during rapid track switching.
Adds 'uniqueId' to SongEntity to ensure stable identity in queue lists. Implements 'removeQueueItemAt', 'reorderQueue', and 'skipToQueueItem' in AudioPlayerRepository to support advanced queue management features.
Introduces removeFromQueue, reorderQueue, and playQueueItem events to MusicPlayerBloc. Adds robust try-catch handling in initMusicQueue to prevent app crashes on startup failures.
Adds a draggable, dismissible QueueSheet widget using ReorderableListView. Integrates the sheet into the MusicPlayerSheet via the queue utility button, enabling users to view, reorder, and remove tracks from the play queue.
…catenatingAudioSource since it is deprecated
Adds a BlocBuilder and BlocSelector to the player's utility icons to handle song favoriting. Updates the UI in real-time when a song is added to or removed from favorites.
Adds LyricsSheet widget and integrates it into the MusicPlayerSheet. Users can now open a bottom sheet to view lyrics by tapping the text icon.
Updates the PlayLog entity to include a play_count field, defaulting to 1. This supports grouping consecutive plays of the same song in the history.
Bumps database version to 3 and adds play_count column to playback_logs via migration. Updates AnalyticsRecorder to increment play_count for consecutive plays of the same song instead of inserting a new row.
Adds a badge to history items to indicate when a song has been played multiple times consecutively. Improves layout and formatting of history logs.
Verifies that the AnalyticsRecorder correctly increments play_count for consecutive sessions of the same song and inserts new rows for different songs.
Introduces AchievementEntity, GetAchievements use case, and updates the repository and local data source to support user milestones.
Updates ProfileBloc to orchestrate fetching of user profile, achievements, and listening statistics. Registers new dependencies in DI.
Implements new Profile UI with stats grid, detailed navigation selector, listening insights, and achievements. Updates HomePage to handle the new loaded state signature.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🚀 Summary
This PR implements the comprehensive "Pulse 2.0" redesign for the Profile
feature. It transitions the profile screen from a simple user card to a
data-rich dashboard that visualizes listening statistics, manages navigation
preferences, and introduces a gamified achievements system.
✨ Key Changes
🏗️ Architecture & Domain
support achievement retrieval.
injection in init_dependencies.dart.
⚡ State Management (BLoC)
and ListeningStats (from Analytics) concurrently upon load.
package (User + Stats + Achievements), ensuring the UI has all necessary
context immediately.
🎨 UI/UX (Pulse 2.0)
Listened, and Top Metrics.
"Default" (Simple) vs. "Minimal" (Prism) navigation styles.
patterns (e.g., "Most Active Period").
Session" card.
🧪 Testing Strategy
dummy data for achievements and statistics.
ProfileState signature without regression in the bottom navigation bar.
📸 Screenshots
(Placeholders for visual verification)
┌─────────────────────────┬─────────────────────────┐
│ Previous Profile │ Pulse 2.0 Profile │
├─────────────────────────┼─────────────────────────┤
│ [Insert Old Screenshot] │ [Insert New Screenshot] │
└─────────────────────────┴─────────────────────────┘
📦 Checklist