fujidaiti / smooth_sheets

Sheet widgets with smooth motion and great flexibility.
https://pub.dev/packages/smooth_sheets
MIT License
206 stars 20 forks source link

NavigationSheet throws assertion error when starting to scroll in list view during page transition #166

Closed fujidaiti closed 2 months ago

fujidaiti commented 3 months ago

Steps to reproduce

  1. Apply the patch below to tutorial/imperative_navigation_sheet.dart.
  2. Run the app and press the Next button.
  3. Start dragging in the list view and keep holding your finger until the transition is complete.
diff --git forkSrcPrefix/cookbook/lib/tutorial/imperative_navigation_sheet.dart forkDstPrefix/cookbook/lib/tutorial/imperative_navigation_sheet.dart
index df9a733e123d51e1703f87865f3aaf0c56e0d9b8..18874db5f833c4ae6cd556acd9228f32ce8eb4fe 100644
--- forkSrcPrefix/cookbook/lib/tutorial/imperative_navigation_sheet.dart
+++ forkDstPrefix/cookbook/lib/tutorial/imperative_navigation_sheet.dart
@@ -68,6 +68,7 @@ class _DraggablePage extends StatelessWidget {
   void navigateToScrollablePage(BuildContext context) {
     // Use ScrollableNavigationSheetRoute for a scrollable page.
     final route = ScrollableNavigationSheetRoute(
+      transitionDuration: const Duration(seconds: 1),
       builder: (context) {
         return const _ScrollablePage();
       },

https://github.com/fujidaiti/smooth_sheets/assets/68946713/2491e737-15b1-40b1-9366-26940ce11765

Error log ```console ════════ Exception caught by animation library ═════════════════════════════════ The following assertion was thrown while notifying status listeners for ProxyAnimation: 'package:smooth_sheets/src/foundation/sheet_extent.dart': Failed assertion: line 400 pos 16: 'currentDrag != null': is not true. When the exception was thrown, this was the stack: #2 SheetExtent.beginActivity (package:smooth_sheets/src/foundation/sheet_extent.dart:400:16) #3 NavigationSheetExtent.handleRouteTransition (package:smooth_sheets/src/navigation/navigation_sheet_extent.dart:34:9) #4 _NavigationSheetState.didChangeTransitionState (package:smooth_sheets/src/navigation/navigation_sheet.dart:45:35) #5 TransitionAwareStateMixin._notify (package:smooth_sheets/src/internal/transition_observer.dart:67:7) #6 TransitionAwareStateMixin.didPush.transitionStatusListener (package:smooth_sheets/src/internal/transition_observer.dart:94:13) #7 AnimationLocalStatusListenersMixin.notifyStatusListeners (package:flutter/src/animation/listener_helpers.dart:240:19) #8 AnimationLocalStatusListenersMixin.notifyStatusListeners (package:flutter/src/animation/listener_helpers.dart:240:19) #9 AnimationController._checkStatusChanged (package:flutter/src/animation/animation_controller.dart:841:7) #10 AnimationController._tick (package:flutter/src/animation/animation_controller.dart:857:5) #11 Ticker._tick (package:flutter/src/scheduler/ticker.dart:258:12) #12 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1392:15) #13 SchedulerBinding.handleBeginFrame. (package:flutter/src/scheduler/binding.dart:1235:11) #14 _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:633:13) #15 SchedulerBinding.handleBeginFrame (package:flutter/src/scheduler/binding.dart:1233:17) #16 SchedulerBinding._handleBeginFrame (package:flutter/src/scheduler/binding.dart:1150:5) #17 _invoke1 (dart:ui/hooks.dart:328:13) #18 PlatformDispatcher._beginFrame (dart:ui/platform_dispatcher.dart:397:5) #19 _beginFrame (dart:ui/hooks.dart:272:31) (elided 2 frames from class _AssertionError) The ProxyAnimation notifying status listeners was: AnimationController#43934(⏭ 1.000; paused; for ScrollableNavigationSheetRoute)➩ProxyAnimation ════════════════════════════════════════════════════════════════════════════════ Application finished. Exited. ```
fujidaiti commented 3 months ago

Should touch events be ignored during a page transition?

appinteractive commented 3 months ago

Should touch events be ignored during a page transition?

Would be the easiest fix I guess And solve a lot of potential issues from my prospective.