silky_scroll 2.0.3
silky_scroll: ^2.0.3 copied to clipboard
Silky Scroll is a package developed in Flutter to provide a smooth scrolling experience.
Changelog #
All notable changes to this project will be documented in this file.
2.0.3 #
Fixed #
- Fixed
include_file_not_foundwarning in exampleanalysis_options.yamlby replacing deprecatedflutter_lintswithlints. - Removed unnecessary
package:flutter/scheduler.dartimport inSilkyScrollState(already provided bymaterial.dart). - Removed unused
package:flutter/foundation.dartimport in input handler tests. - Replaced unnecessary lambdas with tear-offs in state tests.
2.0.2 #
Changed #
- Ticker-based animation engine: Replaced per-event
controller.animateTo()with a singleTicker+jumpTo()loop using frame-rate-independent exponential smoothing. Eliminates the stutter caused by repeatedly cancelling and restarting easing curves on rapid mouse-wheel input. - Targeted rebuild: Replaced
ListenableBuilder(which rebuilt the entire widget subtree on everynotifyListeners()) with a dedicated_onPhysicsChangedlistener that callssetStateonly when theScrollPhysicsreference actually changes. - Recoil animation: Bounce-back (recoil) to edge now runs inside the same Ticker using
Curves.easeInOutSineinterpolation, avoiding a separateanimateTo()call that could conflict with ongoing scroll animations.
Fixed #
- Overscroll bounce-back stutter: Added
silkyTickerActiveflag toSilkyScrollPositionthat suppressesgoBallistic()while the Ticker is running. Previously, eachjumpTo()during overscroll triggered Flutter'sBouncingScrollPhysicsspring simulation, which fought with the Ticker every frame — causing visible jitter at both top and bottom edges.
2.0.1 #
Fixed #
onScrollandonEdgeOverScrollcallbacks were not passed fromSilkyScrollwidget toSilkyScrollState, causing them to always benull.onEdgeOverScrollwas never invoked; it is now called when mouse-wheel or touch/trackpad scroll reaches an edge.
2.0.0 #
Breaking #
- Removed
providerdependency; replaced withInheritedWidget+ListenableBuilder. - Applied Dart 3
final class/abstract interface classmodifiers to all public classes. Externalextends/implementsis no longer permitted for concrete types. - Exported
ScrollPhysicsPhaseenum from barrel file.
Added #
SilkyScrollConfig.copyWith,==,hashCode, andtoString.SilkyScrollMousePointerManager.resetForTesting(@visibleForTesting).SilkyScrollWebManagerInterface.isWebPlatformfor conditional-import–based platform detection.SilkyEdgeDetector: sub-pixel edge detection using threshold instead oftoInt().- State machine
_transitionTonow guards against Timer creation after dispose. SilkyScrollController.attach/detachguard against duplicate position registration.- Test infrastructure:
test/helpers/test_helpers.dartshared utilities. - New tests for
SilkyScrollAnimator,SilkyInputHandler,SilkyScrollConfig, and integration tests (67 total, up from 24).
Changed #
kIsWebruntime branching inSilkyInputHandlerreplaced with conditional-import pattern viaisWebPlatform.ListenableBuilderrebuild scope reduced:onAnimationStateChangedno longer triggers unnecessary widget rebuilds for recoil state.- Dispose order in
SilkyScrollStatemade deterministic and safe. - Edge-detection refactored to switch expression / pattern matching (Dart 3).
SilkyScrollAnimator._handleRecoilrefactored to switch expression.- Web helper magic number
Duration(milliseconds: 700)extracted to_kOverscrollBehaviorXResetDelayconstant. - Lint configuration upgraded from
flutter_lintstopackage:lints/recommended.yamlwith custom rules. - Example restructured to
example/lib/main.dart+example/pubspec.yaml(pub.dev guideline). - README image paths updated from
Bluebar1/dyn_mouse_scrolltoDynaruid/silky_scroll.
Removed #
- Legacy duplicate source files under
lib/root (moved tolib/src/in Phase 1).
Fixed #
_unlockScrollnow correctly transitions_physicsPhaseback toScrollPhysicsPhase.normal._transitionTochecks_disposedbefore creating a new Timer.
1.0.14 #
Fixed #
- Removed usage of
Platformfromdart:iodue to compatibility issues causing errors on Safari in iOS 18.2.
1.0.12 #
Added #
- Added an option to configure whether scroll bubbling is propagated when an inner scroll view reaches its edge within nested scroll views.
1.0.6 #
Changed #
- The duration of scroll momentum transferred to the parent widget has been adjusted to behave more naturally.