flutter_textfield_search icon indicating copy to clipboard operation
flutter_textfield_search copied to clipboard

[Question] ERROR: controller was used after being disposed...

Open omerdotdev opened this issue 3 years ago • 8 comments

This is strange behavior though. I am new to flutter and thought you might want to look.

I toggle TestFieldSearch widget on a button click. For example at App init widget show fine. then I do some task with textfield and when search is complete, setstate is called and widget disappear (which is fine, I hide the widget). But when I toggle it again to unhide it, it throws the error. (controller was used after being disposed...) which make sense as the widget is removed from widget tree. I tried setting the controller to final but result in error. but when I re-initialize the controller in build method. It works. Is this seems normal behavior of the controller to you or is it strange. One thing i can think of is to NOT to dispose because I am using a toggling case. or I reinitialize it in build(){ controller = (); return....}, Is there any more neat solution to this. Please advise. Thanks!

omerdotdev avatar Apr 25 '21 18:04 omerdotdev

Same issue here, even when you add it to a ListView it will redraw and dispose the controller. I had to do the same thing and reinitialize the controller in the build method. This however doesn’t happen with a regular textfield so I am not sure why this is being caused

Sadoge avatar May 12 '21 00:05 Sadoge

I'm going to be looking into this and will get back to you to see what I find after replicating the behavior. Thank you!

alexrindone avatar Jan 23 '22 02:01 alexrindone

I implemented TextFieldSearch class in a stateless widget and it fixed the problem

ol-cheesebeard avatar Jan 26 '22 21:01 ol-cheesebeard

I found that the controller I assign to the TextFieldSearch is disposed with the widget. Wouldn't it be better to leave the owner of the controller to dispose the controller? Yet, I don't understand why the TextFieldSearch is disposed during the use...

Marcolav avatar Apr 07 '22 19:04 Marcolav

Same issue. If your widget has not created the TextEditingController, you have no business disposing it. This is a serious design flaw. The issue is that this will lead to memory leak if a newer version of this widget does away with disposing the TextEditingController and it the widget that uses your widget get the updated package. Now, no one will be disposing the TextEditingController.

pryshrm avatar Aug 29 '22 15:08 pryshrm

I have the same issue.

Ernestolebni101 avatar Jun 12 '23 05:06 Ernestolebni101

======== Exception caught by widgets library ======================================================= The following assertion was thrown while finalizing the widget tree: A TextEditingController was used after being disposed.

