Fix/comprehensive review v2 - #1
Closed
NecoArc-Chaos wants to merge 123 commits into
Closed
Conversation
- project_serializer_io: include 'id' in info.json and restore it on load - audio_service_io: await all seek/play futures so tracks start together
- openProject now accepts BuildContext and shows a SnackBar on deserialize failure - undo/redo marks dirty and unloads cached WAVs for removed tracks
- remove ref.watch(playheadPositionProvider) from AudioEditor build - introduce _PlayheadOverlay with ListenableBuilder so only the 2 px playhead line + back-button rebuild on scroll/playhead moves
- replace hand-rolled _encodeWav / DataWriter in audio_service_io, synth_service_io, synth_service_web, audio_clip_editor, and generator_panel with WavEncoder.encode
- piano roll min/max note, steps per beat, position throttle, instrument render limit, and undo limit moved to AppConstants
- preserve project.id in web project serializer - enable instrument track WAV generation on web via SynthService
- audio_service_io/web: add _trackMutes/_trackSolos, _applyEffectiveVolumes, setTrackMute, setTrackSolo; remove setMute and syncAllTracks - playback_provider: drop effectiveVolume(); pass raw volume + isMuted to loadTrackFromPath; apply mute/solo via new AudioService API - project_provider: drop _syncVolumes(); use setTrackMute/setTrackSolo and updateTrackVolume directly
- introduce _UndoState to snapshot project, currentFilePath, and isDirty - undo/redo restore the full snapshot, preventing stale path after undo
- saveProject accepts optional BuildContext and shows error SnackBar on file picker failure or write error - update all call sites in menu_bar, tool_bar, confirmDiscard, and tryNewProject to pass context
- wrap unloadTrack in try-catch; on failure roll back undo stack - mark dirty flag false on failed removal
- android/app/build.gradle.kts: load signing from key.properties if present, otherwise fall back to debug signing - add android/key.properties.example template - update README with Android signing instructions
- sanitize archive file names by filtering .. and empty segments - preserve internal directory structure while preventing escape from extract dir
- unloadTrack now deletes the temp WAV file for the unloaded track - unloadAll and dispose clean up all cached WAV temp files
- playback_provider.play() now passes raw track.volume plus isMuted/isSolo to AudioService instead of computing effective volume itself - this avoids corrupting trackVolume when mute/solo changes
- menu_bar.dart: forward BuildContext to saveProject so users see a SnackBar when file picker fails or write errors occur
- forceNewProject now clears the old project's auto-save cache - openProject clears the previous project's auto-save cache after loading the new one to prevent orphaned .zap files
- replace verbose track.type == TrackType.instrument checks with track.type.isInstrument across editor, track_tile, and models
- add _loadingProjectId to ProjectNotifier - openProject and _loadSerialized set the guard before async loadTrack calls and check it in callbacks - prevents race condition where opening project B while A is still loading would let A's callbacks overwrite B's state
- openProject now calls confirmDiscard when the current project has unsaved changes, matching the behavior of tryNewProject
- search bar now filters placeholder items by label - close button hides the browser panel via browserVisibilityProvider - show 'No results' message when query matches nothing
- _DataWriter now throws StateError instead of crashing with IndexOutOfRangeException if the calculated fileSize is wrong
- loadTrack, loadTrackFromPath, and loadTracks now log exceptions via AppLogger.e so decoding/IO errors are visible in logs
- confirmDiscard and tryNewProject now abort discard/new project if saveProject fails, preventing silent data loss
- move _loadingProjectId assignment before state = ... in both openProject and _loadSerialized so async loadTrack callbacks always see the correct guard value
- if unloadTrack throws, roll back the undo entry and restore _isDirty from the saved undo state instead of hardcoding false
…muted param - playback_provider no longer passes muted to loadTrackFromPath - AudioService owns mute/solo state via _trackMutes/_trackSolos - _applyEffectiveVolumes computes final volume uniformly
- recording_provider: expose error type via recordingErrorProvider - transport_bar: show context-aware SnackBar for permission vs start failure - browser: scan .projects directory for real .zap files in Projects tab
* fix: comprehensive review fixes - Remove unsafe media_kit git dependency override - Decouple BPM and playback speed (independent controls) - Fix Web Blob URL memory leaks (track and revoke on unload) - Add null safety to JS interop wrapper in audio_cache_web.dart - Fix Provider lifecycle: restart autosave on settings change - Skip autosave on web (file system not available) - Clean up temp WAV files on dispose and when notes change - Extract shared WavEncoder to eliminate code duplication - Fix incomplete undo/redo deep clone (stepPattern) - Add blob URL tracking and revocation in web audio service * ci: add automated build verification workflow * ci: add all platform build verification * fix: remove duplicate dispose declaration in audio_service_web.dart * fix: remove unused import in audio_service_web.dart * fix: resolve remaining lint warnings and errors - Remove duplicate dispose() method in audio_service_web.dart - Add avoid_web_libraries_in_flutter ignore comments for web files - Fix use_build_context_synchronously with mounted checks in track_tile.dart - Remove unused yBottom variable in waveform_painter.dart - Make _fftSize final in spectrogram_painter.dart - Fix sort_child_properties_last in audio_editor.dart - Fix curly braces in if-else statements * ci: add --no-fatal-infos and --no-fatal-warnings to analyze step * fix: add smoke test for CI and use --no-fatal-warnings in analyze --------- Co-authored-by: Assistant <assistant@example.com>
- Change DialogTheme to DialogThemeData in app_theme.dart - Fix duplicate _ parameter in project_provider.dart - Replace app_settings with open_app_settings in transport_bar.dart
flutter_lints ^6.0.0 requires Dart SDK ^3.8.0 which is not available in Flutter 3.24.5 (Dart 3.5.4) used by the web build job.
record ^7.1.1 requires Dart SDK >=3.12.0 which is not available in Flutter 3.24.5 (Dart 3.5.4) used by the web build job.
DialogThemeData is not available in Flutter 3.24.5 (web build), while DialogTheme is deprecated in Flutter 3.44.8. Use DialogTheme with ignore comment for cross-version compatibility.
fix: review p0 fixes and CI improvements
- Add artifact uploads for all platforms - Fix Windows artifact path to use Release (capital R) and runner/Release - Add Windows build output inspection step - Add --no-fatal-infos --no-fatal-warnings to analyze step - Keep temurin for Android builds
The app_settings-7.0.0 transitive dependency is compiled with Kotlin 2.2.10, but Gradle was resolving kotlin-stdlib to 2.0.0, causing metadata version mismatch errors. Force resolution to match settings.gradle.kts (2.3.20).
* fix: remove broken afterEvaluate block from android/build.gradle.kts The afterEvaluate block with typed lambda parameter causes Gradle script compilation errors with AGP 8.0+. The app module already sets compileSdk and compileOptions in app/build.gradle.kts, so this root-level override is unnecessary and breaks the build. * fix: upgrade Android Gradle Plugin to 8.6.0 for Flutter 3.44 compatibility * fix: replace open_app_settings with app_settings for AGP 8.6+ compatibility open_app_settings 2.0.1 does not specify a namespace in its Android build file, which causes build failures with AGP 8.0+. app_settings 6.1.1 properly declares the namespace and is compatible with AGP 8.6+. * fix: upgrade app_settings to 8.0.3 for iOS Swift 6 compatibility app_settings 6.1.1 fails on Xcode 16 / Flutter 3.44 with: ConformanceIsolation (Xcode): Conformance of 'AppSettingsPlugin' to protocol 'FlutterPlugin' crosses into main actor-isolated code Version 7.0.0 added @preconcurrency annotations for Swift 6. Version 8.0.3 also includes Android AGP 9 compatibility fixes. Dart API remains backward-compatible: AppSettings.openAppSettings() still works without arguments. * fix: upgrade Kotlin Gradle plugin to 2.2.0 for app_settings 8.0.3 compatibility app_settings 8.0.3 depends on kotlin-stdlib 2.2.20, which requires the Kotlin Gradle plugin to be at least 2.2.0. The previous version (1.9.0) could not read the 2.2.0 metadata, causing compileReleaseKotlin to fail with: Class 'kotlin.Unit' was compiled with an incompatible version of Kotlin. The actual metadata version is 2.2.0, but the compiler version 2.0.0 can read versions up to 2.1.0. Fixes Build Android CI failure on PR #4. * fix: revert Kotlin version to 1.9.0, use app_settings 7.0.3 Reverts the Kotlin Gradle plugin back to 1.9.0 because the Flutter Gradle plugin internally requires this version. Having 2.2.0 on the classpath alongside Flutter's 1.9.0 request causes: Error resolving plugin [id: 'org.jetbrains.kotlin.android', version: '1.9.0', apply: false] > already on the classpath with a different version (2.2.0) Downgrades app_settings to 7.0.3 (compatible with Kotlin 1.9.0, still includes Android namespace for AGP 8.x). The Swift 6 concurrency annotations from 8.0.3 are deferred to a separate change that also upgrades the project Kotlin version to 2.2+. Fixes Build Android CI failure on PR #4. * fix: downgrade app_settings to 7.0.3 for Kotlin 1.9.0 compatibility app_settings 8.0.3 bundles kotlin-stdlib 2.2.20, which is incompatible with the project's Kotlin Gradle plugin 1.9.0 (required by the Flutter Gradle plugin). Version 7.0.3 stays on Kotlin 1.9.x while still declaring the Android namespace needed for AGP 8.x compatibility. The Swift 6 concurrency annotations from 8.0.3 are deferred to a follow-up change that also upgrades the project Kotlin version to 2.2+. * fix: use app_settings 7.0.0 (actual published version, not 7.0.3) app_settings 7.0.3 does not exist on pub.dev — only 7.0.0 was published in the 7.x series. Version 7.0.0 is compatible with Kotlin 1.9.0 (no Kotlin 2.2 stdlib dependency) and already declares the Android namespace required by AGP 8.x. The Swift 6 @preconcurrency annotations from app_settings 8.0.3 remain deferred to a follow-up that also upgrades the project Kotlin version to 2.2+. * fix: upgrade Kotlin to 2.3.20 and force stdlib version - Update root build.gradle.kts Kotlin plugin from 1.9.0 to 2.3.20 - Add resolutionStrategy to force kotlin-stdlib to 2.3.20 across all subprojects - Resolves Kotlin metadata version conflict with app_settings-7.0.0/8.0.3 which is compiled with Kotlin 2.2.x * fix: upgrade Kotlin plugin version to 2.3.20 in settings.gradle.kts Align with resolutionStrategy in build.gradle.kts to resolve Kotlin metadata version conflicts with transitive dependencies. * fix: migrate kotlinOptions to compilerOptions DSL for Kotlin 2.3.20 The old kotlinOptions { jvmTarget = "17" } syntax is no longer accepted by Kotlin Gradle plugin 2.3.20. Migrate to the new compilerOptions DSL with jvmTarget.set(JvmTarget.JVM_17). --------- Co-authored-by: Assistant <assistant@example.com>
- ci.yml: change Windows artifact upload path from build/windows/x64/release/** to build/windows/x64/runner/Release/** to match actual Flutter Windows release output - build.yml: quote skip and if expressions to prevent YAML from parsing ! as a custom tag
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.
No description provided.