FabioFiuza / scrollable_clean_calendar

A calendar with vertical scroll
MIT License
35 stars 57 forks source link

Add widgets #32

Closed pierinaaguirre closed 2 years ago

pierinaaguirre commented 2 years ago

It's possible to add widgets besides the calendar? I want to add a container above the calendar and a button, but when I try to implement it, I get an error.

rodrigodobbin commented 2 years ago

Hi @pierinaaguirre, I can't figure out exacly what happen. But you should Be able to use the calendar together with anything you want In your Page.

You could use de Column Widget to group any Widgets you want with our Calendar.

Here is an example with the stucture you told above.

Column(
  children: [
    Container(
      child: Text('My Container with a Text'),
    ),
    TextButton(
      child: Text('My Button'),
      onPressed: () {},
    ),
    ScrollableCleanCalendar(
      calendarController: calendarController,
      layout: Layout.BEAUTY,
      calendarCrossAxisSpacing: 0,
    ),
  ],
),

Tell me if this help. And thanks for your feedback

pierinaaguirre commented 2 years ago

Hello, I have copied the lines of code that you wrote, but I get the same error as always, it is the following: ======== Exception caught by rendering library ===================================================== The following assertion was thrown during performLayout(): 'package:flutter/src/rendering/object.dart': Failed assertion: line 1814 pos 12: '!_debugDoingThisLayout': is not true.

Either the assertion indicates an error in the framework itself, or we should provide substantially more information in this error message to help you determine and fix the underlying cause. In either case, please report this assertion by filing a bug on GitHub: https://github.com/flutter/flutter/issues/new?template=2_bug.md

The relevant error-causing widget was: Scaffold Scaffold:file:///C:/Users/Lenovo/Documents/rento_getx2/lib/app/menu/ui/pages/calendario_busqueda.dart:163:12 When the exception was thrown, this was the stack:

2 RenderObject.layout (package:flutter/src/rendering/object.dart:1814:12)

3 MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:171:12)

4 _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:1005:7)

5 MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:240:7)

6 RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:403:14)

7 RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)

8 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)

9 RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)

10 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)

11 _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1376:11)

12 RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)

13 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)

14 RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)

15 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)

16 RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)

17 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)

18 RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)

19 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)

20 RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)

21 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)

22 RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)

23 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)

24 RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)

25 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)

26 RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)

27 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)

28 RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)

29 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)

30 RenderOffstage.performLayout (package:flutter/src/rendering/proxy_box.dart:3430:13)

31 RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)

32 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)

33 RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)

34 _RenderTheatre.performLayout (package:flutter/src/widgets/overlay.dart:751:15)

35 RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)

36 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)

37 RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)

38 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)

39 RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)

40 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)

41 RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)

42 _RenderTheatre.performLayout (package:flutter/src/widgets/overlay.dart:751:15)

43 RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)

44 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)

45 RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)

46 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)

47 _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1376:11)

48 RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)

49 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)

50 RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)

51 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)

52 RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)

53 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)

54 RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)

55 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)

56 RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)

57 RenderView.performLayout (package:flutter/src/rendering/view.dart:165:14)

58 RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1731:7)

59 PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:887:18)

60 RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:497:19)

61 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:883:13)

62 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:363:5)

63 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1144:15)

64 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1081:9)

65 SchedulerBinding.scheduleWarmUpFrame. (package:flutter/src/scheduler/binding.dart:862:7)