Once you have called dispose() on a TextEditingController, it can no longer be used. When the exception was thrown, this was the stack: #0 ChangeNotifier._debugAssertNotDisposed. (package:flutter/src/foundation/change_notifier.dart:125:9) #1 ChangeNotifier._debugAssertNotDisposed (package:flutter/src/foundation/change_notifier.dart:131:6) #2 ChangeNotifier.dispose (package:flutter/src/foundation/change_notifier.dart:276:12) #3 _TextFieldSearchState.dispose (package:textfield_search/textfield_search.dart:214:23) #4 StatefulElement.unmount (package:flutter/src/widgets/framework.dart:5032:11) #5 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1914:13) #6 _InactiveElements._unmount. (package:flutter/src/widgets/framework.dart:1912:7) #7 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6202:14) #8 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1910:13) #9 _InactiveElements._unmount. (package:flutter/src/widgets/framework.dart:1912:7) #10 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4859:14) #11 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1910:13) #12 _InactiveElements._unmount. (package:flutter/src/widgets/framework.dart:1912:7) #13 MultiChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6314:16) #14 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1910:13) #15 _InactiveElements._unmount. (package:flutter/src/widgets/framework.dart:1912:7) #16 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6202:14) #17 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1910:13) #18 _InactiveElements._unmount. (package:flutter/src/widgets/framework.dart:1912:7) #19 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4859:14) #20 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1910:13) #21 _InactiveElements._unmount. (package:flutter/src/widgets/framework.dart:1912:7) #22 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6202:14) #23 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1910:13) #24 _InactiveElements._unmount. (package:flutter/src/widgets/framework.dart:1912:7) #25 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6202:14) #26 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1910:13) #27 _InactiveElements._unmount. (package:flutter/src/widgets/framework.dart:1912:7) #28 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6202:14) #29 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1910:13) #30 _InactiveElements._unmount. (package:flutter/src/widgets/framework.dart:1912:7) #31 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6202:14) #32 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1910:13) #33 _InactiveElements._unmount. (package:flutter/src/widgets/framework.dart:1912:7) #34 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6202:14) #35 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1910:13) #36 _InactiveElements._unmount. (package:flutter/src/widgets/framework.dart:1912:7) #37 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4859:14) #38 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1910:13) #39 _InactiveElements._unmount. (package:flutter/src/widgets/framework.dart:1912:7) #40 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6202:14) #41 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1910:13) #42 _InactiveElements._unmount. (package:flutter/src/widgets/framework.dart:1912:7) #43 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4859:14) #44 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1910:13) #45 _InactiveElements._unmount. (package:flutter/src/widgets/framework.dart:1912:7) #46 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6202:14) #47 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1910:13) #48 _InactiveElements._unmount. (package:flutter/src/widgets/framework.dart:1912:7) #49 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4859:14) #50 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1910:13) #51 _InactiveElements._unmount. (package:flutter/src/widgets/framework.dart:1912:7) #52 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6202:14) #53 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1910:13) #54 _InactiveElements._unmount. (package:flutter/src/widgets/framework.dart:1912:7) #55 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6202:14) #56 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1910:13) #57 _InactiveElements._unmount. (package:flutter/src/widgets/framework.dart:1912:7) #58 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6202:14) #59 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1910:13) #60 _InactiveElements._unmount. (package:flutter/src/widgets/framework.dart:1912:7) #61 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4859:14) #62 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1910:13) #63 _InactiveElements._unmount. (package:flutter/src/widgets/framework.dart:1912:7) #64 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4859:14) #65 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1910:13) #66 _InactiveElements._unmount. (package:flutter/src/widgets/framework.dart:1912:7) #67 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4859:14) #68 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1910:13) #69 _InactiveElements._unmount. (package:flutter/src/widgets/framework.dart:1912:7) #70 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4859:14) #71 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1910:13) #72 _InactiveElements._unmount. (package:flutter/src/widgets/framework.dart:1912:7) #73 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4859:14) #74 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1910:13) #75 _InactiveElements._unmount. (package:flutter/src/widgets/framework.dart:1912:7) #76 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4859:14) #77 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1910:13) #78 _InactiveElements._unmount. (package:flutter/src/widgets/framework.dart:1912:7) #79 MultiChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6314:16) #80 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1910:13) #81 _InactiveElements._unmount. (package:flutter/src/widgets/framework.dart:1912:7) #82 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4859:14) #83 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1910:13) #84 _InactiveElements._unmount. (package:flutter/src/widgets/framework.dart:1912:7) #85 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4859:14) #86 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1910:13) #87 _InactiveElements._unmount. (package:flutter/src/widgets/framework.dart:1912:7) #88 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4859:14) #89 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1910:13) #90 _InactiveElements._unmount. (package:flutter/src/widgets/framework.dart:1912:7) #91 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4859:14) #92 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1910:13) #93 _InactiveElements._unmount. (package:flutter/src/widgets/framework.dart:1912:7) #94 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6202:14) #95 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1910:13) #96 _InactiveElements._unmount. (package:flutter/src/widgets/framework.dart:1912:7) #97 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6202:14) #98 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1910:13) #99 _InactiveElements._unmount. (package:flutter/src/widgets/framework.dart:1912:7) #100 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4859:14) #101 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1910:13) #102 _InactiveElements._unmount. (package:flutter/src/widgets/framework.dart:1912:7) #103 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4859:14) #104 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1910:13) #105 _InactiveElements._unmount. (package:flutter/src/widgets/framework.dart:1912:7) #106 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4859:14) #107 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1910:13) #108 _InactiveElements._unmount. (package:flutter/src/widgets/framework.dart:1912:7) #109 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4859:14) #110 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1910:13) #111 ListIterable.forEach (dart:_internal/iterable.dart:39:13) #112 _InactiveElements._unmountAll (package:flutter/src/widgets/framework.dart:1923:25) #113 BuildOwner.lockState (package:flutter/src/widgets/framework.dart:2516:15) #114 BuildOwner.finalizeTree (package:flutter/src/widgets/framework.dart:2932:7) #115 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:893:19) #116 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:370:5) #117 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1146:15) #118 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1083:9) #119 SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:997:5) #123 _invoke (dart:ui/hooks.dart:151:10) #124 PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:308:5) #125 _drawFrame (dart:ui/hooks.dart:115:31) (elided 3 frames from dart:async)

I/TRuntime.CctTransportBackend(32572): Making request to: https://firebaselogging-pa.googleapis.com/v1/firelog/legacy/batchlog I/TRuntime.CctTransportBackend(32572): Status Code: 200

