Widget rebuild after TextField selection Flutter
You haven't given us the entire code for this, so I don't know what the context is.
One pitfall I myself have fallen into (and might be affecting you, as I gather from your description) is having a stateful widget nested inside another stateful widget.
For instance,
class Parent extends StatefulWidget { @override ParentState createState() => ParentState(); (...)}class ParentState extends State<Parent> { @override Widget build(BuildContext context) { return Scaffold( body: Child(), ); } (...)}class Child extends StatefulWidget { @override ChildState createState() => ChildState(); (...)}class ChildState extends State<Child> { @override Widget build(BuildContext context) { return TextField(...); } (...)}
The problem here is that a rebuild of Parent means that ParentState().build()
is run, and a new Child
instance is created, with a new ChildState
object. Which resets everything.
Try not recreating ChildWidget, but instead saving it on ParentState, like so:
class Parent extends StatefulWidget { @override ParentState createState() => ParentState(); (...)}class ParentState extends State<Parent> { Child _child; @override void initState() { _child = Child(); } @override Widget build(BuildContext context) { return Scaffold( body: _child, ); } (...)}// The rest remains the same
Edit: You just need to remember that, if your widget tree is a bit more complex, you may need to 1) pass a callback from the Parent to notify of state changes, and 2) not forget to also call setState() on the Child.
you just need make a new class and import that on your target class that seen problem. for example :
I usually create a class like this :
class MiddleWare{ static MiddleWare shared = MiddleWare(); _MiddleWare(){} String myText = "my Text"; // every variables should be here...}
and
import "MiddleWare.dart";class myclass extends StatefulWidget { @override _myclassState createState() => _myclassState();}class _myclassState extends State<myclass> { @override Widget build(BuildContext context) { return Container(child: Text(MiddleWare.shared.myText)); }}
that's it.