apptreesoftware/flutter_calendar

Expanded calendar UI issue

Closed this issue · 6 comments

To reproduce:
Expand the calendar
Navigate with chevron to a month where the amount of rows is less than current month
Click date on last row
Deflate calendar (un-expand?)
Calendar is no longer expandable

I/flutter ( 2568): ══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
I/flutter ( 2568): The following assertion was thrown during performLayout():
I/flutter ( 2568): SliverGeometry is not valid: The "maxPaintExtent" is less than the "paintExtent".
I/flutter ( 2568): The maxPaintExtent is 229.38775510204079, but the paintExtent is 229.3877551020408. Maybe you have
I/flutter ( 2568): fallen prey to floating point rounding errors, and should explicitly apply the min() or max()
I/flutter ( 2568): functions, or the clamp() method, to the paintExtent? By definition, a sliver can't paint more than
I/flutter ( 2568): the maximum that it can paint!
I/flutter ( 2568): The RenderSliver that returned the offending geometry was:
I/flutter ( 2568): RenderSliverGrid#3db89 relayoutBoundary=up32 NEEDS-LAYOUT
I/flutter ( 2568): creator: SliverGrid ← SliverPadding ← ShrinkWrappingViewport ← _ScrollableScope ←
I/flutter ( 2568): IgnorePointer-[GlobalKey#91a81] ← Semantics ← Listener ← _GestureSemantics ←
I/flutter ( 2568): RawGestureDetector-[LabeledGlobalKey#b422a] ←
I/flutter ( 2568): _ExcludableScrollSemantics-[GlobalKey#cd878] ← RepaintBoundary ← CustomPaint ← ⋯
I/flutter ( 2568): parentData: paintOffset=Offset(0.0, 0.0) (can use size)
I/flutter ( 2568): constraints: SliverConstraints(AxisDirection.down, GrowthDirection.forward, ScrollDirection.idle,
I/flutter ( 2568): scrollOffset: 0.0, remainingPaintExtent: Infinity, crossAxisExtent: 401.4, crossAxisDirection:
I/flutter ( 2568): AxisDirection.right, viewportMainAxisExtent: Infinity)
I/flutter ( 2568): geometry: SliverGeometry(scrollExtent: 229.4, paintExtent: 229.4, maxPaintExtent: 229.4,
I/flutter ( 2568): hasVisualOverflow: true)
I/flutter ( 2568): currently live children: 0 to 41
I/flutter ( 2568):
I/flutter ( 2568): When the exception was thrown, this was the stack:
I/flutter ( 2568): #0 SliverGeometry.debugAssertIsValid..verify (package:flutter/src/rendering/sliver.dart:542)
I/flutter ( 2568): #1 SliverGeometry.debugAssertIsValid. (package:flutter/src/rendering/sliver.dart:559)
I/flutter ( 2568): #2 SliverGeometry.debugAssertIsValid (package:flutter/src/rendering/sliver.dart:571)
I/flutter ( 2568): #3 RenderSliver.debugAssertDoesMeetConstraints (package:flutter/src/rendering/sliver.dart:925)
I/flutter ( 2568): #4 RenderObject.layout. (package:flutter/src/rendering/object.dart:1572)
I/flutter ( 2568): #5 RenderObject.layout (package:flutter/src/rendering/object.dart:1572)
I/flutter ( 2568): #6 RenderSliverPadding.performLayout (package:flutter/src/rendering/sliver_padding.dart:182)
I/flutter ( 2568): #7 RenderObject.layout (package:flutter/src/rendering/object.dart:1570)
I/flutter ( 2568): #8 RenderViewportBase.layoutChildSequence (package:flutter/src/rendering/viewport.dart:285)
I/flutter ( 2568): #9 RenderShrinkWrappingViewport._attemptLayout (package:flutter/src/rendering/viewport.dart:1335)
I/flutter ( 2568): #10 RenderShrinkWrappingViewport.performLayout (package:flutter/src/rendering/viewport.dart:1298)
I/flutter ( 2568): #11 RenderObject.layout (package:flutter/src/rendering/object.dart:1570)
I/flutter ( 2568): #12 RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:107)
I/flutter ( 2568): #13 RenderObject.layout (package:flutter/src/rendering/object.dart:1570)
I/flutter ( 2568): #14 RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:107)
I/flutter ( 2568): #15 RenderObject.layout (package:flutter/src/rendering/object.dart:1570)
I/flutter ( 2568): #16 RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:107)
I/flutter ( 2568): #17 RenderObject.layout (package:flutter/src/rendering/object.dart:1570)
I/flutter ( 2568): #18 RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:107)
I/flutter ( 2568): #19 RenderObject.layout (package:flutter/src/rendering/object.dart:1570)
I/flutter ( 2568): #20 RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:107)
I/flutter ( 2568): #21 RenderObject.layout (package:flutter/src/rendering/object.dart:1570)
I/flutter ( 2568): #22 RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:107)
I/flutter ( 2568): #23 RenderObject.layout (package:flutter/src/rendering/object.dart:1570)
I/flutter ( 2568): #24 RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:107)
I/flutter ( 2568): #25 RenderObject.layout (package:flutter/src/rendering/object.dart:1570)
I/flutter ( 2568): #26 RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:107)
I/flutter ( 2568): #27 RenderObject.layout (package:flutter/src/rendering/object.dart:1570)
I/flutter ( 2568): #28 RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:107)
I/flutter ( 2568): #29 RenderObject.layout (package:flutter/src/rendering/object.dart:1570)
I/flutter ( 2568): #30 RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:107)
I/flutter ( 2568): #31 RenderObject.layout (package:flutter/src/rendering/object.dart:1570)
I/flutter ( 2568): #32 RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:107)
I/flutter ( 2568): #33 RenderObject.layout (package:flutter/src/rendering/object.dart:1570)
I/flutter ( 2568): #34 RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:107)
I/flutter ( 2568): #35 RenderObject.layout (package:flutter/src/rendering/object.dart:1570)
I/flutter ( 2568): #36 RenderStack.performLayout (package:flutter/src/rendering/stack.dart:509)
I/flutter ( 2568): #37 RenderObject.layout (package:flutter/src/rendering/object.dart:1570)
I/flutter ( 2568): #38 RenderAnimatedSize.performLayout (package:flutter/src/rendering/animated_size.dart:172)
I/flutter ( 2568): #39 RenderObject.layout (package:flutter/src/rendering/object.dart:1570)
I/flutter ( 2568): #40 RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:107)
I/flutter ( 2568): #41 _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1138)
I/flutter ( 2568): #42 RenderObject.layout (package:flutter/src/rendering/object.dart:1570)
I/flutter ( 2568): #43 RenderFlex.performLayout (package:flutter/src/rendering/flex.dart:798)
I/flutter ( 2568): #44 RenderObject.layout (package:flutter/src/rendering/object.dart:1570)
I/flutter ( 2568): #45 RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:107)
I/flutter ( 2568): #46 RenderObject.layout (package:flutter/src/rendering/object.dart:1570)
I/flutter ( 2568): #47 RenderSliverList.performLayout.advance (package:flutter/src/rendering/sliver_list.dart:200)
I/flutter ( 2568): #48 RenderSliverList.performLayout (package:flutter/src/rendering/sliver_list.dart:233)
I/flutter ( 2568): #49 RenderObject.layout (package:flutter/src/rendering/object.dart:1570)
I/flutter ( 2568): #50 RenderSliverPadding.performLayout (package:flutter/src/rendering/sliver_padding.dart:182)
I/flutter ( 2568): #51 RenderObject.layout (package:flutter/src/rendering/object.dart:1570)
I/flutter ( 2568): #52 RenderViewportBase.layoutChildSequence (package:flutter/src/rendering/viewport.dart:285)
I/flutter ( 2568): #53 RenderShrinkWrappingViewport._attemptLayout (package:flutter/src/rendering/viewport.dart:1335)
I/flutter ( 2568): #54 RenderShrinkWrappingViewport.performLayout (package:flutter/src/rendering/viewport.dart:1298)
I/flutter ( 2568): #55 RenderObject.layout (package:flutter/src/rendering/object.dart:1570)
I/flutter ( 2568): #56 RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:107)
I/flutter ( 2568): #57 RenderObject.layout (package:flutter/src/rendering/object.dart:1570)
I/flutter ( 2568): #58 RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:107)
I/flutter ( 2568): #59 RenderObject.layout (package:flutter/src/rendering/object.dart:1570)
I/flutter ( 2568): #60 RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:107)
I/flutter ( 2568): #61 RenderObject.layout (package:flutter/src/rendering/object.dart:1570)
I/flutter ( 2568): #62 RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:107)
I/flutter ( 2568): #63 RenderObject.layout (package:flutter/src/rendering/object.dart:1570)
I/flutter ( 2568): #64 RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:107)
I/flutter ( 2568): #65 RenderObject.layout (package:flutter/src/rendering/object.dart:1570)
I/flutter ( 2568): #66 RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:107)
I/flutter ( 2568): #67 RenderObject.layout (package:flutter/src/rendering/object.dart:1570)
I/flutter ( 2568): #68 RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:107)
I/flutter ( 2568): #69 RenderObject.layout (package:flutter/src/rendering/object.dart:1570)
I/flutter ( 2568): #70 RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:107)
I/flutter ( 2568): #71 RenderObject.layout (package:flutter/src/rendering/object.dart:1570)
I/flutter ( 2568): #72 RenderPadding.performLayout (package:flutter/src/rendering/shifted_box.dart:199)
I/flutter ( 2568): #73 RenderObject.layout (package:flutter/src/rendering/object.dart:1570)
I/flutter ( 2568): #74 MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:124)
I/flutter ( 2568): #75 _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:256)
I/flutter ( 2568): #76 MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:194)
I/flutter ( 2568): #77 RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:338)
I/flutter ( 2568): #78 RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1445)
I/flutter ( 2568): #79 PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:709)
I/flutter ( 2568): #80 BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:270)
I/flutter ( 2568): #81 BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&RendererBinding&WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:622)
I/flutter ( 2568): #82 BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:208)
I/flutter ( 2568): #83 BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:990)
I/flutter ( 2568): #84 BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:930)
I/flutter ( 2568): #85 BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:842)
I/flutter ( 2568): #86 _invoke (file:///b/build/slave/Linux_Engine/build/src/flutter/lib/ui/hooks.dart:120)
I/flutter ( 2568): #87 _drawFrame (file:///b/build/slave/Linux_Engine/build/src/flutter/lib/ui/hooks.dart:109)
I/flutter ( 2568):
I/flutter ( 2568): The following RenderObject was being processed when the exception was fired:
I/flutter ( 2568): RenderSliverGrid#3db89 relayoutBoundary=up32 NEEDS-LAYOUT
I/flutter ( 2568): creator: SliverGrid ← SliverPadding ← ShrinkWrappingViewport ← _ScrollableScope ←
I/flutter ( 2568): IgnorePointer-[GlobalKey#91a81] ← Semantics ← Listener ← _GestureSemantics ←
I/flutter ( 2568): RawGestureDetector-[LabeledGlobalKey#b422a] ←
I/flutter ( 2568): _ExcludableScrollSemantics-[GlobalKey#cd878] ← RepaintBoundary ← CustomPaint ← ⋯
I/flutter ( 2568): parentData: paintOffset=Offset(0.0, 0.0) (can use size)
I/flutter ( 2568): constraints: SliverConstraints(AxisDirection.down, GrowthDirection.forward, ScrollDirection.idle,
I/flutter ( 2568): scrollOffset: 0.0, remainingPaintExtent: Infinity, crossAxisExtent: 401.4, crossAxisDirection:
I/flutter ( 2568): AxisDirection.right, viewportMainAxisExtent: Infinity)
I/flutter ( 2568): geometry: SliverGeometry(scrollExtent: 229.4, paintExtent: 229.4, maxPaintExtent: 229.4,
I/flutter ( 2568): hasVisualOverflow: true)
I/flutter ( 2568): currently live children: 0 to 41
I/flutter ( 2568): This RenderObject had the following descendants (showing up to depth 5):
I/flutter ( 2568): RenderRepaintBoundary#468c6
I/flutter ( 2568): RenderDecoratedBox#7ebb0
I/flutter ( 2568): RenderSemanticsGestureHandler#49306
I/flutter ( 2568): RenderPointerListener#44866
I/flutter ( 2568): RenderPositionedBox#4f1af
I/flutter ( 2568): RenderRepaintBoundary#db7bc
I/flutter ( 2568): RenderDecoratedBox#a7e93
I/flutter ( 2568): RenderSemanticsGestureHandler#2c181
I/flutter ( 2568): RenderPointerListener#ef637
I/flutter ( 2568): RenderPositionedBox#b1542
I/flutter ( 2568): RenderRepaintBoundary#189a9
I/flutter ( 2568): RenderDecoratedBox#505e8
I/flutter ( 2568): RenderSemanticsGestureHandler#1cb38
I/flutter ( 2568): RenderPointerListener#b1e1f
I/flutter ( 2568): RenderPositionedBox#d82bd
I/flutter ( 2568): RenderRepaintBoundary#6bbba
I/flutter ( 2568): RenderDecoratedBox#74e1a
I/flutter ( 2568): RenderSemanticsGestureHandler#f467d
I/flutter ( 2568): RenderPointerListener#45542
I/flutter ( 2568): RenderPositionedBox#518b7
I/flutter ( 2568): RenderRepaintBoundary#50317
I/flutter ( 2568): RenderDecoratedBox#798b5
I/flutter ( 2568): RenderSemanticsGestureHandler#e269e
I/flutter ( 2568): RenderPointerListener#93dc5
I/flutter ( 2568): RenderPositionedBox#70ef0
I/flutter ( 2568): ...(descendants list truncated after 25 lines)
I/flutter ( 2568): ════════════════════════════════════════════════════════════════════════════════════════════════════
I/flutter ( 2568): Another exception was thrown: SliverGeometry is not valid: The "maxPaintExtent" is less than the "paintExtent".
I/chatty ( 2568): uid=10080(innovation.showcaseapp) ui_thread identical 3 lines
I/flutter ( 2568): Another exception was thrown: SliverGeometry is not valid: The "maxPaintExtent" is less than the "paintExtent".
I/flutter ( 2568): Another exception was thrown: SliverGeometry is not valid: The "maxPaintExtent" is less than the "paintExtent".
I/chatty ( 2568): uid=10080(innovation.showcaseapp) ui_thread identical 24 lines
I/flutter ( 2568): Another exception was thrown: SliverGeometry is not valid: The "maxPaintExtent" is less than the "paintExtent".
I/flutter ( 2568): Another exception was thrown: SliverGeometry is not valid: The "maxPaintExtent" is less than the "paintExtent".
I/chatty ( 2568): uid=10080(innovation.showcaseapp) ui_thread identical 5 lines
I/flutter ( 2568): Another exception was thrown: SliverGeometry is not valid: The "maxPaintExtent" is less than the "paintExtent".

Any update? bump

@PiranhA-di I can't reproduce this, so I'm guessing it was fixed by one of the other issues I've fixed.

UI Expandability issue still exists, here is my layout

@OverRide
Widget build(BuildContext context) {
return new Theme(
data: new ThemeData(
accentColor: Colors.white,
brightness: Brightness.light,
buttonTheme: new ButtonThemeData(
height: 60.0,
minWidth: 225.0,
),
),
child: new Container(
child: new Card(
//padding: new EdgeInsets.fromLTRB(0.0, 20.0, 0.0, 0.0),
color: Colors.white,
child: new Calendar(
//onDateSelected: (date) => handleDate(date),
isExpandable: true,
)
)));
}

I'll try to give more specific reproduction instructions:

The date is currently 24th of April, the calendar is initially in collapse mode when the page loads up.
I click the down chevron to expand the calendar.
The calendar expands, all of April's dates are shown.
While the calendar is expanded, I click the next month or right chevron to navigate to the next month.
The month name does not update (it shows April when it should be May). (issue 1)
I collapse the calendar and it collapses successfully but still shows April and has the current date highlighted.
I can no longer expand the calendar properly. (issue 2)
When I try to expand it, the view stays the same (i.e shows the current week still) but upon "expansion" changes that to reflect the values that would be there when expanded, however it has not actually expanded.

Same problem only on android

Any chances to fix this? is it in program to fix this issue? @ericwindmill @PiranhA-di

rm3l commented

Hi there!
I had the same issue, but noticed that a related issue is still opened in Flutter repo: flutter/flutter#16125
FWIW, modifying the GridView childAspectRatio to 1.0 (instead of 1.5 ) appears to fix the issue for me.
I've submitted a PR #11 with this commit, but feel free to close it if this is not applicable in this case.