alexrindone / flutter_textfield_search

FTFS is a Flutter package which uses a TextField Widget to search and select a value from a list. It's a simple, lightweight, and fully tested package unlike other "autocomplete" or textfield search packages with 100% code coverage.
BSD 2-Clause "Simplified" License
27 stars 33 forks source link

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

Open omerdotdev opened 3 years ago

omerdotdev commented 3 years ago

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!

Sadoge commented 3 years ago

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

alexrindone commented 2 years ago

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!

ol-cheesebeard commented 2 years ago

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

Marcolav commented 2 years ago

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...

pryshrm commented 2 years ago

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.

Ernestolebni101 commented 1 year ago

I have the same issue.

patildarshan66 commented 1 year ago

======== 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#a75ac] ← UnmanagedRestorationScope ← _FocusMarker ← ⋯

abangadit commented 7 months ago

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(); }