(elided 6 frames from class _AssertionError, class _RawReceivePortImpl, class _Timer, and dart:async-patch) The following RenderObject was being processed when the exception was fired: RenderCustomMultiChildLayoutBox#a8110 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE ... needs compositing ... parentData: (can use size) ... constraints: BoxConstraints(w=360.0, h=784.0) ... size: Size(360.0, 784.0) RenderObject: RenderCustomMultiChildLayoutBox#a8110 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE needs compositing parentData: (can use size) constraints: BoxConstraints(w=360.0, h=784.0) size: Size(360.0, 784.0) ... child 1: RenderFlex#b15fe relayoutBoundary=up1 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE ... needs compositing ... parentData: offset=Offset(0.0, 0.0); id=_ScaffoldSlot.body (can use size) ... constraints: BoxConstraints(0.0<=w<=360.0, 0.0<=h<=690.0) ... size: MISSING ... direction: vertical ... mainAxisAlignment: start ... mainAxisSize: max ... crossAxisAlignment: center ... verticalDirection: down ... child 1: RenderParagraph#ab35c relayoutBoundary=up2 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE ... parentData: offset=Offset(0.0, 0.0); flex=null; fit=null (can use size) ... constraints: BoxConstraints(0.0<=w<=360.0, 0.0<=h<=Infinity) ... size: Size(154.0, 16.0) ... textAlign: start ... textDirection: ltr ... softWrap: wrapping at box width ... overflow: clip ... locale: en_US ... maxLines: unlimited ... text: TextSpan ... debugLabel: (englishLike bodyMedium 2014).merge(blackMountainView bodyMedium) ... inherit: false ... color: Color(0xdd000000) ... family: Roboto ... size: 14.0 ... weight: 400 ... baseline: alphabetic ... decoration: TextDecoration.none ... "My Container with a Text" ... child 2: RenderSemanticsAnnotations#489ea relayoutBoundary=up2 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE ... needs compositing ... parentData: offset=Offset(0.0, 0.0); flex=null; fit=null (can use size) ... constraints: BoxConstraints(0.0<=w<=360.0, 0.0<=h<=Infinity) ... semantic boundary ... size: Size(81.0, 48.0) ... child: _RenderInputPadding#df601 relayoutBoundary=up3 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE ... needs compositing ... parentData: (can use size) ... constraints: BoxConstraints(0.0<=w<=360.0, 0.0<=h<=Infinity) ... size: Size(81.0, 48.0) ... child: RenderConstrainedBox#3f6a5 relayoutBoundary=up4 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE ... needs compositing ... parentData: offset=Offset(0.0, 6.0) (can use size) ... constraints: BoxConstraints(0.0<=w<=360.0, 0.0<=h<=Infinity) ... size: Size(81.0, 36.0) ... additionalConstraints: BoxConstraints(64.0<=w<=Infinity, 36.0<=h<=Infinity) ... child 3: RenderRepaintBoundary#26250 relayoutBoundary=up2 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE ... needs compositing ... parentData: offset=Offset(0.0, 0.0); flex=null; fit=null (can use size) ... constraints: BoxConstraints(0.0<=w<=360.0, 0.0<=h<=Infinity) ... layer: OffsetLayer#ad912 DETACHED ... handles: 1 ... offset: Offset(0.0, 0.0) ... size: MISSING ... metrics: 0.0% useful (1 bad vs 0 good) ... diagnosis: insufficient data to draw conclusion (less than five repaints) ... child: RenderCustomPaint#e4160 relayoutBoundary=up3 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE ... needs compositing ... parentData: (can use size) ... constraints: BoxConstraints(0.0<=w<=360.0, 0.0<=h<=Infinity) ... size: MISSING ... painter: null ... foregroundPainter: _GlowingOverscrollIndicatorPainter(_GlowController(color: Color(0xff2196f3), axis: vertical), _GlowController(color: Color(0xff2196f3), axis: vertical)) ... child: RenderRepaintBoundary#e4b45 relayoutBoundary=up4 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE ... needs compositing ... parentData: (can use size) ... constraints: BoxConstraints(0.0<=w<=360.0, 0.0<=h<=Infinity) ... size: MISSING ... usefulness ratio: no metrics collected yet (never painted) ... child 2: RenderConstrainedBox#9bd92 relayoutBoundary=up1 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE ... needs compositing ... parentData: offset=Offset(0.0, 0.0); id=_ScaffoldSlot.appBar (can use size) ... constraints: BoxConstraints(w=360.0, 0.0<=h<=784.0) ... size: Size(360.0, 94.0) ... additionalConstraints: BoxConstraints(0.0<=w<=Infinity, 0.0<=h<=94.0) ... child: RenderDecoratedBox#8832b relayoutBoundary=up2 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE ... needs compositing ... parentData: (can use size) ... constraints: BoxConstraints(w=360.0, 0.0<=h<=94.0) ... size: Size(360.0, 94.0) ... decoration: BoxDecoration ... color: Color(0xff364eff) ... configuration: ImageConfiguration(bundle: PlatformAssetBundle#f27a0(), devicePixelRatio: 1.0, locale: en_US, textDirection: TextDirection.ltr, platform: android) ... child: RenderPadding#85361 relayoutBoundary=up3 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE ... needs compositing ... parentData: (can use size) ... constraints: BoxConstraints(w=360.0, 0.0<=h<=94.0) ... size: Size(360.0, 94.0) ... padding: EdgeInsets(0.0, 24.0, 0.0, 0.0) ... textDirection: ltr ... child: RenderPadding#0cfdb relayoutBoundary=up4 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE ... needs compositing ... parentData: offset=Offset(0.0, 24.0) (can use size) ... constraints: BoxConstraints(w=360.0, 0.0<=h<=70.0) ... size: Size(360.0, 70.0) ... padding: EdgeInsets(10.0, 20.0, 0.0, 20.0) ... textDirection: ltr ... child 3: RenderStack#16030 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE ... parentData: offset=Offset(0.0, 0.0); id=_ScaffoldSlot.floatingActionButton ... constraints: MISSING ... size: MISSING ... alignment: Alignment.centerRight ... textDirection: ltr ... fit: loose ... child 1: RenderTransform#15da6 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE ... parentData: not positioned; offset=Offset(0.0, 0.0) ... constraints: MISSING ... size: MISSING ... transform matrix: [0] 0.0,0.0,0.0,0.0 [1] 0.0,0.0,0.0,0.0 [2] 0.0,0.0,1.0,0.0 [3] 0.0,0.0,0.0,1.0 ... origin: null ... alignment: Alignment.center ... textDirection: ltr ... transformHitTests: true ... child: RenderTransform#00c92 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE ... parentData: ... constraints: MISSING ... size: MISSING ... transform matrix: [0] 0.7,0.7,0.0,0.0 [1] -0.7,0.7,0.0,0.0 [2] 0.0,0.0,1.0,0.0 [3] 0.0,0.0,0.0,1.0 ... origin: null ... alignment: Alignment.center ... textDirection: ltr ... transformHitTests: true

