Open omerdotdev opened 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
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!
I implemented TextFieldSearch class in a stateless widget and it fixed the problem
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...
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.
I have the same issue.
======== 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:
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:
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(); }
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 withtextfield
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 tofinal
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 inbuild(){ controller = (); return....}
, Is there any more neat solution to this. Please advise. Thanks!