smooth_sheets
Sheet widgets with smooth motion and great flexibility. Also supports nested navigation in both imperative and declarative ways.
1.1.1
101K downloads/mo
#1135 most downloaded on pub.dev
fujidaiti/smooth_sheets
What this package is like to depend on
Last release 13 days ago
11 Aug 2026
Release timing varies
gaps range from 8 days to 4 months
Nearly every release is documented
notes for 45 of 47 stable releases
1 version withdrawn
withdrawn after publishing
3 years old
52 releases · first in 2024
9 releases in the last 12 months
see the full history below
Release timeline
52 releases · Jan 2024 to Aug 2026Releases
latest 52-
1.1.111 Aug 2026Release notes
Open source →- fix: SheetContentScaffold semantics child order matches paint order so overlapping bars are not obscured by assistive technologies
- fix: Avoid crash when a SheetModel is detached during layout
Release notes
Open source →- fix: SheetContentScaffold semantics child order matches paint order so overlapping bars are not obscured by assistive technologies (#583) - 7039b9c
- fix: Avoid crash when a SheetModel is detached during layout (#582) - 5fe51cc
See the release note for more details.
-
1.1.002 Aug 2026Release notes
Open source →Add sheetVisibility to ModalSheetRouteMixin
screen-20260802-183350-1785663219580.mp4.2.mp4ModalSheetRouteMixin.sheetVisibilityhas been added, anAnimation<double>that reports how much of the sheet is visible in a modal route. It can be used, for example, to easily create custom modal barriers that change its opacity or blurriness based on the sheet's visibility, something like this:See the API documentation and this example for more details.
Bug fixes
Release notes
Open source →- feat: Add ModalSheetRouteMixin.sheetVisibility to observe how much of a sheet is visible in a modal route (#576) - d8b826b
- fix: Modal barrier fade too subtle for small sheets (#577) - 473daa9
- fix: Null check operator error in _LazySheetModelView.setModel due to uninitialized old model offset (#571) - bbdc96c
See the release note for more details.
-
1.0.322 Jun 2026Release notes
Open source → -
1.0.223 Apr 2026 -
1.0.121 Apr 2026Release notes
Open source → -
1.0.008 Apr 2026Release notes
Open source →The first stable release of smooth_sheets!
This version mainly focuses on bug fixes to stabilize the package, but some small new features have also shipped. Breaking changes are marked with a 💥 — please follow the migration guides.
Add PagedSheetRouteTheme for inheritable route defaults
A new
PagedSheetRouteThemelets you set shared defaults for all routes in aPagedSheet. Place it abovePagedSheetto configurescrollConfiguration,dragConfiguration,initialOffset,snapGrid,transitionDuration, andtransitionsBuilderonce, instead of repeating them on every route.PagedSheetRouteTheme( data: PagedSheetRouteThemeData( transitionsBuilder: myTransitionBuilder, snapGrid: mySnapGrid, ), child: PagedSheet( navigator: Navigator(...), ), )
Routes inherit from the theme when their parameter is
null. Per-route values always take precedence.scrollConfiguration: nullon routes now means "inherit" 💥Previously,
scrollConfiguration: nullon aPagedSheetRouteorPagedSheetPagemeant "no scroll-sheet integration." Now it means "inherit fromPagedSheetRouteTheme." To explicitly disable scroll-sheet integration, useSheetScrollConfiguration.disabled:BEFORE:
PagedSheetRoute( scrollConfiguration: null, // No scroll-sheet integration builder: (_) => MyContent(), )
AFTER:
PagedSheetRoute( scrollConfiguration: SheetScrollConfiguration.disabled, builder: (_) => MyContent(), )
dragConfiguration: nullon routes now means "inherit" 💥The same rule as
scrollConfigurationis now applied todragConfigurationonPagedSheetRouteandPagedSheetPage. SpecifySheetDragConfiguration.disabledinstead ofnullto disable dragging for a route.Route parameters are now nullable
initialOffset,snapGrid, andtransitionDurationonPagedSheetRouteandPagedSheetPageare now nullable. Whennull, they inherit fromPagedSheetRouteTheme. The built-in defaults (when no theme is provided) are unchanged.New way to manage scroll controllers 💥
Previously, there was no way to manage a scroll controller for a scrollable widget inside a sheet from outside of it. A workaround was to use SheetScrollable and capture the controller in the builder callback, but this approach was not aligned with the widget's lifecycle.
With the updated
SheetScrollable, you can now create aSheetScrollControlleroutside the sheet (a specializedScrollController) and attach it toSheetScrollable, just as you would with a regularScrollController.BEFORE:
ScrollController? scrollController; Widget build(BuildContext context) { return Sheet( child: SheetScrollable( builder: (context, controller) { scrollController = controller; return ListView( controller: controller, children: [...], ); }, ), ); }
AFTER:
late final SheetScrollController scrollController; @override void initState() { super.initState(); scrollController = SheetScrollController(); } void dispose() { scrollController.dispose(); super.dispose(); } Widget build(BuildContext context) { return Sheet( child: SheetScrollable( controller: scrollController, child: ListView( children: [...], ), ), ); }
Other changes
Sheet.dragConfigurationis now non-nullable 💥Similar to
PagedSheet, thedragConfigurationproperty onSheetis now non-nullable. If you were passingnullto disable dragging, useSheetDragConfiguration.disabledinstead.BEFORE:
Sheet( dragConfiguration: null, // Disabled dragging child: MyContent(), )
AFTER:
Sheet( dragConfiguration: SheetDragConfiguration.disabled, child: MyContent(), )
BouncingSheetPhysics no longer accepts custom spring 💥
The
springparameter has been removed from theBouncingSheetPhysicsconstructor as part of a fix for #435. If you were using a custom spring, you can extendBouncingSheetPhysicsand override thespringgetter to return your custom value.BEFORE:
BouncingSheetPhysics(spring: customSpring);
AFTER:
class MyPhysics extends BouncingSheetPhysics { MyPhysics({super.bounceExtent, super.resistance}); @override SpringDescription get spring => customSpring; }
Default
HitTestBehaviorchanged fromtranslucenttoopaque💥The default
hitTestBehaviorinSheetDragConfigurationhas changed fromHitTestBehavior.translucenttoHitTestBehavior.opaque, so that the sheet can be dragged out of the box even from transparent areas such as padding.And more...
kDefaultSheetSpringhas been removed from the public API 💥PagedSheet's shared elements (e.g., app-bar and bottom-bar) are now also affected by the current route's drag configuration (#500) 💥- feat: Use drag devices from inherited scroll config (#513) - 0796b1a by @Zekfad
- feat: Add deviceKinds to SheetDragConfiguration (#528) - 5a76bba
- fix: Android predictive back gesture triggers jaggy route pop animation in PagedSheet (#526) - 6dd9f3f
- fix: Assertion error occurs when predictive back gesture commits route pop on Android (#525) - 77fe2c0
- fix: Inconsistent BouncingSheetPhysics resistance in over-drag vs. ballistic animation (#522) - 0e74132
- fix:
SteplessSnapGridignores on-screen keyboard appearance (#515) - b872c74 - fix:
Navigator.replacedoes not update position and size of PagedSheet (#508) - 9b38b6c - fix: Account for viewPadding in SheetContentScaffold bar constraints (#507) - e133442
- fix: Ballistic animation ends abruptly right after releasing over-dragged sheet (#506) - 4c4bf56
Release notes
Open source →- feat: Add PagedSheetRouteTheme to make per-route parameters inheritable (#527) - 8a215f7
- feat: Add deviceKinds to SheetDragConfiguration (#528) - 5a76bba
- feat: Allow to manage scroll controllers outside the sheet (#523) - 3c57c32
- fix: Android predictive back gesture triggers jaggy route pop animation in PagedSheet (#526) - 6dd9f3f
- fix: Assertion error occurs when predictive back gesture commits route pop on Android (#525) - 77fe2c0
- fix: Inconsistent BouncingSheetPhysics resistance in over-drag vs. ballistic animation (#522) - 0e74132
- fix: Use drag devices from inherited scroll config (#513) - 0796b1a
- fix:
SteplessSnapGridignores on-screen keyboard appearance (#515) - b872c74 - fix:
Navigator.replacedoes not update position and size of PagedSheet (#508) - 9b38b6c - fix: Account for viewPadding in SheetContentScaffold bar constraints (#507) - e133442
- fix: Ballistic animation ends abruptly right after releasing over-dragged sheet (#506) - 4c4bf56
See the release note for more details.
-
1.0.0-f324.0.10.219 Oct 2024 pre-releaseNothing published for this version
-
1.0.0-f324.0.10.109 Oct 2024 pre-releaseNothing published for this version
-
1.0.0-f324.0.10.027 Sep 2024 pre-releaseNothing published for this version
-
1.0.0-f324.0.9.431 Aug 2024 pre-releaseNothing published for this version
-
0.17.023 Feb 2026Release notes
Open source →This version introduces a
paddingproperty onSheetandPagedSheet, giving you full control over how the sheet content responds to the keyboard, safe areas, or any other insets.Context
Previously,
SheetandPagedSheetoffered two boolean flags —shrinkChildToAvoidDynamicOverlapandshrinkChildToAvoidStaticOverlap— to control whether a sheet automatically resizes its child to avoid the on-screen keyboard or screen notches. While they worked well in many cases, there are still cases those two flags can't cover — for example, a floating sheet with margins where the bottom margin changes depending on whether the keyboard is open.What's new?
A
paddingproperty has been added toSheetandPagedSheetwidgets to replace the two flags. This change also eliminates the automatic content resizing behavior, so you are now responsible for padding the sheet content to avoid the keyboard and screen notches.Although it may sound like a downgrade, it enables you to build more complex layouts that couldn't be achieved with the legacy flags. Here's an example of such a layout where the sheet avoids screen notches when first displayed, then shifts itself above the keyboard when it opens while preserving a fixed amount of space between the keyboard and the sheet. Weirdly, this wasn't possible because
shrinkChildToAvoidDynamicOverlapinterfered withSheetViewport.padding, completely ignoring the padding when the keyboard was shown.Keyboard is closed Keyboard is open See sheet_padding.dart for more examples.
Sheet.padding vs. SheetViewport.padding vs. Padding widget
You might wonder how
Sheet.paddingdiffers fromSheetViewport.paddingand wrapping the sheet content (Sheet.child) with aPaddingwidget from the Flutter SDK. While this interactive example is useful for understanding the differences visually, here's a TL;DR:- use
Sheet.paddingto inset the content, - use
SheetViewport.paddingto add margin around the sheet itself, and - wrapping the content with a
Paddingwidget doesn't fit most cases.
Breaking Changes
The
shrinkChildToAvoidDynamicOverlapandshrinkChildToAvoidStaticOverlapflags onSheetandPagedSheethave been removed. Please follow the instructions below to migrate from these two flags to thepaddingproperty. The basic rules are to replace:shrinkChildToAvoidDynamicOverlap: truewith a padding ofMediaQuery.viewInsetsOf(context).bottomshrinkChildToAvoidStaticOverlap: truewith a padding ofMediaQuery.viewPaddingOf(context).bottom
For sheets with
shrinkChildToAvoidDynamicOverlap: trueYou may have enabled
shrinkChildToAvoidDynamicOverlapto automatically shift the sheet content upward to avoid the keyboard. It wastrueby default, so sheets that don't explicitly disable this flag should also migrate to thepaddingproperty as follows:BEFORE
Sheet( shrinkChildToAvoidDynamicOverlap: true, child: ..., );
AFTER
Sheet( padding: EdgeInsets.only( bottom: MediaQuery.viewInsetsOf(context).bottom, ), child: ..., );
For sheets with
shrinkChildToAvoidStaticOverlap: trueFollow this migration guide if you enabled
shrinkChildToAvoidStaticOverlapto automatically pad the content to avoid screen notches at the bottom. It wasfalseby default, so sheets that don't explicitly enable this flag are not affected by this change.BEFORE
Sheet( shrinkChildToAvoidStaticOverlap: true, child: ..., );
AFTER
Sheet( padding: EdgeInsets.only( bottom: MediaQuery.viewPaddingOf(context).bottom, ), child: ..., );
For sheets with both
shrinkChildToAvoidDynamicOverlap: trueandshrinkChildToAvoidStaticOverlap: trueBEFORE
Sheet( shrinkChildToAvoidDynamicOverlap: true, shrinkChildToAvoidStaticOverlap: true, child: ..., );
AFTER
Sheet( padding: EdgeInsets.only( bottom: math.max( MediaQuery.viewInsetsOf(context).bottom, MediaQuery.viewPaddingOf(context).bottom, ), ), child: ..., );
Other Breaking Changes
The following properties have also been removed:
SheetMetrics.viewportDynamicOverlap- Use
MediaQuery.viewInsetsOf(context).bottomfrom descendant widgets of a sheet instead.
- Use
SheetMetrics.viewportStaticOverlap- Use
MediaQuery.viewPaddingOf(context).bottomfrom descendant widgets of a sheet instead.
- Use
SheetLayoutSpec.viewportDynamicOverlap- Use
MediaQuery.viewInsetsOf(context).bottomfrom descendant widgets of a sheet instead.
- Use
SheetLayoutSpec.viewportStaticOverlap- Use
MediaQuery.viewPaddingOf(context).bottomfrom descendant widgets of a sheet instead.
- Use
SheetLayoutSpec.shrinkContentToAvoidDynamicOverlapSheetLayoutSpec.shrinkContentToAvoidStaticOverlap
Release notes
Open source →[!IMPORTANT]
shrinkChildToAvoidDynamicOverlapandshrinkChildToAvoidStaticOverlaphave been removed fromSheet,PagedSheet. Use thepaddingparameter instead.viewportDynamicOverlapandviewportStaticOverlaphave been removed fromViewportLayout,SheetLayoutSpec,SheetMetrics, and related classes.staticOverlap,dynamicOverlap,contentDynamicOverlap, andcontentStaticOverlapgetters have been removed fromSheetMetrics.SheetLayoutSpec.contentBaselinegetter has been removed.
See the release note for more details.
- use
-
0.16.012 Jan 2026Release notes
Open source →This version includes several new features, fixes and breaking changes (denoted with 💥).
Added Custom Barrier Support for Modal Sheets
ModalSheetRoute.barrierBuilderhas been added to modal routes and pages (thank you, @bqubique). This allows you to build a custom barrier for a modal sheet—for example, a blurred background. See this example for more practical usage.ModalSheetRoute( ... barrierBuilder: (route, dismissCallback) { return GestureDetector( onTap: dismissCallback, child: BackdropFilter( filter: ImageFilter.blur(sigmaX: 15.0, sigmaY: 15.0), child: Container(color: Colors.black12), ), ); }, );
Simplified BouncingSheetPhysics configuration 💥
The way to configure the bouncing behavior of a sheet is now much more straightforward. There are only two parameters: bounceExtent and resistance.
bounceExtentis the maximum number of pixels the sheet can be overdragged, andresistanceis a factor that controls how easy or hard it is to overdrag the sheet bybounceExtentpixels. The higher theresistancevalue, the harder it is to overdrag further.Examples
Use the tweak bouncing effect example to find the best values for your use case. Here are some examples:
bounceExtent=20 bounceExtent=80 bounceExtent=140 extent-20.mp4 extent-80.mp4 extent-140.mp4 resistance=-10 resistance=3 resistance=20 resistance-minus10.mp4 resistance-3.mp4 resistance-20.mp4 Breaking Changes
The following legacy APIs have been removed:
- BouncingBehavior
- DirectionAwareBouncingBehavior
- FixedBouncingBehavior
- BouncingSheetPhysics.behavior
- BouncingSheetPhysics.frictionCurve
Unfortunately, there is no straightforward way to migrate from the old APIs to
resistanceandbounceExtentparameters while keeping exactly the same bouncing behavior.
Enable dynamic viewport padding for modal sheets 💥
A
viewportBuilderhas been added to modal sheet routes and pages. It builds aSheetViewportfor a modal sheet, allowingSheetViewport.paddingto depend onBuildContextand dynamically change based on system UI elements like the on-screen keyboard.You may think this change isn't very useful since the current
SheetViewportonly has apaddingproperty. However, as more features like #3 are added toSheetViewport, you'll see more benefits from this change.Breaking Changes
The
viewportPaddingproperty has been removed from modal sheet routes and pages. UseviewportBuilderinstead and specify the padding directly viaSheetViewport.padding.BEFORE
ModalSheetRoute( viewportPadding: EdgeInsets.only( top: MediaQuery.viewPaddingOf(context).top, ), builder: (context) => Sheet(...), );
AFTER
ModalSheetRoute( viewportBuilder: (context, child) { return SheetViewport( padding: EdgeInsets.only( top: MediaQuery.viewPaddingOf(context).top, ), // The child is the widget built by the builder callback. child: child, ); }, builder: (context) => Sheet(...), );
Stabilized Sheet Behaviors
This release also includes several improvements to sheet behaviors in response to user gestures:
- fix: Unexpected bouncing animation with ClampingScrollPhysics #363
- fix: Inconsistent BouncingSheetPhysics behavior with keyboard state #389
Removed thresholdVelocityToInterruptBallisticScroll 💥
SheetScrollConfiguration.thresholdVelocityToInterruptBallisticScrollhas been removed. This option was part of the public API and configurable, but it never actually affected the sheet's behavior.Release notes
Open source →- feat: Allow modal sheet to have dynamic viewport padding (#458) - 0dd7041
- feat: Add custom barrier support for modal sheets - b846084
- feat: Simplify BouncingSheetPhysics configuration (#467) - fe2d73f
- fix: Remove thresholdVelocityToInterruptBallisticScroll (#464) - 2fdd3bd
- fix: Unexpected bouncing animation with ClampingScrollPhysics (#363) (#432) - 29ba25d
[!IMPORTANT]
- The
paddingproperties have been removed from modal sheet routes and pages. BouncingBehaviorand its subclasses have been removed.behaviorandfrictionCurvehave been removed.SheetScrollConfiguration.thresholdVelocityToInterruptBallisticScrollwas removed.
See the release note for more details.
-
0.15.009 Sep 2025Release notes
Open source →Important
- Flutter SDK 3.29+ is now required.
SwipeDismissSensitivity.minDragDistancehas been removed.
🎉 Added dismissalOffset: A more intuitive and powerful way to define the threshold for swipe-to-dismiss actions on modals
Reported in #303, fixed in #415 thanks to @bjartebore
Previously, we used
SwipeDismissSensitivity.minDragDistanceto define how many pixels the user had to drag down the modal sheet to close it. However, since it only accepted a threshold distance in logical pixels, it was difficult to create a consistent UX across various device sizes and sheet sizes.SwipeDismissSensitivity.dismissalOffsethas been introduced as a replacement forminDragDistanceand tackle this problem. It allows us to define the modal's dismissal threshold in terms ofSheetOffset, below which the sheet will be dismissed when the drag ends. This change provides much greater control over when sheets should be dismissed, allowing thresholds to depend on percentages, absolute pixels, or even custom logic that adapts to content size or viewport dimensions.Usage:
// Dismiss if only 40% or less of the sheet is visible when the drag ends const SwipeDismissSensitivity(dismissalOffset: SheetOffset(0.4)); // Dismiss if only 200 pixels or less of the sheet is visible when the drag ends const SwipeDismissSensitivity(dismissalOffset: SheetOffset.absolute(200)); // Dismiss if the sheet is in the bottom half of the screen when the drag ends const SwipeDismissSensitivity(dismissalOffset: SheetOffset.proportionalToViewport(0.5)); // Custom threshold for more complex use cases const SwipeDismissSensitivity(dismissalOffset: CustomThreshold()); class CustomThreshold implements SheetOffset { const CustomThreshold(); @override double resolve(ViewportLayout metrics) { return max(metrics.contentSize.height * 0.5, 80); } }
Migrating from minDragDistance
Unfortunately, there's no straightforward way to migrate from
minDragDistancetodismissalOffsetas they represent different thresholds. WhileminDragDistancedescribes how many pixels the user has to drag the sheet to dismiss the modal,dismissalOffsetdefines the distance from the bottom edge of the route's viewport to the top edge of the sheet, below which the sheet will dismiss when the drag ends.This is a special case, but if you know the sheet's height in advance, it's possible to migrate to the new API while keeping the current behavior. For example, if the sheet's height is 500 and the
minDragDistanceis 100, you can setdismissalOffsettoSheetOffset.absolute(500 - 100).Other changes
New Contributors
- @bjartebore made their first contribution in #415
Full Changelog: v0.14.0...v0.15.0
Release notes
Open source →- feat: Changed SwipeDismissSensitivity to use a SheetOffset as the minimum drag value (#415) - aba6f2f
- fix: NavigatorEventObserver assertion error when pop during push transition (#416) - 4004500
[!IMPORTANT]
- Added
SwipeDismissSensitivity.dismissalOffsetandSwipeDismissSensitivity.minDragDistancewas removed instead. - Requires Flutter SDK 3.29 or higher.
See the release note for more details.
-
0.14.014 Jul 2025Release notes
Open source →🎉 New Features
Cupertino Modal Sheet Overlay Effect
Reported in #25, fixed in #403
We've added support for toning overlay effects on Cupertino-style modal sheets when stacking them, matching native iOS behavior. The new
overlayColorparameter inCupertinoModalSheetPageandCupertinoModalSheetRouteallows applying a subtle overlay to background sheets when another sheet is presented, creating a more authentic iOS experience and improving visual hierarchy, especially in dark mode.Usage:
CupertinoModalSheetPage( overlayColor: const Color(0x33ffffff), // A translucent white color child: MySheetContent(), )
overlayColor: nulloverlayColor: Color(0x33ffffff)without-overlay-color.mp4 with-overlay-color.mp4 Pull-to-Refresh Support in Sheets
Reported in #264, fixed in #402
We've added support for pull-to-refresh functionality and overscroll effects within sheets through the new
delegateUnhandledOverscrollToChildflag inSheetScrollConfiguration. When enabled, this flag allows overscroll deltas that aren't handled by the sheet's physics to be passed to child scrollable widgets, enablingRefreshIndicatorandBouncingScrollPhysicseffects to work seamlessly within sheet content.This feature maintains backward compatibility and requires explicit opt-in, ensuring no impact on existing code.
pulltorefresh-in-sheet.mp4🐛 Bug Fixes
Fixed Sheet Position During Window Resize
Reported in #399, fixed in #400
Fixed an issue where sheets would not maintain their proper position when the app window was resized, particularly when dragging the bottom border to expand the window downward. Previously, sheets would appear to "float" rather than staying correctly positioned relative to the window boundaries.
This issue was especially noticeable on desktop platforms and also occurred on Android when running in Picture-in-Picture mode with keyboard interactions. The fix ensures that sheets now properly track window size changes and maintain their relative position, providing a more consistent user experience across different window configurations.
Record_2025-07-01-01-33-17.mp4
Full Changelog: v0.13.0...v0.14.0
Release notes
Open source →- feat: Add toning overlay effect to cupertino modal sheets (#403) - 2242916
- feat: Add delegateUnhandledOverscrollToChild flag to enable pull-to-refresh in sheets (#402) - 4c40073
- fix: Sheet position not update when app window resized (#400) - a8ea080
See the release note for more details.
-
0.13.016 Jun 2025Release notes
Open source →- feat: Add SheetScrollHandlingBehavior for precise control over scroll gesture handling (#393) - ee7f2a6
- feat: Add utility functions to show modal sheets (#380) - 25a901c
See the release note for more details.
-
0.12.019 May 2025Release notes
Open source →- feat: Add SheetPopScope to enable/disable the swipe gesture in modals from within build method (#359) - 6766534
- fix: Crashes when popping a non-modal sheet route just below a modal sheet route (#357) - cb9a174
See the release note for more details.
-
0.11.512 May 2025 -
0.11.405 May 2025Release notes
Open source →- fix: Assertion error when push CupertinoModalSheetRoute during closing animation (#347) - 0dbf6ee
- fix: Changing swipeDismissible dynamically causes a layout error (#344) - 3aeb05b
See the release note for more details.
-
0.11.321 Apr 2025Release notes
Open source →- fix: PagedSheet cannot be dragged when the drag starts at shared top/bottom bar built in builder callback (#323) - 2ba8d35
- fix: Unstable route transition in PagedSheet when pop a route during snapping animation (#322) - 62e96ee
- fix: PagedSheet ignores initialOffset when using auto_route and the first page is fullscreen (#321) - cdecf41
See the release note for more details.
-
0.11.217 Apr 2025Release notes
Open source →- fix: Bottom bar is hidden despite
BottomBarVisibility.always(ignoreBottomInset: true)(#313) - faa7883
See the release note for more details.
- fix: Bottom bar is hidden despite
-
0.11.113 Apr 2025 -
0.11.005 Apr 2025Release notes
Open source →This version contains breaking changes. See the migration guide for more details.
[!IMPORTANT] Version 0.11.x requires Flutter SDK version 3.27.0 or higher.
Bug fixes
- Question about sheet draggable #300
StickyBottomBarVisibilitypositioned incorrectly for constrained sheets #297- StickyBottomBarVisibility bottom bar hidden when used in navigation #292
- Using
go_router.go()method to close a sheet don't seems to reset animation state #211
New features
- Add option to stretch actual sheet height when overdragging #286
- Add
marginproperty to sheet widget #282 - Support iOS native modal sheet stretching behavior #169
- Support transparent space around sheet #76
Improvements
- Reimplement
CupertinoModalSheetRouteandPagewithModalRoute.delegatedTransition#293 - Merge
ScrollableSheetandDraggableSheetinto a single widget to simplify the API and codebase #285 - Support shared bottom & top bars in
NavigationSheet#280 - Make sheet size independent of its child size #278
- Refine sheet structure and public APIs #276
- Make
NavigationSheetindependent ofNavigatorObserver#172
-
0.10.219 Oct 2024Nothing published for this version
-
0.10.109 Oct 2024Nothing published for this version
-
0.10.027 Sep 2024Release notes
Open source →This version contains breaking changes. See the migration guide for more details.
- Fix: Touch is ignored issue not fixed for top edge (#212)
- Fix: Closing keyboard slows down snapping animation (#193)
- Fix: Dynamically changing sheet height doesn't respect snapping constraints (#226)
- Fix: Snapping effect doesn't work when closing keyboard on non-fullscreen sheet (#192)
- Fix: Unwanted bouncing when opening or closing the on-screen keyboard on ScrollableSheet (#245)
-
0.9.431 Aug 2024Release notes
Open source →- Add
SwipeDismissSensitivity, a way to customize sensitivity of swipe-to-dismiss action on modal sheet (#222)
- Add
-
0.9.318 Aug 2024Release notes
Open source →- Fix: Press-and-hold gesture in PageView doesn't stop momentum scrolling (#219)
-
0.9.214 Aug 2024Release notes
Open source →- Fix: Keyboard visibility changes disrupt route transition animation in NavigationSheet (#215)
-
0.9.130 Jul 2024Release notes
Open source →- Fix: Sometimes touch is ignored when scrollable sheet reaches edge (#209)
-
0.9.023 Jul 2024Release notes
Open source →This version contains some breaking changes. See the migration guide for more details.
- Dispatch a notification when drag is cancelled (#204)
- Prefer composition style for SheetKeyboardDismissible (#197)
- Fix: NavigationSheet throws assertion error when starting to scroll in list view during page transition (#199)
- Refactor notification dispatch mechanism (#202)
- Fix: Momentum scrolling continues despite press and hold in list view (#196)
- Refactor: Lift sheet context up (#201)
-
0.8.211 Jul 2024 -
0.8.122 Jun 2024Release notes
Open source →- Fix: Cupertino style modal transition not working with NavigationSheet (#182)
-
0.8.022 Jun 2024Release notes
Open source →This version contains some breaking changes. See the migration guide for more details.
- Make stretching behavior of StretchingSheetPhysics more customizable (#171)
- Rename "stretching" to "bouncing" (#173, #177)
- Fix: bouncing physics doesn't respect bounds where sheet can bounce (#178)
-
0.7.309 Jun 2024 -
0.7.209 Jun 2024Release notes
Open source →- Fix: Attaching SheetController to NavigationSheet causes "Null check operator used on a null value" (#151)
- Fix: SheetController attached to NavigationSheet always emits minPixels = 0.0 (#163)
-
0.7.101 Jun 2024Release notes
Open source →- Fix: Unwanted bouncing effect when opening keyboard on NavigationSheet (#153)
-
0.7.030 May 2024Release notes
Open source →This version contains some breaking changes. See the migration guide for more details.
- Fix: Unable to build with Flutter versions
< 3.22.0(#141) - Increase min SDK versions (#147)
- Remove basePhysics from SheetThemeData (#148)
- Fix: Unable to build with Flutter versions
-
0.6.026 May 2024 withdrawnRelease notes
Open source →This version contains some breaking changes. See the migration guide for more details.
- SheetDismissible not working with NavigationSheet (#137)
- Add a way to handle dismissing modal sheet events in one place (#130)
- SheetDismissible never trigger pull-to-dismiss action if ListView's scroll offset is halfway (#84)
- SheetDismissible not working with infinite looping scroll widget (#80)
- Can't overdrag modal sheet during pull-to-dismiss action (#53)
- Sometimes Pull-to-dismiss action is not triggered on modal sheet (#52)
-
0.5.306 May 2024Release notes
Open source →- Fix an assertion error when specific page transition scenarios in declarative 'NavigationSheet' (#94)
-
0.5.205 May 2024Release notes
Open source →- Fix a crash during the first build of
NavigationSheetwith a path that contains multiple routes such as/a/b/c(#109)
- Fix a crash during the first build of
-
0.5.104 May 2024Release notes
Open source →- Re-export
NavigationSheetRoutethat is unintentionally omitted in v0.5.0 (#110)
- Re-export
-
0.5.004 May 2024Release notes
Open source →This version contains some breaking changes. See the migration guide for more details.
- Attach default controller to sheet if not explicitly specified (#102)
- Reimplement core architecture (#106)
-
0.4.221 Apr 2024Release notes
Open source →- Add new SheetNotifications for drag events (#92)
- Add SheetTheme (#93)
- Add a way to specify default physics and default ancestor physics (#96)
-
0.4.120 Mar 2024Release notes
Open source →- Fix mistakes in the documentation of
BottomBarVisibilityandConditionalStickyBottomBarVisibilitywhich may mislead readers.
- Fix mistakes in the documentation of
-
0.4.020 Mar 2024 -
0.3.408 Mar 2024Release notes
Open source →- Fix crash when clicking on the modal barrier while dragging the sheet (#54)
-
0.3.328 Feb 2024 -
0.3.226 Feb 2024 -
0.3.125 Feb 2024 -
0.3.024 Feb 2024Release notes
Open source →- Add iOS 15 style modal sheet transition (#21)
- Improve the sheet motion while opening/closing the keyboard (#27)
- Add
settingsandfullscreenDialogparams to the constructors of modal sheet routes and pages (#28) - Physics improvements (#32)
- Add conditional modal sheet popping feature (#39)
- Remove
enablePullToDismiss(#44)
-
0.2.028 Jan 2024Release notes
Open source →- Add a showcase that uses TextFields in a sheet (#2)
- Dispatch a Notification when the sheet extent changes (#4)
- Add a way to dismiss the on-screen keyboard when the sheet is dragged (#8)
-
0.1.002 Jan 2024