======== Exception caught by rendering library ===================================================== The following assertion was thrown during performLayout(): RenderBox was not laid out: RenderViewport#584c9 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE 'package:flutter/src/rendering/box.dart': Failed assertion: line 1982 pos 12: 'hasSize'

Either the assertion indicates an error in the framework itself, or we should provide substantially more information in this error message to help you determine and fix the underlying cause. In either case, please report this assertion by filing a bug on GitHub: https://github.com/flutter/flutter/issues/new?template=2_bug.md

The relevant error-causing widget was: ScrollableCleanCalendar ScrollableCleanCalendar:file:///C:/Users/Lenovo/Documents/rento_getx2/lib/app/menu/ui/pages/calendario_busqueda.dart:78:24 When the exception was thrown, this was the stack:

2 RenderBox.size (package:flutter/src/rendering/box.dart:1982:12)

3 RenderViewport.performLayout (package:flutter/src/rendering/viewport.dart:1453:39)

4 RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1731:7)

5 PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:887:18)

6 RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:497:19)

7 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:883:13)

8 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:363:5)

9 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1144:15)

10 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1081:9)

11 SchedulerBinding.scheduleWarmUpFrame. (package:flutter/src/scheduler/binding.dart:862:7)

(elided 6 frames from class _AssertionError, class _RawReceivePortImpl, class _Timer, and dart:async-patch) The following RenderObject was being processed when the exception was fired: RenderViewport#584c9 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE ... needs compositing ... parentData: (can use size) ... constraints: BoxConstraints(0.0<=w<=360.0, 0.0<=h<=Infinity) ... size: MISSING ... axisDirection: down ... crossAxisDirection: right ... offset: ScrollPositionWithSingleContext#b623e(offset: 0.0, range: null..null, viewport: null, ScrollableState, AlwaysScrollableScrollPhysics -> ClampingScrollPhysics -> RangeMaintainingScrollPhysics, IdleScrollActivity#41c81, ScrollDirection.idle) ... anchor: 0.0 RenderObject: RenderViewport#584c9 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE needs compositing parentData: (can use size) constraints: BoxConstraints(0.0<=w<=360.0, 0.0<=h<=Infinity) size: MISSING axisDirection: down crossAxisDirection: right offset: ScrollPositionWithSingleContext#b623e(offset: 0.0, range: null..null, viewport: null, ScrollableState, AlwaysScrollableScrollPhysics -> ClampingScrollPhysics -> RangeMaintainingScrollPhysics, IdleScrollActivity#41c81, ScrollDirection.idle) anchor: 0.0 ... center child: RenderSliverPadding#bd48e NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE ... parentData: paintOffset=Offset(0.0, 0.0) ... constraints: MISSING ... geometry: null ... padding: EdgeInsets(16.0, 32.0, 16.0, 32.0) ... textDirection: ltr ... child: RenderSliverList#3c066 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE ... parentData: paintOffset=Offset(0.0, 0.0) ... constraints: MISSING ... geometry: null ... no children current live

Thanks.

rodrigodobbin commented 2 years ago

Hey @pierinaaguirre I test some things here, and I think I found the problem.

Put our calendar Widget inside a Expanded() Widget. Like This:

Expanded(
  child: ScrollableCleanCalendar(
    calendarController: calendarController,
    layout: Layout.BEAUTY,
    calendarCrossAxisSpacing: 0,
  ),
),

See the image from my test. Cya.

Simulator Screen Shot - iPhone 13 - 2022-05-09 at 11 35 13

pierinaaguirre commented 2 years ago

That solved my problem, thank you!!