Widget rebuild after TextField selection Flutter Widget rebuild after TextField selection Flutter dart dart

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.


hi dont use Scaffold key i.e

    Scaffold (    ...    key: _scaffoldKey, //remove this    ...    )

on the page and do a complete page rebuild (not hot reload), and you should be fine worked for me tho!