caglarylmz / slide_digital_clock

✨A clean and lightweight Digital Clock Widget For Flutter
MIT License
18 stars 15 forks source link

_SpinnerTextState created a Ticker via its SingleTickerProviderStateMixin, but at the time dispose() was called on the mixin, that Ticker was still active. #3

Closed nunuh89 closed 3 years ago

nunuh89 commented 3 years ago

The offending ticker was: Ticker(created by _SpinnerTextState#2a968(lifecycle state: created)) The stack trace when the Ticker was actually created was:

0 new Ticker. (package:flutter/src/scheduler/ticker.dart:67:40)

1 new Ticker (package:flutter/src/scheduler/ticker.dart:69:6)

2 SingleTickerProviderStateMixin.createTicker (package:flutter/src/widgets/ticker_provider.dart:129:15)

3 new AnimationController (package:flutter/src/animation/animation_controller.dart:247:21)

4 _SpinnerTextState.initState (package:bhava_lab/ui/common/helpers/spinner_text.dart:26:40)

5 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4812:57)

6 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4649:5)

... Normal element mounting (16 frames)

22 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3615:14)

23 MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6282:32)

... Normal element mounting (24 frames)

47 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3615:14)

48 MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6282:32)

49 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3615:14)

50 MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6282:32)

... Normal element mounting (7 frames)

57 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3615:14)

58 MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6282:32)

59 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3615:14)

60 MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6282:32)

... Normal element mounting (54 frames)

114 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3615:14)

115 Element.updateChild (package:flutter/src/widgets/framework.dart:3380:18)

116 SliverMultiBoxAdaptorElement.updateChild (package:flutter/src/widgets/sliver.dart:1163:37)

117 SliverMultiBoxAdaptorElement.createChild. (package:flutter/src/widgets/sliver.dart:1148:20)

118 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2730:19)

119 SliverMultiBoxAdaptorElement.createChild (package:flutter/src/widgets/sliver.dart:1141:12)

120 RenderSliverMultiBoxAdaptor._createOrObtainChild. (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:350:23)

121 RenderObject.invokeLayoutCallback. (package:flutter/src/rendering/object.dart:1883:59)

122 PipelineOwner._enableMutationsToDirtySubtrees (package:flutter/src/rendering/object.dart:915:15)

123 RenderObject.invokeLayoutCallback (package:flutter/src/rendering/object.dart:1883:14)

124 RenderSliverMultiBoxAdaptor._createOrObtainChild (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:339:5)

125 RenderSliverMultiBoxAdaptor.addInitialChild (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:423:5)

126 RenderSliverList.performLayout (package:flutter/src/rendering/sliver_list.dart:79:12)

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

128 RenderSliverEdgeInsetsPadding.performLayout (package:flutter/src/rendering/sliver_padding.dart:139:12)

129 RenderSliverPadding.performLayout (package:flutter/src/rendering/sliver_padding.dart:373:11)

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

131 RenderViewportBase.layoutChildSequence (package:flutter/src/rendering/viewport.dart:508:13)

132 RenderShrinkWrappingViewport._attemptLayout (package:flutter/src/rendering/viewport.dart:1909:12)

133 RenderShrinkWrappingViewport.performLayout (package:flutter/src/rendering/viewport.dart:1867:20)

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

135 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:14)

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

137 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:14)

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

139 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:14)

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

141 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:14)

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

143 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:14)

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

145 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:14)

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

147 RenderFlex.performLayout (package:flutter/src/rendering/flex.dart:831:17)

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

149 RenderFlex.performLayout (package:flutter/src/rendering/flex.dart:831:17)

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

151 RenderPositionedBox.performLayout (package:flutter/src/rendering/shifted_box.dart:395:14)

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

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

154 _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:893:7)

155 MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:243:7)

156 RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:402:14)

157 RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1634:7)

158 PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:884:18)

159 RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:443:19)

160 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:907:13)

161 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:309:5)

162 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1117:15)

163 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1055:9)

164 SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:971:5)

168 _invoke (dart:ui/hooks.dart:251:10)

169 _drawFrame (dart:ui/hooks.dart:209:3)

(elided 3 frames from dart:async) When the exception was thrown, this was the stack

0 SingleTickerProviderStateMixin.dispose.

package:flutter/…/widgets/ticker_provider.dart:142

1 SingleTickerProviderStateMixin.dispose

package:flutter/…/widgets/ticker_provider.dart:156

2 _SpinnerTextState.dispose

package:bhava_lab/…/helpers/spinner_text.dart:48

3 StatefulElement.unmount

package:flutter/…/widgets/framework.dart:4901

4 _InactiveElements._unmount

package:flutter/…/widgets/framework.dart:2026 ... ════════════════════════════════════════════════════════════════════════════════

smnz commented 3 years ago

Bump. I have a similar error. It looks like a timer isn't being disposed correctly:

The following assertion was thrown while finalizing the widget tree:
_SpinnerTextState#bd7b7(ticker active) was disposed with an active Ticker.

_SpinnerTextState created a Ticker via its SingleTickerProviderStateMixin, but at the time dispose() was called on the mixin, that Ticker was still active. The Ticker must be disposed before calling super.dispose().

Tickers used by AnimationControllers should be disposed by calling dispose() on the AnimationController itself. Otherwise, the ticker will leak.
nunuh89 commented 3 years ago

@smnz Check the two PRs of this repo. I changed the code accordingly in my app, and now it works fine.

smnz commented 3 years ago

@nunuh89 Oh that's great. Is it going to be pushed upstream to pub.dev? I'm using version 1.0.0 and they don't have a newer one there.

nunuh89 commented 3 years ago

@smnz this repo doesn't seem to be maintained in the past 11 months. hope the fixes will be in a release on pub.dev. In the meantime, I would recommend just add these two lines of dispose() manually to your project.

caglarylmz commented 3 years ago

Thanks all..