======== Exception caught by widgets library ======================================================= The following assertion was thrown while dispatching notifications for FocusManager: Looking up a deactivated widget's ancestor is unsafe.

At this point the state of the widget's element tree is no longer stable.

To safely refer to a widget's ancestor in its dispose() method, save a reference to the ancestor by calling dependOnInheritedWidgetOfExactType() in the widget's didChangeDependencies() method.

When the exception was thrown, this was the stack: #0 Element._debugCheckStateIsActiveForAncestorLookup. (package:flutter/src/widgets/framework.dart:4186:9) #1 Element._debugCheckStateIsActiveForAncestorLookup (package:flutter/src/widgets/framework.dart:4200:6) #2 Element.dependOnInheritedWidgetOfExactType (package:flutter/src/widgets/framework.dart:4215:12) #3 MediaQuery.maybeOf (package:flutter/src/widgets/media_query.dart:941:20) #4 _InkResponseState._shouldShowFocus (package:flutter/src/material/ink_well.dart:939:44) #5 _InkResponseState._updateFocusHighlights (package:flutter/src/material/ink_well.dart:955:21) #6 _InkResponseState._handleFocusHighlightModeChange. (package:flutter/src/material/ink_well.dart:934:7) #7 State.setState (package:flutter/src/widgets/framework.dart:1109:30) #8 _InkResponseState._handleFocusHighlightModeChange (package:flutter/src/material/ink_well.dart:933:5) #9 FocusManager._notifyHighlightModeListeners (package:flutter/src/widgets/focus_manager.dart:1610:19) #10 FocusManager._updateHighlightMode (package:flutter/src/widgets/focus_manager.dart:1586:7) #11 FocusManager._handleKeyMessage (package:flutter/src/widgets/focus_manager.dart:1667:5) #12 KeyEventManager._dispatchKeyMessage (package:flutter/src/services/hardware_keyboard.dart:828:34) #13 KeyEventManager.handleRawKeyMessage (package:flutter/src/services/hardware_keyboard.dart:875:15) #14 BasicMessageChannel.setMessageHandler. (package:flutter/src/services/platform_channel.dart:77:49) #15 BasicMessageChannel.setMessageHandler. (package:flutter/src/services/platform_channel.dart:76:47) #16 _DefaultBinaryMessenger.setMessageHandler. (package:flutter/src/services/binding.dart:380:35) #17 _DefaultBinaryMessenger.setMessageHandler. (package:flutter/src/services/binding.dart:377:46) #18 _invoke2. (dart:ui/hooks.dart:190:15) #22 _invoke2 (dart:ui/hooks.dart:189:10) #23 _ChannelCallbackRecord.invoke (dart:ui/channel_buffers.dart:42:5) #24 _Channel.push (dart:ui/channel_buffers.dart:132:31) #25 ChannelBuffers.push (dart:ui/channel_buffers.dart:329:17) #26 PlatformDispatcher._dispatchPlatformMessage (dart:ui/platform_dispatcher.dart:589:22) #27 _dispatchPlatformMessage (dart:ui/hooks.dart:89:31) (elided 3 frames from dart:async) The FocusManager sending notification was: FocusManager#da86e primaryFocus: FocusScopeNode#b52cb(_ModalScopeState Focus Scope [PRIMARY FOCUS]) primaryFocusCreator: FocusScope ← PrimaryScrollController ← _ActionsMarker ← Actions ← Builder ← PageStorage ← Offstage ← _ModalScopeStatus ← UnmanagedRestorationScope ← RestorationScope ← AnimatedBuilder ← _ModalScope-[LabeledGlobalKey<_ModalScopeState>#6095c] ← Semantics ← _EffectiveTickerMode ← TickerMode ← _OverlayEntryWidget-[LabeledGlobalKey<_OverlayEntryWidgetState>#8d361] ← _Theatre ← Overlay-[LabeledGlobalKey<OverlayState>#a75ac] ← UnmanagedRestorationScope ← _FocusMarker ← ⋯

patildarshan66 avatar Jul 20 '23 12:07 patildarshan66

i ended up commenting dispose in TextFieldSearch.dart to overcome this error, and disposing textFieldSearchController myself when page is closed

@override void dispose() { // Clean up the controller when the widget is disposed. // widget.controller.dispose(); super.dispose(); }

abangadit avatar Feb 26 '24 07:02 abangadit